Truy tìm Rootkit trên Linux bằng Volatility: Kỹ thuật Memory Forensics thực chiến

Security tutorial - IT technology blog
Security tutorial - IT technology blog

Khi các công cụ hệ thống bị kẻ tấn công “dắt mũi”

2 giờ sáng, hệ thống giám sát báo động đỏ: Một server database quan trọng bỗng dưng đẩy lưu lượng outbound lên tới 500Mbps. Mình đăng nhập kiểm tra bằng top, ps -auxnetstat nhưng mọi thứ vẫn sạch sẽ một cách vô lý. Không có process nào ngốn CPU, cũng chẳng thấy kết nối lạ nào đang hoạt động.

Sau khi rà soát kỹ, mình lờ mờ nhận ra vấn đề: Server đã dính Rootkit. Khi mã độc chiếm được quyền điều khiển Kernel, nó sẽ sửa đổi kết quả trả về của các lệnh hệ thống. Những gì bạn thấy trên terminal lúc này chỉ là một màn kịch được dàn dựng sẵn.

Để lật tẩy kẻ ẩn mình, Memory Forensics (Điều tra số trên RAM) là con đường duy nhất. RAM không biết nói dối. Mọi tiến trình, kết nối mạng hay đoạn mã thực thi đều để lại dấu vết tại đây. Và Volatility Framework chính là chiếc kính hiển vi mạnh mẽ nhất để soi xét những dấu vết đó.

Ba phương pháp điều tra sự cố: Chọn vũ khí nào?

Khi nghi ngờ server bị xâm nhập, bạn thường đứng trước 3 lựa chọn:

1. Live Analysis (Phân tích trực tiếp)

Bạn dùng lsof, ps trực tiếp trên server. Cách này nhanh nhưng cực kỳ rủi ro vì Rootkit có thể che giấu file và tiến trình. Bạn đang hỏi chính kẻ trộm rằng: “Anh có ở trong nhà không?”

2. Disk Forensics (Phân tích ổ đĩa)

Phương pháp này giúp tìm file thực thi hoặc log cũ đã xóa. Tuy nhiên, nó sẽ hoàn toàn bất lực trước “Fileless Malware” – loại mã độc chỉ nằm trên RAM và biến mất ngay khi server reboot.

3. Memory Forensics (Phân tích RAM với Volatility)

Đây là cách lấy toàn bộ dữ liệu RAM để phân tích offline. Bạn sẽ thấy được các tiến trình ẩn, mã độc được tiêm (inject) vào process sạch và cả các key mã hóa. Dù tốn thời gian hơn, nhưng đây là cách duy nhất để bóc trần những cuộc tấn công tinh vi.

Thực hành: Quy trình săn lùng mã độc bằng Volatility 3

Volatility 3 hiện là tiêu chuẩn mới với kiến trúc hiện đại, không còn yêu cầu tạo Profile thủ công như bản cũ. Dưới đây là quy trình thực tế mình thường áp dụng.

Bước 1: Thu thập Memory Dump bằng AVML

Tuyệt đối không cài Volatility lên server đang bị nhiễm. Hãy dùng AVML của Microsoft để chụp lại RAM. Công cụ này rất gọn nhẹ và không cần build kernel module phức tạp.

# Tải AVML trực tiếp về server mục tiêu
wget https://github.com/microsoft/avml/releases/download/v0.13.0/avml
chmod +x avml

# Dump RAM ra file (ví dụ server có 16GB RAM, file dump sẽ nặng tương đương)
sudo ./avml memory.dmp

Sau đó, hãy chuyển file memory.dmp về máy phân tích riêng biệt qua SCP hoặc ổ cứng ngoài.

Bước 2: Cài đặt môi trường phân tích

Trên máy phân tích (Linux hoặc macOS), bạn cần chuẩn bị Python 3:

git clone https://github.com/volatilityfoundation/volatility3.git
cd volatility3
pip3 install -r requirements.txt

Bước 3: Vạch mặt tiến trình ẩn (Process Analysis)

Lệnh linux.pslist chỉ liệt kê các process theo danh sách của Kernel. Để tìm Rootkit, hãy dùng linux.psscan. Plugin này quét toàn bộ bộ nhớ để tìm các cấu trúc process, kể cả những thứ đã bị gỡ khỏi danh sách quản lý của hệ điều hành.

# Tìm các process ẩn hoặc đã bị kết thúc
python3 vol.py -f memory.dmp linux.psscan

Dấu hiệu khả nghi: Hãy để ý các process có tên giống hệ thống (như kworker) nhưng lại có Parent Process ID (PPID) trỏ về một shell hoặc một tiến trình không liên quan.

Bước 4: Truy vết kết nối mạng ngầm

Nếu netstat trên server không hiện gì, Volatility sẽ cho bạn thấy sự thật qua plugin netstat của nó.

python3 vol.py -f memory.dmp linux.netstat

Hãy chú ý các kết nối ESTABLISHED tới IP lạ hoặc các port “nhạy cảm” như 4444, 8080, hoặc 1337. Một kết nối từ nginx tới một IP lạ ở nước ngoài là tín hiệu đỏ cực lớn.

Bước 5: Phát hiện kỹ thuật Memory Injection

Nhiều malware hiện nay không chạy file riêng lẻ. Chúng tiêm mã độc vào các tiến trình tin cậy như sshd. Plugin malfind sẽ tìm các vùng nhớ có quyền RWX (Read-Write-Execute) – một đặc điểm điển hình của shellcode.

python3 vol.py -f memory.dmp linux.malfind

Nếu bạn thấy các đoạn code bắt đầu bằng hex \xeb hoặc \x31, đó gần như chắc chắn là shellcode đang chờ lệnh từ kẻ tấn công.

Lưu ý quan trọng về Symbol Table

Phân tích Linux khó hơn Windows vì Kernel Linux thay đổi liên tục. Volatility 3 cần Symbol Table (dưới dạng file JSON) để hiểu cấu trúc bộ nhớ của từng phiên bản Kernel cụ thể.

Nếu công cụ không nhận diện được file dump, bạn cần chạy uname -r trên server mục tiêu. Sau đó, hãy tìm và tải gói debug symbols tương ứng từ repository của Distro (Ubuntu, CentOS…) để tạo bộ Symbol cho Volatility.

Điều tra số là một cuộc đấu trí đầy áp lực, nhất là khi hệ thống đang gặp sự cố. Tuy nhiên, với Volatility, bạn không còn phải đoán mò. Mọi hành vi xâm nhập, dù tinh vi đến đâu, cuối cùng đều phải lộ diện dưới ánh sáng của RAM Forensics.

Share: