paint-brush
Phân tích GuLoader: Cách tiếp cận gỡ mã nguồn mẫu phức tạptừ tác giả@anyrun
595 lượt đọc
595 lượt đọc

Phân tích GuLoader: Cách tiếp cận gỡ mã nguồn mẫu phức tạp

từ tác giả ANY.RUN6m2023/06/22
Read on Terminal Reader

dài quá đọc không nổi

Bài viết này tập trung vào phân tích tĩnh, nhưng nếu bạn muốn phân tích động mẫu trình tải Gu, bạn có thể sử dụng hộp cát phần mềm độc hại đám mây **ANYRUN**. Truy cập blog của chúng tôi để tìm mẫu mà chúng tôi sẽ phân tích, cũng như hướng dẫn giải nén và tập lệnh Ghidra tự động hóa một phần phần lớn những gì chúng tôi sẽ trình bày.
featured image - Phân tích GuLoader: Cách tiếp cận gỡ mã nguồn mẫu phức tạp
ANY.RUN HackerNoon profile picture
0-item


Là một nhà nghiên cứu phần mềm độc hại , bạn thường phải đối mặt với các mẫu phức tạp, khó hiểu. Và GuLoader, phần mềm độc hại mà chúng ta đang xử lý ngày nay, là một trường hợp điển hình.


Hãy xem mã giả này, được tạo ra bằng cách dịch ngược mã hợp ngữ của nó - nó xấu và không thể đọc được.




Đối mặt với một câu đố như thế này, bạn có thể cảm thấy lúng túng. Bạn thậm chí nên bắt đầu từ đâu? Làm thế nào để bạn giải quyết các phân tích của mẫu này? Hãy chia nhỏ nó ra.


Do đó, trong bài viết này, chúng ta sẽ khám phá các chiến lược để gỡ rối mã như vậy, sử dụng GuLoader làm tài liệu tham khảo. Bạn sẽ tìm hiểu về:


  • Các chiến thuật che giấu phổ biến được sử dụng bởi các đối thủ
  • Làm thế nào để đánh bại họ
  • Cách gỡ mã nguồn mẫu GuLoader


Bài viết dựa trên phân tích phần mềm độc hại GuLoader được xuất bản trước đó bởi ANY.RUN. Truy cập blog của chúng tôi để tìm mẫu mà chúng tôi sẽ phân tích, cũng như hướng dẫn giải nén và tập lệnh Ghidra tự động hóa một phần phần lớn những gì chúng tôi sẽ trình bày từ thời điểm này trở đi.


Bài viết này tập trung vào phân tích tĩnh. Tuy nhiên, nếu muốn phân tích mẫu GuLoader một cách linh hoạt, bạn có thể sử dụng sandbox phần mềm độc hại trên đám mây ANY.RUN .


Đăng ký dùng thử miễn phí 14 ngày gói Doanh nghiệp bằng email doanh nghiệp của bạn. Tận dụng thời gian kéo dài của các phiên bản máy ảo, các tác vụ không giới hạn và các phiên bản Windows từ 7 đến 11.



Phân tích động cho phép bạn xem cách phần mềm độc hại hoạt động trong thế giới thực bằng cách liên kết hành vi của nó với thiết lập kỹ thuật của nó. Đó là một cách để kiểm tra hành động của nó trên các thiết lập hệ thống khác nhau và thu thập IOC.


Không chậm trễ hơn nữa, hãy đi sâu vào.


Xác định các phương pháp che giấu

Sau khi giải nén mẫu, chúng tôi bắt đầu phân tích thủ công shellcode và nhanh chóng nhận ra rằng nó bị xáo trộn. Nghiên cứu mã cho phép chúng tôi nhóm các kỹ thuật che giấu mà GuLoader sử dụng thành các danh mục:


  • Hướng dẫn XMM
  • Hướng dẫn JMP vô điều kiện
  • Hướng dẫn rác
  • Hướng dẫn so sánh giả
  • Hướng dẫn PUSHAD giả
  • Hướng dẫn PUSH giả
  • vị từ không rõ ràng
  • Và các biểu thức số học


Đây là thời điểm tốt để dừng lại, phân tích các phương pháp làm xáo trộn đang được sử dụng và phát triển một chiến lược gỡ rối.


Ví dụ, trong trường hợp của chúng tôi, hầu hết các kỹ thuật này đưa ra mã không làm thay đổi kết quả thực thi cuối cùng. Do đó, chúng tôi thường có thể “KHÔNG” chúng một cách an toàn để cải thiện khả năng đọc. Nhưng hãy tiến hành một cách thận trọng — không phải tất cả mã bị xáo trộn đều không liên quan đến hoạt động của chương trình, như chúng ta sẽ sớm khám phá ra.


Bây giờ, chúng ta hãy xem xét từng kỹ thuật che giấu này và xem cách đánh bại chúng.


1. Hướng dẫn XMM

Mã có nhiều hướng dẫn XMM. Chúng xuất hiện lộn xộn và thêm phức tạp vào quá trình phân tích. Chúng ta bắt gặp chúng ngay từ byte đầu tiên của shellcode được giải nén.


Lưu ý rằng nhiều công cụ mô phỏng vấp phải chúng do thiếu hỗ trợ mặc định. Chúng tôi đã thử nghiệm các động cơ tích hợp của Angr, Triton và Ghidra — tất cả đều thất bại.

Làm thế nào chúng tôi xử lý nó

Trong trường hợp của GuLoader, các hướng dẫn XMM không thực sự tác động đến hành vi dự định của mã. Bạn sẽ gặp các phương pháp che giấu tương tự trong rất nhiều phần mềm độc hại. Do đó, chúng ta có thể thay thế một cách an toàn tất cả các lệnh XMM bằng "NOP" như trong bảng sau:


Đây là kết quả trông như thế nào trong trình dịch ngược Ghidra:



2. Hướng dẫn JMP vô điều kiện

Các hướng dẫn JMP vô điều kiện phân đoạn mã thành các phần nhỏ hơn. Phương pháp này thường được sử dụng để tránh bị phần mềm chống vi-rút và các công cụ bảo mật khác phát hiện. Ngoài ra, nó có thể khiến công việc của các nhà phân tích tốn nhiều thời gian và bực bội hơn, vì họ phải nhảy giữa các khối này, đặc biệt là khi xử lý một lượng lớn mã. GuLoader và phần mềm độc hại khác thường sử dụng kỹ thuật này.



Làm thế nào chúng tôi xử lý nó

Phương pháp che giấu này khá dễ bị đánh bại. Trình phân tách mã trong mã dịch ngược thường nối thành công các khối này, cải thiện khả năng đọc mã, ngay cả khi có các bước nhảy vô điều kiện này. Như vậy, chúng ta có thể để nguyên các khối nhỏ mà không cần ghép chúng lại.


3. Hướng dẫn rác

Các hướng dẫn lắp ráp rác thường phát huy tác dụng như một lớp che giấu bổ sung. Các hướng dẫn này không thực hiện bất kỳ chức năng hữu hình nào, thường để lại các giá trị thanh ghi, luồng thực thi hoặc bộ nhớ không bị thay đổi.


Bạn cũng sẽ gặp những điều này trong GuLoader.





Hãy tìm những hướng dẫn không thực hiện hành động nào ("NOP", "FNOP") và những hướng dẫn dịch chuyển hoặc xoay theo bit 0 ("SHL reg, 0"; "ROL reg, 0"). Các hướng dẫn không tác động khác như "OR reg, 0", "XOR reg, 0", "CLD", "WAIT" cũng có mặt.


Làm thế nào chúng tôi xử lý nó

Xử lý các hướng dẫn so sánh giả khó hơn là chỉ thay thế các hướng dẫn rác bằng "NOP". Chúng tôi không thể xóa tất cả các hướng dẫn so sánh vì một số hướng dẫn cần thiết cho chức năng mã chính xác. Một cách để giải quyết vấn đề này là “đánh dấu” tất cả các hướng dẫn so sánh mà chúng tôi gặp phải. Nếu không tìm thấy hướng dẫn nào sử dụng kết quả so sánh, bạn có thể NOP hướng dẫn đó một cách an toàn. Nếu chúng tôi tìm thấy bước nhảy có điều kiện hoặc tương tự, chúng tôi sẽ bỏ đánh dấu so sánh để tránh bị xóa.


Bảng sau đây cho thấy một ví dụ trong đó tất cả các hướng dẫn so sánh ngoại trừ "CMP EDX,0x0" đã được thay thế có chọn lọc bằng NOP:



5. Hướng dẫn PUSHAD giả mạo

GuLoader cũng sử dụng chiến thuật che giấu bằng cách sử dụng hướng dẫn "PUSHAD" giả, cùng với hướng dẫn "POPAD" phù hợp. Chúng có thể tạm thời sửa đổi các giá trị thanh ghi nhưng bị vô hiệu hóa bởi "POPAD" khôi phục các giá trị thanh ghi ban đầu.



Làm thế nào chúng tôi xử lý nó

Nghiên cứu của chúng tôi cho thấy rằng tất cả các hướng dẫn "PUSHAD" trong GuLoader đều không liên quan. Vì vậy, chúng tôi giải quyết vấn đề này bằng cách thay thế "PUSHAD", "POPAD" và các hướng dẫn trung gian bằng NOP:


Tuy nhiên, không phải tất cả hướng dẫn "POPAD" trong GuLoader đều là rác. Chúng tôi để nguyên những thứ không có "PUSHAD" tương ứng.


6. Hướng dẫn PUSH giả

Một kỹ thuật che giấu khác tương tự như kỹ thuật trước đó là sử dụng các hướng dẫn "PUSH" giả mạo. Các hướng dẫn này chỉ đẩy một giá trị vào ngăn xếp để bật nó ra ngay lập tức.


Một ví dụ là bao gồm lệnh "PUSH SS", có thể theo sau là lệnh sửa đổi thanh ghi hoặc vị trí bộ nhớ. Tuy nhiên, "POP SS" tiếp theo sẽ khôi phục con trỏ ngăn xếp về giá trị ban đầu của nó.



Làm thế nào chúng tôi xử lý nó

Đánh bại các hướng dẫn PUSH giả giống như quy trình đối với PUSHAD giả, nhưng điều quan trọng là không thay đổi các thanh ghi không được đẩy.



7. Vị từ không rõ ràng

Các vị từ không rõ ràng là các câu lệnh có điều kiện luôn trả về đúng hoặc sai, nhưng chúng rất khó để phân tích hoặc dự đoán. Chúng được tìm thấy trong mã của GuLoader và làm phức tạp sự hiểu biết logic.


Chẳng hạn, một cặp hướng dẫn như “MOV BL, 0xB6” và “CMP BL, 0xB6” có thể được theo sau bởi một bước nhảy có điều kiện như “JNZ ADDR”. Việc so sánh luôn trả về false vì giá trị được so sánh bằng với giá trị đã di chuyển, khiến cho bước nhảy không cần thiết và gây trở ngại.



Làm thế nào chúng tôi xử lý nó

Việc khắc phục các vị từ không rõ ràng có vẻ khó khăn do yêu cầu "dự đoán" điều kiện nhảy. Tuy nhiên, tình huống của chúng ta đơn giản hơn vì tất cả các vị từ không rõ ràng đều nằm trong các khối "PUSHAD" và "POPAD". Do đó, chúng tôi chỉ cần thay thế tất cả các vị từ giữa các hướng dẫn này bằng NOP.


8. Biểu thức số học

Các biểu thức số học bị xáo trộn là một trong những kỹ thuật thú vị hơn được GuLoader sử dụng. Chúng làm cho việc hiểu các hoạt động thực tế được thực hiện trở nên khó khăn hơn. Những biểu thức này kết hợp các hành động số học như cộng hoặc trừ. Đôi khi, chúng được trộn lẫn với các cách che giấu khác như so sánh giả tạo, vị từ không rõ ràng và hướng dẫn rác.


Một ví dụ là di chuyển một giá trị không đổi vào một thanh ghi và thực hiện các phép tính số học:



Một ví dụ khác là đẩy một giá trị không đổi lên ngăn xếp và thực hiện các phép tính trên bộ nhớ:




Làm thế nào chúng tôi xử lý nó

Để giải mã các biểu thức số học của GuLoader, chúng tôi áp dụng một cách tiếp cận tương tự như xử lý các phép so sánh giả. Chúng tôi đánh dấu tất cả các hướng dẫn "MOV" trong đó đối số thứ hai là giá trị vô hướng và tất cả các hướng dẫn "PUSH" trong đó đối số là vô hướng. Khi gặp một phép toán số học, chúng tôi cập nhật giá trị không đổi trong lệnh đầu tiên và thay thế giá trị hiện tại bằng NOP. Bằng cách này, lệnh đầu tiên có kết quả và các lệnh số học tiếp theo được thay thế bằng NOP.


Dưới đây là các ví dụ với các thao tác “MOV” và “PUSH” được tối ưu hóa:




Hãy thận trọng với kích thước toán hạng. Duy trì kích thước chính xác trong quá trình hoạt động là rất quan trọng.


Kết thúc phân tích của chúng tôi

Trong bài viết này của các chuyên gia ANY.RUN , chúng tôi đã sử dụng GuLoader làm ví dụ thực tế để làm nổi bật các chiến lược giải mã nguồn điển hình. Chúng tôi bắt đầu với việc phân tích mã, sau đó nhóm các chiến thuật che giấu tương tự và cuối cùng, nghĩ ra những cách độc đáo để giải quyết từng chiến thuật.


Nhưng điều quan trọng là phải hiểu rằng những kỹ thuật này không phải là giải pháp một kích cỡ phù hợp cho tất cả. Mỗi mẫu phần mềm độc hại có thể đưa ra các chiến lược che giấu riêng cần có các biện pháp đối phó riêng.


Cuộc thảo luận của chúng tôi nhấn mạnh tầm quan trọng của việc chia nhỏ một nhiệm vụ phức tạp như giải mã nguồn thành các bước rõ ràng, dễ quản lý. Hãy nhớ rằng việc giải mã thành công bất kỳ phần mềm độc hại nào bao gồm phân tích chi tiết, phát hiện các mẫu mã hóa và tạo chiến lược tối ưu hóa.

L O A D I N G
. . . comments & more!

About Author

ANY.RUN HackerNoon profile picture
ANY.RUN@anyrun
Online interactive sandbox for DFIR/SOC investigations. Fast malware analysis and cybersecurity threat detection.

chuyên mục

BÀI VIẾT NÀY CŨNG CÓ MẶT TẠI...