# Linux Memory Forensics

## 1. Introduction to Linux Memory Forensics

Pháp y bộ nhớ chủ yếu được sử dụng để phân tích phần mềm độc hại, gỡ lỗi, phân tích các vấn đề về hiệu suất hệ thống, phát hiện rò rỉ dữ liệu và giám sát hoạt động của người dùng. Nó cũng rất quan trọng cho việc phân tích nguyên nhân gốc rễ của các sự cố hệ thống và hiểu các hành động của kẻ tấn công trong một vụ vi phạm an ninh.

### Required Tools

LiME (Linux Memory Extractor) và Volatility cho Pháp y Bộ nhớ trên Linux là những công cụ thiết yếu được sử dụng rộng rãi để phân tích bộ nhớ. Mục đích và cách sử dụng của từng công cụ được mô tả chi tiết dưới đây:

#### LiME (Linux Memory Extractor)

LiME là một công cụ được thiết kế để sử dụng trong hệ điều hành Linux để tạo ra một bản sao an toàn của RAM của hệ thống. Nó hoạt động như một mô-đun kernel và có thể xuất nội dung của bộ nhớ ở nhiều định dạng khác nhau (ví dụ: raw, định dạng lime) vào một tệp trên đĩa.

LiME được sử dụng trong quá trình phân tích pháp y và điều tra an ninh để thu thập dữ liệu từ bộ nhớ hệ thống. Điều này bao gồm thông tin có giá trị về các tiến trình hệ thống đang chạy, kết nối mạng, phiên người dùng và thậm chí cả phần mềm độc hại tiềm ẩn. LiME cho phép phân tích hồi cứu các sự kiện đã xảy ra khi hệ thống ngừng hoạt động hoặc đang hoạt động bằng cách tạo một bản sao đầy đủ và không thay đổi của dữ liệu.

**Các tính năng của LiME:**

* Hash of dumped memory (Băm của bộ nhớ đã kết xuất)
* Thu thập thông qua giao diện mạng
* Dấu vết tiến trình tối thiểu
* Thu thập bộ nhớ Android đầy đủ

LiME có thể được cài đặt trên bản phân phối Ubuntu Linux như hình ảnh chụp màn hình bên dưới. Các lệnh này sẽ tạo mô-đun LiME cần thiết cho hệ thống. Trong Linux, mô-đun được sử dụng để kết xuất bộ nhớ.

```bash
# Kho lưu trữ 'lime' được tải xuống.

git clone https://github.com/504ensicsLabs/LiME.git

# Bạn chuyển sang thư mục 'lime/src'.

cd LiME/src/

# Mã được biên dịch bằng lệnh make.

make

# 'lime' được tìm kiếm trong các mô-đun kernel bằng lệnh lsmod.

lsmod | grep -i lime
```

<figure><img src="/files/1Hu5ttH6g4EpUmDChymO" alt=""><figcaption></figcaption></figure>

Điều này kết thúc cài đặt LiME trên Linux và công cụ LiME trên Linux đã sẵn sàng để sử dụng. Chúng tôi sẽ giải thích cách sử dụng nó trong các bài học tiếp theo.

#### Volatility

Volatility là một framework phân tích bộ nhớ mã nguồn mở. Nó có sẵn cho cả môi trường Linux và Windows. Volatility là một công cụ mạnh mẽ để phân tích thông tin có trong RAM của hệ điều hành. Tương thích với nhiều loại hệ điều hành và định dạng kết xuất bộ nhớ, Volatility cung cấp một framework toàn diện để phân tích bộ nhớ. Nó được viết bằng Python và có một thư viện plug-in mở rộng.

Volatility được sử dụng để phân tích đầu ra kết xuất bộ nhớ từ các công cụ như LiME. Nó cho phép người dùng liệt kê các tiến trình trong RAM, DLL, kết nối mạng, tệp đang mở, khóa registry, v.v. Nó cũng được sử dụng để phát hiện phần mềm độc hại, tiết lộ mã ẩn và kiểm tra hoạt động chung của người dùng trên hệ thống. Volatility là một trong những công cụ pháp y bộ nhớ được sử dụng rộng rãi nhất và là điều cần thiết để thực hiện phân tích bộ nhớ chi tiết.

Volatility hỗ trợ một số định dạng tệp mẫu và có thể chuyển đổi từ định dạng này sang định dạng khác. Các định dạng tệp được hỗ trợ được liệt kê dưới đây:

* Mẫu tuyến tính thô (dd)
* Tệp ngủ đông (từ Windows 7 trở về trước)
* Tệp kết xuất sự cố
* Kết xuất lõi VirtualBox ELF64
* Tệp trạng thái đã lưu và ảnh chụp nhanh VMware
* Định dạng EWF (E01)
* Định dạng LiME
* Định dạng tệp Mach-O
* Kết xuất máy ảo QEMU
* Firewire
* HPAK (FDPro)

Việc cài đặt Ubuntu 22.04 Volatility3 có thể được thực hiện như hình bên dưới.

Python3 trở lên là bắt buộc để sử dụng Volatility3.

```bash
# Phiên bản mới nhất của Volatility được tải xuống từ kho lưu trữ chính thức.

git clone https://github.com/volatilityfoundation/volatility3.git

# Bạn thay đổi thành thư mục 'volatility3'

cd volatility3/

# Chạy lệnh "python3 setup.py build"

python3 setup.py build

# Chạy lệnh "python3 setup.py install"

python3 setup.py install

# Để cài đặt bộ phụ thuộc tối thiểu nhất, hãy sử dụng một lệnh như

pip3 install -r requirements-minimal.txt
```

<figure><img src="/files/VzW0sXnVXAfS6Fk2HgMI" alt=""><figcaption></figcaption></figure>

Việc cài đặt Volatility3 hiện đã hoàn tất và công cụ đã sẵn sàng để sử dụng. Chúng tôi sẽ giải thích cách sử dụng Volatility3 trong phần sau.

## 2. Capturing Memory Dumps

Trên các hệ thống Linux, "kết xuất bộ nhớ", tức là chụp ảnh nhanh bộ nhớ hệ thống (RAM) và lưu nó vào đĩa để phân tích sau, là cực kỳ quan trọng, đặc biệt là cho pháp y và khắc phục sự cố.

Điều này đặc biệt quan trọng khi hệ thống được khởi động lại. Khi hệ thống được khởi động lại, thông tin được lưu trữ trong bộ nhớ sẽ bị mất. Do đó, điều quan trọng là phải chụp ảnh nhanh bộ nhớ và lưu trữ nó một cách an toàn cho bất kỳ ai cần truy cập thông tin này sau này để gỡ lỗi hoặc điều tra pháp y.

Dữ liệu bộ nhớ có thể chứa thông tin quan trọng về các chương trình đang chạy, hoạt động của người dùng, trạng thái hệ thống và phần mềm độc hại tiềm ẩn. Việc lưu trữ an toàn thông tin này trong bộ nhớ trước khi nó bị mất là một bước cơ bản để duy trì tính toàn vẹn của nó và cho phép phân tích trong tương lai.

**Một số công cụ kết xuất bộ nhớ có thể được sử dụng cho pháp y bộ nhớ trên hệ thống Linux là:**

* **LiME (Linux Memory Extractor):** LiME là một mô-đun kernel được thiết kế đặc biệt cho hệ điều hành Linux, có thể chuyển an toàn nội dung của bộ nhớ vào một tệp trên đĩa.
* **Fmem:** Fmem là một mô-đun kernel đơn giản dành cho hệ điều hành Linux, có thể xuất bộ nhớ hệ thống ở định dạng thô.
* **Avml:** Avml là một công cụ kết xuất bộ nhớ di động cho các hệ thống dựa trên Linux, được thiết kế để tạo ra các hình ảnh bộ nhớ tương thích với Volatility.
* **Crash:** Crash là một công cụ để phân tích các sự cố kernel trên các hệ thống Linux và cũng có thể được sử dụng để lấy kết xuất bộ nhớ từ các hệ thống đang hoạt động.
* **Memdump:** Memdump là một công cụ kết xuất tiến trình cũ trên các hệ thống Linux; nó được sử dụng để kết xuất bộ nhớ của một tiến trình nhất định.
* **Coredump:** Thường được sử dụng để gỡ lỗi và phân tích hệ thống, coredump là một cơ chế duy nhất cho các hệ thống Linux, ghi lại trạng thái bộ nhớ của một chương trình tại thời điểm nó gặp sự cố.

Kết xuất bộ nhớ rất quan trọng trong phân tích pháp y vì một số lý do. Pháp y là quá trình thu thập, bảo tồn, phân tích và báo cáo dữ liệu từ các thiết bị kỹ thuật số để sử dụng trong các cuộc điều tra pháp y. Trong quá trình này, một kết xuất bộ nhớ cung cấp một ảnh chụp nhanh về trạng thái hiện tại của hệ thống, bao gồm:

* **Running programs and processes:** Một kết xuất bộ nhớ chứa một danh sách chi tiết tất cả các chương trình và tiến trình đang chạy trên một hệ thống. Thông tin này có thể được sử dụng để phát hiện sự hiện diện của phần mềm độc hại hoặc các tiến trình độc hại trên hệ thống.
* **Các lỗi hệ thống:** Khi xảy ra lỗi hoặc sự cố hệ thống, kết xuất bộ nhớ có thể cung cấp thông tin quan trọng để hiểu nguyên nhân của các sự kiện này. Các đoạn mã bị lỗi, rò rỉ bộ nhớ hoặc trình điều khiển không tương thích có thể là nguyên nhân của các vấn đề này.
* **Network Connections:** Thông tin mạng như các kết nối mạng đang hoạt động và các cổng đang mở có thể được trích xuất từ kết xuất bộ nhớ. Lưu ý rằng điều này rất quan trọng để xác định máy chủ bên ngoài nào mà hệ thống đang giao tiếp hoặc để xác định hoạt động mạng độc hại.
* **User activity and session information:** Hoạt động của người dùng, chẳng hạn như đăng nhập hệ thống, truy cập tệp và thông tin phiên, có thể được lưu trữ trong kết xuất bộ nhớ. Điều này có thể đặc biệt có giá trị cho việc truy cập trái phép hoặc phân tích mối đe dọa từ bên trong.
* **Cryptographic keys and sensitive data:** Trong một số trường hợp, các khóa mật mã, mật khẩu và các thông tin nhạy cảm khác có thể được truy xuất từ kết xuất bộ nhớ và được sử dụng để truy cập vào dữ liệu được bảo vệ hoặc giải mã các giao tiếp được mã hóa.
* **Malware analysis:** Phần mềm độc hại thường sử dụng nhiều kỹ thuật khác nhau để ẩn khỏi bị phát hiện. Kết xuất bộ nhớ cung cấp một nguồn tài nguyên phong phú để phân tích sự hiện diện và hành vi của phần mềm đó.

Kết xuất bộ nhớ cực kỳ có giá trị trong các cuộc điều tra pháp y số để thu thập thông tin trên, hiểu hoạt động tội phạm, đánh giá bảo mật hệ thống và ứng phó với các vi phạm an ninh tiềm ẩn. Do đó, có thể nói rằng kết xuất bộ nhớ đóng một vai trò quan trọng trong phân tích pháp y.

### Extracting Memory Dumps from Linux systems with LiME (Linux Memory Extractor)

LiME (Linux Memory Extractor) là một công cụ để trích xuất kết xuất bộ nhớ từ các hệ thống dựa trên Linux. Kết xuất bộ nhớ chứa một bản sao của trạng thái bộ nhớ hiện tại của hệ thống và rất cần thiết cho các cuộc điều tra pháp y. LiME có thể cung cấp thông tin có giá trị về các tiến trình đang chạy, kết nối mạng, phiên người dùng và phần mềm độc hại tiềm ẩn có thể có mặt. Đối với việc gỡ lỗi, phát hiện phần mềm độc hại và điều tra pháp y, nó đóng một vai trò quan trọng.

Sau khi cài đặt mô-đun LiME, bạn có thể bắt đầu quá trình kết xuất bộ nhớ. Để có được kết xuất bộ nhớ, bạn có thể chỉ định các tham số và định dạng khác nhau. Ví dụ: bạn có thể làm theo đường dẫn bên dưới để kết xuất:

{% code overflow="wrap" %}

```bash
# Trạng thái sử dụng đĩa và tổng kích thước bộ nhớ được kiểm tra. Phải có dung lượng trống trên đĩa bằng tổng diện tích bộ nhớ.

df -h

free -m

# Bạn chuyển sang thư mục Lime/src.

cd tools/LiME/src/

# Tên của tệp mô-đun kernel lime được tìm thấy.

ls -l lime*.ko

# Lệnh này tải mô-đun kernel LiME có tên 'lime-6.5.0-25-generic.ko' vào kernel Linux và bắt đầu kết xuất bộ nhớ

insmod lime-6.5.0-25-generic.ko "path=/var/dumps/ubuntu-memdump.lime format=lime"

# Kết xuất bộ nhớ đã tạo được kiểm tra.

ls /var/dumps/

du -sch /var/dumps/ubuntu-memdump.lime
```

{% endcode %}

<figure><img src="/files/VZKYeehVWJpGlCpt9uIX" alt=""><figcaption></figcaption></figure>

Như bạn có thể thấy trong hình trên, tổng kích thước của bộ nhớ là 4 GB và kích thước của hình ảnh là 4 GB.

Sử dụng mô-đun kernel lime với lệnh "<mark style="color:red;">`insmod`</mark>", một kết xuất bộ nhớ của hệ thống "`/var/dumps/ubuntu-memdump.lime`" đã được tạo ở định dạng lime.

## 3. Analyzing the Memory Dump

Phân tích kết xuất bộ nhớ là một phần quan trọng của các cuộc điều tra pháp y và thu thập thông tin chẩn đoán để khắc phục sự cố. Một kết xuất bộ nhớ của hệ thống cung cấp thông tin chi tiết về các tiến trình đang chạy, các phiên người dùng đang hoạt động, kết nối mạng và phần mềm độc hại tiềm ẩn. Phần này giải thích cách phân tích kết xuất bộ nhớ từng bước.

Dưới đây là các công cụ có thể được sử dụng cho pháp y bộ nhớ trên hệ thống Linux và mô tả ngắn gọn về chúng:

* **Volatility:** Một framework phân tích bộ nhớ mã nguồn mở hỗ trợ một loạt các hệ điều hành và định dạng kết xuất bộ nhớ. Nó cung cấp nhiều tính năng khác nhau như phân tích phần mềm độc hại và phân tích hoạt động của người dùng.
* **Rekall (hoặc GRR):** Tương tự như Volatility, Rekall (hoặc GRR) là một công cụ phân tích bộ nhớ chủ yếu được phát triển bởi Google với một loạt các tính năng phân tích; nó được biết đến với phân tích dòng thời gian và các tính năng thu thập dữ liệu nhanh chóng.
* **Redline:** Một công cụ để phân tích bộ nhớ và hệ thống tệp; cung cấp giao diện thân thiện với người dùng và cho phép kiểm tra các chỉ báo và tạo tác khác nhau.
* **Memoryze for Linux:** Một công cụ khác được sử dụng để phân tích bộ nhớ và phát hiện phần mềm độc hại; nó cung cấp nhiều tính năng phân tích bộ nhớ khác nhau, nhưng có thể phức tạp hơn khi sử dụng.
* **Linux Memory Grabber:** Một công cụ scripting được sử dụng để lấy kết xuất bộ nhớ từ hệ thống và thu thập các công cụ cần thiết để phân tích; nó có thể được các nhà phân tích pháp y sử dụng một cách nhanh chóng.

Trước khi có thể thực hiện phân tích kết xuất bộ nhớ, các công cụ thích hợp phải được cài đặt và cấu hình. Volatility, một trong những công cụ phân tích bộ nhớ phổ biến nhất, thường được ưa chuộng vì khả năng tương thích với một loạt các hệ điều hành và định dạng kết xuất bộ nhớ.

#### **Sự Khác Biệt Chính Giữa Volatility 2 & 3**

Volatility là một công cụ pháp y bộ nhớ mã nguồn mở nổi tiếng và có hai phiên bản, Volatility 2 và Volatility 3, với các tính năng khác nhau. Dưới đây là một số khác biệt chính giữa Volatility 2 và Volatility 3:

* **Kiến trúc phần mềm**
  * Volatility 2: Có một kiến trúc truyền thống hơn dựa trên Python 2. Nó sử dụng cấu trúc dựa trên plugin và bao gồm một tập hợp các script và mô-đun để phân tích pháp y bộ nhớ.
  * Volatility 3: Có một kiến trúc hoàn toàn được thiết kế lại, mô-đun và linh hoạt. Nó dựa trên Python 3 và cung cấp hiệu suất và khả năng mở rộng được cải thiện.
* **Hệ điều hành và định dạng bộ nhớ được hỗ trợ**
  * Volatility 2: Tương thích với kết xuất bộ nhớ từ nhiều hệ điều hành Windows, Linux, Mac OSX và các hệ điều hành khác, nhưng có những hạn chế trong việc hỗ trợ các hệ điều hành và định dạng bộ nhớ mới hơn.
  * Volatility 3: Hỗ trợ nhiều hệ điều hành và định dạng kết xuất bộ nhớ hơn. Cung cấp các bản cập nhật nhanh hơn và hỗ trợ cho các hệ điều hành và định dạng bộ nhớ mới.
* **Giao diện người dùng và khả năng sử dụng**
  * Volatility 2: Có một giao diện dòng lệnh quen thuộc cho người dùng ban đầu, nhưng đường cong học tập cho người dùng mới có thể cao.
  * Volatility 3: Cung cấp giao diện người dùng trực quan hơn và giao diện dòng lệnh được cải thiện. Nó cũng cung cấp các thông báo lỗi và tài liệu tốt hơn để giúp người dùng thực hiện phân tích hiệu quả hơn.
* **Khả năng phân tích và hiệu suất**
  * Volatility 2: Có khả năng phân tích mạnh mẽ, nhưng có thể gặp các vấn đề về hiệu suất khi làm việc với các kết xuất bộ nhớ lớn.
  * Volatility 3: Cung cấp hiệu suất và khả năng mở rộng được cải thiện. Nó có thể hoạt động hiệu quả hơn với các kết xuất lớn và thực hiện các phân tích phức tạp nhanh hơn.
* **Phát triển và Hỗ trợ cộng đồng**
  * Volatility 2: Do sự kết thúc của Python 2 và giảm hỗ trợ cộng đồng, hỗ trợ phát triển và cập nhật đã giảm.
  * Volatility 3: Được phát triển và hỗ trợ tích cực. Là một dự án mã nguồn mở được hỗ trợ bởi một cộng đồng lớn, nó thường nhận được các plugin, bản cập nhật và bản sửa lỗi mới.

Nhìn chung, Volatility 3 là một công cụ mới hơn, nhanh hơn và linh hoạt hơn để phân tích pháp y bộ nhớ hiện đại. Tuy nhiên, một số người dùng vẫn có thể thích Volatility 2 cho các tình huống cụ thể hoặc các hệ thống cũ hơn. Cả hai phiên bản đều có những điểm mạnh và điểm yếu riêng và lựa chọn nên được đưa ra dựa trên nhu cầu của người dùng.

### About Volatility 3&#x20;

Volatility chia phân tích bộ nhớ thành một số thành phần. Các thành phần chính như sau:

* Memory Layers
* Templates and Objects
* Symbol Tables

**Memory Layers:**

* Các lớp bộ nhớ là một trong những thành phần cơ bản mà Volatility 3 sử dụng để phân tích bộ nhớ. Chúng đại diện cho các tài nguyên bộ nhớ khác nhau như bộ nhớ vật lý, bộ nhớ ảo, hệ thống tệp, v.v. Các lớp này cung cấp sự trừu tượng giữa các phần khác nhau của hình ảnh bộ nhớ được phân tích, cho phép công cụ truy cập hình ảnh bộ nhớ ở các cấp độ khác nhau. Ví dụ: một lớp bộ nhớ vật lý cung cấp quyền truy cập trực tiếp vào hình ảnh bộ nhớ thô, trong khi một lớp dịch địa chỉ ảo bắt chước bố cục bộ nhớ ảo của hệ điều hành. Điều này giúp Volatility linh hoạt hơn để xử lý các loại cấu trúc bộ nhớ và hệ điều hành khác nhau.

**Templates and Objects:**

* Volatility 3 sử dụng các mẫu và đối tượng để đại diện cho các cấu trúc bộ nhớ. Các mẫu chứa các định nghĩa về cấu trúc dữ liệu trong bộ nhớ, trong khi các đối tượng là các ví dụ cụ thể được tạo theo các mẫu. Ví dụ: danh sách tiến trình của một hệ điều hành có thể được xác định bằng một mẫu và mỗi tiến trình có thể được xây dựng như một đối tượng tuân thủ mẫu đó. Cấu trúc này cho phép Volatility hiểu và trình bày các cấu trúc dữ liệu phức tạp trong bộ nhớ cho người dùng. Các đối tượng và mẫu cung cấp tính nhất quán và rõ ràng khi truy cập dữ liệu trong hình ảnh bộ nhớ.

**Symbol Tables:**

* Các bảng ký hiệu chứa các địa chỉ và bố cục của cấu trúc dữ liệu và các hàm được sử dụng bởi kernel hệ điều hành và các thành phần hệ thống khác. Các bảng này cho phép Volatility nhận ra và diễn giải các cấu trúc cụ thể trong hình ảnh bộ nhớ. Ví dụ: vị trí của các syscall, các đối tượng hệ điều hành và các cấu trúc kernel quan trọng khác có thể được tìm thấy trong bảng ký hiệu Windows. Volatility 3 sử dụng các bảng ký hiệu này để xác định cấu trúc dữ liệu nào sẽ sử dụng trong phân tích hình ảnh bộ nhớ và cách diễn giải chúng.

Volatility 3 lưu trữ tất cả điều này trong một ngữ cảnh đóng vai trò là vùng chứa cho tất cả các lớp và bảng khác nhau cần thiết để phân tích bộ nhớ.

Một loạt các plug-in và lệnh được cung cấp bởi Volatility đáp ứng các nhu cầu phân tích bộ nhớ khác nhau và cho phép người dùng thực hiện phân tích hệ thống chuyên sâu. Tuy nhiên, cần lưu ý rằng phân tích kết xuất bộ nhớ hiệu quả đòi hỏi sự hiểu biết về hệ điều hành và cấu trúc của hệ thống mà từ đó kết xuất bộ nhớ được lấy.

**Dưới đây là một số lệnh Volatility3 cơ bản và ứng dụng của chúng vào kết xuất bộ nhớ Linux:**

* Hiển thị hệ điều hành, phiên bản và các thông tin cơ bản khác từ tệp kết xuất bộ nhớ:

```bash
python3 vol.py -f <memory_dump> banner
```

* Hiển thị danh sách các tiến trình đang chạy trên hệ thống:

```bash
python3 vol.py -f <memory_dump> linux.pslist
```

* Hiển thị cấu trúc cây của các tiến trình, hiển thị mối quan hệ cha và con:

```bash
python3 vol.py -f <memory_dump> linux.pstree
```

* Liệt kê tất cả các tiến trình trong bộ nhớ. Không giống như Pslist, nó cũng liệt kê các tiến trình đã bị tắt nhưng vẫn còn dấu vết trong bộ nhớ:

```bash
python3 vol.py -f <memory_dump> linux.psscan
```

* Hiển thị các lệnh bash và lịch sử được thực thi trên hệ thống Linux:

```bash
python3 vol.py -f <memory_dump> linux.bash
```

* Liệt kê các đối tượng tệp đang mở trên hệ thống Linux:

```bash
python3 vol.py -f <memory_dump> linux.lsof
```

* Liệt kê các mô-đun kernel Linux đã cài đặt:

```bash
python3 vol.py -f <memory_dump> linux.lsmod
```

* Liệt kê tất cả các kết nối mạng cho tất cả các tiến trình:

```bash
python3 vol.py -f <memory_dump> linux.sockstat
```

* Cho phép bạn tìm kiếm kết xuất bộ nhớ Linux bằng các quy tắc YARA:

{% code overflow="wrap" %}

```bash
python3 vol.py -f <memory_dump> linux.vmayarascan --yara-rules "/path/to/yara_rules.yar"
```

{% endcode %}

Bạn có thể tìm hiểu thêm về Volatility 3 tại: <https://volatility3.readthedocs.io/en/latest/basics.html>

### Memory Dump Analysis with Volatility 3

Để phân tích kết xuất bộ nhớ bằng Volatility, chúng ta sẽ phân tích kết xuất bộ nhớ "`ubuntu-memdump.lime`" từ bài học trước.

Đầu tiên, chúng ta sẽ sử dụng Volatility để lấy thông tin hệ điều hành và phiên bản từ tệp kết xuất.

Thông tin banner sẽ được trích xuất từ tệp kết xuất bộ nhớ này:

```bash
python3 vol.py -f /var/dumps/ubuntu-memdump.lime banner
```

Dựa trên thông tin này, biểu tượng Volatility thích hợp được xác định. Phân tích tiếp tục.

<figure><img src="/files/5v4jOhLVoZiGt4FDOMGH" alt=""><figcaption></figcaption></figure>

* Kiểm tra xem biểu tượng có phải là biểu tượng chính xác cho hệ điều hành và phiên bản kernel hay không.

```bash
ls -l volatility3/symbols/
```

<figure><img src="/files/O5MAWyk8ljxOn2bJnKHI" alt=""><figcaption></figcaption></figure>

Vui lòng lưu ý những điều sau đây về Linux ISF:

Trước đây, Volatility 2 sử dụng khái niệm "profile". Tuy nhiên, với sự ra đời của Volatility 3, một "bảng ký hiệu" đã được giới thiệu như một phương pháp mới để thay thế profile. Về cơ bản, phương pháp này diễn giải thông tin ký hiệu của kernel Linux dựa trên các bảng được lưu trữ, cho phép tiết lộ ý nghĩa của các giá trị trong bộ nhớ. Volatility thực hiện phân tích bảng ký hiệu của kernel và lưu trữ dữ liệu ở một định dạng duy nhất được gọi là định dạng tệp ISF (Intermediate Symbol Format). Do đó, việc phân tích kết xuất bộ nhớ Linux có thể được thực hiện bằng tệp "ISF" thay vì "profile" truyền thống.

Có hai cách để lấy tệp ISF. Một là sử dụng một tệp hiện có, hai là tự tạo một tệp.

Bạn có thể lấy các tệp ISF hiện có từ máy chủ Linux ISF Volatility3: <https://isf-server.techanarchy.net/>

Bạn có thể tìm kiếm địa chỉ này cho phiên bản kernel trong thông tin banner của tệp kết xuất bộ nhớ mà chúng ta đã lấy ở trên hoặc bạn có thể tìm kiếm phiên bản kernel mà bạn đã lấy bằng lệnh "<mark style="color:red;">`uname -r`</mark>" trên hệ thống được đề cập.

Khi chúng tôi tìm kiếm phiên bản kernel của hệ thống mà chúng tôi đã lấy kết xuất bộ nhớ, không tìm thấy tệp ISF nào.

<figure><img src="/files/yC6zG0m8AGTH3lVZE79M" alt=""><figcaption></figcaption></figure>

Nếu tìm thấy tệp ISF, nó có thể được tải xuống trong một giờ, sau đó bạn nên tìm kiếm lại để lấy liên kết tải xuống. Tệp đã tải xuống phải được đặt trong thư mục "/volatility3/symbols" trong thư mục Volatility3.

<figure><img src="/files/tcrHW3kDI32lJBFg7Fhg" alt=""><figcaption></figcaption></figure>

Nếu không có symbol format nào có sẵn, chúng ta phải tự tạo tệp ISF để phân tích kết xuất bộ nhớ.

Lưu ý: Nếu bạn cố gắng phân tích kết xuất bộ nhớ tương ứng mà không có tệp ISF, bạn sẽ thấy một đầu ra như hình bên dưới:

<figure><img src="/files/x7NIYpzX5s5r9lBGux0m" alt=""><figcaption></figcaption></figure>

<mark style="color:red;">`Dwarf2json`</mark> là một tiện ích xử lý các tệp chứa thông tin ký hiệu và kiểu để tạo ra đầu ra JSON định dạng ký hiệu trung gian (ISF) Volatility3 phù hợp để phân tích Linux và MacOS (Yêu cầu Go 1.14 trở lên để sử dụng).

Bạn có thể tạo một tệp ISF tùy chỉnh bằng tiện ích "<mark style="color:red;">`dwarf2json`</mark>".

**Cài đặt dwarf2json trên Ubuntu 22.04**

{% code overflow="wrap" %}

```bash
# Phiên bản mới nhất của “Dwarf2json” được tải xuống từ kho lưu trữ chính thức.

git clone https://github.com/volatilityfoundation/dwarf2json.git

# Bạn thay đổi thành thư mục dwarf2json

cd dwarf2json/
```

{% endcode %}

<figure><img src="/files/VF6Nqm92YJFptEbpxMXH" alt=""><figcaption></figcaption></figure>

{% code overflow="wrap" %}

```bash
# Để cài đặt các gói ký hiệu gỡ lỗi, v.v.

echo "deb http://ddebs.ubuntu.com $(lsb_release -cs) main restricted universe multiverse

deb http://ddebs.ubuntu.com $(lsb_release -cs)-updates main restricted universe multiverse

deb http://ddebs.ubuntu.com $(lsb_release -cs)-proposed main restricted universe multiverse" | \

sudo tee -a /etc/apt/sources.list.d/ddebs.list

sudo apt install ubuntu-dbgsym-keyring

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys F2EDC64DC5AEE1F6B9C621F0C8CAB6595FDFF622

sudo apt-get update
```

{% endcode %}

<figure><img src="/files/XKwLXoqPshUtvSAg0rNz" alt=""><figcaption></figcaption></figure>

Bây giờ bạn có thể tải thông tin dbgsym cho phiên bản hình ảnh kernel mà bạn muốn sử dụng:

```bash
# Kiểm tra phiên bản kernel

uname -r

# Cài đặt dbgsym

apt install linux-image-6.5.0-25-generic-dbgsym

# Kiểm tra tệp vmlinux

ls -lh /usr/lib/debug/boot
```

<figure><img src="/files/K76uQiAWcRQaKaqWLhcp" alt=""><figcaption></figcaption></figure>

Như đã hiển thị ở trên, tệp vmlinux chứa các ký hiệu gỡ lỗi kernel nằm trong thư mục '`/usr/lib/debug/boot`'. Dựa trên tệp vmlinux, bạn có thể sử dụng công cụ <mark style="color:red;">`dwarf2json`</mark> để trích xuất tệp ISF "output.json".

{% code overflow="wrap" %}

```bash
./dwarf2json linux --elf /usr/lib/debug/boot/vmlinux-6.5.0-25-generic > /root/tools/volatility3/volatility3/symbols/vmlinux-6.5.0-25-generic.json 
```

{% endcode %}

<figure><img src="/files/2Scp7gJvdoOL0m5WZCmM" alt=""><figcaption></figcaption></figure>

Lặp lại bước mà chúng ta đã thử một vài bước trước và gặp lỗi, chúng ta thấy rằng bây giờ chúng ta có thể phân tích tệp kết xuất bộ nhớ.

```bash
python3 vol.py -f /var/dumps/ubuntu-memdump.lime linux.pslist
```

<figure><img src="/files/Wcheskv8u716vG0tEgBr" alt=""><figcaption></figcaption></figure>

Sau đây là một ví dụ về một số đầu ra phân tích kết xuất bộ nhớ Linux.

Đầu ra kết xuất bộ nhớ Linux Sockstat:

```bash
python3 vol.py -f /var/dumps/ubuntu-memdump.lime linux.sockstat
```

<figure><img src="/files/4LqoJRTqsXHyCaSRXNIY" alt=""><figcaption></figcaption></figure>

Đầu ra kết xuất "Linux Bash History" được hiển thị trong hình bên dưới:

```bash
python3 vol.py -f /var/dumps/ubuntu-memdump.lime linux.bash
```

<figure><img src="/files/pqkGtYG6qoYcgPMM2GyQ" alt=""><figcaption></figcaption></figure>

## 4. Case Studies and Practical Examples

Bao gồm các kịch bản thực tế và ví dụ thực tế liên quan đến pháp y bộ nhớ Linux. Trọng tâm sẽ là cách các quy trình pháp y được triển khai, cách các thách thức khác nhau được vượt qua và cách đánh giá kết quả.

### Example-1

**Trường hợp: Giám sát Hoạt động Người dùng Đáng ngờ**

Các quản trị viên hệ thống nghi ngờ có truy cập trái phép vào hệ thống nơi họ đang điều tra sự cố dịch vụ. Là một phần của cuộc điều tra này, họ bắt đầu kiểm tra các lệnh và hoạt động người dùng đã được thực thi trên hệ thống bằng các lệnh bash từ kết xuất bộ nhớ.

Bước đầu tiên trong cuộc điều tra là kiểm tra đầu ra lịch sử bash trong kết xuất bộ nhớ. Trong những trường hợp như vậy, vì quá nhiều lệnh sẽ được thực thi trước tiên, nên sẽ hữu ích nếu nhanh chóng tìm kiếm các lệnh mà những kẻ tấn công có khả năng chạy bằng Khung Tấn công Mitre.

Các ví dụ về các lệnh này bao gồm:

* **T1105 - Ingress Tool Transfer** "T1105 - Chuyển Công cụ Xâm nhập": Sử dụng lệnh '`wget`' của Linux. Những kẻ tấn công có thể sử dụng lệnh này để tải xuống các công cụ hoặc phần mềm độc hại vào hệ thống mục tiêu.
* **T1021.001 - Remote Services: SSH** "T1021.001 - Dịch vụ Từ xa: SSH": Sử dụng lệnh '`ssh`' của Linux. Kẻ tấn công có thể sử dụng lệnh "ssh" để truy cập từ xa vào hệ thống và thực thi các lệnh.
* **T1070.004 - Indicator Removal on Host: File Deletion** "T1070.004 - Loại bỏ Chỉ báo trên Máy chủ: Xóa Tệp": Sử dụng lệnh '`rm`' của Linux. Những kẻ tấn công có thể sử dụng lệnh này để che giấu dấu vết của chúng hoặc xóa các tệp độc hại.
* **T1046 - Network Service Scanning** "T1046 - Quét Dịch vụ Mạng": Sử dụng lệnh '`nmap`' của Linux. Những kẻ tấn công có thể sử dụng lệnh nmap để khám phá các thiết bị khác và các cổng đang mở trên mạng.
* **T1562.001 - Impair Defenses: Disable or Modify Tools** "T1562.001 - Làm suy yếu Phòng thủ: Vô hiệu hóa hoặc Sửa đổi Công cụ": Sử dụng lệnh '`chmod`' của Linux. Những kẻ tấn công có thể sử dụng lệnh này để sửa đổi hoặc vô hiệu hóa quyền của các công cụ bảo mật.
* **T1037.004 - Boot or Logon Autostart Execution: .bashrc** "T1037.004 - Thực thi Khởi động Tự động khi Khởi động hoặc Đăng nhập: .bashrc": Sửa đổi tệp "`.bashrc`" của Linux. Những kẻ tấn công có thể sửa đổi tệp này để đảm bảo rằng bất kỳ phần mềm độc hại nào chúng đưa vào hệ thống sẽ được thực thi khi đăng nhập.
* **T1027.004 - Obfuscated Files or Information: Compile After Delivery** "T1027.004 - Các Tệp hoặc Thông tin Bị Xáo trộn: Biên dịch Sau Khi Phân phối": Biên dịch mã nguồn bằng lệnh "`gcc`" của Linux. Những kẻ tấn công có thể trước tiên chuyển mã nguồn bị xáo trộn khó hiểu và khó phát hiện đến hệ thống mục tiêu. Sau đó, chúng sử dụng các trình biên dịch như gcc để chuyển đổi mã nguồn thành các tệp nhị phân trên hệ thống mục tiêu.

Trong trường hợp này, khi hoạt động trước và sau lệnh <mark style="color:red;">`wget`</mark> nổi bật trong kết xuất bộ nhớ được lọc, người ta thấy rằng những kẻ tấn công đã thu thập thông tin về hệ thống bằng các lệnh như "<mark style="color:red;">`whoami`</mark>" "<mark style="color:red;">`uname -a`</mark>", có khả năng đã phát hiện ra một lỗ hổng trong phiên bản kernel và tải xuống khai thác vào hệ thống bằng "`wget`".

Sau đó, những kẻ tấn công đã điều chỉnh mã khai thác, làm cho nó có thể thực thi được và chạy nó.

```bash
python3 vol.py -f /var/dumps/test-memdump.lime linux.bash | grep wget
```

<figure><img src="/files/mAWBAQF5cEWd8Sdu4x6L" alt=""><figcaption></figcaption></figure>

Tóm lại: Bạn có thể nhanh chóng xác định sự cố bảo mật bằng cách kiểm tra đầu ra lịch sử liên quan đến các tình huống đáng ngờ. Chỉ cần tìm kiếm các lệnh hiếm khi được sử dụng mà việc sử dụng có thể bị nghi ngờ.

### Example-2

**Trường hợp: Mật khẩu và thông tin nhạy cảm bị rò rỉ**

Dựa trên thông tin rò rỉ dữ liệu được báo cáo bởi giải pháp Cyber Threat Intelligence mà tổ chức sử dụng, một cuộc điều tra đã được khởi xướng bằng cách lấy kết xuất bộ nhớ từ máy chủ chứa dữ liệu bị lộ trong vụ rò rỉ. Chi tiết rò rỉ cho thấy có các tệp "/etc/shadow", "/etc/passwd" thuộc về một máy chủ.

Trong quá trình điều tra, lịch sử bash, hoạt động mạng và các di chuyển tệp trong kết xuất bộ nhớ cần được kiểm tra.

Trên kết xuất bộ nhớ nhận được, trước tiên, nó kiểm tra các hoạt động liên quan đến các tệp này từ lịch sử.

Sau đó, trong số các hoạt động này, hoạt động mạng của quá trình truyền dữ liệu bằng "<mark style="color:red;">`scp`</mark>" được kiểm tra.

Cuối cùng, các di chuyển tệp được kiểm tra để đảm bảo rằng các tệp tương ứng thực sự được đọc và chuyển bởi "scp".

Dưới đây là chế độ xem từng bước về đầu ra của các kiểm tra này. Phân tích đầu ra cho thấy các tệp '`/etc/shadow`' và '`/etc/passwd`' đã được chuyển từ máy chủ đến địa chỉ IP '8.7.6.5'.

```bash
python3 vol.py -f /var/dumps/ubuntu-memdump.lime linux.bash | egrep "passwd|shadow"
```

<figure><img src="/files/1BqmzMeJNtW26rGlBpuj" alt=""><figcaption></figcaption></figure>

**Kết luận**

Phần này trình bày 2 quan điểm khác nhau về những gì và cách xem phân tích kết xuất của một sự kiện đáng ngờ. Nói chung, bạn có thể phát hiện các tình huống đáng ngờ bằng cách kiểm tra đường dẫn được thực hiện cho các tình huống đó, các lệnh đã thực thi, hoạt động mạng và hoạt động tệp.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://viettaliii.gitbook.io/home/soc-and-dfir/dfir/linux-memory-forensics.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
