Phân tích tĩnh là kỹ thuật phân tích tập tin nghi ngờ mà không cần thực thi nó. Đây là phương pháp phân tích ban đầu bao gồm việc trích xuất thông tin hữu ích từ mã nhị phân nghi ngờ để đưa ra quyết định có cơ sở về cách phân loại hoặc phân tích nó và tập trung nỗ lực phân tích tiếp theo vào đâu.
1. Xác định loại tệp tin
Trong quá trình phân tích, xác định định dạng tập tin của mã nhị phân nghi ngờ sẽ giúp bạn xác định hệ điều hành mục tiêu của mã độc (Windows, Linux, v.v.) và kiến trúc (32 bit hay 64 bit). Ví dụ, nếu tập tin nhị phân nghi ngờ có định dạng là Portable Executable (PE), đó là định dạng tập tin thực thi của Windows (.exe, .dll, .sys, .drv, .com, .ocx, v.v.), thì bạn có thể suy luận rằng tập tin được thiết kế để nhắm vào hệ điều hành Windows.
Hầu hết mã độc dựa trên Windows là các tập tin thực thi có phần mở rộng (extension) như .exe, .dll, .sys, v.v. Nhưng chỉ dựa vào phần mở rộng tập tin thì không được khuyến nghị. Phần mở rộng không phải là dấu hiệu duy nhất cho biết định dạng tập tin. Tin tặc sử dụng các thủ thuật khác nhau để che giấu tập tin bằng cách sửa đổi phần mở rộng và thay đổi bề ngoài của nó để lừa người dùng thực thi nó. Thay vì chỉ dựa vào phần mở rộng, chữ ký tập tin có thể được sử dụng để xác định định dạng tập tin.
Chữ ký tập tin (file signature) là một chuỗi byte độc nhất được ghi vào header của tập tin. Các tập tin khác nhau có chữ ký khác nhau, có thể được sử dụng để xác định loại tập tin. Các tập tin thực thi của Windows, còn gọi là các tập tin PE (như các tập tin có đuôi .exe, .dll, .com, .drv, .sys, v.v.) có chữ ký tập tin là MZ hoặc các ký tự hex 4D 5A trong 2 byte đầu tiên của tập tin.
1.1 Xác định loại tập tin bằng phương pháp thủ công
Phương pháp thủ công để xác định loại tập tin là tìm kiếm chữ ký tập tin bằng cách mở nó trong trình soạn thảo hex. Trình soạn thảo hex là công cụ cho phép người kiểm tra xem xét từng byte của tập tin; hầu hết các trình soạn thảo hex cung cấp nhiều chức năng giúp phân tích tập tin. Hình chụp màn hình dưới đây cho thấy chữ ký tập tin MZ trong 2 byte đầu tiên khi một tập tin thực thi được mở với hex editor HxD.

Còn ở linux, không cần tải bất kỳ công cụ nào, chỉ cần dùng lệnh:
xxd -g l <tên file cần kiểm tra> | more
VD: $ xxd -g 1 log.exe | more
1.2 Xác định loại tập tin bằng Tools
Phương pháp thuận tiện khác để xác định loại tập tin là sử dụng công cụ nhận dạng tập tin. Trên hệ thống Linux, việc này có thể đạt được bằng cách sử dụng tiện ích file. Trong ví dụ sau, lệnh file được chạy trên hai tập tin khác nhau. Từ kết quả, có thể thấy rằng mặc dù tập tin thứ nhất không có phần mở rộng nào, nó vẫn được phát hiện là tập tin thực thi 32 bit (PE32) và tập tin thứ hai là tập tin thực thi 64 bit (PE32+):
$ file mini
mini: PE32 executable (GUI) Intel 80386, for MS Windows
$ file notepad.exe
notepad.exe: PE32+ executable (GUI) x86-64, for MS Windows
Trên Windows, CFF Explorer, một phần của Explorer Suite, có thể được sử dụng để xác định loại tập tin; nó không chỉ giới hạn ở việc xác định loại tập tin. Đây cũng là công cụ tuyệt vời để kiểm tra các tập tin thực thi (cả 32 bit và 64 bit) và cho phép bạn khám phá cấu trúc PE bên trong, sửa đổi trường, và trích xuất tài nguyên.
1.2 Xác định loại tập tin bằng Python
Trong Python, module python-magic có thể được sử dụng để xác định loại tập tin. Trên Windows, để cài đặt python-magic module, bạn có thể làm theo thủ tục được đề cập tại https://github.com/ahupp/python-magic. Sau khi cài đặt python-magic, các lệnh sau có thể được sử dụng trong script để xác định loại tập tin:
import magic m = magic.open(magic.MAGIC_NONE) m.load() ftype = m.file(r'log.exe') print ftype |
| Kết quả: PE32 executable (GUI) Intel 80386, for MS Windows |
Để minh họa việc sử dụng phát hiện loại tập tin, hãy lấy ví dụ về một tập tin được làm cho trông giống như một tài liệu Word bằng cách đổi phần mở rộng từ .exe sang .doc.exe. Trong trường hợp này, tin tặc lợi dụng thực tế là theo mặc định, tùy chọn “Ẩn phần mở rộng cho các loại tập tin đã biết” được bật trong “Tùy chọn xem thư mục Windows”; tùy chọn này ngăn không cho phần mở rộng được hiển thị cho người dùng. Hình chụp màn hình dưới đây cho thấy hình dạng của tập tin với tùy chọn “Ẩn phần mở rộng cho các loại tập tin đã biết” được bật:


Kết quả chạy thử nghiệm qua CFF Explorer
2. Xác định mã độc qua dấu vết nhận dạng (Fingerprinting the Malware)
Dấu vết đặc trưng (Fingerprinting) bao gồm tạo ra các giá trị băm mã độc dựa trên nội dung của tệp tin nghi ngờ. Các thuật toán băm mật mã như MD5, SHA1 hoặc SHA256 được coi là tiêu chuẩn về việc tạo ra vân tay (đặc điểm nhận dạng) cho các mẫu mã độc. Danh sách dưới đây liệt kê việc sử dụng các giá trị băm mật mã:
- Xác định một mẫu mã độc dựa trên tên tệp tin là không hiệu quả vì cùng một mẫu mã độc có thể sử dụng các tên tệp tin khác nhau. Tuy nhiên, giá trị băm mật mã được tính toán dựa trên nội dung tệp tin sẽ không thay đổi. Do đó, một giá trị băm mật mã cho tệp tin nghi ngờ của bạn sẽ được coi là một định danh duy nhất trong quá trình phân tích.
- Trong quá trình phân tích tĩnh, khi mã độc được thực thi, nó có thể sao chép chính nó vào một vị trí khác hoặc thả ra một mẫu mã độc khác. Có giá trị băm mật mã của mẫu mã có thể giúp xác định xem mẫu mã mới thả ra / sao chép có giống với mẫu mã ban đầu hay không. Thông tin này có thể giúp bạn quyết định xem phân tích cần thực hiện trên một mẫu mã đơn lẻ hay nhiều mẫu mã.
- Giá trị băm tệp tin thường được sử dụng như một chỉ số để chia sẻ với các nhà nghiên cứu bảo mật khác để giúp họ nhận dạng mẫu mã.
- Giá trị băm tệp tin có thể được sử dụng để xác định xem mẫu mã đã được phát hiện trước đó bằng cách tìm kiếm trực tuyến hoặc tìm kiếm trong cơ sở dữ liệu của các dịch vụ quét đa Antivirus như VirusTotal.
2.1 Tạo mật mã hash bằng Tool
Trên hệ thống Linux, các giá trị băm tập tin có thể được tạo bằng các tiện ích md5sum, sha256sum và sha1sum:
$ md5sum log.exe |
Đối với Windows, có thể tìm thấy trực tuyến nhiều công cụ khác nhau để tạo giá trị băm tập tin. HashMyFiles là một công cụ như vậy, nó tạo ra các giá trị băm cho các tập tin đơn lẻ hoặc nhiều tập tin, và nó cũng làm nổi bật các băm giống nhau với các màu giống nhau. Ví dụ:

<REF Hash>
2.2 Xác định mật mã Hash bằng Python
| $ python >>> import hashlib >>> content = open(r”log.exe”,”rb”).read() >>> print hashlib.md5(content).hexdigest() 6e4e030fbd2ee786e1b6b758d5897316 >>> print hashlib.sha256(content).hexdigest() 01636faaae739655bf88b39d21834b7dac923386d2b52efb4142cb278061f97f >>> print hashlib.sha1(content).hexdigest() 625644bacf83a889038e4a283d29204edc0e9b65 |
3. Quét đa chủng loại phần mềm diệt virus
Việc quét tập tin nhị phân đáng ngờ với nhiều trình quét phần mềm diệt virus khác nhau sẽ giúp xác định xem tập tin đó có chứa các chữ ký mã độc hay không. Tên chữ ký của một tập tin cụ thể có thể cung cấp thêm thông tin về tập tin đó và khả năng của nó. Bằng cách truy cập vào các trang web của nhà cung cấp phần mềm diệt virus tương ứng hoặc tìm kiếm chữ ký trên các công cụ tìm kiếm, bạn có thể tìm hiểu thêm chi tiết về tập tin đáng ngờ. Những thông tin đó có thể giúp ích cho việc điều tra tiếp theo của bạn và có thể giảm thời gian phân tích.
3.1 Quét tập tin đáng ngờ bằng VirusTotal
VirusTotal là một dịch vụ quét mã độc trực tuyến phổ biến. Nó cho phép bạn tải lên một tập tin, sau đó tập tin sẽ được quét bởi nhiều trình quét phần mềm diệt virus khác nhau, và kết quả quét sẽ được hiển thị trực tuyến trên trang web. Ngoài tải lên tập tin để quét, giao diện web của VirusTotal còn cho phép bạn tìm kiếm cơ sở dữ liệu của họ bằng băm, URL, tên miền hoặc địa chỉ IP. VirusTotal cũng cung cấp một tính năng hữu ích khác được gọi là VirusTotal Graph, được xây dựng dựa trên tập dữ liệu VirusTotal. Sử dụng VirusTotal Graph, bạn có thể hiển thị mối quan hệ giữa tập tin mà bạn gửi và các chỉ số liên quan của nó như tên miền, địa chỉ IP và URL. Nó cũng cho phép bạn xoay và điều hướng qua từng chỉ số; tính năng này cực kỳ hữu ích nếu bạn muốn nhanh chóng xác định các chỉ số liên quan đến một mã độc nhị phân. Để biết thêm thông tin về VirusTotal Graph, hãy tham khảo tài liệu này.
3.2 Truy vấn giá trị hash bằng Public API của VirusTotal
VirusTotal cũng cung cấp khả năng lập trình tự động thông qua Public API công khai của họ; nó cho phép bạn tự động hóa việc gửi tập tin, truy xuất báo cáo quét tập tin/URL và truy xuất báo cáo tên miền/IP. Đoạn mã Python sau đây minh họa việc sử dụng Public API của VirusTotal. Đoạn mã này nhận giá trị băm (MD5/SHA1/SHA256) làm đầu vào và truy vấn cơ sở dữ liệu VirusTotal. Để sử dụng đoạn mã sau, bạn cần sử dụng Phiên bản Python 2.7 trở lên; bạn phải kết nối internet và phải có khóa API công khai VirusTotal (có thể được lấy bằng cách đăng ký tài khoản VirusTotal). Một khi có khóa API, hãy cập nhật biến api_key với khóa API của bạn:

import urllib hash_value = sys.argv[1] for av_name, av_data in scan_results.items(): |
Ví dụ sau khi chạy:
$ md5sum 5340.exe $ python vrtotalscan.py 5340fcfb3d2fa263c280e9659d13ba93 |
Một lựa chọn thay thế khác là sử dụng các công cụ phân tích PE như pestudio (winitor.com) hoặc PPEE (mzrst.com). Khi tải file nhị phân, giá trị băm của file đó sẽ được tự động truy vấn từ cơ sở dữ liệu VirusTotal và kết quả sẽ được hiển thị, như trong ảnh chụp màn hình sau:

***Lưu ý:
Bạn nêu ra một số rủi ro và yếu tố cần cân nhắc rất hợp lý khi sử dụng các công cụ diệt virus để kiểm tra một file nhị phân hoặc khi gửi một file nhị phân lên các dịch vụ trực tuyến kiểm tra virus. Một số điểm chính:
– Việc một file nhị phân không bị phát hiện bởi các công cụ diệt virus không đảm bảo rằng file đó an toàn. Các công cụ diệt virus dựa trên chữ ký (signature) và các kỹ thuật heuristic để phát hiện mã độc, nhưng tin tặc có thể dễ dàng sửa đổi mã và che giấu để tránh bị phát hiện.
– Khi tải một file nhị phân lên một trang web công khai, file đó có thể được chia sẻ với bên thứ ba. File có thể chứa thông tin nhạy cảm của tổ chức bạn nên không nên tải lên các dịch vụ công khai. Thay vào đó, hãy tra cứu trên cơ sở dữ liệu hiện có dựa trên giá trị băm của file.
– Kết quả quét được lưu trữ trong cơ sở dữ liệu và phần lớn là công khai. Tin tặc có thể tra cứu để biết mẫu của họ có bị phát hiện không và thay đổi chiến thuật để tránh bị phát hiện.
Nói chung, cần cân nhắc kỹ lưỡng trước khi tải một file nhị phân lên các dịch vụ trực tuyến, và nên ưu tiên sử dụng các công cụ phân tích nội bộ để đánh giá file đó.
