Một số phương pháp trích xuất malicious AutoIT script


Source: https://www.2-spyware.com/remove-autoit-v3-script-virus.html

1. Sơ lược về AutoIT


AutoIt là một ngôn ngữ kịch bản miễn phí được thiết kế nhằm tự động hóa các nhu cầu cơ bản của người dùng cũng như các tác vụ liên quan tới GUI Windows. AutoIt thường rất nhỏ và có khả năng thực thi trên tất cả các hệ điều hành Windows mà không đòi hỏi các thư viện “runtimes” như các chương trình được lập trình bằng Visual C++, ...Ngôn ngữ này được sử dụng cho các mục đích như:

  • Mô phỏng lại các tổ hợp phím, thao tác di chuyển chuột và các thao tác điều khiển cửa sổ.
  • Nhận thông tin và tương tác với các thành phần điều khiển như edit boxes, check boxes, list boxes, button, status bar.
  • Tương tác với các tiến trình.
  • Gọi trực tiếp tới các DLL và các hàm Windows API.
  • Các script có thể được biên dịch thành các tập tin thực thi độc lập.
  • ...

Nhờ vào những tính năng tiện lợi ở trên mà việc sử dụng AutoIT để viết phần mềm độc hại không phải là mới. Nó có thể được sử dụng làm keylogger, downloader, hoặc giai đoạn thăm dò trong quá trình lây nhiễm máy tính của nạn nhân. Tại Việt Nam, mã độc dạng này đã xuất hiện từ những năm 2006, điển hình trong đó là mã độc XRobots.


2. Công cụ sử dụng


Danh sách các công cụ được sử dụng trong bài viết:


3. Cách nhận biết AutoIT


Khi phân tích một tập tin nghi ngờ là mã độc, thường người phân tích sẽ sử dụng các công cụ để kiểm tra xem tập tin đó có định dạng gì, được biên dịch bằng ngôn ngữ nào, có bị packed hay không, …Với AutoIt sẽ có các dấu hiệu nhận biết như sau.

  • Thông qua các công cụ như Exeinfo PE hoặc PEStudio:



  • Thông qua Magic number: A3484BBE986C4AA9994C530A86D6487D

Khi biên dịch một AutoIt script với công cụ Aut2Exe, theo mặc định, một tệp thực thi pack bằng UPX được tạo ra. Mở bằng một trình Hex editor và tìm kiếm chuỗi magic number nói trên, theo sau sẽ là dấu hiệu nhận dạng của AutoIt thông qua chuỗi AU3!EA06.

4. Phương pháp trích xuất script


Các phương pháp trình bày dưới đây được tham khảo từ các chuyên gia @VK_Intel; @0xffff0800; @Hexacorn
  • Phương pháp thứ nhất: “Drag & Drop”

Sở dĩ gọi phương pháp này là “drag & drop” là vì nó rất đơn giản, chỉ việc kéo thả một AutoIt exe-file vào trình Exe2Aut để nhận được script gốc. Exe2Aut sẽ tự động lưu script tại cùng thư mục với phần mở rộng là <filename>_.au3:


Tuy nhiên, không phải trường hợp nào Exe2Aut cũng hoạt động, ví dụ như trường hợp này:



  • Phương pháp thứ hai

Để khắc phục cho trường hợp không trích xuất được bằng phương pháp đầu, phương pháp này sử dụng Resource Hacker để trích xuất script resource, lưu lại với tên bất kì với phần mở rộng là .au3. Tiếp theo, chuyển đổi file đã lưu sang định dạng PE bằng công cụ Aut2Exe. Lưu ý bỏ tùy chọn "Compile for system x64" trong quá trình thực hiện vì Exe2Aut không hỗ trợ x64 executables.


Dưới đây là phần demo minh họa cho phương pháp này:




  • Phương pháp thứ 3

Sử dụng Python script (được convert từ autoit64to32.pl(Perl script) của @Hexacorn) để trích xuất AutoIT script blob từ file thực thi và chuyển đổi sang định dạng 32 bit tương ứng bằng cách sử dùng AutoItSC.bin (32 bit) đi kèm trong bộ autoit-v3.2.8.1. File sau chuyển đổi sẽ thông qua Exe2Aut để lấy ra nội dung của script:


Nội dung của autoit64to32.py như sau:
import sys

if len(sys.argv) != 3:
        print "Usage: python.exe autoit64to32.py <AutoItSC.bin> <sample>"
        sys.exit(1)
else:
        try:
                print 'Processing: ' + sys.argv[2]
                print '- Reading ' + sys.argv[1]
                autoitsc_content = open(sys.argv[1], 'rb').read()

                print '- Reading ' + sys.argv[2]
                sample_content  = open(sys.argv[2], 'rb').read()
                
                print '- Looking for the script'
                offset = sample_content.find(b'\xA3\x48\x4B\xBE\x98\x6C\x4A\xA9\x99\x4C\x53\x0A\x86\xD6\x48\x7D')
                if offset != -1:
                        print '- Script found at: 0x%x' % offset
                        sample_content = sample_content[offset:]

                        pe32_filename = sys.argv[2] + '.a32b.exe'
                        print '- Creating 32-bit version: ' + pe32_filename

                        open(pe32_filename, 'wb').write(autoitsc_content + sample_content)
                else:
                        print '- Script not found !'
        except Exception as e:
                print repr(e)

Dưới đây là phần demo minh họa cho phương pháp này:


Tran Trung Kien (aka m4n0w4r)  
R&D Center - VinCSS (a member of Vingroup) 

2 comments:

  1. Bài viết đạt đến trình cảnh giới cả về bố cục và lời văn. Chỉ tiếc trình người đọc gà quá nên xem code cứ như xem hoạt hình hê hê. Hóng bài kế.

    ReplyDelete
  2. Một ngôn ngữ để tưởng niệm :( hazz

    ReplyDelete