Static/Signature Detection

Signature là một dãy các byte hoặc chuỗi ở trong mã độc mà được dùng để định danh. Ngoài ra, signature cũng có thể là các tên biến hoặc các hàm được import. Ví dụ, nếu một shellcode có chứa chuỗi FC 48 83 E4 F0 E8 C0 00 00 00 41 51 41 50 52 51 thì khả năng cao nó là một payload được tạo ra bởi Metasploit Venom.

Các signature cần phải được xây dựng sẵn và được cập nhật vào các giải pháp bảo mật. YARA là công cụ phổ biến được dùng để tạo ra các signature.

Signature detection rất dễ để bypass nhưng rất tốn thời gian. Do đó, chúng ta cần tránh việc gán cứng giá trị ở trong code của mã độc mà có thể được dùng để định danh mã độc. Thay vào đó, các giá trị nên được lấy ra hoặc tính toán một cách linh động.

Hashing Detection

Việc bypass hashing detection là vô cùng dễ: ta chỉ việc thay đổi ít nhất một byte trong mã độc để làm thay đổi giá trị băm của nó.

Heuristic Detection

Có hai mô hình của heuristic detection tùy theo từng loại security solution:

  • Static: decompile chương trình và so sánh các đoạn code với những đoạn code đã biết trong heuristic database. Nếu phần trăm so khớp đạt một mức cụ thể, chương trình sẽ được đánh dấu là mã độc.
  • Dynamic: chương trình được đặt vào trong một môi trường ảo hoặc sandbox để phân tích các hành vi đáng ngờ chẳng hạn như nạp DLL, gọi một số Windows API và kết nối đến internet.

Để bypass sandbox detection, lập trình viên mã độc có thể nhúng các cơ chế phát hiện sandbox vào mã độc. Nếu phát hiện có sandbox, mã độc sẽ thực thi những hành vi vô hại và ngược lại.

Behavior-Based Detection

Sau khi thực thi mã độc trong môi trường sandbox và phát hiện được các hành vi đáng ngờ, security solution sẽ thực hiện quét bộ nhớ của tiến trình. Nếu tiến trình được xác định là độc hại thì nó sẽ bị ngắt.

Một vài hành động của malware có thể làm cho nó bị ngắt ngay lập tức mà không cần quét bộ nhớ chẳng hạn khi nó thực hiện process injection vào notepad.exe và kết nối đến internet.

Để bypass behavior-based detection, lập trình viên mã độc có thể làm cho tiến trình thực hiện những hành vi bình thường nhất có thể (chẳng hạn như tránh việc tạo ra một tiến trình con của cmd.exe). Thêm vào đó, chúng ta cũng có thể tránh việc quét bộ nhớ bằng cách mã hóa bộ nhớ.

API Hooking

Được sử dụng bởi các security solution, mà chủ yếu là các EDR (endpoint detection and response), để giám sát các tiến trình hoặc việc thực thi code trong thời gian thực để phát hiện các hành vi độc hại.

API hooking hoạt động bằng cách can thiệp vào các API mà thường bị lạm dụng bởi malware và phân tích các tham số truyền vào các API đó trong thời gian thực. Điều này giúp cho các security solution có thể xem được nội dung truyền vào các API sau khi chúng được de-obfuscated hoặc giải mã.

Minh họa high-level cho API hooking:

Có nhiều cách để bypass API hooking chẳng hạn như sử dụng kỹ thuật DLL unhooking hoặc gọi các syscall trực tiếp.

IAT Checking

IAT là thông tin quý giá cho các security solution bởi vì nó chứa tên các hàm mà malware sẽ sử dụng. Ví dụ, các ransomware sẽ cần phải mã hóa file nên nó sẽ sử dụng các hàm liên quan đến mã hóa và quản lý file chẳng hạn như CreateFileA/W, SetFilePointer, Read/WriteFile, CryptCreateHash, CryptHashDataCryptGetHashParam. Khi security solution phát hiện ra những hàm này, chương trình sẽ được đánh dấu là mã độc hoặc nó sẽ được xem xét thêm.

Hình bên dưới minh họa cho việc sử dụng công cụ dumpbin.exe để kiểm tra IAT của một file nhị phân:

Một giải pháp để né tránh IAT scanning là sử dụng API hashing.

Manual Analysis

Ngoài những cách trên, blue team hoặc malware analyst có thể phân tích mã độc một cách thủ công bằng cách dịch ngược. Hơn thế nữa, các security solution thường gửi một bản sao chép các file đáng ngờ lên cloud để phân tích thêm về sau.

Malware developer có thể triển khai các kỹ thuật anti-reversing để tránh việc bị dịch ngược.

list
from outgoing([[MalDev - Detection Mechanisms]])
sort file.ctime asc

Resources