Tổng quan về phát hiện mã độc
Mã độc luôn là một mối bận tâm của cả người dùng cá nhân và cả cơ quan doanh nghiệp, vì những hành vi gây hại mà chúng có thể gây ra cho hệ thống máy tính. Mã độc là các phần mềm, đoạn mã độc hại được thiết kế một cách có chủ đích, dùng để gây thiệt hại tới máy tính cá nhân, máy chủ hoặc hệ thống mạng máy tính. Mục đích của mã độc là thực thi các hành vi bất hợp pháp như: truy cập trái phép, đánh cắp thông tin người dùng, phát tán thư rác, thậm chí thực hiện các hành vi tống tiền, tấn công và gây tổn thương cho các hệ thống máy tính… nhằm chuộc lợi cá nhân, hoặc các lợi ích về kinh tế, chính trị hay đơn giản chúng có khi được tạo ra chỉ là một trò đùa ác ý nào đó.
Phát hiện mã độc là khâu quan trọng trong quy trình ứng cứu, xử lý sự cố của bất kỳ hệ thống hay cơ quan, doanh nghiệp nào. Phát hiện được mã độc có thể coi là bước đầu trước khi đưa ra những nhận định, phân tích chuyên sâu hơn về khả năng lây nhiễm, gây hại của mã độc đó tới hệ thống hay đôi khi mã độc này là một phần, một giai đoạn của một cuộc tấn công có chủ đích nào đó.
Vậy làm thế nào để phát hiện mã độc, có những phương pháp nào để phát hiện được chúng? Để hiểu được điều này đầu tiên chúng ta phải tìm hiểu xem có những phương pháp phân tích mã độc nào vì việc phát hiện mã độc sẽ dựa trên những kỹ thuật và kết quả của việc phân tích mã độc. Hy vọng bài viết sẽ cho các bạn một cái nhìn tổng quan về các phương pháp phân tích và phát hiện mã độc.
Phân tích mã độc
Phân tích mã độc là việc sử dụng các công cụ, kỹ thuật phân tích nhằm xác định hành vi “độc hại” của mã độc đến hệ thống máy tình. Phân tích mã độc là có mục tiêu nữa là từ kết quả của việc phần tích đưa ra cách để gỡ bỏ và phòng tránh mã độc đó. Về phương pháp phân tích, có hai phương pháp phân tích mã độc là phân tích tĩnh và phân tích động.
Phương pháp phân tích mã độc
Phân tích tĩnh
Phân tích tĩnh mô tả việc phân tích mã, cấu trúc của một phần mềm mà không cần thực thi chúng nhằm mục đích kiểm tra xem tập tin, phần mềm có phải mã độc hay không, và cố gắng xác định hành vi của mã độc. Phân tích tĩnh có thể chia làm hai mức độ: cơ bản và nâng cao.
Ở mức độ cơ bản, người phân tích sẽ không đi sâu vào việc phân tích các đoạn mã của mã độc mà có thể sử dụng một số công cụ để tìm kiếm, kiểm tra một số thông tin hữu ích như: định dạng tập tin, trích xuất các chuỗi, xem tập tin có bị làm rối không, các hàm và thư viện mà tập tin có thể sử dụng, … Một số kỹ thuật sử dụng dùng trong phân tích tĩnh như:
Một số kỹ thuật phân tích tĩnh
Cơ bản:
-
- Hàm băm
- Hàm và thư viện liên kết
- Tìm kiếm Strings
- Kiểm tra định dạng, thông tin tệp tin
- Packing và Obfuscation
Nâng cao:
-
- Disassembly / Reverse
Các phương pháp phân tích tĩnh cơ bản rất tốt cho việc phân loại ban đầu, tuy nhiên chúng không cung cấp đủ thông tin để phân tích hoàn toàn phần mềm độc hại. Có thể sử dụng phân tích tĩnh để rút ra một số kết luận sơ bộ, nhưng cần phải phân tích sâu hơn để nắm được toàn bộ hành vi của mã độc. Ví dụ: có thể thấy rằng một API cụ thể đã được import, nhưng sẽ không biết nó được sử dụng như thế nào hoặc liệu nó có được sử dụng hay không.
Ở mức độ cao hơn, phức tạp hơn, phân tích tĩnh chính là việc dịch ngược (reverse) chương trình để đọc các đoạn mã thực thi nó (thường ở dạng assembly), từ đó biết được logic và mục đích của phần mềm. Đây là một phương pháp đòi hỏi người phân tích có kỹ năng chuyên môn, nó cũng là phương thức thường dùng và đáng tin cậy nhất trong phân tích tĩnh. Việc phân tích các đoạn mã assembly sẽ cho biết tất cả các kịch bản thực thi có thể có của mã độc, tất cả hành vi mã độc và không hề bị hạn chế bởi điều kiện gì. Tuy vậy, để đọc, phân tích toàn bộ mã assembly tốn rất nhiều thời gian. Còn một ưu điểm nữa của phân tích tĩnh đó là không cần thực thi trực tiếp mã độc, điều này có nghĩa là hệ thống sẽ không bị ảnh hưởng và gây nguy hiểm.
Phân tích động
Phân tích động là việc phân tích các hành vi, chức năng của mã độc bằng cách thực thi phần mềm độc hại. Không giống như phân tích tĩnh, phân tích động cho phép quan sát chức năng thực sự của phần mềm độc hại, ví dụ: sự tồn tại của một chuỗi hành động trong mã nhị phân không có nghĩa là hành động sẽ thực sự thực thi. Phân tích động cũng là một cách hiệu quả để xác định chức năng của phần mềm độc hại. Ví dụ: nếu phần mềm độc hại là keylogger, phân tích động có thể cho phép xác định vị trí tập tin ghi nhật ký của keylogger trên hệ thống, các loại bản ghi mà nó lưu giữ, giải mã nơi nó gửi thông tin, …. Loại thông tin chi tiết này sẽ khó đạt được nếu chỉ sử dụng các kỹ thuật tĩnh cơ bản.
Trong phân tích động, những thông tin cần được theo dõi trong suốt quá trình thực thi mã độc như: các hành vi với tập tin, các tiến trình, hành vi liên quan đến registry, hành vi liên quan đến mạng, hay lắng nghe các gói tin, … Việc theo dõi các hành vi và tác động của việc thực thi lên hệ thống rất hữu ích, Microsoft cũng có một bộ công cụ hỗ trợ theo dõi, phân tích, đó là bộ Windows Sysinternals Suite. Một số công cũ hỗ trợ việc phân tích động chẳng hạn như Proces Monitor (Procmon), Process Explorer, Autoruns, TCPview, Regshot, Wireshark, …
- Process Monitor, hay procmon là một công cụ giám sát nâng cao dành cho Windows cung cấp một cách để giám sát hoạt động registry, file system, network, process và thread nhất định. Nó kết hợp và nâng cao chức năng của hai công cụ kế thừa: FileMon và RegMon.
- Process Explorer là phần mềm miễn phí của Microsoft quản lý tác vụ cực kỳ mạnh mẽ sẽ chạy khi thực hiện phân tích động. Nó có thể cung cấp cái nhìn chi tiết về các tiến trình hiện đang chạy trên hệ thống. Process Explorer có thể liệt kê các tiền trình đang hoạt động, các tập tin DLL được tải bởi một tiến trình, các thuộc tính quy trình khác nhau và thông tin hệ thống tổng thể. Cũng có thể sử dụng nó để hủy một quy trình, trích xuất một tiến trình đang chạy,…
- TCPView là công cụ có giao diện, thân thiện với người dùng, nó cung cấp được nhiều thông tin chi tiết về các kết nối.
- Công cụ phổ biến để kiểm tra thông tin startup là Autoruns được Microsoft cung cấp trong bộ Sysinternal Suite.
- Regshot là một công cụ so sánh registry mã nguồn mở cho phép tạo và so sánh hai registry snapshot. Để sử dụng Regshot để phân tích phần mềm độc hại, Regshot sẽ so sánh hai snapshot trước và sau khi thực thi phần mềm độc hại.
Mặc dù các kỹ thuật phân tích động cực kỳ mạnh mẽ, chúng chỉ nên được thực hiện sau khi phân tích tĩnh cơ bản đã hoàn thành vì phân tích động có thể khiến mạng và hệ thống gặp rủi ro. Các kỹ thuật động có những hạn chế bởi vì không phải tất cả các đoạn mã đều có thể thực thi khi một phần mềm độc hại được chạy. Ví dụ: trong trường hợp phần mềm độc hại dòng lệnh (command-line) yêu cầu tham số truyền vào, mỗi tham số có thể thực thi chức năng chương trình khác nhau và nếu không biết các tùy chọn đó, sẽ không thể kiểm tra tất cả chức năng của chương trình.
Debug
Ở mức độ cao hơn, phân tích động là việc tiến hành debug một chương trình. Debugger – trình gỡ lỗi là công cụ hữu ích để phân tích phần mềm độc hại. Chúng cho phép kiểm tra mã ở cấp độ chi tiết hơn và cung cấp toàn quyền kiểm soát các hành vi có thể xảy ra trong thời gian chạy của phần mềm độc hại. Sử dụng debugger, có thể thực hiện phân tích từng lệnh hay một hàm chức năng một cách thuận tiện. Nói cách khác, có thể thực thi chương trình ở chế độ chuyển động chậm trong khi nghiên cứu mọi hành động của nó. Cũng có thể sử dụng trình gỡ lỗi để thực thi một vài chức năng được chọn thay vì toàn bộ chương trình, điều này rất hữu ích nếu cần bỏ qua mã chống gỡ lỗi hoặc thực thi với một tham số truyền vào nào đó.
Sandbox
Để hạn chế các rủi ro trong việc thực thi mã độc đối với hệ thống, thì phân tích động thường được thực hiện trên môi trường ảo, cách li với môi trường thật.
Sandbox là một trong những công cụ được sử dụng khá phổ biến cho việc theo dõi, kiểm tra và trích xuất các thông tin thực thi của một tập tin trên hệ thống. Bên cạnh đó Sandbox là một cơ chế bảo mật để chạy các chương trình không đáng tin cậy trong một môi trường an toàn mà không sợ làm hại hệ thống thực. Sandbox bao gồm các môi trường ảo hóa thường mô phỏng hệ thống máy tính thật, các dịch vụ mạng theo một số cách để đảm bảo rằng phần mềm hoặc phần mềm độc hại đang được kiểm tra sẽ hoạt động bình thường.
Có khá nhiều phần mềm Sandbox khác nhau, phổ biến nhất có thể kể đến Cuckoo Sandbox. Các thông tin có thể được trích xuất từ báo cáo Cuckoo:
- Registry
- Thông tin về tệp tin
- Tiến trình
- Địa chỉ IP và truy vấn DNS
- Dlls, API calls
Mô hình hoạt động của Cuckoo Sandbox
Phát hiện mã độc
Phát hiện mã độc, là một trong những mục tiêu của việc phân tích mã độc. Phương pháp phát hiện mã độc hiện nay được chia thành hai loại chính là phát hiện dựa trên chữ ký (signature) và phát hiện dựa trên hành vi, ngoài ra hiện nay còn có phương pháp phát hiện mã độc dựa trên việc ứng dụng các thuật toán học máy.
Phát hiện dựa trên chữ ký (signatures)
Phát hiện mã độc dựa trên chữ ký là phương pháp dựa trên các thông tin về mã độc (signatures) đã được định nghĩa sẵn. Chữ ký ở đây có thể là chuỗi giá trị băm của tệp tin mã độc (MD5 hoặc SHA1), một chuỗi cố định nào đó trong tập tin hoặc metadata của tệp tin mã độc đó. Công việc thường thấy của các phát triển giải pháp anti-malware là khi họ xác định một đối tượng là độc hại, một tập tin là mã độc thì “chữ ký” của nó sẽ được thêm vào cơ sở dữ liệu. Khi kiểm tra một tệp tin bất kỳ trong hệ thống, phần mềm antivirus sẽ phân tích tệp tin đó, nếu phát hiện chữ ký khớp với cơ sở dữ liệu sẽ thông báo đây là tệp tin đáng ngờ. Phương pháp phát hiện này chỉ phù hợp với các dạng mã độc phổ biến, có chữ ký cố định được lưu trong cơ sở dữ liệu.
Ngoài ra, các loại mã độc hiện nay còn có khả năng thay đổi chữ ký nhằm tránh bị phát hiện; chữ ký được tạo ra bởi việc kiểm tra các thành phần bên trong, và mã độc chỉ cần thay đổi các phần này mà không làm ảnh hưởng đến chức năng và hành vi của nó. Một số kỹ thuật biến hình của mã độc gồm hoán vị mã, đổi tên register, mở rộng hoặc thu hẹp mã, chèn các đoạn mã rác,…
Phát hiện dựa trên hành vi
Từ phương pháp phân tích động, người ta đã định nghĩa phương pháp phát hiện dựa trên hành vi.
Phương pháp phát hiện dựa trên hành vi (hay còn gọi là dựa trên heuristics) sẽ đánh giá một đối tượng dựa trên hành vi của nó. Khi một đối tượng cố gắng thực thi các hành vi bất thường hoặc không được cấp quyền biểu thị đối tượng đó độc hại hoặc đáng ngờ. Có một số hành vi được coi là nguy hiểm như vô hiệu hóa các điều khiển bảo mật, cài đặt rootkits, autostart, sửa tệp tin host, thiết lập các kết nối đáng ngờ,… Mỗi hành vi có thể không nguy hiểm nhưng kết hợp với nhau có thể làm tăng độ đáng ngờ của đối tượng. Có một ngưỡng được xác định sẵn, nếu bất kỳ tệp tin nào vượt qua ngưỡng này sẽ được cảnh báo là mã độc. Phương pháp này được áp dụng để phát hiện các loại mã độc có khả năng thay đổi chữ ký (đa hình) hoặc các loại mã độc mới (zero-day).
Mức độ chính xác của phát hiện dựa trên heuristics dựa vào quá trình thực thi. Tốt nhất là sử dụng môi trường ảo, ví dụ như sandbox, để chạy tệp tin và giám sát hành vi của nó. Mặc dù phương pháp này tốn nhiều thời gian hơn, nhưng nó an toàn hơn, do tệp tin được kiểm tra trước khi chạy thực tế. Ưu điểm chính của phát hiện dựa trên heuristics là nó không chỉ phát hiện các mã độc đã biết mà còn phát hiện được các cuộc tấn công zero-day và các loại virus đa hình. Tuy nhiên, một số loại mã độc có khả năng phát hiện môi trường ảo, nó sẽ không thực thi các hành vi độc hại trong môi trường sandbox. Hơn nữa, trên thực tế, với lượng mã độc đang ngày một gia tăng, phương pháp này không thực sự hiệu quả trước các loại mã độc mới.
Phát hiện dựa trên kỹ thuật học máy
Phương pháp phát hiện mã độc dựa trên chữ ký chỉ phù hợp với các mã độc phổ biến, đã được phát hiện. Nó không thể phát hiện các mã độc đa hình – mã độc có khả năng thay đổi chữ ký, cũng như các mã độc mới chưa có chữ ký. Ngược lại, phương pháp phát hiện dựa trên heuristics có thể phát hiện các loại mã độc này, nhưng độ chính xác không cao, thường đưa ra kết quả dương tính giả và âm tính giả.
Trước sự phát triển nhanh chóng của các loại mã độc, việc phát triển một phương pháp phát hiện mới là rất cần thiết. Một trong các giải pháp là phát hiện dựa trên kỹ thuật học máy để tăng độ chính xác.
Học máy ứng dụng trong lĩnh vực mã độc để giải quyết hai bài toán lớn là phân loại mã độc và phát hiện mã độc:
- Phát hiện mã độc: là việc xác định xem một phần mềm có phải là mã độc hay không. Đây là bài toán phân loại tập tin với hai nhãn là mã độc và lành tính.
- Phân loại mã độc: mục tiêu là phát hiện sự tương đồng giữa các mẫu mã độc để xác định xem một mẫu mã độc thuộc họ mã độc nào đó. Có thể được chia làm bốn mục tiêu con là: phát hiện các biến thể, phát hiện họ mã độc, phát hiện sự tương đồng, phát hiện sự khác biệt.
Ở bài này mình tập chung vào chủ đề phát hiện mã độc.
Tiếp cận mục tiêu phát hiện mã độc theo hướng dữ liệu, là dưới lăng kính của khoa học dữ liệu, tìm cách thu thập, trích xuất có ý nghĩa thông tin hữu ích từ các tệp nhị phân của máy tính tìm được theo hướng phù hợp nhằm đưa vào thuật toán kiểm tra.
Học máy có thể giúp giảm thiểu đáng kể khối lượng công việc thủ công và kiến thức chuyên môn cần thiết trong việc phân loại phần mềm độc hại. Việc cho phép dữ liệu và thuật toán đưa ra các quyết định tương quan giữa số lượng lớn các mẫu hóa ra lại mang lại kết quả tốt hơn nhiều so với con người thực hiện công việc. Tìm kiếm các mẫu và điểm tương đồng trong dữ liệu là sở trường của các thuật toán học máy, nhưng một số khía cạnh của nhiệm vụ vẫn đòi hỏi nỗ lực của con người. Tạo tập dữ liệu ở định dạng phù hợp nhằm hỗ trợ các thuật toán trong các nhiệm vụ học tập và phân loại là công việc đòi hỏi một nhà khoa học dữ liệu có hiểu biết về cả cách hoạt động của phần mềm độc hại và cách hoạt động của thuật toán.
Với mỗi mô hình học máy theo hai hướng phân tích động và tĩnh sẽ có sự khác nhau nhất định về các đặc trưng trích xuất và mô hình huấn luyện. Mô hình dưới đây mình có tổng hợp một số đặc trưng có thể trích rút được:
Tổng quan về Machine Learning trong phân tích Mã độc
Có khá nhiều cách trích chọn, xử lý dữ liệu và lựa chọn mô hình học máy khác nhau, và mỗi cách trích chọn, lựa chọn mô hình học máy, tinh chỉnh nó sẽ cho ra các kết quả, độ chính xác khác nhau, ngoài ra còn phụ thuộc rất nhiều vào tập dữ liệu mà bạn thu thập được. Nhóm mình có trình bày một bài với đặc trưng là Tiêu đề tập tin PE và API calls, các bạn có thể tham khảo thêm ở link này.
Tổng kết,
Bài viết này mình đã chia sẻ một cái nhìn tổng quan về phương pháp phân tích mã độc và các phương pháp phát hiện mã độc. Ngoài các phương pháp phát hiện mã độc truyền thốngnhư phát hiện dựa trên chữ ký và phát hiện dựa trên hành vi, hiện này còn một phương pháp rất tiềm năng, đó là phát hiện dựa trên các kỹ thuật học máy. Phát hiện hay cả phân loại mã độc ứng dụng kỹ thuật học máy không còn quá mới mẻ tuy nhiên dưới góc nhìn của khoa học dữ liệu nó rất thú vị, vẫn còn rất nhiều điều có thể khai phá phía trước.
Cảm ơn các bạn đã đón đọc!!!
By,
SOC_team