Bài viết này là hướng dẫn toàn diện về cách đọc nội dung trong RAM máy tính của bạn.
Bộ nhớ truy cập ngẫu nhiên (RAM) là thành phần quan trọng của bất kỳ hệ thống máy tính nào và nó chịu trách nhiệm lưu trữ tạm thời dữ liệu mà hệ thống yêu cầu để thực hiện các chức năng của nó. Tuy nhiên, nội dung của RAM có thể khá biến động và chúng thường bị mất khi hệ thống tắt.
Một cách để bảo toàn nội dung của RAM là thực hiện kết xuất RAM, đây là quá trình sao chép nội dung của RAM vào thiết bị lưu trữ, chẳng hạn như ổ cứng. Bạn có thể phân tích kết xuất RAM và dữ liệu chứa trong đó có thể cung cấp thông tin chi tiết có giá trị về trạng thái của hệ thống tại thời điểm thực hiện kết xuất.
Trong bài viết này, tôi sẽ hướng dẫn bạn quy trình đọc nội dung của RAM, cũng như giải thích kết xuất RAM là gì và nó có thể hữu ích như thế nào trong việc phân tích hệ thống máy tính. Tôi cũng sẽ cung cấp cho bạn hướng dẫn từng bước về cách thực hiện kết xuất RAM và cách phân tích dữ liệu kết quả.
Tại sao phải đọc dữ liệu RAM?
Đọc dữ liệu từ đĩa là điều bạn có thể quen làm. Nhưng liệu chúng ta có thể đọc dữ liệu trực tiếp từ RAM, nơi lưu trữ những thông tin cần thiết nhất không?
Với tư cách là nhà phát triển, chúng tôi có thể điều tra mức độ phức tạp của không gian và nghiên cứu sâu hơn về RAM để hiểu điều gì đang diễn ra.
Việc truy cập và đọc nội dung của RAM có thể hữu ích trong nhiều tình huống khác nhau. Một trường hợp sử dụng phổ biến là khắc phục sự cố và chẩn đoán sự cố với hệ thống máy tính. Bằng cách kiểm tra nội dung của RAM, bạn có thể hiểu rõ hơn về trạng thái của hệ thống tại một thời điểm cụ thể.
Ví dụ:nếu máy tính của bạn đột nhiên gặp sự cố, việc kiểm tra nội dung của RAM có thể giúp bạn xác định nguyên nhân gây ra sự cố.
Một trường hợp sử dụng khác là phân tích pháp y. Khi điều tra một hệ thống máy tính để tìm bằng chứng về hành vi sai trái, việc kiểm tra nội dung của RAM có thể cung cấp những hiểu biết sâu sắc có giá trị về các hoạt động đang được thực hiện trên hệ thống.
Ví dụ:chuyên gia bảo mật có thể sử dụng phân tích RAM để xác định xem một quy trình cụ thể có đang chạy trên hệ thống hay để xác định các tệp được truy cập gần đây hay không.
Ngoài ra, việc truy cập và đọc nội dung của RAM cũng có thể hữu ích cho các nhà phát triển và nghiên cứu phần mềm. Bằng cách phân tích dữ liệu được lưu trữ trong RAM, các nhà phát triển có thể hiểu rõ hơn về hiệu suất của phần mềm của họ và xác định các vấn đề hoặc tắc nghẽn tiềm ẩn. Các nhà nghiên cứu cũng có thể sử dụng phân tích RAM để nghiên cứu hành vi của phần mềm độc hại hoặc để phát triển các công cụ và kỹ thuật bảo mật mới.
Nhìn chung, việc truy cập và đọc nội dung của RAM có thể hữu ích cho việc khắc phục sự cố, phân tích pháp lý, phát triển phần mềm và nghiên cứu. Nó cung cấp một cách có giá trị để hiểu rõ hơn về hoạt động bên trong của hệ thống máy tính và có thể giúp xác định các vấn đề cũng như các mối đe dọa bảo mật tiềm ẩn.
Trước khi đi sâu hơn vào chi tiết cụ thể, chúng ta hãy xem xét ngắn gọn về danh pháp. Đây có thể là kiến thức phổ biến nhưng bạn sẽ cần hiểu thuật ngữ khi xem hết hướng dẫn này, vì vậy, bạn nên xem lại nó.
Có một thiết bị phần cứng vật lý được gọi là RAM (viết tắt của Bộ nhớ truy cập ngẫu nhiên):bộ nhớ vật lý, CPU, đĩa cứng và các thành phần vật lý khác.
Trên hết, chúng tôi có hệ điều hành. Hệ điều hành luôn tương tác với phần cứng được gọi là "kernel" – và đây là một trong những khía cạnh quan trọng nhất của phần mềm này.
Nếu chúng tôi xem xét mọi thứ từ quan điểm của người dùng, ban đầu chúng tôi đăng nhập vào hệ điều hành để có thể thực hiện các nhiệm vụ của mình, phần lớn trong số đó bao gồm việc thực thi các ứng dụng.
Hạt nhân là gì?
Hạt nhân là một phần cơ bản của hệ điều hành chấp nhận hướng dẫn từ người dùng với sự trợ giúp của chương trình chúng tôi chạy ở hậu trường. Điều này có thể xảy ra bất kể chương trình chúng tôi chạy ngầm là gì.
Mọi thứ cần tính toán đều được xử lý bởi bộ xử lý trung tâm (CPU), nhưng dù chúng ta làm gì và quản lý các dịch vụ do CPU cung cấp như thế nào thì dữ liệu, hướng dẫn, mã và chương trình đều phải đi qua bộ nhớ truy cập ngẫu nhiên (RAM).
Điều này ngụ ý rằng kết quả của bất kỳ điều gì chúng ta làm với dữ liệu tại bất kỳ thời điểm nào sẽ có sẵn trong bộ nhớ. Nếu bạn là lập trình viên và đang xây dựng một loại cấu trúc dữ liệu nào đó, điều này cho thấy rằng tất cả dữ liệu sẽ nằm trên RAM.
Chúng ta có thể trực tiếp truy cập RAM và xem cấu trúc dữ liệu đã được tạo như thế nào cũng như cách chúng căn chỉnh, đồng thời chúng ta có thể thấy độ phức tạp của không gian hoạt động ở đó như thế nào.
Ví dụ:nếu chúng ta đang thảo luận về bất kỳ trình duyệt web nào, chẳng hạn như Chrome, thì có thể có lỗi bảo mật được tạo ra trong ứng dụng. Vì vậy, phương pháp hiệu quả nhất là điều hướng đến RAM và điều tra xem dữ liệu đã hoạt động như thế nào.
Giả sử bạn mở bất kỳ trang web bảo mật nào trong Chrome (hoặc bất kỳ trình duyệt nào), như gmail.com. Mọi thông tin bạn nhập vào Gmail, bao gồm tên người dùng và mật khẩu, đều được gửi qua internet tới máy chủ do Google điều hành. Dữ liệu đó đã được mã hóa hoàn toàn và việc bẻ khóa mật khẩu sẽ rất khó khăn, nếu không muốn nói là không thể.
Nhưng để nhập mật khẩu, bạn có thể sử dụng máy tính có gắn bàn phím. Sau đó, một số chương trình sẽ mã hóa dữ liệu và gửi lên internet. Điều này có nghĩa là ban đầu, dữ liệu của bạn đã có trong RAM.
Đầu tiên, mật khẩu là dữ liệu tiêu chuẩn và mật khẩu sẽ xuất hiện ở đầu RAM. Sau đó, một số chương trình sẽ mã hóa dữ liệu và gửi lên internet. Nếu bạn có thể truy cập vào RAM, bạn có thể kiểm tra nó để xác định xem mật khẩu của bạn đã được mã hóa hay chưa. Và quá trình này khá đơn giản.
Hãy xem một ví dụ để biết cách thức hoạt động của nó. Chúng ta sẽ giả sử rằng "a" là một biến và "9" là dữ liệu. Khi chúng tôi thực thi chương trình, dữ liệu này sẽ được tải vào RAM. Khi chương trình kết thúc, dữ liệu trong RAM sẽ biến mất, mặc dù chưa có ai chứng minh được điều đó. Nhưng trường hợp này là như vậy và chúng tôi có thể chứng minh điều đó bằng một cuộc điều tra nhỏ.
Vậy làm cách nào để kiểm tra xem dữ liệu này có còn tồn tại trong RAM hay không sau khi ứng dụng chạy xong nếu nó được tải ở đầu bộ nhớ?
Chà, RAM sẽ sớm bị xóa những nội dung này. "Kết xuất RAM" là quá trình thu giữ tất cả RAM. Điều này thể hiện dạng thực tế trong đó toàn bộ tập dữ liệu được truy cập và tải vào RAM lần đầu tiên. Và phần tiếp theo bạn sẽ học cách thu thập hoặc trích xuất dữ liệu từ bộ nhớ.
Để thực hiện được điều này, bạn sẽ cần một số dạng phần mềm. Do đó, mục tiêu của chương trình này là đi sâu hơn vào bộ nhớ. Nó sẽ đi vào bộ nhớ và lấy tất cả dữ liệu được lưu trữ từ bộ nhớ trước khi tiếp tục.
LiME là gì?
Trình trích xuất bộ nhớ Linux, đôi khi được gọi là LiME, là một phần mềm mạnh mẽ. Đó là những gì bạn sử dụng để trích xuất bộ nhớ từ Linux. Phần mềm này còn được gọi là trình điều khiển, còn được gọi là mô-đun. Điều này là do RAM là một thiết bị nên mọi thứ càng phức tạp hơn.
Chúng tôi cần một số dạng trình điều khiển để truy cập thiết bị để có thể thử đọc nội dung của thiết bị. LiME là một ví dụ về trình điều khiển và nếu quen với Linux, bạn có thể biết rằng để thực hiện bất kỳ chức năng trình điều khiển nào, bạn cần tải trình điều khiển đó với sự hỗ trợ của kernel.
Trong ngữ cảnh của Linux, trình điều khiển còn được gọi là mô-đun. Vì vậy LiME là một mô-đun hạt nhân Linux. Chúng tôi có quyền truy cập vào cái được gọi là mô-đun có thể tải hạt nhân, cho phép chúng tôi cài đặt mô-đun trên hệ điều hành.
Chúng tôi đã bao gồm đủ nền tảng. Bây giờ, hãy xem cách chúng ta có thể trích xuất nội dung của RAM. Chúng ta sẽ thực hiện quy trình này từng bước một cách thực tế.
Thiết lập và Cài đặt
Vì vậy, thứ duy nhất chúng ta cần là trình điều khiển LiME. Đây là liên kết để tải xuống mô-đun cụ thể này:https://github.com/gursimarsm/LiME.
Bây giờ, hãy khởi động hệ thống Linux của bạn (tôi sử dụng RedHat Enterprise Linux). Bạn có thể sử dụng free -h lệnh để kiểm tra dung lượng bộ nhớ RAM đang được sử dụng, còn trống và các chi tiết khác. Của tôi trông như thế này:
Đầu ra khi chạy
free -m lệnh
Để truy cập RAM, chúng ta cần một số phần mềm trong đó kernel có thể tải một số mô-đun bổ sung. Trong trường hợp của chúng tôi, tên mô-đun là LiME. Vì vậy, phần mềm chúng tôi cài đặt có tên là “kernel-devel ”, và “tiêu đề hạt nhân ”. Hai phần mềm này chúng ta cần cài đặt để thực hiện các thao tác tiếp theo, đó là sử dụng mô-đun LiME.
Nếu muốn cài đặt phần mềm thì bạn phải cấu hình "yum". Đối với ngữ cảnh, ngon là lệnh bạn có thể sử dụng để cài đặt phần mềm trong hệ điều hành RedHat Linux. Mình sẽ demo cách cấu hình ở phần phụ lục để bạn tham khảo.
Cài đặt
Vì vậy, bây giờ bạn đã cài đặt phần mềm đó, bạn cần thêm một phần mềm nữa vì bạn phải tải xuống một số trình điều khiển từ GitHub. Vì vậy, bây giờ bạn cần cài đặt Git nếu bạn chưa có nó. Bạn có thể thực hiện việc này bằng lệnh yum install git . Bạn cũng cần định cấu hình tài khoản của mình để có thể làm việc với nó.
# git config --global user.name "Your Name"
# git config --global user.email "you@example.com"
Tôi đã chia sẻ kho lưu trữ ở trên. Đó là mô-đun hạt nhân có thể tải (LKM). Nó cho phép bạn lấy toàn bộ bộ nhớ từ hệ điều hành Linux hoặc bất kỳ loại hệ điều hành ngôn ngữ nào (bao gồm cả thiết bị Android vì Android cũng dựa trên Linux).
Bạn có thể tải xuống mô-đun bằng cách sử dụng **# g**it clone**** [**https://github.com/gursimar**sm**/LiME**](https://github.com/gursimarsm/LiME) lệnh.
Sau khi tải về, bạn cần di chuyển vào thư mục của phần mềm. Bạn sẽ tìm thấy nhiều thư mục ở đó. Tuy nhiên, để chạy mã chính, bạn cần chuyển đến thư mục "src".
Trong thư mục này, bạn sẽ tìm thấy nhiều chương trình dựa trên ngôn ngữ C. Vì vậy, để sử dụng các tệp, bạn sẽ cần phải biên dịch chúng. Để làm điều đó, bạn có thể sử dụng make lệnh. Cài đặt như thế này:
# yum install make
# yum install gcc
Trong thư mục /LiME/src/, hãy chạy make lệnh biên dịch toàn bộ mã.
Nếu bạn gặp lỗi, có thể là do chúng tôi đang sử dụng phiên bản LiME mới nhất và phiên bản này đi kèm với một tính năng mới gọi là tạo siêu dữ liệu orc. Để triển khai tính năng này, bạn phải cài đặt thêm một thứ nữa là một phần của LiME có tên là elfutils-libelf-devel . Bạn có thể làm điều đó bằng cách sử dụng yum như bạn có thể thấy bên dưới:
Cách cài đặt
elfutils-libelf-devel
Sau khi xong, nếu bây giờ chúng ta chạy make lệnh, nó sẽ yêu cầu trình biên dịch GCC biên dịch toàn bộ mã. Sau khi biên dịch, nó sẽ tạo một tệp đối tượng cuối cùng được gọi là tệp đối tượng kernel và đó là mô-đun cuối cùng trong LiME.
Đầu ra
Bạn có thể tìm thấy tệp này trong cùng thư mục bằng cách sử dụng ls lệnh.
Cách sử dụng mô-đun
Với mô-đun này, kernel hiện có khả năng thu hoặc đọc toàn bộ RAM. Theo mặc định, chúng ta không thể đọc toàn bộ RAM trong một lần, nhưng giờ đây nhờ mô-đun LiME, chúng ta có thể.
Để tìm hiểu thêm về mô-đun LiME, bạn có thể sử dụng modinfo lệnh. Nhập modinfo cùng với lime . Điều này sẽ hiển thị cho bạn một số chi tiết khác như vị trí có sẵn tệp và nó cũng hiển thị tất cả các mô-đun hoặc trình điều khiển đi kèm với một số loại tham số bổ sung. Mỗi tham số đều có một số lợi ích.
modinfo
Ở đây chúng ta sẽ sử dụng hai tham số rất quan trọng:path và format .
path nghĩa là khi đọc toàn bộ RAM, chúng ta phải lưu trữ dữ liệu của RAM vào một file nào đó. Vì vậy, để chỉ định tệp đích mà chúng tôi muốn tạo, chúng tôi phải cung cấp thông tin cụ thể đó tại đây.
Tham số tiếp theo, format , chỉ định định dạng mà chúng ta muốn đọc dữ liệu RAM. Vì vậy, trong trường hợp này, chúng tôi muốn đọc định dạng của RAM. Dữ liệu được lưu trữ trong RAM chủ yếu ở dạng nhị phân và chúng tôi chỉ muốn đọc toàn bộ dữ liệu ở định dạng nhị phân đó và ghi lại nó ở dạng thô.
Vì vậy, định dạng sẽ ở dạng thô và được lưu trữ trong tệp bất cứ nơi nào chúng tôi cung cấp đường dẫn.
Cuối cùng là lúc đọc dữ liệu từ RAM. Vì vậy, hãy đến với lệnh chính sẽ giúp chúng ta bắt đầu đọc toàn bộ RAM.
Trình diễn
Nhập mật khẩu cho tài khoản Gmail của bạn trong Chrome để trình diễn phần này. Điều này sẽ giúp bạn tìm hiểu cách lấy dữ liệu từ RAM và cả mật khẩu của bạn có được mã hóa hay không.
Để xác minh hai điều này, hãy chuyển đến dấu nhắc lệnh và kiểm tra xem dữ liệu có còn trên RAM hay không. Bạn sẽ phải tải một mô-đun cụ thể bằng lệnh insmod . Điều này sẽ giúp bạn chèn mô-đun.
Sao chép đường dẫn đầy đủ của mô-đun và dán nó cùng với insmod lệnh.
insmod lệnh
Mô-đun này sẽ được tải với sự trợ giúp của kernel. Mô-đun sẽ bắt đầu thu thập toàn bộ dữ liệu từ RAM và lưu trữ dữ liệu đó trong một tệp, ví dụ:myram.data
Nó cũng sẽ tải toàn bộ kết xuất bộ nhớ hoặc kết xuất RAM vào tệp này và định dạng mà chúng tôi muốn chụp. Vì vậy, định dạng sẽ là định dạng thô.
Chúng ta sẽ sử dụng hai tham số này (tạm thời đừng lo lắng về điều này). Chúng tôi chỉ cần hai tham số để thực hiện và bây giờ ngay khi chúng tôi nhấn lệnh này, mọi dữ liệu chúng tôi có sẽ được ghi lại và lưu trữ trong tệp cụ thể này. Lệnh này thường mất vài giây, tùy thuộc vào tốc độ CPU và lượng dữ liệu chúng ta có trong RAM.
Lệnh
Cách đọc dữ liệu
Bây giờ, chúng ta có file myram.data này và toàn bộ dữ liệu của RAM được lưu trữ trong file này. Vì chúng tôi đã thu thập dữ liệu này ở định dạng thô nên dữ liệu sẽ ở dạng nhị phân. Nếu chúng ta cố đọc dữ liệu này trực tiếp từ tệp này, với tư cách là con người, chúng ta không thể đọc được nó ngay cả khi chúng ta thử đọc nó bằng những dòng đầu tiên bằng lệnh head để đọc một số trong 10 dòng trên cùng.
Đầu ra
Vì vậy, chúng ta có thể sử dụng lệnh “cat”, lệnh này sẽ đọc toàn bộ dữ liệu. Tuy nhiên, một lần nữa, điều tương tự sẽ xảy ra – nó sẽ đọc toàn bộ dữ liệu nhưng dữ liệu sẽ được hiển thị ở định dạng nhị phân. Sau đó, chúng ta cần sử dụng hàm pipe với lệnh này và kết hợp nó với một lệnh mới khác có tên strings :
Lệnh
Chuỗi là lệnh sẽ chuyển đổi dữ liệu thành văn bản thông thường ở định dạng mà con người có thể đọc được.
Đầu ra
Danh sách sẽ còn tiếp tục. Bạn có thể ngắt nó bằng cách sử dụng Ctl+C .
Hiện tại, việc xem và đọc toàn bộ dữ liệu không có nghĩa là nhiều. Chúng tôi biết một số dữ liệu có trên RAM là mật khẩu có tên mywebpasswordgmail. Vì vậy, chỉ để xác nhận rằng dữ liệu này có sẵn trên RAM, chúng ta có thể sử dụng thêm một ống nữa cùng với grep lệnh. Lệnh grep giúp chúng ta sắp xếp dữ liệu.
cat /myram.data | strings | grep mywebpasswordgmail
Bây giờ, chúng tôi đang tìm kiếm chuỗi này trong toàn bộ dữ liệu. Nó sẽ chuyển đổi dữ liệu thành văn bản thông thường và bất cứ khi nào chuỗi cụ thể đó xuất hiện, grep sẽ lấy dòng đó và để chúng tôi bắt đầu tìm kiếm, sau đó hiển thị cho chúng tôi dữ liệu này.
Vì vậy, như bạn có thể thấy từ ví dụ đơn giản này, bất cứ điều gì bạn gõ trên bàn phím cũng có thể đi vào RAM - ngay cả khi đó là mật khẩu của bạn hoặc bất kỳ loại trang web bảo mật nào mà bạn đang lướt, dữ liệu của bạn vẫn có trên RAM. Không quan trọng bạn chạy chương trình gì. Nếu bạn gõ bằng bàn phím, mọi thứ sẽ tải vào RAM và có thể được giải nén. Đây được gọi là kết xuất bộ nhớ.
LiME cung cấp cho chúng ta nhiều khả năng mạnh mẽ khác. Hiện tại, chúng tôi đang thu thập dữ liệu trực tiếp từ hệ thống nơi chúng tôi thực hiện các hành động. Nhưng chúng tôi cũng có thể chạy LiME trên hệ thống và nó có thể thu thập dữ liệu theo thời gian thực và gửi dữ liệu qua mạng tới một máy tính khác.
Điều này có nghĩa là gì? Hãy nghĩ theo cách này:ví dụ:ai đó mở một trang web và họ đang nhập nội dung nào đó trong thời gian thực. Toàn bộ tin nhắn này đang được truyền theo thời gian thực tới một máy tính khác.
Chúng tôi không nói về keylogger, chúng tôi chỉ nói về RAM. Bất kể điều gì đang xảy ra khi bất kỳ chương trình nào đang chạy thì cơ sở dữ liệu đang lưu trữ một số dữ liệu. Các chương trình đang đọc dữ liệu từ các phần khác của đĩa cứng. Và bất cứ điều gì đang xảy ra trên RAM đều có thể được hệ thống ghi lại theo thời gian thực và gửi qua mạng tới các máy tính khác.
Kết luận
Cuối cùng chúng ta đã đi đến phần cuối của bài viết này. Tôi hy vọng bạn thích nó và học được điều gì đó mới.
Tôi luôn sẵn sàng đón nhận các đề xuất và thảo luận trên LinkedIn. Hãy đánh thức tôi bằng tin nhắn trực tiếp.
Nếu bạn thích bài viết của tôi và muốn tiếp thêm động lực cho tôi, hãy cân nhắc việc bắt đầu trên GitHub và chứng thực tôi về các kỹ năng liên quan trên LinkedIn.
Cho đến lần tiếp theo, hãy giữ an toàn và tiếp tục học hỏi.
Học cách viết mã miễn phí. Chương trình giảng dạy mã nguồn mở của freeCodeCamp đã giúp hơn 40.000 người có được việc làm với tư cách là nhà phát triển. Bắt đầu