Lab Setup

Ta cần setup môi trường (máy ảo) để phân tích mã độc bởi vì chúng rất nguy hiểm. Máy ảo cần có khả năng lưu trạng thái (snapshot) để khôi phục lại trạng thái ban đầu sau khi phân tích xong mã độc.

Các bước sử dụng máy ảo để phân tích mã độc:

  1. Tạo một máy ảo mới và cài đặt hệ điều hành.
  2. Cài các tool phân tích mã độc cần thiết.
  3. Lưu snapshot máy.
  4. Sao chép hoặc tải về mã độc rồi phân tích.
  5. Khôi phục máy ảo về snapshot sau khi phân tích xong.

Với những bước trên, ta sẽ không cần phải dọn dẹp môi trường để phân tích một mã độc mới cũng như là cài lại các công cụ phân tích mã độc.

Chúng ta có thể dùng các máy ảo sẵn các công cụ phân tích mã độc:

  • FLARE-VM là một máy ảo Windows dùng để phân tích mã độc của Windows. Ngoài những tool phổ biến thì chúng ta cũng có thể cài thêm các tool khác tùy thích. Flare VM tương thích với Windows 7 và Windows 10.
  • REMux là một bản phân phối Linux dùng để phân tích mã độc của Linux. Tương tự với FLARE-VM, bản phân phối này cài sẵn một số tool dịch ngược và phân tích mã độc.

How a String Search Works

Việc tìm kiếm chuỗi (string search) có trong malware giúp đem lại những thông tin quan trọng. Mục tiêu thường là chuỗi các ký tự ASCII hoặc Unicode đi kèm với một ký tự kết thúc chuỗi. Tuy nhiên, do không phải chuỗi nào cũng chứa thông tin quan trọng chẳng hạn như các địa chỉ vùng nhớ, chỉ thị hợp ngữ, … nên việc tìm chuỗi thường cho ra rất nhiều dương tính giả.

What to Look For?

Các thông tin quan trọng cần tìm được gọi là Indicators of Compromise (IOCs), bao gồm:

  • Các hàm của Windows API chẳng hạn như SetWindowsHook, CreateProcess, InternetOpen, …
  • Các địa chỉ IP, URL, tên miền có thể cho ta biết thông tin về C2 (Command and Control1).
  • Các chuỗi đáng ngờ chẳng hạn như địa chỉ Bitcoin, nội dung của các message box, …

Đối với Windows thì có công cụ strings.exe tương tự với câu lệnh strings của Linux. Công cụ này có thể trích xuất các chuỗi ra một file riêng để phân tích sau. Cú pháp:

C:\Users\Administrator\Desktop>strings <path to binary>

Một số tool khác của FLARE VM cũng có thể được dùng để tìm chuỗi chẳng hạn như CyberChef hoặc PEStudio. Đặc biệt, PEStudio còn cung cấp thêm các thông tin về các chuỗi chẳng hạn như encoding, kích thước của chuỗi, offset trong binary và hint để đoán về ý nghĩa của chuỗi. Công cụ này còn có cột blacklist giúp so khớp chuỗi với một số pattern.

Trong hình trên, PEStudio đánh dấu ở cột blacklist cho các giá trị là các lời gọi Windows API.

Obfuscated Strings

Không phải lúc nào malware cũng chứa các chuỗi ở dạng bản rõ. Thay vào đó, người tạo ra malware sẽ làm xáo trộn các chuỗi ở trong malware nhằm cản trở quá trình tìm kiếm chuỗi.

Trong trường hợp này, ta có thể sử dụng công cụ FLOSS (FireEye Labs Obfuscated String Solver) để gỡ rối (deobfuscate) và trích xuất các chuỗi mà không thể được tìm thấy khi thực hiện tìm kiếm chuỗi thông thường:

C:\Users\Administrator\Desktop>floss --no-static-strings <path to binary>

Fingerprinting Malware

Để phân biệt các mã độc thì ta dùng hàm băm mật mã (thường là SHA256). Chúng ta có thể dùng giá trị băm để tìm mã độc trong các cơ sở dữ liệu hoặc kho mã độc. Lưu ý là tên tập tin không phải là một phần của mã độc nên sẽ không làm ảnh hưởng đến giá trị băm.

Imphash

Viết tắt của import hash, là giá trị hash của các import (các lời gọi hàm thư viện) trong mã độc. Giá trị này giúp xác định các mã độc có cùng nhóm hoặc thực hiện những hành vi tương tự nhau.

PEStudio có thể tính imphash của mã độc.

Chúng ta có thể dùng trang web MalwareBazaar để tìm kiếm mã độc dựa trên imphash:

Fuzzy hashes/SSDEEP

Một cách khác để định danh mã độc là sử dụng các fuzzy hash (hay còn gọi là Context Triggered Piecewise Hash - CTPH). Giá trị này được tính bằng cách chia nhỏ nội dung ra làm nhiều phần và tính giá trị băm cho từng phần. Phương pháp này giúp so khớp tương tự thay vì so khớp chính xác như các hàm băm mật mã chẳng hạn như SHA1. Nói một cách đơn giản, fuzzy hash giúp kiểm tra xem nội dung của file 1 có tồn tại trong file 2 hay không, còn cryptographic hash giúp kiểm tra nội dung của file có bằng chính xác nội dung của file 2 hay không2.

Chúng ta có thể dùng công cụ ssdeep để tính fuzzy hash:

C:\Users\Administrator\Desktop>ssdeep-2.14.1\ssdeep.exe mal\*
ssdeep,1.1--blocksize:hash:hash,filename
3072:C3twbyJdvGwRCf/swDQheOAmN4hMRl37G:8EacOAmN6C,"C:\Users\Administrator\Desktop\mal\1"
768:fMjB/JpMfHDWqpuXDvod3UmQmv4acY2GS2C9xjwhU:UFQlpSDvoJrbvUfGS2q,"C:\Users\Administrator\Desktop\mal\2"
1536:C3tvICAqw8IKVn2wJk0c8PoYJvGwRCwAL6pILgl7vBIQtCnDkbZ3eOAmV2u4hnnM:C3twbyJdvGwRCf/swDQheOAmN4hM,"C:\Users\Administrator\Desktop\mal\3"
24576:u7DtlSDAlZvEFZhbS7buPPcedeHP5XLnkO3hGL8Siw9zVZprY8fWg5r11O:8OKVizL3cvtkO3hmVVZBYu5r1M,"C:\Users\Administrator\Desktop\mal\4"
12288:z+IIs67xrXWxgxMdplNGvIcGZwwDVHJXuDzKYzIE5P/XiS6lYSz8uahDtbNL6WTW:z+PsGlsFGgcQDJJQ,"C:\Users\Administrator\Desktop\mal\5"
24576:UCsTPcqE9S7tdODN+6ybJVCy2pvZHGOzPBjRj4AFsb:UCO7tsp+6ybJVChpRjvs,"C:\Users\Administrator\Desktop\mal\6"
 
FLARE Sun 09/18/2022 17:41:12.38
C:\Users\Administrator\Desktop>

Một số option:

  • -d: so sánh các file trong cùng một thư mục.
  • -r: chạy ở chế độ đệ quy (lặp qua các thư mục con).
  • -l: chỉ in ra đường dẫn tương đối của file.

Ví dụ:

C:\Users\Administrator\Desktop>ssdeep-2.14.1\ssdeep -l -r -d Incoming Outgoing Trash
Outgoing/Corporate Espionage/Our Budget.doc matches Incoming/Budget 2007.doc (99)
Outgoing/Personnel Mayhem/Your Buddy Makes More Than You.doc matches Incoming/Salaries.doc (45)
Trash/DO NOT DISTRIBUTE.doc matches Outgoing/Plan for Hostile Takeover.doc (88)
 
FLARE Sun 09/18/2022 17:41:12.38
C:\Users\Administrator\Desktop>

Với Incoming, Outgoing, Trash là các thư mục chứa các file cần so sánh còn 99, 4588 là các giá trị biểu thị cho mức độ giống nhau giữa các file (đơn vị phần trăm).

Signature-Based Detection

Chúng ta có thể dùng các signature để kiểm tra xem file có tồn tại một nội dung nào đó hay không. Signature trong ngữ cảnh này là một pattern có trong file. Pattern này có thể là một chuỗi các byte và các bối cảnh liên quan nếu có.

Yara Rules

Yara rule là một dạng của signature-based rule. Nó được xem là công cụ pattern-matching hữu ích của các nhà nghiên cứu mã độc. Yara có thể phát hiện ra các thông tin dựa trên các binary hoặc textual pattern chẳng hạn như hexadecimal và các chuỗi có trong file.

Chúng ta có thể dùng repository có chứa các Yara rule được xây dựng bởi cộng đồng. Khi sử dụng các rule này thì ta cần chú ý đến ngữ cảnh của chúng.

Proprietary Signatures - AntiVirus Scans

Bên cạnh các open-source signature thì còn có các signature độc quyền với tỷ lệ dương tính giả thấp. Tuy nhiên, điều này đôi khi có thể dẫn đến một vài âm tính giả. Chúng ta có thể dùng trang web VirusTotal để kiểm tra file bằng cách gửi lên giá trị băm. Nếu ta upload cả file thì có thể làm lộ những thông tin nhạy cảm hoặc làm attacker biết rằng chúng ta đang phân tích mã độc.

Capa

Capa là một công cụ mã nguồn mở giúp xác định hành vi của file dựa trên các signature chẳng hạn như các import, chuỗi, mutex và các artifact khác. Sử dụng như sau:

C:\Users\Administrator\Desktop>capa mal.exe

Output mẫu:

C:\Users\Administrator\Desktop>capa mal\1
loading : 100%|████████████████████████████████████████████████████████████| 485/485 [00:00<00:00, 1552.05     rules/s]
matching: 100%|██████████████████████████████████████████████████████████████| 288/288 [00:12<00:00, 22.23 functions/s]
+------------------------+------------------------------------------------------------------------------------+
| md5                    | 6548eec09f4d8bc6514bee3e5452541c                                                   |
| sha1                   | 7be46c62d975949fdd6777530940cf6435e8cb90                                           |
| sha256                 | 6ec74cc0a9b5697efd3f4cc4d3a21d9ffe6e0187b770990df8743fbf4f3b2518                   |
| path                   | mal\1                                                                              |
+------------------------+------------------------------------------------------------------------------------+
 
+------------------------+------------------------------------------------------------------------------------+
| ATT&CK Tactic          | ATT&CK Technique                                                                   |
|------------------------+------------------------------------------------------------------------------------|
| DEFENSE EVASION        | Obfuscated Files or Information::Indicator Removal from Tools [T1027.005]          |
|                        | Obfuscated Files or Information [T1027]                                            |
| DISCOVERY              | Application Window Discovery [T1010]                                               |
|                        | System Information Discovery [T1082]                                               |
| EXECUTION              | Command and Scripting Interpreter [T1059]                                          |
|                        | Shared Modules [T1129]                                                             |
+------------------------+------------------------------------------------------------------------------------+
 
+-----------------------------+-------------------------------------------------------------------------------+
| MBC Objective               | MBC Behavior                                                                  |
|-----------------------------+-------------------------------------------------------------------------------|
| ANTI-STATIC ANALYSIS        | Disassembler Evasion::Argument Obfuscation [B0012.001]                        |
| CRYPTOGRAPHY                | Encrypt Data::RC4 [C0027.009]                                                 |
|                             | Generate Pseudo-random Sequence::RC4 PRGA [C0021.004]                         |
| FILE SYSTEM                 | Delete File [C0047]                                                           |
|                             | Read File [C0051]                                                             |
|                             | Write File [C0052]                                                            |
| OPERATING SYSTEM            | Console [C0033]                                                               |
| PROCESS                     | Allocate Thread Local Storage [C0040]                                         |
|                             | Set Thread Local Storage Value [C0041]                                        |
|                             | Terminate Process [C0018]                                                     |
+-----------------------------+-------------------------------------------------------------------------------+
 
+------------------------------------------------------+------------------------------------------------------+
| CAPABILITY                                           | NAMESPACE                                            |
|------------------------------------------------------+------------------------------------------------------|
| contain obfuscated stackstrings                      | anti-analysis/obfuscation/string/stackstring         |
| encrypt data using RC4 PRGA                          | data-manipulation/encryption/rc4                     |
| contains PDB path                                    | executable/pe/pdb                                    |
| contain a resource (.rsrc) section                   | executable/pe/section/rsrc                           |
| accept command line arguments                        | host-interaction/cli                                 |
| manipulate console                                   | host-interaction/console                             |
| query environment variable                           | host-interaction/environment-variable                |
| delete file                                          | host-interaction/file-system/delete                  |
| read file                                            | host-interaction/file-system/read                    |
| write file (2 matches)                               | host-interaction/file-system/write                   |
| enumerate gui resources                              | host-interaction/gui                                 |
| get disk information                                 | host-interaction/hardware/storage                    |
| get hostname                                         | host-interaction/os/hostname                         |
| get thread local storage value (3 matches)           | host-interaction/process                             |
| set thread local storage value (2 matches)           | host-interaction/process                             |
| terminate process (5 matches)                        | host-interaction/process/terminate                   |
| link function at runtime (8 matches)                 | linking/runtime-linking                              |
| link many functions at runtime                       | linking/runtime-linking                              |
| parse PE exports (2 matches)                         | load-code/pe                                         |
| parse PE header (4 matches)                          | load-code/pe                                         |
+------------------------------------------------------+------------------------------------------------------+
 
 
FLARE Sun 09/18/2022 18:34:13.15
C:\Users\Administrator\Desktop>

Có thể thấy, Capa map các capability tìm được với MITRE ATT&CK framework và Malware Behavior Catalog (MBC). Ở bảng cuối cùng, chúng ta thấy các capability tương ứng với các signature. Với namespace là phân loại của capability. Đồng thời, Capa còn cho ta biết rằng malware có sử dụng packer hay không (capability contain obfuscated stackstrings).

Có thể sử dụng option -v hoặc -vv để biết thêm các thông tin chi tiết chẳng hạn như địa chỉ của capability.

list
from outgoing([[TryHackMe - Basic Static Analysis]])
sort file.ctime asc

Resources

Footnotes

  1. là các công cụ dùng để gửi lệnh đến malware, phân phối mã độc, …

  2. tham khảo [How To] Fuzzy Hashing with SSDEEP (similarity matching) - DFIRScience