Hiện nay, mã độc sử dụng kỹ thuật đóng gói (code packing), bao gồm nén hoặc mã hóa, để che giấu tránh khỏi sự phát hiện của các phần mềm diệt virus (anti-virus) đặt ra một thách thức không nhỏ cho quá trình phân tích mã độc nhằm xác định đặc tính và chức năng của chúng. Phân tích entropy kiểm tra sự đa dạng về mặt thống kê trong tệp tin nhiễm mã độc, cho phép người phân tích nhanh chóng và hiệu quả xác định các mẫu mã độc đã nén hoặc mã hóa.
1. Kỹ thuật đóng gói để che giấu mã độc
Ban đầu kỹ thuật đóng gói được phát triển nhằm tối ưu hóa bộ nhớ và băng thông trong suốt quá trình lưu trữ và truyền tệp tin. Hiện nay, vấn đề lưu trữ và băng thông đã được giải quyết, nhưng nhiều công ty phần mềm vẫn sử dụng kỹ thuật này để đóng gói các tệp thực thi chương trình và các tệp thành phần để triển khai các phần mềm thương mại. Thuật toán sử dụng trong kỹ thuật đóng gói trở thành công cụ được kẻ viết mã độc hại cải tiến để tăng hiệu quả nhằm lẩn tránh sự phát hiện. Kỹ thuật đóng gói (bao gồm kỹ thuật nén và mã hóa) với mục đích che giấu mã độc được kẻ viết mã độc thường sử dụng để chuyển đổi mã thực thi nhị phân sang một định dạng khác nhằm thu gọn mã độc và biến dạng khác biệt hẳn so với ban đầu để tránh sự phát hiện của các chương trình diệt virus dựa trên cơ sở mẫu nhận dạng. Trong nhiều trường hợp, kẻ viết mã độc hại tổ hợp đệ quy các kỹ thuật nén và mã hóa khác nhau để cùng một mã độc nhưng có thể nhanh chóng tạo ra một lượng lớn biến thể nhị phân thực thi của mã độc nhằm phát tán [1].
Đoạn mã thực thi đóng gói được xây dựng với hai phần chính trong quy trình đóng gói bao gồm hai giai đoạn. Trong giai đoạn đầu tiên của quá trình đóng gói, đoạn mã thực thi gốc được nén và lưu giữ trong tệp thực thi nén như dữ liệu thông thường. Sau đó, modul giải nén được thêm vào tệp thực thi nén. Modul giải nén này sau này sẽ được sử dụng để phục hồi đoạn mã gốc.
Quá trình mở gói thực hiện theo các bước có thứ tự ngược lại với quá trình đóng gói. Moule giải nén trước tiên được thực hiện và đoạn mã thực thi nhảy đến câu lệnh thực thi đầu tiên của mã giải nén. Sau khi phục hồi đoạn mã thực thi gốc, con trỏ lệnh thực thi sẽ nhảy ra khỏi câu lệnh cuối cùng của module giải nén để nhảy đến điểm vào (entry point) của đoạn mã thực thi.
Đóng gói mã là kỹ thuật phổ biến sử dụng để che dấu mã độc. Theo thống kê, 79% mã độc hại bị phát hiện từ các sản phẩm diệt virus thương mại sử dụng kỹ thuật đóng gói. Thêm nữa, gần 50% các mã độc hại mới trong năm 2006 được đóng gói lại từ các mã độc hại trước đó. Theo cuộc khảo sát vào năm 2006, Black Hat đưa ra con số thống kê 92% các mã độc được nén hoặc mã hóa.
Kỹ thuật đóng gói xuất hiện trong phần lớn các mẫu mã độc hại do đó điều này tạo ra một thách thức vô cùng lớn cho người phân tích mã, đặc biệt là sử dụng phương pháp phân tích tĩnh để phân tích một lượng lớn mẫu mã độc hại. Bởi vì, người phân tích cần phải xác định đoạn mã độc hại bị mã hóa hay nén để thực hiện việc giải nén cũng như giải mã một cách nhanh chóng và hiệu quả trước khi bắt tay vào thực hiện quá trình phân tích mã độc. Do nhiều mẫu virus vẫn duy trì trạng thái mã hóa và nén, người phân tích phải xác định chúng bằng phân tích thủ công hoặc sử dụng kỹ thuật phân tích ngược (reverse engineering). Yêu cầu đặt ra là cần phải xác định nhanh chóng và chính xác đoạn mã độc nén và giải nén. Phương pháp phân tích entropy là một kỹ thuật hỗ trợ cho người phân tích mã độc giải quyết được yêu cầu này.
2. Phương pháp Entropy phát hiện mã độc được nén và mã hóa.
Khái niệm Entropy
Nguồn gốc khái niệm entropy đến từ khoa học nhiệt động lực học. Entropy là một phép đo độ nhiễu loạn trong một hệ thống khép kín.
Claude Shannon đã sử dụng khái niệm entropy trong lý thuyết nhiệt động lực học để miêu tả sự ngẫu nhiên trong luồng thông tin. Shannon quan tâm đến các kênh truyền tin, nhưng kết quả của ông có thể ứng dụng cho các tệp tin trong máy tính. Điểm khác nhau cơ bản giữa entropy trong lý thuyết nhiệt động lực học và entropy trong lý thuyết thông tin là trong nhiệt động lực học bạn không thể biết tất các các trạng thái có thể xảy ra do vậy, phương pháp thống kê chỉ được sử dụng ở mức gần đúng. Trong lý thuyết thông tin, số trạng thái và khả năng các trạng thái được xác định chính xác bởi vì nội dung của tệp tin là được biết một cách chắc chắn.
Chúng ta có thể tính entropy của các sự kiện rời rạc ngẫu nhiên x sử dụng công thức sau:
Trong phân tích thông tin, chúng ta quan tâm đến các byte dữ liệu (mỗi byte có 256 giá trị xảy ra khác nhau). Bởi vậy, giá trị entropy của một tệp sẽ là giá trị trong khoảng từ 0 đến 8:
Entropy thông tin mô tả mức độ hỗn loạn trong một tín hiệu lấy từ một sự kiện ngẫu nhiên. Nói cách khác, entropy cũng chỉ ra có bao nhiêu thông tin trong tín hiệu, với thông tin có nghĩa là các phần không hỗn loạn ngẫu nhiên của tín hiệu. Ví dụ,nhìn vào một dòng chữ tiếng Việt, được mã hóa bởi các chữ cái, khoảng cách, và dấu câu, tổng quát là các ký tự. Dòng chữ có ý nghĩa sẽ không hiện ra một cách hoàn toàn hỗn loạn ngẫu nhiên. Một tập tin được nén cũng có thể bị phát hiện nhờ kỹ thuật tính toán entropy. Các dữ liệu nén hoặc mã hóa khá gần giống với các dữ liệu ngẫu nhiên, do đó nó có mức entropy cao. Trong khi các dữ liệu thường không được mã hóa hay nén có mức entropy thấp. Sử dụng entropy để đo sự ngẫu nhiên và không dự đoán trước trong một chuỗi sự kiện hoặc một dãy giá trị dữ liệu là chấp nhận được về mặt thống kê trong lĩnh vực lý thuyết thông tin. Trong phân tích mã độc hại, các nhà nghiên cứu đã sử dụng một số công cụ phân tích entropy phát hiện đoạn mã độc nén và mã hóa chẳng hạn như PEAT.
PEAT (Portable Executable Analysis Toolkit) là bộ công cụ cho phép người phân tích kiểm tra các khía cạnh của cấu trúc tệp Window PE (Portable Executable). PEAT tính toán entropy cho mỗi đoạn PE của từng đoạn tệp. Sau đó, nó chuẩn hóa những giá trị entropy này so với entropy tổng cộng của các đoạn PE đã tính. Điều này giúp người phân tích xác định đoạn PE có sự thay đổi lớn giá trị entropy, từ đó xác định đoạn PE có khả năng bị sửa so với đoạn PE nguyên bản ban đầu. Để sử dụng PEAT hiệu quả, người phân tích phải có nền tảng kiến thức về tệp PE, virus, và nội dung về mức hệ thống khác, cũng như kinh nghiệm làm việc với PEAT.
Entropy của một khối dữ liệu là một phép đo thống kê lượng thông tin nó chứa bên trong. Trong [2], tác giả Hamrock và Lyda đưa ra một quan sát đáng chú ý là các dữ liệu nén và mã hóa trong mẫu mã dữ liệu độc hại đóng gói có mức entropy cao. Mã chương trình và dữ liệu bình thường có mức entropy thấp hơn nhiều. Sử dụng quan sát này, mã độc hại sử dụng kỹ thuật đóng gói được xác định bởi mức entropy cao trong nội dung của nó.
Để đánh giá khả năng công cụ Bintropy dựa trên phân tích entropy, Lynda và Hamrock tiến hành đánh giá thử nghiệm trên bốn tập dữ liệu với các phân loại tệp khác nhau: plain text, thực thi thông thường, thực thi nén và thực thi mã hóa. Mỗi tập dữ liệu gồm 100 tệp khác nhau, mỗi tệp được tính entropy dựa trên các khối dữ liệu có độ dài 256 bytes. Công cụ Bintropy tính entropy mức trung bình của
các khối và khối có mức entropy cao nhất. Mục đích thử nghiệm này là xác định mức entropy tối ưu để phân loại tệp thực thi thông thường và tệp thực thi đã biến đối sử dụng kỹ thuật mã hóa hoặc kỹ thuật nén. Sau khi sử dụng tập dữ liệu training, Bintropy có khả năng phát hiện các tệp thực thi bị nén hoặc mã hóa khi đặc tính entropy vượt qua một mức định trước.
Tập dữ liệu | Mức entropy trung bình | Phát hiện chính xác 99% với mức Entropy trong khoảng | Mức entropy cao nhất |
Plain text | 4,347 | 4,066 – 4,629 | 4,715 |
Thực thi thông thường | 5,099 | 4,941 – 5,258 | 6,227 |
Thực thi nén | 6,801 | 6,677 – 6,926 | 7,233 |
Thực thi mã hóa | 7,175 | 7,174 – 7,177 | 7,303 |
Bảng 1 Độ chính xác thống kê entropy dựa trên tập dữ liệu
Theo Bảng 1, với độ chính xác đạt 99% với mức Entropy trong khoảng 6,677 đến 7,177 công cụ Bintropy sẽ phát hiện tệp nén hay mã hóa.
3. Đánh giá và kết luận
Ưu điểm của phương pháp phân tích entropy là đưa ra một kỹ thuật tiện dụng và nhanh chóng để phân tích một mẫu mức nhị phân và xác định vùng tệp PE khả nghi. Một khi việc phân tích xác định được phần có mức entropy bất thường, người phân tích có thể thực hiện phân tích sâu và chi tiết hơn với các công cụ kỹ thuật dịch ngược khác (reverse – engineering) chẳng hạn như IDAPro diassembler.
Phân tích entropy đơn giản trong ứng dụng và được chỉ ra là khá hiệu quả, nhưng nó cũng bộc lộ một số nhược điểm. Phân tích entropy có thể thất bại khi phát hiện các mã độc hại sử dụng kỹ thuật đóng gói mà kẻ viết chương trình đã có ý định làm mức entropy của nó thấp xuống so với mức entropy thực. Tuy nhiên, phương pháp này hiện vẫn chưa được phát hiện trong các mã độc hại.
Thêm nữa, phân tích entropy có thể thất bại khi xác định mã độc đã sử dụng kỹ thuật đóng gói mã mà không sử dụng kỹ thuật nén hay mã hóa, trong đó kẻ viết mã độc chỉ thực hiện che dấu đơn giản trên nội dung của mã độc hại sử dụng ảo hóa câu lệnh không đòi hỏi mã hóa hay nén, khiến phân tích entropy không thể xác định mã độc sử dụng phương pháp này.
Tài liệu tham khảo
1. JEONG, G. et al, "Generic unpacking using entropy analysis," Malicious and Unwanted Software (MALWARE), 2010 5th International Conference on, 2010.
2. LYDA, R and HAMROCK, J. , “Using Entropy Analysis to Find Encrypted and Packed Malware” , Security & Privacy, IEEE , vol.5, no.2, pp.40-45.