Phân tích chuỗi nhúng - Strings Analysis
Strings là các chuỗi ký tự ASCII và Unicode được nhúng vào một file. Việc trích xuất strings có thể cho chúng ta nhiều manh mối, dấu hiệu về chức năng của các file nghi ngờ là mã độc.
Ví dụ, nếu phần mềm độc hại tạo ra một file, tên của file đó sẽ được lưu nhưng một chuỗi string dưới dạng nhị phân. Hoặc, nếu phần mềm độc hại phân giải một tên miền do kẻ tấn công kiểm soát, thì tên miền được lưu trữ dưới dạng một chuỗi string. Chuỗi được trích xuất từ binary có thể chứa các thông tin tham chiếu đến tên tệp, URL, tên miền, địa chỉ IP, lệnh tấn công, registry keys…Mặc dù strings không đưa ra một bức tranh rõ ràng về mục đích và khả năng của một file nghi ngờ do chứa rất nhiều strings nhiễu, vô nghĩa, hoặc bị mã hóa, nén, nhưng nó có thể đưa ra gợi ý về những gì file đó có khả năng làm.
Một chương trinh (program) chứa strings nếu nó chứa printable characters:
- In ra một message
- Kết nối đến một URL
- Sao chép một file đến một địa chỉ nào đó…
Khi phân tích strings chúng ta cần quan tâm đến các vấn đề sau:
- Vị trí của các file mới được tạo ra
- Tên của file: Các chuỗi trong tệp thực thi độc hại thường hiển thị tên file độc hại sẽ xuất hiện trên hệ thống nạn nhân, hoặc thậm chí tên của hacker tạo ra mã độc đó. Hơn nữa, nhiều mã độc có thể sẽ tải các file mới từ internet hoặc C2 server nào đó từ xa về máy nạn nhân. Những thông tin này cũng thể hiện trong strings.
- Tên miền của server (Có thể là C2 server) và URL: Một chương trình độc hại có thể yêu cầu hoặc tải các tệp bổ sung để cập nhật. Ngoài ra, chương trình có thể sử dụng các máy chủ từ xa làm trang web lưu trữ cho các công cụ hoặc dữ liệu nạn nhân bị đánh cắp. Do đó, phần mềm độc hại có thể chứa các chuỗi tham chiếu URL hoặc tên miền được sử dụng.
- Windows API functions: Thông thường, các chuỗi trong một chương trình sẽ tiết lộ các API function calls được thực hiện bởi chương trình. Chẳng hạn, nếu CreatProcess function được phát hiện trong một chuỗi string, thì có khả năng lớn là chương trình tạo ra một tiến trình mới làm luồng chính. Để giúp đánh giá tầm quan trọng và hiểu bản chất của các chuỗi như vậy, có thể dung một số nguồn có sẵn [1], [2]. trang web Tham khảo API của Windows và Microsoft Advanced Search engine là các tài liệu tham khảo vững chắc.
- Các địa chỉ IP
- Registry keys: Một số mã độc tham chiếu các giá trị registry keys hoặc các giá trị mới sẽ được thêm hoặc sửa đổi khi cài đặt trong registry. Thông thường, các hacker sẽ sử dụng các cơ chế bền bỉ (persistence mechanisms) thông qua registry autorun, khiến mã độc tự động thực thi mỗi khi hệ thống được khởi động lại.
- Các dòng lệnh: Kẻ tấn công cần tương tác với phần mềm độc hại mà kẻ đó đang phát tán, thường là để phát huy hiệu quả của phương thức lây lan. Chính vì vậy chúng ta có thể bắt gặp các dòng lệnh trong các chuỗi strings.
- Email address: Thường đây là email của kẻ tấn công. Thường gặp trong khi phân tích keylogger (email để nhận thông tin gửi về) hoặc ransomware (email để liên lạc gửi tiền chuộc).
- IRC Channels: thường gặp trong các cuộc tấn công botnet
- Script, ngôn ngữ sử dụng…
- Một số thông tin điển hình có thể nhận diện như: Tổ chức chính trị, Tên các hội nhóm, một số câu là phát ngôn của các nhóm hackers…
- Thông báo lỗi…
- Các chức năng trái với tên gọi của file
1. Công cụ hỗ trợ trích xuất strings
Strings
Bintext
Puppy
Flare - FLOSS
//LƯU Ý: Khi phân tích strings, nếu như file bị nén hoặc mã hóa thì việc phân tích sẽ khó khăn hơn do kết quả thường không thể hiện gì nhiều và đa phần là vô nghĩa. Vì vậy cần kiểm tra obfuscation (packer) trước thì hơn. Ngoài ra nên sử dụng ngay từ đầu FLOSS để có thể xóa bỏ obfuscation luôn nếu cần.
Ngoài ra có mẹo nhỏ là nếu số strings phân tích ra quá ít thì khả năng binary đang phân tích đã bị nén.
2. Xếp hạng strings nghi ngờ bằng StringSifter [3, 4]
Công cụ này được phát triển bởi FireEye Labs. Nó giúp đưa ra danh sách theo thứ tự nghi vấn từ cao xuống thấp các strings hay gặp trong các mã độc dựa trên các dự đoán sử dụng machine learning.
Ví dụ [3]:

Đặc biệt tool này có thể dùng kèm với FLOSS để xóa obfuscation sau đó mới đưa ra danh sách nghi ngờ.
Công cụ này chạy trên môi trường Linux và Windows. Ta có thể sử dụng máy ảo REMNux.
Cấu trúc:
flarestrings
Hoặc: flarestrings –n 8
(8 là chiều dài ký tự của strings).
Ở đây, flarestrings có tác dụng như strings của Sysinternal.
Một số tham số đi kèm rank_strings:
--scores (-s) Include the rank scores in the output
--limit (-l) Limit output to the top limit ranked strings
--min-score (-m) Limit output to strings with score >= min-score
--batch (-b) Specify a folder of strings outputs for batch processing
File xuất bản ra là file có dạng
Ngoài ra, khi sử dụng với FLOSS ta có cấu trúc sau:
$PY2_VENV/bin/floss –q
-q để chỉ hiện ra các strings được giải nén và bỏ qua các headers…
Lưu ý: FLOSS yêu cầu python2, StringSifter yêu cầu python3. Nên trong câu lệnh ít nhất phải có một tool (floss hoặc rank_strings) cần đi kèm đường dẫn trỏ đến python virtual environment. Tuy nhiên nếu download FLOSS standalone version tại https://github.com/fireeye/flare-floss/releases thì không cần chỉ ra python environment.
Các bước thực hiện trên windows như sau:
>> Floss sample | rank_strings.py > tenfile.txt
Nên kéo thả từng cái vào cmd để dễ làm!!!
//Trên windows nên cài đặt bằng pip install để cài đủ các thư viện tránh bị lỗi.
Đồng thời sử dụng kèm với PPEE để nghiên cứu suspicious strings.
Người đọc có thể tham khảo thêm chuỗi các video về phân tích strings trong [5].
References
- http://msdn2.microsoft.com/en-us/library/aa383749.aspx
- http://search.microsoft.com/AdvancedSearch.aspx?mkt=en-US&qsc0=0&FORM=BAFF
- https://www.fireeye.com/blog/threat-research/2019/05/learning-to-rank-strings-output-for-speedier-malware-analysis.html
- https://github.com/fireeye/stringsifter
- https://www.youtube.com/watch?v=-GckcNTu-x0&t=73s
What's Your Reaction?