CHƯƠNG 2: NGHIÊN CỨU CÁC KỸ THUẬT VÀ PHƯƠNG PHÁP PHÂN TÍCH MÃ ĐỘC
2.5.2. Quy trình phân tích mã độc
Bước 1: Xác định nguồn gốc mã độc.
Bước 2: Liên hệ nơi phát tán mã độc để thu thập mẫu.
Bước 3: Tiến hành quy trình phân tích sơ lược các thông tin ban đầu về mã độc. Bước 4: Tiến hành quy trình phân tích hoạt động để xác nhận các hành vi của mã độc.
Bước 5: Tiến hành phân tích tĩnh để tìm hiểu sâu hơn về các hành vi mã độc mà phân tích hoạt động chưa tìm ra được.
Bước 6: Tiến hành tổng hợp và xuất báo cáo cuối cùng về hành vi mã độc.
Hình 25: Quy trình phân tích mã độc khi chưa có hệ thống phân tích tự động
Việc thực hiện quy trình sáu bước trên tương đối tốn thời gian tại bước phân tích sơ lược và phân tích hoạt động, trong khi đó thời gian dành cho việc phân tích mã thực thi lại giảm xuống do vậy sẽ khó thực hiện đối với các trường hợp cần có kết quả phân tích gấp.
Khi có hệ thống phân tích tự động, thì hai quy trình phân tích sơ lược và phân tích hoạt động đã được tinh giảm đi. Bên cạnh đó quá trình phân tích tự động được tự động hoàn toàn nên tiết kiệm rất nhiều thời gian để dành cho việc phân tích mã thực thi.
2.6. Nghiên cứu các công cụ hỗ trợ phân tích mã độc
2.6.1. Công cụ hỗ trợ phân tích 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).
Các kỹ thuật hỗ trợ việc phân tích tĩnh:
- 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.
- Ngoài ra, cũng có một số dịch vụ quét Virus trực tuyến như: 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ác công cụ hỗ trợ phân tích tĩnh:
- 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 đó:
Hình 27: 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ự.
Hình 28: Rdg Packer Detector
Hình 29: 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, 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…).
Hình 30: 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.
Hình 31: BinDiff
2.6.2. Công cụ hỗ trợ phân tích động
Mã độc có rất nhiều hành vi khác nhau (xóa file, chèn thêm vào file, lấy cắp thông tin, kết nối mạng, tấn công DdoS…) vì thế phải kết hợp nhiều công cụ với nhau để có thể thấy được bức tranh toàn cảnh về những gì mà nó làm (chứ không phải làm thế nào). Ở phần này, chúng ta sẽ chỉ nói đến mã độc, và những công cụ phân tích trên nền tảng Windows. Có 2 công cụ phân tích hành vi khá hữu ích là Process Monitor và Wireshark. Một trong những điểm thú vị của các công cụ này là chúng giám sát mọi hành vi trong toàn bộ hệ thống chứ không phải chỉ của mã độc, hay một chương trình cụ thể. Vì thế, để phân tích, cần phải lọc kết quả trả về của chúng. Cả 2 phần mềm này đều có cơ chế lọc với nhiều tùy chọn, rất hiệu quả.
- Process Monitor: một sản phẩm trong công cụ Sysinternals Suite.
Cho phép người phân tích giám sát tất cả các hành vi về file, registry, hoạt động của tiến trình đang chạy trong hệ thống. Process Monitor hoạt động bằng cách cài một driver (một thành phần điều khiển ở mức thấp) để giám sát thông tin về hoạt động đang diễn ra bên trong nhân hệ điều hành. Dữ liệu nó đưa ra rất đầy đủ, chi tiết ở dạng đồ họa.
Hình 32: Giao diện sử dụng của Process Monitor
Sau khi chạy Process Monitor, chúng ta cần lọc các kết quả nó trả về. Không như Filemon (giám sát file), Regmon (giám sát registry) sử dụng cơ chế lọc đơn giản theo chuỗi; Process Monitor có cơ chế lọc khá phức tạp. Hình 33 mô phỏng cửa sổ lọc kết quả của Process Monitor. Giả sử cần lọc các hoạt động của một tiến trình có tên là “unknown1” chúng ta sẽ chọn ở khung đầu tiên là Process Name, ở khung textbox, điền tên unknown1, nhấn Add. Để giám sát các hành động cụ thể (việc sử dụng hàm API của chương trình, chọn Operation , và điền tên hàm API tương ứng cần giám sát.
Hình 33: Cửa sổ Filter của Process Monitor
- WireShark: là sản phẩm đa nền tảng dùng để giám sát kết nối mạng. Nó cung cấp những chức năng như: giám sát, phân tích, lọc các kết nối mạng từ tất cả các ứng dụng trong hệ thống. Tuy nhiên, điểm yếu lớn nhất của nó khi phân tích mã độc là không cho biết chính xác ứng dụng nào tạo ra gói tin gửi đi, mà chỉ biết gói tin đó có thành phần gì, gửi từ đâu, và đến đâu… Vì thế, cần kết hợp với những công cụ khác như Process Monitor. Ngoài ra có rất nhiều các sản phẩm khác như Port Explorer của DiamondCS. Công cụ này được sử dụng để giám sát mạng ở mức độ kết nối, và chỉ ghi lại thông tin về tiến trình đã tạo ra kết nối.
- Công cụ gỡ rối:
• Phân tích tĩnh và phân tích động ở trên thường có thể giải quyết phần lớn công việc phân tích mã độc. Tuy nhiên, có nhiều trường hợp mã độc quá phức tạp, sử dụng nhiều lớp bảo vệ, hay mã hóa các phương thức, mã hóa dữ liệu truyền đi như Botnet, backdoor, thì debug là một kỹ thuật cần được sử dụng.
• Nhiều công cụ cho phép debug tuy nhiên OllyDbg, Windbg là những công cụ mạnh nhất. Chúng hoàn toàn miễn phí và dễ sử dụng. Ngoài ra còn có Immunity Debugger.
• Ollydbg: là một debugger miễn phí, hỗ trợ debug file thực thi và file thư viện. Ngoài ra, còn có một cộng đồng sử dụng đông đảo, vì thế bộ plug-in và script của nó rất phong phú. Một số plug-in quan trọng đó là PhantOm, Olly Advanced, StrongOD. Chúng cung cấp các cơ chế anti-anti debug, ẩn tiến trình-tên cửa số Ollydbg, hook vào một số hàm quan trọng… nhằm làm cho chương trình bị debug không biết mình đang bị debug.
• Immunity Debugger: Cũng giống như OllyDbg, tuy nhiên ngôn ngữ kịch bản mà nó hỗ trợ là Python, một ngon ngữ rất mạnh và được giới bảo mật, phân tích thường dùng.
• Windbg: công cụ được phát hành bởi Microsoft. Là một công cụ debug có thể hoạt động trên nhiều mức khác nhau, từ mức người dùng (ring3), đến mức hệ thống (ring0 hay kernel mode). Có một số mã độc sử dụng các kỹ thuật ở mức kernel, driver do đó không thể sử dụng 2 công cụ debug nói trên mà phải dùng Windbg.
2.7. Kết luận Chương 2
Chương 2 của luận văn đã trình bày vai trò quan trọng của việc đưa ra các kỹ thuật và phương pháp phân tích mã độc. Trình bày mục đích của việc phân tích mã độc, liệt kê các kỹ thuật phân tích mã độc hiện nay. Nội dung chương 2 cũng trình bày chi tiết hai phương pháp phân tích mã độc chính là phân tích động và phân tích tĩnh. Ngoài ra, chương 2 còn trình bày được môi trường cần thiết để thực hiện phân tích mã độc và các công cụ hỗ trợ việc phân tích mã độc, quy trình thu thập và phân tích mã độc.
Tiếp theo chương 3 sẽ trình bày nội dung của việc thử nghiệm phân tích mã độc trên một hệ thống website thực tế.