Kỹ thuật phân tích tĩnh trong phân tích mã độc

: Views

 

Phân tích tĩnh 
đơn giản là quá trình phân tích mã độc mà không cần thực thi. Trong giai đoạn này chúng ta sẽ thu thập thông tin quan trọng về mã độc và sử dụng những thông tin này phục vụ cho việc phân tích động ở giai đoạn sau.


Cần phân tích những gì?

Khi thực hiện phân tích tĩnh, ta cần làm rõ được một số thông tin:

  • Đây là loại file gì?
  • Mã độc này đã được phát hiện bởi cộng đồng trước đó hay chưa?
  • Những chuỗi kí tự được nhúng trong mã độc này nói lên điều gì?
  • PE Header có gì đặc biệt hay không?
  • Mã độc này có được pack không? Nếu có thì sử dụng packer gì?

Tài nguyên

Các bạn có thể tải file mã độc mẫu ở đây. Mật khẩu giải nén là “infected“. Lưu ý, đây là mã độc thật, do đó các bạn cần thực hiện phân tích trên máy ảo để card mạng chế độ Host-Only và không share bất kỳ thư mục vào với máy chính.

Các bước phân tích mã độc bằng phân tích tĩnh

Xác định loại file thực thi

Đôi khi attacker sẽ thay đổi định dạng của file mã độc sang một đuôi khác để đánh lừa người dùng. Do đó để xác định chính xác mã độc đó là loại file thực thi nào, ta có thể sử dụng một số dấu hiệu như:

  • Windows Executables: có “MZ” ở byte 0-1.
  • PDF: có chứa chuỗi “%PDF-“ theo sau là một con số, số này là phiên bản của PDF, dùng con số này để xác định phần mềm đọc file PDF có version tối thiểu là bao nhiêu thì mới có thể đọc được file PDF này. Chuỗi “%PDF-“ này nằm trong vị trí bất kì trong 1024 bytes đầu tiên của file.
  • Old Office Doc: 0xD0CF11E0 (doc file)
  • Zip Archive: có “PK” ở byte 0-1.

Ta có thể sử dụng một số công cụ sau:

file

Công cụ này các bạn có thể tìm thấy ở đây. Nó xác định bằng cách so sánh header của file với một số signature biết trước.

Kỹ thuật phân tích tĩnh trong phân tích mã độc 1
Ví dụ file openme.doc.exe là file thực thi Windows

exeinfo PE

Công cụ exeinfo này có chức năng chính là phân tích PE header, xác định packer, đưa ra gợi ý cách unpack.

phân tích mã độc
Giao diện phần mềm exeinfo

TrID

TrID cũng tương tự, nó sử dụng database chứa các pattern rồi so sánh để xác định kiểu file.

Kỹ thuật phân tích tĩnh trong phân tích mã độc 4
Ta xác định được đây là Win32 executable

Tính toán mã băm

Việc tính toán mã băm sẽ giúp chúng ta xác định được mã độc này đã từng được cộng đồng phát hiện hay phân tích trước đó hay chưa. Nếu có thì sẽ tiết kiệm cho chúng ta rất nhiều thời gian. Ta sẽ sử dụng một số công cụ để tính mã băm MD5, SHA-256, … và tra cứu trên VirusTotal:

Kỹ thuật phân tích tĩnh trong phân tích mã độc 6
Kết quả tra cứu từ VirusTotal

Nếu tìm thấy, chứng tỏ đây là một file mã độc không mới và ta có thể khai thác nhiều thông tin hơn từ internet.

Phân tích chuỗi

Bước tiếp theo chúng ta sẽ tiến hành tìm kiếm những chuỗi được nhúng vào cũng như tìm những chuỗi ẩn (hidden string). Một số công cụ có thể giúp ích như:

  • strings: công cụ strings có thể phân tích ASCII và Unicode đồng thời. Option -n giúp ta chỉ định độ dài chuỗi tối thiểu cần phân tích (mặc định là 3) và -o sẽ xuất ra decimal offset của chuỗi đó.
  • BinText: tương tự strings nhưng với độ dài chuỗi tối thiểu cần phân tích mặc định là 5.

Ta sử dụng công cụ strings để phân tích các chuỗi:

strings -o budget-report.exe > string.txt

Sau khi chạy lệnh trên, file string.txt được tạo, ta mở file ra và lần lượt phân tích. Ở các dòng 253 đến 260, mình thấy một số chuỗi đáng ngờ như hình bên dưới. (Chú ý: Số thứ tự dòng của mình có thể khác so với các bạn nên các bạn tự tìm theo kết quả phân tích của bản thân nhé).

Kỹ thuật phân tích tĩnh trong phân tích mã độc 8
RunOnce

Khi ghép lại ta được các từ như RunRunOnce và chúng liên quan đến Registry. Mã độc thường sử dụng các registry này để đảm bảo chúng được chạy khi reboot lại máy.

Tương tự ở dòng 999, ta có thể thấy được domain update.microsoft.com.

Kỹ thuật phân tích tĩnh trong phân tích mã độc 10
Phân tích tại dòng 999

Tại dòng 1023 ta thấy Start Menu\Programs\Startup:

Kỹ thuật phân tích tĩnh trong phân tích mã độc 12
Phân tích tại dòng 1023

Tiếp theo ta bắt gặp một chuỗi dài không có nghĩa, khả năng cao đây là một chuỗi nào đó đã được mã hóa hoặc encode:

Kỹ thuật phân tích tĩnh trong phân tích mã độc 14
Phân tích tại dòng 2573

Ta còn thấy một số file name trong Windows, những thông tin này có thể sẽ có ích khi phân tích hành vi của mã độc.

Kỹ thuật phân tích tĩnh trong phân tích mã độc 16
Phân tích tại dòng 2583

Chuỗi tại dòng 2633 là một chuỗi bảng chữ cái từ viết hoa, viết thường, các chữ số, dấu cộng và dấu (/). Rất có thể mã độc đang thực hiện hành vi liên quan đến mã base64.

Kỹ thuật phân tích tĩnh trong phân tích mã độc 18
Phân tích ở dòng 2633

Tiếp theo ta thấy một số chuỗi liên quan đến Skype và trình duyệt.

Kỹ thuật phân tích tĩnh trong phân tích mã độc 20
Phân tích ở dòng 2673

Ở đòng 2733 ta thấy “ws2_32.dll” và một số API. Ws2_32.dll là một tập tin DLL phát triển bởi Microsoft, là hệ thống tập tin thiết yếu của hệ điều hành Windows. Chúng thường chứa một tập hợp thủ tục và các chức năng điều khiển. Tập tin này liên quan đến kết nối mạng, socket, gửi nhận qua mạng. Ta có thể đoán được mã độc này muốn giao tiếp gì đó qua mạng.

Kỹ thuật phân tích tĩnh trong phân tích mã độc 22
ws2_32.dll ở dòng 2377

Tiếp theo…

Kỹ thuật phân tích tĩnh trong phân tích mã độc 24
Phân tích tại dòng 2782

Tương tự các bạn tự khám phá những nội dung còn lại.

Để việc phân tích dễ dàng hơn và ta không cần phải chắp nối kết quả bằng tay như bên trên, mình sẽ sử dụng BinText. Mở BinText và import file mã độc vào. Ở cột bên trái mình khoanh bên dưới đó là kiểu string.

Kỹ thuật phân tích tĩnh trong phân tích mã độc 26
Kết quả phân tích BinText

Xác định packer và kỹ thuật ẩn giấu chuỗi

Hacker sẽ sử dụng packer để nén chuỗi hoặc mã hóa chuỗi để đánh lừa việc phân tích. Khi ta nhìn vào một chuỗi đã được packed, chúng ta sẽ không thể hiểu được nội dung là gì.

Kỹ thuật phân tích tĩnh trong phân tích mã độc 28
Ví dụ về unpacked và packed string

Hacker có thể ẩn giấu chuỗi bằng một số phương pháp như:

  • Random strings: packer thêm vào những chuỗi ngẫu nhiên hoặc có ý nghĩa không liên quan để đánh lừa.
  • Encrypted strings: chuỗi có thể được mã hóa hoặc encoded.

Kỹ thuật base64 encoding là một kỹ thuật phổ biến, nó chuyển mỗi 3 bytes thành 4 ký tự ASCII. Base64 chỉ chứa những ký tự trong bảng chữ cái, chữ số, dấu cộng (+) và dấu (/). Nếu ta bắt gặp chuỗi nào đó có những ký tự trên thì hãy thử decode base64 xem có thu thập được thông tin gì hay không. Chuỗi base64 được thêm vào dấu bằng (=) để tổng số bytes trong chuỗi là một số chia hết cho 4.

Ta có thể decode base64 bằng Powershell:

doskey atob=powershell
"[Text.Encoding]::UTF8.GetString([convert]::fromBase64String(\"$*\))"

Ngoài ra còn có thể thực hiện bằng phép XOR. Là một phép toán trên bit, kết quả sẽ là 1 nếu hai bit tương ứng có giá trị khác nhau.

Kỹ thuật phân tích tĩnh trong phân tích mã độc 30
Bảng sự thật về phép XOR

Chúng ta sử dụng công cụ xorsearch để tìm các chuỗi được XOR:

Kỹ thuật phân tích tĩnh trong phân tích mã độc 32
Ví dụ về sử dụng xorsearch

Tương tự,

Kỹ thuật phân tích tĩnh trong phân tích mã độc 34
Sử dụng công cụ xorsearch

Tương tự các bạn tự tìm thêm.

Phân tích PE header

PE header là gì?

PE header chứa rất nhiều thông tin quan trọng trong việc phân tích mã độc, PE header sẽ giúp ta biết được mã độc tương tác với hệ điều hành như thế nào. Trong này còn có một số trường giúp chúng ta xác định được timestamp và location, tức là ta sẽ biết được mã độc được tạo ở đâu và khi nào.

  • Containers: Chứa tất cả thông tin mà Windows cần để thực thi chương trình, nó xác định cần phải load DLL nào, vị trí nào là executable code, vị trí nào là data, chương trình này có hỗ trợ GUI hay không? Nếu không có PE header, chương trình sẽ không thể chạy.
  • Director: chỉ cho hệ điều hành biết những phần của code được đặt ở đâu trong bộ nhớ RAM.
Kỹ thuật phân tích tĩnh trong phân tích mã độc 36
Xác định timestamp với PE header

Ở hình trên, ta dễ dàng xác định được file này được tạo từ năm 2007. Tuy nhiên, thông tin này chưa hẳn là chính xác bởi vì hacker có thể thay đổi giá trị này dễ dàng để đánh lừa chúng ta.

Kỹ thuật phân tích tĩnh trong phân tích mã độc 38
Chương trình hỗ trợ GUI

Hình trên thể hiện chương trình này có hỗ trợ Windows GUI.

PE sections

PE sections dùng để xác định từng phần của file PE. Một số loại section như hình bên dưới:

Kỹ thuật phân tích tĩnh trong phân tích mã độc 40
Các loại section trong file PE

Import Address Table

Import Address Table (IAT) chứa danh sách những DLL và API được load bởi chương trình khi thực thi.

Kỹ thuật phân tích tĩnh trong phân tích mã độc 42
Ví dụ về Import Address Table

Ở hình trên, ở bên trái là IAT, chứa DLL (Kernel32.dll) và API (VirtualAllocReadFileWriteFile) mà chương trình sử dụng. Khi DLL được load, nó sẽ nằm tại một vị trí nào đó trong bộ nhớ RAM mà chương trình không thể biết trước. Ở hình bên phải, khi Kernel32.dll được load vào trong bộ nhớ, mỗi function sẽ nằm tại một địa chỉ xác định, và loader sẽ thay thế tên của API thành địa chỉ của nó.

Kỹ thuật phân tích tĩnh trong phân tích mã độc 44
Loader thay thế tên API bằng địa chỉ của nó

Ngoài ra, không nhất thiết phải thay thế tên function bằng địa chỉ của nó mà có thể thay thế bằng Ordinals. Thực chất nó chỉ là một số hiệu định danh function ở trong DLL.

Kỹ thuật phân tích tĩnh trong phân tích mã độc 46
Sử dụng ordinal

Một số API phổ biến:

  • Memory Operations: VirtualAlloc, VirtualProtect, VirtualFree
  • File Operations: CreateFile, ReadFile, WriteFile, DeleteFile
  • Registry Operations: RegCreateKey, RegDeleteKey, RegGetValue, RegSetValueEx, RegSetKeyValue
  • Network Operations: connect, accept, send, recv, listen, InternetConnect, InternetReadFile, InternetWriteFile, gethostbyaddr, gethostbyname
  • Misc: LoadLibrary, GetProcAddress, IsDebuggerPresent, WriteProcessMemory, CreateThreatProcess

Resources

Resource là raw data, là bất kì thành phần nào cần thiết để chương trình khởi chạy. Ví dụ như icons, hình ảnh, font chữ, menu, … Mã độc có thể lữu trữ những đoạn code ẩn hoặc cấu hình ẩn, hoặc những document giả mạo. Hình sau là một ví dụ về những resource trong một file PE, được phân tích bởi công cụ PE Studio. Ta tìm được một số loại resource khác nhau như MUI, Bitmap, Icon.

Kỹ thuật phân tích tĩnh trong phân tích mã độc 48
Resource trong PE file

Ta có thể phát hiện một số resource đáng ngờ như hình bên dưới. PE Studio không xác định được signature của những resource này.

Kỹ thuật phân tích tĩnh trong phân tích mã độc 50
Resource đáng ngờ

Một số công cụ ta có thể sử dụng để phân tích PE header như CFF Explorer và PE Studio.

Đầu tiên chúng ta cài đặt PE Studio, mở file mã độc phía trên lên.

Kỹ thuật phân tích tĩnh trong phân tích mã độc 52
file-header

Khi phân tích phần file-header, mục stamp, ta thấy giá trị ngày giờ ở đây là vào tháng 10 năm 1998. Tuy nhiên giá trị này không phải lúc nào cũng chính xác bởi vì hacker có thể thay đổi.

Tiếp tục xem phần optional-header, vào subsystem, ta thấy có giá trị GUI – tức là mã độc này có khả năng tương tác với người dùng thông qua giao diện trực quan.

Kỹ thuật phân tích tĩnh trong phân tích mã độc 54
optional-header, subsystem

Tại mục sections, ta thấy có nhiều section như .text.data.rdata.eh_fram.bss.idata, …

Kỹ thuật phân tích tĩnh trong phân tích mã độc 56
Các section tìm thấy trong file PE

Tiếp theo ở mục libraries, ta thấy có một số thư viện được PE Studio đưa vào blacklist, tức đây là những thư viện mà malware thường sử dụng. Ở đây có wininet.dll và ws2_32.dll là những thư viện liên quan đến network. Ta có thể đoán được malware có khả năng giao tiếp qua mạng.

Kỹ thuật phân tích tĩnh trong phân tích mã độc 58
Những libraries được load vào

Tiếp theo ở mục libraries ta thấy rất nhiều function liên quan đến registry. Một số hàm như RegCreateKeyExARegDeleteValueARegSetValueExA, … chứng tỏ malware có khả năng tương tác với registry.

Kỹ thuật phân tích tĩnh trong phân tích mã độc 60
imports

Ngoài ra ta còn tìm thấy hàm CopyFile và CreatDirectoryGetProcAddressLoadLibraryALoadLibraryWWriteFileShellExecuteA, …

Về resource, malware sử dụng rất nhiều resource có signature là Adobe Reader. Language là English United States, chứng tỏ malware được compile trên một máy tính có ngôn ngữ là tiếng anh (hoặc có thể là hacker chỉnh sửa).

Kỹ thuật phân tích tĩnh trong phân tích mã độc 62
resources

Ở mục indicators, công cụ PE Studio có thể đánh giá được hành vi của malware, như xác định malware này có thể thay đổi registry, thao tác với clipboard, fingerprint trình duyệt, … Giá trị severity càng thấp thì mức độ nguy hiểm càng cao.

Kỹ thuật phân tích tĩnh trong phân tích mã độc 64
indicators

Tại strings, ta tìm thấy rất nhiều string được đánh dấu blacklisted.

Với công cụ CFF Explorer, thông tin phân tích được sẽ không được convert và đa số ở dạng raw information.

Kỹ thuật phân tích tĩnh trong phân tích mã độc 66
File header phân tích bởi CFF Explorer

Kết luận

Sau khi phân tích ví dụ, ta có thể kết luận được một số đặc điểm:

  • Được compile vào năm 1988
  • Không bị packed:
    • Normal looking sections
    • IAT normal size
  • Chức năng:
    • Thay đổi registry
    • Ghi file hệ thống
    • Giao tiếp thông qua kết nối mạng
    • Thực thi chương trình
  • Từ một máy tính “US”
  • Nguồn: https://sinhviencntt.net/phan-tich-tinh-phan-tich-ma-doc-1485

Post a Comment

Previous Post Next Post
Đọc tiếp: