Các công cụ phân tích tĩnh mã độc

Trong phần này sẽ tập trung vào kỹ thuật phân tích tĩnh. Chi tiết quá trình phân tích tĩnh logic của một phần mềm sẽ cho chúng ta thấy cái nhìn tổng quan về những công cụ cần sử dụng, và các kỹ năng cần có.

Bạn có thể theo dõi thêm hai bài viết trước của tôi:

Công cụ tạo môi trường an toàn và hiệu quả để phân tích mã độc

Các phương pháp phân tích mã độc

Phân tích mã độc tĩnh

Phân tích tĩnh có ưu điểm là an toàn hơn phân tích động; vì mã thực thi không thực sự chạy trên môi trường, nên chúng ta không cần lo lắng những vấn đề như: mã độc sẽ format ổ cứng, xóa file, lây lan vào những file hệ thống, lấy cắp dữ liệu… Chỉ có một mối nguy hiểm có thể xảy ra, là trong quá trình phân tích, chúng ta vô tình thực thi mã độc (click đúp, hoặc chạy thư viện chứa mã độc). Cũng có thể giảm thiểu, loại bỏ các nguy cơ này bằng cách phân tích tĩnh mã độc trên một môi trường mà nó không thực thi được (ví dụ phân tích mã độc trên Windows trong hệ điều hành Linux).

  • Kỹ thuật lấy thông tin ban đầu về file:

Trước khi làm bất kì việc gì, chúng ta nên tính toán giá trị băm cho mỗi file cần phân tích. Thông thường sẽ sử dụng các hàm mã hóa MD5, SHA1, SHA256. Sau khi tính toán, chúng ta sẽ có thể biết được mã độc có tự thay đổi nó (self-modified) hay không. Có khá nhiều công cụ hữu ích cho việc này như: md5deep của Jesse Kornblum.

  • Kỹ thuật Quét virus:

Nếu file được kiểm tra là một thành phần của một mã độc nổi tiếng, hoặc đã được phân tích bởi các công ty an ninh mạng, diệt virus, thì có khả năng nó sẽ được nhận ra bởi một chương trình diệt virus. Khi đó, nhiệm vụ của người phân tích là sẽ tìm kiếm thông tin từ nhà cung cấp phần mềm diệt virus, qua đó nắm được cơ bản những hành vi, cách thức lây lan, hoạt động của mã độc đó, tuy nhiên nó chỉ nằm ở mức cơ bản.

Cũng có một số dịch vụ quét virus trực tuyến như: http://www.virustotal.com hay http://virusscan.jotti.org. Trước tiên, chúng sẽ tính toán mã băm của các file người dùng gửi lên, sau đó so sánh trong cơ sở dữ liệu xem đã được quét chưa. Nếu đã quét thì chỉ việc đưa ra kết quả lần quét trước đó. Nếu chưa, chúng sẽ quét file bằng nhiều chương trình diệt virus khác nhau và đưa ra kết quả cũng như cảnh báo – nếu có. Đây là lợi điểm rất lớn, vì thông thường trên một hệ thống máy tính, chúng ta không thể cài quá nhiều phần mềm diệt virus.

  • Phát hiện các trình packer:

Packer là một trình bảo vệ, nén file thực thi, thường được sử dụng để bảo vệ file thực thi khỏi quá trình dịch ngược và để giảm dung lượng file. Chúng có thể thay đổi luồng thực thi của chương trình, mã hóa các chuỗi, tránh debug… Khi thực thi, các lớp bảo vệ này được tự động gỡ ra (theo nhiều cách) và chương trình sẽ hoạt động như chương trình ban đầu.

Có rất nhiều mã độc sử dụng nhiều packer khác nhau nhằm gây khó khăn cho người phân tích.

PEiD là một chương trình miễn phí, dùng để phát hiện ra các packer được sử dụng trên một chương trình và có thể đưa ra phiên bản trình biên dịch được sử dụng. PEiD sử dụng tập hợp các chữ ký của rất nhiều (phiên bản sạch có khoảng trên 600 chữ ký của các trình biên dịch và packer khác nhau; trong khi đó, với sự hỗ trợ của các nhà phân tích, có những bản có trên 10000 chữ ký!). Để sử dụng chúng, có thể:

Mở cửa sổ PEiD lên, kéo file cần quét vào và đợi cho đến khi chương trình phân tích xong. Kết quả sẽ được hiển thị trên màn hình sau đó

PEiD

Hình 1: Màn hình sử dụng PEiD

Từ menu chuột phải, chọn Scan with PEiD và quá trình sau đó cũng tương tự.

Ngoài ra còn có rất nhiều công cụ khác nữa như: exeinfo, hay RDG Packer Detector. Các công cụ này cũng có chức năng, cách sử dụng tương tự.

rdg_packer_detector

Hình 2: Rdg Packer Detector

exeinfo

Hình 3: ExeInfo

  • Sử dụng chuỗi tìm được:

Để hiểu được những gì một chương trình thông thường làm, chúng ta thường tìm đọc các tài liệu đi kèm, hướng dẫn sử dụng… Với mã độc cũng tương tự, tuy nhiên, “thường” không có tài liệu hay hướng dẫn. Thay vào đó, những thông tin hữu ích trong file thực thi là điều đáng lưu ý. Ví dụ như chương trình thường in ra màn hình những trạng thái hoạt động, hoặc thông báo lỗi. Theo dấu vết các chuỗi này, ta có thể hiểu và thấy được phần nào cách hoạt động của chúng.

Các chuỗi trong file thực thi nói chung, có thể được lấy ra sử dụng một số công cụ như: Strings trong bộ Sysinternals, Bintext trong Foundstone hay HexWorkshop, 010Editor, IDA… Khi sử dụng các công cụ này, cần chú ý rằng nên chọn trích xuất ra cả định dạng ASCII và UNICODE.

Tuy nhiên cũng cần thận trọng khi xem xét, vì rất có thể người viết mã độc cố tính chèn chúng vào nhằm làm người phân tích bị lệch hướng.

  • Công cụ xem cấu trúc của file thực thi (trên windows gọi chung là PE file, trên Linux là ELF…):

PE file (Portable executable) là định dạng được sử dụng bởi các file thực thi của hệ điều hành Windows. Có nhiều thông tin quan trọng mà định dạng này cung cấp như:

+ Ngày tháng biên dịch

+ Các hàm trong thư viện được chương trình gọi

+ Hàm mà chương trình, hay thư viện cung cấp

+ Biểu tượng, menu, phiên bản và các chuỗi tích hợp trong tài nguyên của file  (resources)

Có khá nhiều công cụ cho phép xem cấu trúc của một file PE như:

  • CFF Explorer : công cụ được phát triển bởi một chuyên gia dịch ngược, phân tích mã độc của Đức.
  • PEView : của Wayne Radburn
  • Depends : của Steve Miller
  • PEBrowse Pro : của Rus Osterlund
  • Objdump : từ Cygwin
  • Resource Hacker : của Angus Johnson.

Những công cụ này đều rất mạnh, và miễn phí, sử dụng rất dễ dàng.

  • Công cụ dịch ngược:

Sau khi đã có thông tin cơ bản về mã độc ở các bước trên, công việc chính tiếp theo là hiểu cách hoạt động của nó, bằng cách xem mã thực thi ở dạng có thể hiểu được (dưới dạng ngôn ngữ assembly).

Rất nhiều những công cụ có khả năng dịch ngược từ mã máy sang mã assembly, tuy nhiên, hiện nay, công cụ được ưa thích, rất mạnh và dễ sử dụng – đó là IDA (Interactive Disassembler). Công cụ này được phát triển bởi Hex-rays, Ilfak Guinifanov, một chuyên gia phân tích lỗ hổng, mã độc. Tác giả đã sử dụng kinh nghiệm làm việc của mình, khắc phục các khó khăn mà quá trình phân tích gặp phải, để đưa ra công cụ cực kỳ hữu ích này. Nó được tin dùng ở hầu hết những nhà phân tích mã độc, các công ty an ninh mạng, diệt virus (Kaspersky, F-secure, Avira, Symantec…).

ida-pro

Hình 4: Giao diện đồ họa của IDA Pro

Có 2 kiểu xem ở khung chứa mã dịch ngược, một là xem theo kiểu đồ thị và xem theo kiểu code thông thường. Với kiểu đồ thị, chúng ta sẽ dễ dàng theo dõi việc thực thi, kiểm tra của đoạn mã. Nó vô cùng trực quan, dễ hiểu. Với kiểu thông thường, các dòng lệnh hiển thị lần lượt như trong bộ nhớ. Không chỉ vậy, điểm mạnh của IDA còn ở tính năng cung cấp các tham chiếu, tìm kiếm chuỗi, hỗ trợ ngôn ngữ kịch bản, phần mở rộng.

  • Các công cụ so sánh file : sử dụng để so sánh các file trước và sau khi hệ thống bị lây nhiễm mã độc. Giả sử có một file chưa lây nhiễm và một người khác gửi đến trung tâm phân tích một file đã nhiễm mã độc, thì đây là công cụ cần sử dụng đầu tiên. Không chỉ đưa ra thông tin về những byte khác nhau, các công cụ này còn có khả năng đưa ra mã assembly của những đoạn đó, giúp cho người phân tích dễ dàng thấy được các hoạt động của mã độc.

BinDiff của Zynamics là một công cụ như thế. Nó tập trung vào việc so sánh các file với nhau, đưa ra kết quả là mã assembly và đồ thị hoạt động tương ứng. Một chức năng đáng chú ý nữa là đưa ra các hàm giống nhau và khác nhau giữa 2 file thực thi. Điều này sẽ giúp giảm đi đáng kể thời gian phân tích, vì người phân tích sẽ có định hướng, chỉ tập trung vào những hàm được chèn thêm, bị thay đổi, mà không cần xem xét hết các hàm của một file thực thi đã bi lây nhiễm.

bindiff

Hình 5: BinDiff


Bình luận

Từ khóa: