Thứ Sáu, 2 tháng 8, 2013

Các kĩ thuật phân tích tĩnh malware

Việc học các kĩ thuật phân tích tĩnh là cần thiết khi mới chập chững bước vào nghề này. Phân tích tĩnh mô tả quá trình phân tích code hoặc là cấu trúc của một chương trình để xác định chức năng của nó. Chương trình bản thân nó không run khi ta phân tích tĩnh. Chúng ta run chương trình khi thực hiện các kĩ thuật phân tích động.

Bài viết này đề cập nhiều cách để lấy được những thông tin hữu ích từ excutables. Cụ thể chúng ta thảo luận về các kĩ thuật sau:

  • Sử dụng antivirus tools để xác minh tính độc hại
  • Sử dụng hashes để nhận dạng malware
  • Thu thập thông tin từ file's strings, functions, và headers
Mỗi kĩ thuật có thể cung cấp những thông tin khác nhau, và việc sử dụng những công cụ nào còn tùy thuộc vào những thông tin bạn muốn có được. Thông thường, chúng ta sẽ sử dụng một vài kĩ thuật để thu thập thông tin nhiều nhất có thể. 

Antivirus Scanning: Bước khởi đầu

Khi bạn nghi vấn một file nào đó là malware, bạn bắt đầu phân tích malware đó, đầu tiên bạn nên run nó qua nhiều antivirus programs, vì biết đâu đó một trong những av này đã nhận dạng được malware đó rồi. Nhưng antivirus tools thì không được hoàn hảo cho lắm. Chúng chủ yếu dựa trên một cơ sở dữ liệu chứa những chữ kí (signatures) được tạo ra cho malware mà đã được nhận dạng, một số AV có thể sử dụng cách nhận dạng theo hướng hành vi. Một vấn đề phát sinh đó là malware writers có thể dễ dàng chỉnh sửa code của họ, do đó làm thay đổi đi chữ kí của chương trình và qua mặt virus scanners. Còn nữa, những malware hiếm gặp không bị nhận dạng bởi antivirus software bởi vì đơn giản là nó không có trong cơ sở dữ liệu. Cuối cùng, heuristics, mặc dù có thể nhận dạng được những mã độc chưa được biết đến, vẫn có thể bị qua mặt bởi các loại malware mới hiện nay. 

Bởi vì rất nhiều loại virus hiện nay sử dụng các chữ kí và heuristics khác nhau, chúng ta có thể run một vài antivirus programs để quét qua cùng một mẫu virus. Websites như VirusTotal (virustotal.com) cho phép bạn uppload một file để quét dưới nhiều antivirus engines. VirusTotal sinh ra một bản báo cáo cho ta biết rằng có bao nhiêu AV nhận dạng file như là mã độc, tên malware, và có thể là thông tin về malware đó. 

Hashing: một dấu vân tay cho malware 

Hashing là một phương pháp được dùng để nhận dạng malware một cách duy nhất. Malicious software được run thông qua một chương trình hashing, chương trình này sinh ra một hash duy nhất dùng để nhận dạng malware (một kiểu của dấu vân tay). Message-Digest Algorithm 5 (MD5) hash function là được một cách được sử dụng cho malware analysis, mặc dù Secure Hash Algorithm 1 (SHA-1) cũng rất phổ biến. 

Cho ví dụ, việc sử dụng một chương trình có sẵn như md5deep để tính toán hash của Solitaire program (trên Windows) có thể sinh ra output như sau:


C:\>md5deep c:\WINDOWS\system32\sol.exe
373e7a863a1a345c60edb9e20ec3231 c:\WINDOWS\system32\sol.exe

Hash là 373e7a863a1a345c60edb9e20ec3231.

Có một phiên bản hỗ trợ GUI đó là WinMD5

Vậy ta khi ta có được hash của một file ta thực hiện các bước sau:
  • Sử dụng hash như là một nhãn (lable).
  • Chia sẻ hash với các nhà phân tích khác để giúp họ nhận dạng malware.
  • Tìm kiếm giá trị hash đó trên mạng nếu file đã được nhận dạng.

Finding Strings

Một string trong một chương trình là một chuỗi các kí tự ví dụ như "the.". Một chương trình chứa strings nếu nó in ra một message, kết nối đến một URL, hoặc sao chép một file đến một vị trí xác định nào đó. 

Searching qua strings có thể là một cách đơn giản để có được những gợi ý về chức năng của một chương trình. Cho ví dụ, nếu một chương trình truy nhập vào một URL, khi đó bạn sẽ nhìn thấy URL được truy nhập như là một string trong chương trình. Bạn có thể sử dụng Strings program (http://bit.ly/ic4plL) để search các strings xuất hiện trong một executable, các strings có thể được lưu trong dạng ASCII hoặc Unicode. 

Cả ASCII và Unicode formats lưu các kí tự trong một chuỗi kết thúc bằng kí tự NULL để ám chỉ rằng string kết thúc. ASCII sử dụng 1 byte cho 1 kí tự, và Unicode sử dụng 2 bytes cho 1 kí tự.

Figure 2-2 shows string BAD được lưu như ASCII. ASCII string được lưu như các bytes 0x42, 0x41, 0x44, và 0x00, trong đó 0x42 là biểu diễn ASCII của chữ in hoa B, 0x41 biểu diễn cho A, và tương tự. 0x00 ở cuối cùng là NULL terminator.


Figure 2-3 shows string BAD được lưu như Unicode
Khi Strings searches một excutable để tìm ASCII và Unicode strings, nó lờ đi context và formatting vì vậy nó có thể phân tích bất cứ kiểu file nào và phát hiện strings trong toàn bộ file. 

Không có nhận xét nào:

Đăng nhận xét