Chương 14: Chữ Ký Mạng Tập Trung Vào Malware


1. Tổng Quan Về Countermeasures Mạng

Countermeasures (biện pháp đối phó) là các hành động được thực hiện để phát hiện hoặc ngăn chặn hoạt động độc hại.

Các thuộc tính cơ bản của lưu lượng mạng được dùng để phòng thủ:

Thuộc tínhCông cụ sử dụng
IP address, PortFirewall, Router
Domain nameDNS Sinkhole, Proxy Server
Nội dung trafficIDS/IPS, Email/Web Proxy

IDS vs IPS:

  • IDS (Intrusion Detection System): chỉ phát hiện traffic độc hại
  • IPS (Intrusion Prevention System): phát hiện và ngăn chặn traffic độc hại

2. Quan Sát Malware Trong Môi Trường Thực

Tại sao nên review dữ liệu thực trước?

Bước đầu tiên không phải là chạy malware trong lab hay disassemble code, mà là khai thác dữ liệu đã có sẵn: logs, alerts, packet captures từ mạng thực.

Ưu điểm của dữ liệu từ mạng thực so với lab:

  • Minh bạch hơn: Malware có thể phát hiện môi trường lab và thay đổi hành vi.
  • Thông tin 2 chiều: Thấy được cả client và server, trong khi lab thường chỉ thấy 1 phía. Phân tích parsing routine (phía nhận) thường khó hơn phân tích phía gửi.
  • Không rò rỉ thông tin: Passive review không để lộ hoạt động điều tra cho attacker.

3. Các Chỉ Số Malicious Activity

Ví dụ: malware gửi HTTP GET đến IP từ DNS record, 30 giây sau beacon đến một IP khác không qua DNS.

Bảng chỉ số thu thập được:

Loại thông tinVí dụ
Domain (kèm IP)www.badsite.com (123.123.123.10)
IP độc lập123.64.64.64
HTTP GET requestGET /index.htm HTTP/1.1 với User-Agent: Wefa7e

4. OPSEC – Operations Security

Cách attacker theo dõi analyst:

  • Gửi spear-phishing email có link đặc biệt, theo dõi IP nào truy cập.
  • Nhúng encoded link trong blog comment để tạo “infection audit trail” công khai nhưng bí mật.

Chiến thuật Indirection

Mục tiêu: Ẩn danh tính và vị trí khi nghiên cứu online.

Các cách indirection:
1. Dùng Tor, open proxy, web anonymizer
   → Nhược: có thể gây nghi ngờ vì rõ ràng đang ẩn danh

2. Dùng máy ảo (VM) riêng biệt + kết nối ẩn:
   - Cellular connection
   - SSH tunnel / VPN qua remote infrastructure
   - Ephemeral cloud machine (Amazon EC2)

3. Search engine (khá an toàn, nhưng lưu ý):
   - Query có domain mới → có thể trigger crawler
   - Click kết quả → activate links của site đó

5. Thu Thập Thông Tin IP và Domain

Các loại thông tin có thể khai thác

Domain Registry → Whois records (tên, email, ngày đăng ký, nameserver)
IP Registry     → RIR records (tổ chức, contact)
DNS Records     → Mapping domain ↔ IP
Blacklists      → IP/Domain blacklist
Geo Info        → Vị trí địa lý của IP

Công cụ tra cứu nổi bật

Công cụTính năng
DomainToolsHistorical whois, reverse IP lookup, reverse whois
RobTexNhiều domain trỏ về 1 IP, tích hợp blacklist
BFK DNS LoggerPassive DNS monitoring (miễn phí hiếm có)

Lợi thế dùng website thay CLI: tự động follow-on lookup, có anonymity, có metadata bổ sung (blacklist, geo).


6. Content-Based Countermeasures

Tại sao Content-Based tốt hơn IP/Domain?

  • IP/Domain: attacker dễ dàng chuyển sang địa chỉ khác → giá trị ngắn hạn
  • Content-based: dựa trên đặc trưng cơ bản của malware → bền vững hơn

Signature-Based IDS (Snort)

Cấu trúc Snort rule:

<rule_header> (<rule_options>)

Ví dụ rule cơ bản:

alert tcp $HOME_NET any -> $EXTERNAL_NET $HTTP_PORTS (
    msg:"TROJAN Malicious User-Agent";
    content:"|0d 0a|User-Agent\: Wefa7e";
    classtype:trojan-activity;
    sid:2000001;
    rev:1;
)

Giải thích từng phần:

Thành phầnÝ nghĩa
alertHành động: tạo alert
tcpGiao thức
$HOME_NET any -> $EXTERNAL_NET $HTTP_PORTSTraffic outbound đến HTTP ports
msgThông điệp khi rule kích hoạt
contentTìm kiếm nội dung trong payload
|0d 0a|Hex cho ký tự xuống dòng HTTP (CR LF)
classtypePhân loại chung
sidID duy nhất của rule
revPhiên bản revision

7. Phân Tích Sâu: Từ Dynamic Đến Static

Vấn đề với surface analysis

Dừng ở IP, domain, và signature đơn giản là sai lầm — chỉ tạo ra ảo giác bảo mật.

Dynamic Analysis: Chạy Malware Nhiều Lần

Chạy malware nhiều lần để nhận biết phần tử ngẫu nhiên vs cố định:

Lần 1: User-Agent: Wefa7e
Lần 2: User-Agent: Wee6a3
Lần 3: User-Agent: We4b58
...

Nhận xét: Prefix We cố định, 4 ký tự sau là alphanumeric ngẫu nhiên → regex: We[a-z0-9]{4}

Rule nâng cấp với PCRE:

alert tcp $HOME_NET any -> $EXTERNAL_NET $HTTP_PORTS (
    msg:"ET TROJAN WindowsEnterpriseSuite FakeAV Dynamic User-Agent";
    flow:established,to_server;
    content:"|0d 0a|User-Agent\: We";
    isdataat:6,relative;
    content:"|0d 0a|";
    distance:0;
    pcre:"/User-Agent\: We[a-z0-9]{4}\x0d\x0a/";
    classtype:trojan-activity;
    sid:2010262;
    rev:1;
)

Các keyword mới:

KeywordMô tả
flowChiều của TCP session (established, to_server/to_client)
isdataatKiểm tra dữ liệu tồn tại tại vị trí tương đối
distanceSố byte bỏ qua sau pattern match trước
pcrePerl Compatible Regular Expression
referenceTham chiếu đến nguồn bên ngoài

PCRE notation trong Snort:

[ ]   → tập ký tự có thể
{ }   → số lần lặp
\xHH  → ký tự hex
!     → NOT (phủ định)

Xử lý False Positive

content:!"User-Agent|3a| Webmin|0d 0a|";

Ký hiệu ! trước content = NOT → rule chỉ fire khi không có Webmin.


8. Kết Hợp Dynamic và Static Analysis

Mục tiêu của phân tích sâu

1. Full coverage of functionality
   → Tăng code coverage trong dynamic analysis (Chapter 3)
   → Dùng INetSim hoặc custom scripts để giả lập server

2. Understanding inputs & outputs
   → Static analysis: thấy HOW content được tạo ra
   → Dynamic analysis: xác nhận kết quả dự đoán từ static

Bảng cấp độ phân tích malware

Cấp độMô tả
Surface analysisChỉ nhìn initial indicators (sandbox output)
Communication method coverageHiểu code của từng kỹ thuật giao tiếp
Operational replicationTạo được tool điều khiển malware hoàn toàn
Code coverageHiểu từng block code

Mức tối thiểu cần đạt: giữa “communication method coverage” và “operational replication” để tạo signature hiệu quả.


9. Malware Ẩn Mình Trong Traffic Thông Thường

  • Thập niên 90s: IRC phổ biến → malware dùng IRC → defenders chú ý → attackers bỏ
  • Hiện tại: HTTP, HTTPS, DNS là phổ biến nhất → malware dùng những giao thức này

DNS tunneling:

Malware muốn gửi password "flapjack"
→ DNS query: www.thepasswordisflapjack.maliciousdomain.com

HTTP abuse:

GET method (dành cho request, ~2KB)
→ Malware nhét dữ liệu vào URI hoặc User-Agent thay vì body

POST method:
→ Dữ liệu trong User-Agent của nhiều GET request liên tiếp

Kỹ thuật 2: Sử dụng Legitimate Resources

Attacker có thể nhúng lệnh vào web page hợp lệ đã bị compromise:

<!-- adsrv?bG9uZ3NsZWVw -->
  • bG9uZ3NsZWVw = Base64 của longsleep
  • Malware đọc trang web, tìm comment, decode lệnh → sleep 1 giờ
  • Từ góc độ defender: không phân biệt được request thực vs malware request

Tiến hóa của User-Agent trong Malware

Thế hệ 1: User-Agent hoàn toàn giả (Wefa7e)
          → Dễ detect

Thế hệ 2: User-Agent phổ biến nhưng cố định
          Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)
          → Vẫn có thể dùng làm signature

Thế hệ 3: Multiple-choice scheme (nhiều UA, xoay vòng)
          Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
          Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2)
          → Khó hơn nhưng vẫn detect được pattern

Thế hệ 4: Native library call (dùng code của browser thật)
          → Không thể phân biệt với browser thật

Leveraging Client-Initiated Beaconing

NAT và proxy làm mọi request trông như từ cùng IP → attacker khó biết máy nào đang kết nối.

Giải pháp của attacker: Nhúng unique host identifier vào beacon:

  • Encoded string chứa thông tin máy
  • Hash của các thuộc tính host đặc trưng

Lợi cho defender: Nếu biết cách malware tạo ID này → có thể track infected machines.


10. Tìm Networking Code Trong Malware

Windows Networking APIs

WinSock API (low-level):
  WSAStartup, getaddrinfo, socket, connect
  send, recv, WSAGetLastError

WinINet API (high-level, dễ blend với traffic bình thường):
  InternetOpen, InternetConnect, InternetOpenURL
  HTTPOpenRequest, HTTPQueryInfo, HTTPSendRequest
  InternetReadFile, InternetWriteFile

COM Interface (hiếm nhưng ẩn nhất):
  CoInitialize, CoCreateInstance, Navigate
  URLDownloadToFile

11. Phân Tích URI: Kết Hợp Static + Dynamic

Ví dụ phân tích URI malware

URI từ traffic thực:

/1011961917758115116101584810210210256565356
/14586205865810997108584848485355525551
/7911554172581099710858484848535654100102

Dấu hiệu: 5848 xuất hiện lặp lại → đây là dấu phân cách (: = ASCII 58)

Static analysis phát hiện: URI = <4 random bytes>:<3 bytes hostname>:<GetTickCount hex>

Encoding: mỗi byte → ASCII decimal (ví dụ: a = 97)

Phân tích từng phần

1458620586  58  10997108  58  4848485355525551
   ↑              ↑              ↑
4 bytes ngẫu nhiên  3 bytes hostname  GetTickCount (hex → decimal)

Regular expression cuối cùng:

/\/([12]{0,1}[0-9]{1,2}){4}58[0-9]{6,9}58(4[89]|5[0-7]|9[789]|11[012]){8}/

Giải thích từng phần:

PhầnPCREÝ nghĩa
4 random bytes([12]{0,1}[0-9]{1,2}){4}Giá trị 0-255 × 4
Dấu phân cách58Ký tự : cố định
Hostname[0-9]{6,9}3 ký tự, mỗi ký tự ≥ 2 chữ số decimal
Dấu phân cách58Ký tự : cố định
GetTickCount(4[89]|5[0-7]|9[789]|11[012]){8}8 hex chars → decimal ASCII

12. Nguồn Gốc Dữ Liệu Trong Network Traffic

5 nguồn cơ bản

1. Random data          → không thể predict, phải dùng wildcard
2. Standard library     → GET từ HTTPSendRequest, Header chuẩn
3. Hard-coded data      → User-Agent cố định, colon ký tự → GIÁ TRỊ NHẤT
4. Host configuration   → hostname, uptime, CPU speed → cố định theo host
5. External data        → từ server, file system, keylogger → khó predict

Lỗi phổ biến của Malware Authors

  • Sai chính tả: Mozila thay vì Mozilla
  • Sai khoảng trắng, sai case: MoZilla
  • Ví dụ trong chapter: Accept: * / * thay vì Accept: */*
  • Thiếu Referer header (thường có trong browsing thực)

13. Tối Ưu Hóa Signature

Các kỹ thuật tối ưu

-- Kết hợp User-Agent + URI để regex chỉ chạy khi cần
content:"User-Agent: ...";
pcre:"/GET \/.../"

-- Dùng content expressions + within để giới hạn tìm kiếm
content:"58"; content:"58"; distance:6; within:5;

-- Khai thác upper bits cố định của GetTickCount
content:"584";  -- covers ~1 tháng uptime đầu tiên

Signature tổng hợp hoàn chỉnh

alert tcp $HOME_NET any -> $EXTERNAL_NET $HTTP_PORTS (
    msg:"TROJAN Malicious Beacon";
    content:"User-Agent: Mozilla/4.0 (compatible\; MSIE 7.0\; Windows NT 5.1)";
    content:"Accept: * / *";
    uricontent:"58";
    content:!"|0d0a|referer:"; nocase;
    pcre:"/GET \/([12]{0,1}[0-9]{1,2}){4}58[0-9]{6,9}58(4[89]|5[0-7]|9[789]|10[012]){8} HTTP/";
    classtype:trojan-activity;
    sid:2000002;
    rev:1;
)

14. Phân Tích Traffic Nhận Từ Server

Ví dụ: Command qua HTML Comment

Malware đọc web page, tìm lệnh trong HTML comment:

<!-- adsrv?bG9uZ3NsZWVw -->

Parsing flow:

flowchart TD A[Malware GET web page] --> B{Tìm ' C[Đọc dòng tiếp theo] C --> B B -- Có --> D{adsrv? present?} D -- Không --> C D -- Có --> E[Base64 decode nội dung] E --> F{Parse command} F --> G[longsleep → sleep 1h] F --> H[superlongsleep → sleep 24h] F --> I[run:URL → download & execute] F --> J[connect:host:port → reverse shell]

Bảng lệnh và Base64:

LệnhBase64Hành động
longsleepbG9uZ3NsZWVwSleep 1 giờ
superlongsleepc3VwZXJsb25nc2xlZXA=Sleep 24 giờ
shortsleepc2hvcnRzbGVlcA==Sleep 1 phút
run:www.example.com/fast.execnVuOnd3dy5leG...Download & execute
connect:www.example.com:80Y29ubmVjdDp3d3...Reverse shell

Signatures cho server-side commands

-- Generic: bắt bất kỳ lệnh Base64 nào
pcre:"/<!-- adsrv\?([a-zA-Z0-9+\/=]{4})+ -->/"

-- Specific commands
content:"<!-- "; content:"bG9uZ3NsZWVw -->"; within:100;
content:"<!-- "; content:"c3VwZXJsb25nc2xlZXA= -->"; within:100;
content:"<!-- "; content:"cnVu"; within:100; content:"-->"; within:100;
content:"<!-- "; content:"Y29ubmVj"; within:100; content:"-->"; within:100;

15. Chiến Lược Multi-Signature

Tại sao cần nhiều signature?

Một signature bắt tất cả → attacker thay đổi 1 chỗ → toàn bộ signature vô hiệu

Giải pháp: Tách thành nhiều signature nhắm vào các phần khác nhau:

-- Target 1: User-Agent + Accept anomaly (không cần URI cụ thể)
alert tcp $HOME_NET any -> $EXTERNAL_NET $HTTP_PORTS (
    msg:"TROJAN Malicious Beacon UA with Accept Anomaly";
    content:"User-Agent: Mozilla/4.0 (compatible\; MSIE 7.0\; Windows NT 5.1)";
    content:"Accept: * / *";
    content:!"|0d0a|referer:"; nocase;
    classtype:trojan-activity; sid:2000004; rev:1;
)

-- Target 2: URI pattern (không phụ thuộc User-Agent)
alert tcp $HOME_NET any -> $EXTERNAL_NET $HTTP_PORTS (
    msg:"TROJAN Malicious Beacon URI";
    uricontent:"58";
    content:!"|0d0a|referer:"; nocase;
    pcre:"/GET \/([12]{0,1}[0-9]{1,2}){4}58[0-9]{6,9}58(4[89]|5[0-7]|9[789]|10[012]){8} HTTP/";
    classtype:trojan-activity; sid:2000005; rev:1;
)

16. Hiểu Góc Nhìn Của Attacker

3 nguyên tắc tạo signature bền vững


Tóm Tắt Flow Phân Tích

flowchart TD A[Nhận malware sample] --> B[Review dữ liệu có sẵn\nlogs, alerts, pcap] B --> C[Xác định basic indicators\nIP, domain, User-Agent] C --> D[OPSEC research\ndùng indirection] D --> E[Dynamic analysis\nchạy malware nhiều lần] E --> F{Đủ để tạo signature?} F -- Chưa --> G[Static analysis\ntìm hard-coded data\nvà encoding logic] G --> H[Xác định nguồn gốc\ntừng phần của traffic] H --> I[Viết PCRE / content rules] I --> J[Test trên real traffic\nloại bỏ false positives] J --> K[Tạo multi-signature\nnhắm nhiều phần độc lập] F -- Có --> I K --> L[Monitor & update\nkhi attacker thay đổi]