[RE021] Phân tích Qakbot – Mã độc nguy hiểm đã tồn tại hơn một thập kỉ

 

1. Tổng quan

Qakbot (còn được biết đến với các tên khác như Qbot, QuakBot, Pinkslipbot) là một trong những Banking Trojan nổi tiếng với nhiệm vụ chính là đánh cắp thông tin tài khoản ngân hàng, các phiên giao dịch trực tuyến hoặc các thông tin tài chính khác. Mặc dù bị các hãng cung cấp phần mềm diệt virus phát hiện từ năm 2008, nhưng cho tới nay Trojan này vẫn tiếp tục hoạt động và được duy trì liên tục bởi những kẻ đứng đằng sau nó. Qakbot liên tục được cải tiến bằng cách áp dụng các kĩ thuật tiên tiến hoặc mới để tránh bị phát hiện, khiến cho việc phân tích trở nên khó khăn hơn. Trong những báo cáo mới đây, Qakbot còn được sử dụng để tải về các mã độc tống tiền khác như ProLock, Egregor.

Nguồn: CrowdStrike 2021 Global Threat Report

Qakbot có thể được phân phối thông qua Emotet, tuy nhiên với việc Emotet đã bị hạ gục mới đây thì hiện tại con đường chính của mã độc này là thông qua các chiến dịch email spam và phishing. Khác với Emotet sử dụng MS-Word kết hợp với VBA để tải về mã độc, Qakbot lại sử dụng MS-Excel với sự hỗ trợ của Excel 4.0 Macro (XLM macro) để tải và thực thi mã độc trên máy nạn nhân. Trong tương lai gần, các nhóm tin tặc và tội phạm mạng có khả năng sẽ chuyển qua sử dụng mã độc này để tấn công vào các tổ chức hoặc cá nhân ở Việt Nam.

Trong bài viết này, chúng tôi phân tích cách thức lây nhiễm của QakBot sau khi khởi chạy bởi tài liệu Excel độc hại, các kĩ thuật mã độc sử dụng để gây khó khăn cho việc phân tích cũng như cách để trích xuất danh sách C2. Kĩ thuật persistence mà Qakbot sử dụng khá hay, run key chỉ được tạo trước khi máy tắt hoặc chuyển trạng thái suspended và bị xóa ngay lập tức khi Qakbot thực thi lại. Qakbot tận dụng triệt để kĩ thuật mã hóa để che giấu thông tin, cũng như mã hóa payload trên memory.

Các hash được sử dụng trong bài viết:

2. Document template và XLM macro

Các template của Qakbot thay đổi tùy theo chiến dịch, kẻ tấn công thông qua các template này lừa nạn nhân kích hoạt macro để tiến hành lây nhiễm mã độc. Dạng maldocs này thường sẽ có một cell là “Auto_Open cell”, tương tự như hàm “Sub AutoOpen()” trong VBA để tự động thực thi macro khi nạn nhân nhấn nút “Enable Content”.

Như đã đề cập, các template này sử dụng Excel 4.0 macros (có trước cả VBA macros), gồm các hàm được đặt bên trong các ô (cell) của một macro sheet. Để phân tích dạng macro này có thể sử dụng các công cụ:

2.1. XLMMacroDeobfuscator 

Công cụ này cho phép trích xuất nội dung của các cells, cho biết macro sheet nào có cell là “Auto_Open cell”, đồng thời hỗ trợ emulate formula.

Tuy nhiên, do macro trong các maldocs thường sẽ được obfuscate nên không phải lúc nào chức năng emulate của công cụ cũng hoạt động tốt:

2.2. Cerbero Suite

Công cụ này được phát triển bởi Erik Pistelli. Phiên bản mới nhất đã hỗ trợ định dạng XLSB, cho phép decompile được các formula của XLS và XLSB đồng thời cung cấp tính năng xem trước bảng tính gần tương tự như khi mở bằng Microsoft Excel. Hơn nữa, nó cũng cung cấp khả năng emulate các formulas. Trong quá trình trao đổi với tác giả, tôi cùng với bạn của mình đã góp ý và cung cấp các samples để chuyên gia này hoàn thiện các chức năng của sản phẩm.

Tương tự như XLMMacroDeobfuscator, khi thực hiện phân tích maldoc với Cerbero, công cụ này cũng chỉ ra được điểm bắt đầu thực thi (entry point) là cell chứa Auto_Open.

Với sự hỗ trợ của tính năng emulate, có thể thấy maldoc này thực hiện đăng kí hàm API là URLDownloadToFileA, sử dụng hàm này để download các payloads từ nhiều địa chỉ khác nhau:
Nếu download thành công một trong số các payload trên sẽ sử dụng rundll32.exe để thực thi:

2.3. Microsoft Excel

Các công cụ nêu trên dựa vào các thư viện như xlrd2, pyxlsb2 cũng như parser, engine riêng để phân tích file. Do đó, trong trường hợp các công cụ này không đáp ứng được thì việc sử dụng Microsoft Excel vẫn là lựa chọn tốt nhất.

Khi phân tích bằng MS Excel, tìm tới cell chứa Auto_Open, lựa chọn tính năng Macros và chọn Step Into để bật cửa sổ Single Step:

Bằng việc sử dụng Step Into hoặc Evaluate để trace theo từng cell trong cùng column và hiển thị giá trị của từng Formula, ta có được thông tin:
Tổng kết lại, khi Qakbot maldoc thực thi được macro, nó sẽ thực hiện tải payload về máy nạn nhân để thực thi bằng rundll32.exe.

3. Loader payload

3.1. Phân tích cơ bản

Theo phân tích ở trên, payload được tải về là một DLL. DLL này export 4 hàm, trong đó có hàm DllRegisterServer được gọi bởi lệnh rundll32:

Dựa vào danh sách các hàm APIs mà DLL này import, có thể đoán được nó sẽ sử dụng để unpack ra một payload khác:
DLL này cũng sử dụng chữ kí số để tránh bị phát hiện bởi các phần mềm diệt virus và các hệ thống phát hiện:
3.2. Phân tích kĩ thuật của loader

DLL này khi thực thi sẽ thực hiện cấp phát và unpack vào memory payload chính và thực thi payload này:

Thực hiện dump payload từ memory để phục vụ phân tích. Payload dump được cũng là một DLL, code bằng Microsoft Visual C++, có tên gốc là stager_1.dll và export một hàm DllRegisterServer:
Để chắc chắn payload dump được là chính chính xác thì thường trong resource của payload này phải có các resource name là “308” và “311”.

4. Một số kĩ thuật được sử dụng trong payload chính

4.1. Junk code

Một kĩ thuật hay được sử dụng trong nhiều mẫu mã độc là chèn mã rác. Với kỹ thuật này, mã độc sẽ chèn rất nhiều mã không bao giờ được thực thi, các lệnh gọi hàm không trả về giá trị hoặc các lệnh nhảy có điều kiện với các điều kiện không bao giờ được đáp ứng. Mục đích chính của những đoạn mã này là làm cho các khối lệnh trông phức tạp hóa lên rất nhiều và gây mất thời gian của người phân tích.

Với payload của Qakbot, kẻ tấn công thực hiện chèn thêm các lời gọi hàm API vô tác dụng xen lẫn giữa các câu lệnh thật, ngoài mục tiêu gây mất thời gian nó có thể gây nhiễu thông tin khi thực thi mã độc trong các môi trường sandbox hoặc thông qua các chương trình ghi nhật kí các lời gọi hàm API.

4.2. Sử dụng quy ước gọi hàm phi chuẩn

Các calling convention tiêu chuẩn thường gặp khi phân tích mã độc là cdecl, stdcall, thiscall hay fastcall. Tuy nhiên, để gây phức tạp, Qakbot lồng ghép quy ước gọi hàm phi chuẩn khiến cho việc nhận biết các tham số truyền cho hàm trở nên khó khăn cũng như Hexrays khi decompile sẽ bị lỗi.

Ví dụ như hàm sau nhận 3 tham số truyền vào, trong đó tham số thứ nhất và thứ ba được đẩy vào stack, tham số thứ hai được gán cho thanh ghi eax. Lúc này Hexrays decompile sẽ nhận diện thiếu tham số:

Tham khảo bài viết sau để định nghĩa lại prototype của hàm. Trong trường hợp trên, ta có thể định nghĩa lại như sau: int __usercall sub_100184FE@<eax>(int arg1, int arg2@<eax>, int arg3). Kết quả có được:
Một ví dụ khác, hàm dưới đây nhận một tham số truyền vào và tham số này được gán cho thanh ghi eax. Việc nhận diện sai dẫn đến Hexrays decompile bị thiếu tham số:
Để giúp Hexrays decompile chính xác, định nghĩa prototype của hàm như sau: int *__usercall sub_10017EC5@<eax>(unsigned int arg1@<eax>). Kết quả thu được:
4.3. Giải mã strings

Tương tự Emotet, các strings chính mà payload sử dụng đều đã bị mã hóa và chỉ được giải mã khi cần sử dụng, sử dụng xong được giải phóng luôn. Các strings này sau khi mã hóa được lưu vào một mảng liên tục. Hàm giải mã nhận tham số truyền vào là giá trị index của chuỗi, sau đó đem XOR với một mảng byte được Qakbot khai báo sẵn. Trong quá trình phân tích payload này, chúng tôi thấy có 02 mảng byte chứa giá trị của các strings ban đầu đã bị mã hóa:

Tương ứng với mỗi mảng trên trên sẽ có một mảng byte chứa các giá trị dùng cho việc xor để giải mã các chuỗi:
Hàm giải mã nhận một tham số duy nhất là index của chuỗi. Bên trong hàm này sẽ gọi tới hàm chính để giải mã ra chuỗi cần sử dụng:
Hàm f_decrypt_string trong hình sẽ thực hiện nhiệm vụ sau:

  • Dựa vào giá trị index truyền vào cho hàm, tính toán độ dài của chuỗi cần giải mã.
  • Cấp phát vùng nhớ để lưu chuỗi giải mã.
  • Thực hiện vòng lặp xor với các bytes của mảng xor_bytes_arr để giải mã ra chuỗi ban đầu.

Với sự hỗ trợ của IDAPython, viết lại đoạn code thực hiện giải mã và bổ sung chú thích tại các hàm giải mã như sau:
Kết quả trước và sau khi thực hiện script sẽ giúp công việc phân tích dễ dàng hơn:
Thực hiện tương tự với các hàm giải mã khác. Tuy nhiên, kết quả trên hình có được sau khi giải mã các chuỗi có index được chỉ định sẵn trong code của Qakbot. Phần còn lại sẽ là các chuỗi với index được tính toán động khi mã độc này thực thi. Ví dụ như đoạn code sau:
Do vậy, để có được toàn bộ các chuỗi giải mã cùng với index liên quan, sử dụng đoạn code sau:
Danh sách toàn bộ các strings được giải mã xem tại Phụ lục 1 – Danh sách toàn bộ strings bên dưới.

4.4. Dynamic APIs resolve

Dựa vào kết quả giải mã strings, thu được danh sách các DLLs mà Qakbot sẽ sử dụng để lấy các hàm APIs cần thiết:

Payload sẽ tìm địa chỉ các hàm API(s) thông qua việc tìm kiếm hash được tính toán trước dựa vào tên hàm API. Ứng với mỗi DLLs sẽ có một mảng lưu thông tin hash được tính toán trước. Dưới đây là minh họa mảng lưu giá trị hash của các hàm API thuộc kernel32.dll (Mảng này sau đó sẽ được ghi đè bởi địa chỉ thật của các hàm API tương ứng):
Để phục vụ tính toán các hash, payload sử dụng thêm một bảng chứa các giá trị được dùng cho việc xor tại địa chỉ 0x1002B6F8 (g_xor_key_tbl). Thuật toán tìm kiếm địa chỉ hàm API được payload sử dụng như sau:
Viết lại hàm tính hash mà payload sử dụng, kết hợp với IDAPython để lấy ra danh sách các APIs và tạo danh sách enum tương ứng cho các hash:
Kết quả có được như sau:
Từ kết quả trên, tạo struct tương ứng và áp dụng struct này tại những đoạn code liên quan, kết quả sẽ khôi phục được lời gọi tới các hàm API:
4.5. Kiểm tra các giải pháp bảo vệ trên máy nạn nhân

Payload xây dựng danh sách các tiến trình liên quan đến các giải pháp bảo vệ endpoint gồm các trường group_id, group_index. Thực hiện vòng lặp giải mã các chuỗi tương ứng để có được danh sách các tên các process:

group_id

group_index

process name

0x1

0x660

ccSvcHst.exe

0x2

0x8C6

avgcsrvx.exe;avgsvcx.exe;avgcsrva.exe

0x4

0x2E7

MsMpEng.exe

0x8

0x1A6

mcshield.exe

0x10

0x6AD

avp.exe;kavtray.exe

0x20

0x398

egui.exe;ekrn.exe

0x40

0x141

bdagent.exe;vsserv.exe;vsservppl.exe

0x80

0x912

AvastSvc.exe

0x100

0x1B3

coreServiceShell.exe;PccNTMon.exe;NTRTScan.exe

0x200

0x90

SAVAdminService.exe;SavService.exe

0x400

0x523

fshoster32.exe

0x800

0x77C

WRSA.exe

0x1000

0x8F0

vkise.exe;isesrv.exe;cmdagent.exe

0x2000

0x7F9

ByteFence.exe

0x4000

0x726

MBAMService.exe;mbamgui.exe

0x8000

0xAFA

fmon.exe

Sau đó payload sử dụng các hàm CreateToolhelp32Snapshot; Process32First; Process32Next để liệt kê toàn bộ các tiến trình đang chạy trên máy nạn nhân, kiểm tra tên của tiến trình có nằm trong danh sách nói trên. Nếu có:

  • Các tiến trình thuộc cùng một danh sách thì trả về kết quả là group_id tương ứng. Ví dụ: nếu có avp.exe;kavtray.exe thì kết quả trả về là 0x10.
  • Các tiến trình thuộc các danh sách khác nhau thì kết quả là lấy or của các group_id tương ứng. Ví dụ nếu có avp.exe;kavtray.exe AvastSvc.exe thì kết quả trả về là 0x10 | 0x80 = 0x90.

Kết quả này sẽ ảnh hưởng tới việc thực hiện process injection. Ví dụ: nếu máy nạn nhân sử dụng giải pháp bảo vệ của Kaspersky (có tiến trình avp.exe) thì Qakbot sẽ thực hiện inject code vào mobsync.exe thay vì explorer.exe.

4.6. Anti-sandbox

4.6.1. Kiểm tra tên file

Payload kiểm tra tên của nó có nằm trong danh sách blacklist gồm: artifact.exe;mlwr_smpl;sample;sandbox;cuckoo-;virus. Vì nhiều khả năng, các môi trường sanbox sẽ tự động đổi tên file.

4.6.2. Kiểm tra tiến trình

Payload kiểm tra các tiến trình đang chạy có nằm trong danh sách blacklist gồm: srvpost.exe;frida-winjector-helper-32.exe;frida-winjector-helper-64.exe.

4.6.3. Kiểm tra Device

Payload sử dụng các hàm SetupDiGetClassDevsA, SetupDiEnumDeviceInfo, SetupDiGetDeviceRegistryPropertyA thuộc thư viện setupapi.dll để lấy thông tin về device trên hệ thống, từ đó kiểm tra với danh sách blacklist gồm A3E64E55_pr;VboxVideo;Red Hat VirtIO;QEMU.

4.6.4. Kiểm tra tên máy và tài khoản

Payload kiểm tra tên máy và tài khoản đăng nhập có nằm trong danh sách blacklist là: VIRTUAL-PCVirtual.

Nếu thỏa bất kì điều kiện kiểm tra nào ở trên, tiến trình của payload sẽ rơi vào vòng lặp vô hạn:

4.7. Thông tin cấu hình và danh sách C2 (IP & Port)

Như đã đề cập ở trên, payload nếu được dump chính xác sẽ có các resource name là “308” và “311”. Dựa vào việc giải mã strings ở trên, ta có thể tìm được code liên quan tới các strings này:

4.7.1. Giải mã thông tin cấu hình

Cấu hình của Qakbot được lưu ở resource 308, đoạn code liên quan tới resource này sẽ thực hiện:

  • Gọi hàm giải mã với giá trị index0x3F5 để giải mã ra chuỗi “308”.
  • Sử dụng các hàm API của kernel32FindResourceA; SizeofResource; LoadResource để tải dữ liệu lưu trữ tại resource này vào vùng nhớ đã được cấp phát.
  • Gọi hàm thực hiện giải mã dữ liệu.

Payload sẽ thực hiện kiểm tra lại kích thước của resource và gọi hàm f_decrypt_res_data_by_using_RC4 để thực hiện nhiệm vụ giải mã:
Theo pseudocode trên hình, toàn bộ quá trình giải mã sẽ như sau:
  • 20 bytes đầu tiên của dữ liệu sẽ là khóa RC4, phần dữ liệu còn lại là dữ liệu cần được giải mã.
  • Sử dụng thuật toán RC4 với key có được để giải mã dữ liệu. Dữ liệu sau giải mã gồm:
    • 20 bytes đầu tiên của dữ liệu là SHA1 hash được tính trên phần còn lại của dữ liệu được giải mã.
    • Dữ liệu đã giải mã là phần loại đi 20 bytes của SHA1 hash.
  • Xác minh lại SHA1 hash để đảm bảo việc giải mã là chính xác.

Toàn bộ quá trình trên được minh họa như hình dưới đây:

Như vậy, nội dung sau khi giải mã của resource “308” gồm:
  • 10=biden02 --> CampaignID
  • 3=1614154620   --> Unix Timestamp (Wed 24 February 2021 08:17:00 UTC)
4.7.2. Danh sách C2 (IP & Port)

Với resource “311”, quá trình giải mã cũng tương tự như trên:

Kết quả sau giải mã thu được danh sách địa chỉ IP và port được phân tách nhau bởi giá trị 01:
Toàn bộ danh sách C2 mà payload này sử dụng xem tại Phụ lục 2 – Danh sách C2s bên dưới.

4.8. Process Injection

Qakbot lựa chọn tiến trình để thực hiện inject dựa vào môi trường hệ điều hành và thông tin về group_id liên quan tới các giải pháp bảo vệ đã đề cập ở trên.

Tiếp theo:

  • Sử dụng hàm API CreateProcessW để tạo tiến trình cần inject ở trạng thái suspended. Để đơn giản, tôi sẽ tập trung vào quá trình thực hiện inject vào explorer.exe.
  • Tạo một vùng nhớ mới trên tiến trình explorer.exe với quyền truy cập RWX bằng các hàm API NtCreateSection, NtMapViewOfSection.
  • Copy toàn bộ Qakbot payload vào vùng nhớ đã tạo ở trên.

Sử dụng các hàm GetThreadContext, NtProtectVirtualMemory, NtWriteVirtualMemory để ghi đè vào địa entry point của explorer.exe bằng một lệnh nhảy tới địa chỉ hàm thuộc Qakbot payload:
Cuối cùng gọi hàm ResumeThread để thực thi tiến trình đã inject code. Lúc này, explorer.exe thực thi từ entry point của nó, và thực hiện lệnh nhảy tới địa chỉ hàm của Qakbot payload:

4.9. Ghi đè payload và mã hóa payload trên mem

Để gây khó khăn cho những người làm công tác incident response, Qakbot thực hiện ghi đè null bytes lên chính payload trên disk (giữ lại DOS_HEADER, NT_HEADERS, SECTION_HEADER) đồng thời cũng mã hóa toàn bộ payload để lưu trên memory phục vụ cho việc thực hiện thực hiện kĩ thuật persistence. Điều này đảm bảo rằng toàn bộ code chính của Qakbot sẽ được thực hiện từ tiến trình đã bị inject là explorer.exe hoặc mobsync.exe.


4.10. Persistence operation

4.10.1. Run key persistence

Việc tạo persistence được thực hiện sau bước process injection. Lúc này, Qakbot sẽ tạo một thread thực hiện nhiệm vụ:

  • Gọi hàm RegisterClassExA để đăng kí một window với class name ngẫu nhiên.
  • Cài đặt một hàm callback f_process_wnd_message để thực hiện xử lý windows message.

  • Các windows message được xử lý tại hàm f_process_wnd_message như sau:
    • Khi nhận tín hiệu shutdown (WM_QUERYENDSESSION) hoặc tín hiệu power-management (WM_POWERBROADCAST) đi kèm với event báo hiệu máy sẽ chuyển sang trạng thái suspend (PBT_APMSUSPEND) thì sẽ gọi hàm f_install_persistence().
    • Khi nhận tín hiệu power-management (WM_POWERBROADCAST) đi kèm với event báo hiệu máy chuyển trạng thái resume (PBT_APMRESUMESUSPEND || PBT_APMRESUMEAUTOMATIC) thì sẽ gọi hàm f_uninstall_prev_persistence().

  • Hàm f_install_persistence() thực hiện:
    • Giải mã toàn bộ payload đã bị encrypt trước đó bằng RC4 vào memory.
    • Cấu thành lệnh regsvr32.exe -s <Qakbot_module_path>.
    • Tạo một giá trị với tên nhẫu nhiên tại registry key HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run để lưu câu lệnh trên.

  • Hàm f_uninstall_prev_persistence() thực hiện công việc ngược lại:
    • Xóa persistence key đã tạo.
    • Xóa payload trên disk.

4.10.2. Fake scheduled task persistence

Ngoài việc tạo run key persistence như trên, Qakbot còn tạo thêm một fake persistence là scheduled task để đánh lừa. Task được tạo có tên ngẫu nhiên thông qua câu lệnh sau: "%s\system32\schtasks.exe" /Create /RU "NT AUTHORITY\SYSTEM" /tn %s /tr "%s" /SC ONCE /Z /ST %02u:%02u /ET %02u:%02u

Ví dụ lệnh khi Qakbot thực thi: "C:\Windows\system32\schtasks.exe" /Create /RU "NT AUTHORITY\SYSTEM" /tn gyfzcixqb /tr "regsvr32.exe -s \"C:\Users\REM\Desktop\Qakbot_DLL_unpacked.bin\"" /SC ONCE /Z /ST 12:39 /ET 12:51

Tuy nhiên, lúc này payload trên disk đã bị xóa dữ liệu, chỉ giữ lại thông tin DOS_HEADER, NT_HEADERS, SECTION_HEADER.

4.11. Tương tác với C2

Để gây khó khăn cho người phân tích cũng như các hệ thống bảo vệ, Qakbot sẽ mã hóa POST request của nó trước khi gửi tới C2 server. Một POST request của Qakbot thường sẽ như sau:

Trước khi bị mã hóa thông tin POST request sẽ như hình dưới:
POST request này sẽ được mã hóa rồi gửi tới C2 server:
Trong đó:
  • Hàm f_encrypt_POST_request_by_RC4 thực hiện:
    • Tạo một rc4_key có độ dài 16 bytes.
    • rc4_key này sẽ ghép với một chuỗi được giải mã là “jHxastDcds)oMc=jvh7wdUhxcsdt2”. Sau đó sử dụng SHA1 để hash.
    • Sử dụng giá trị hash tính được làm rc4_key để mã hóa POST request.
    • Kết quả trả về là một vùng nhớ gồm 16 bytes đầu là rc4_key và POST request đã bị mã hóa
  • Hàm f_base64_transform sẽ thực hiện encode toàn bộ vùng nhớ chứa rc4_key và POST request đã mã hóa thành chuỗi ở định dạng base64.
  • Cuối cùng gọi hàm f_send_POST_request_to_C2 để gửi POST request này tới C2.
Dựa vào toàn bộ quá trình trên, có thể viết lại hàm giải mã POST request như sau:

5. Kết luận

Trải qua hơn một thập kỉ, Qakbot vẫn tồn tại và luôn là một mối đe dọa thường trực đối với các tổ chức lớn hiện nay. Việc sử dụng các tài liệu XLSB khiến cho tỉ lệ bị phát hiện thấp hơn so với VBA macro và gây khó khăn cho các giải pháp bảo mật. Bên cạnh đó, các payload của Qakbot cũng được áp dụng các kĩ thuật nâng cao, tiên tiến nhằm tránh bị phát hiện, gây khó khăn rất nhiều cho những người phân tích. Những kẻ đứng sau Qakbot cũng tích cực trong việc bổ sung các kĩ thuật tinh vi hơn để phát triển và mở rộng thêm tính năng. Cho tới nay, danh tính của những kẻ này vẫn luôn là một dấu hỏi. Hi vọng, trong tương lai, Qakbot cũng sẽ bị hạ gục như Emotet.

6. Tham khảo


index boundary: 0xB10

index: 0x0, decrypted string: tcpdump.exe;windump.exe;ethereal.exe;wireshark.exe;ettercap.exe;rtsniff.exe;packetcapture.exe;capturenet.exe

index: 0x6d, decrypted string: %SystemRoot%\SysWOW64\explorer.exe

index: 0x90, decrypted string: SAVAdminService.exe;SavService.exe

index: 0xb3, decrypted string: user32.dll

index: 0xbe, decrypted string: mpr.dll

index: 0xc6, decrypted string: Mozilla/5.0 (Windows NT 6.1; rv:77.0) Gecko/20100101 Firefox/77.0

index: 0x108, decrypted string: advapi32.dll

index: 0x115, decrypted string: %SystemRoot%\System32\mobsync.exe

index: 0x137, decrypted string: ntdll.dll

index: 0x141, decrypted string: bdagent.exe;vsserv.exe;vsservppl.exe

index: 0x166, decrypted string: Initializing database...

index: 0x17f, decrypted string: %SystemRoot%\SysWOW64\mobsync.exe

index: 0x1a1, decrypted string: .cfg

index: 0x1a6, decrypted string: mcshield.exe

index: 0x1b3, decrypted string: coreServiceShell.exe;PccNTMon.exe;NTRTScan.exe

index: 0x1e2, decrypted string: shell32.dll

index: 0x1ee, decrypted string: image/jpeg

index: 0x1f9, decrypted string: image/gif

index: 0x203, decrypted string: C:\INTERNAL\__empty

index: 0x217, decrypted string: %SystemRoot%\SysWOW64\xwizard.exe

index: 0x239, decrypted string: t=%s time=[%02d:%02d:%02d-%02d/%02d/%d]

index: 0x261, decrypted string: abcdefghijklmnopqrstuvwxyz

index: 0x27c, decrypted string: SOFTWARE\Wow6432Node\Microsoft AntiMalware\SpyNet

index: 0x2ae, decrypted string: \sf2.dll

index: 0x2b7, decrypted string: Content-Type: application/x-www-form-urlencoded

index: 0x2e7, decrypted string: MsMpEng.exe

index: 0x2f3, decrypted string: %SystemRoot%\SysWOW64\explorer.exe

index: 0x316, decrypted string: image/pjpeg

index: 0x322, decrypted string: SOFTWARE\Microsoft\Windows Defender\Exclusions\Paths

index: 0x357, decrypted string: %SystemRoot%\System32\xwizard.exe

index: 0x379, decrypted string: Software\Microsoft

index: 0x38c, decrypted string: cscript.exe

index: 0x398, decrypted string: egui.exe;ekrn.exe

index: 0x3aa, decrypted string: SOFTWARE\Wow6432Node\Microsoft\Windows Defender\Spynet

index: 0x3e1, decrypted string: WScript.Sleep %u

Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\%coot\cimv2")

Set objProcess = GetObject("winmgmts:root\cimv2:Win32_Process")

errReturn = objProcess.Create("%s", null, nul, nul)

WSCript.Sleep 2000

Set fso = CreateObject("Scripting.FileSystemObject")

fso.DeleteFile("%s")

index: 0x523, decrypted string: fshoster32.exe

index: 0x532, decrypted string: ALLUSERSPROFILE

index: 0x542, decrypted string: kernel32.dll

index: 0x54f, decrypted string: application/x-shockwave-flash

index: 0x56d, decrypted string: Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\%coot\cimv2")

Set objProcess = GetObject("winmgmts:root\cimv2:Win32_Process")

errReturn = objProcess.Create("%s", null, nul, nul)

index: 0x641, decrypted string: %SystemRoot%\explorer.exe

index: 0x65b, decrypted string: c:\\

index: 0x660, decrypted string: ccSvcHst.exe

index: 0x66d, decrypted string: %ProgramFiles(x86)%\Internet Explorer\iexplore.exe

index: 0x6a0, decrypted string: netapi32.dll

index: 0x6ad, decrypted string: avp.exe;kavtray.exe

index: 0x6c1, decrypted string: crypt32.dll

index: 0x6cd, decrypted string: shlwapi.dll

index: 0x6d9, decrypted string: snxhk_border_mywnd

index: 0x6ec, decrypted string: SOFTWARE\Microsoft\Microsoft AntiMalware\SpyNet

index: 0x71c, decrypted string: wpcap.dll

index: 0x726, decrypted string: MBAMService.exe;mbamgui.exe

index: 0x742, decrypted string: \\.\pipe\

index: 0x74c, decrypted string: .dll

index: 0x751, decrypted string: SOFTWARE\Microsoft\Windows Defender\SpyNet

index: 0x77c, decrypted string: WRSA.exe

index: 0x785, decrypted string: reg.exe ADD "HKLM\%s" /f /t %s /v "%s" /d "%s"

index: 0x7b4, decrypted string: 1234567890

index: 0x7bf, decrypted string: wmic process call create 'expand "%S" "%S"'

index: 0x7ec, decrypted string: wtsapi32.dll

index: 0x7f9, decrypted string: ByteFence.exe

index: 0x807, decrypted string: SubmitSamplesConsent

index: 0x81c, decrypted string: {%02X%02X%02X%02X-%02X%02X-%02X%02X-%02X%02X-%02X%02X%02X%02X%02X%02X}

index: 0x863, decrypted string: NTUSER.DAT

index: 0x86e, decrypted string: .dat

index: 0x873, decrypted string: cmd.exe

index: 0x87b, decrypted string: .exe

index: 0x880, decrypted string: %s\system32\

index: 0x88d, decrypted string: ws2_32.dll

index: 0x898, decrypted string: %ProgramFiles%\Internet Explorer\iexplore.exe

index: 0x8c6, decrypted string: avgcsrvx.exe;avgsvcx.exe;avgcsrva.exe

index: 0x8ec, decrypted string: */*

index: 0x8f0, decrypted string: vkise.exe;isesrv.exe;cmdagent.exe

index: 0x912, decrypted string: AvastSvc.exe

index: 0x91f, decrypted string: c:\hiberfil.sysss

index: 0x931, decrypted string: wininet.dll

index: 0x93d, decrypted string: %SystemRoot%\explorer.exe

index: 0x957, decrypted string: Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\%coot\cimv2")

Set colFiles = objWMIService.ExecQuery("Select * From CIM_DataFile Where Name = '%s'")

For Each objFile in colFiles

objFile.Copy("%s")

Next

index: 0xa43, decrypted string: aabcdeefghiijklmnoopqrstuuvwxyyz

index: 0xa64, decrypted string: urlmon.dll

index: 0xa6f, decrypted string: SpyNetReporting

index: 0xa7f, decrypted string: setupapi.dll

index: 0xa8c, decrypted string: aaebcdeeifghiiojklmnooupqrstuuyvwxyyaz

index: 0xab3, decrypted string: SOFTWARE\Microsoft\Microsoft Antimalware\Exclusions\Paths

index: 0xaed, decrypted string: aswhookx.dll

index: 0xafa, decrypted string: fmon.exe

index: 0xb03, decrypted string: aswhooka.dll

index boundary: 0x435

index: 0x0, decrypted string: \System32\WindowsPowerShell\v1.0\powershell.exe

index: 0x30, decrypted string: srvpost.exe;frida-winjector-helper-32.exe;frida-winjector-helper-64.exe

index: 0x78, decrypted string: powershell.exe

index: 0x87, decrypted string: /t4

index: 0x8b, decrypted string: %s \"$%s = \\\"%s\\\\; & $%s\"

index: 0xaa, decrypted string: SOFTWARE\Microsoft\Windows\CurrentVersion\Run

index: 0xd8, decrypted string: A3E64E55_pr;VBoxVideo

index: 0xee, decrypted string: .lnk

index: 0xf3, decrypted string: at.exe %u:%u "%s" /I

index: 0x108, decrypted string: Red Hat VirtIO;QEMU

index: 0x11c, decrypted string: net view /all

index: 0x12a, decrypted string: nslookup -querytype=ALL -timeout=10 _ldap._tcp.dc._msdcs.%s

index: 0x166, decrypted string: ipconfig /all

index: 0x174, decrypted string: SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList

index: 0x1ad, decrypted string: regsvr32.exe -s

index: 0x1be, decrypted string: %s "$%s = \"%s\"; & $%s"

index: 0x1d7, decrypted string: Microsoft

index: 0x1e1, decrypted string: Self test FAILED!!!

index: 0x1f5, decrypted string: 311

index: 0x1f9, decrypted string: %s %04x.%u %04x.%u res: %s seh_test: %u consts_test: %d vmdetected: %d createprocess: %d

index: 0x252, decrypted string: whoami /all

index: 0x25e, decrypted string: cmd /c set

index: 0x269, decrypted string: qwinsta

index: 0x271, decrypted string: arp -a

index: 0x278, decrypted string: nltest /domain_trusts /all_trusts

index: 0x29a, decrypted string: route print

index: 0x2a6, decrypted string: "%s\system32\schtasks.exe" /Create /RU "NT AUTHORITY\SYSTEM" /tn %s /tr "%s" /SC ONCE /Z /ST %02u:%02u /ET %02u:%02u

index: 0x31b, decrypted string: VIRTUAL-PC

index: 0x326, decrypted string:  /c ping.exe -n 6 127.0.0.1 &  type "%s\System32\calc.exe" > "%s"

index: 0x368, decrypted string: error res='%s' err=%d len=%u

index: 0x385, decrypted string: net share

index: 0x38f, decrypted string: Virtual

index: 0x397, decrypted string: net localgroup

index: 0x3a6, decrypted string: artifact.exe;mlwr_smpl;sample;sandbox;cuckoo-;virus

index: 0x3da, decrypted string: Self test OK.

index: 0x3e8, decrypted string: netstat -nao

index: 0x3f5, decrypted string: 308

index: 0x3f9, decrypted string: ProfileImagePath

index: 0x40a, decrypted string: amstream.dll

index: 0x417, decrypted string: jHxastDcds)oMc=jvh7wdUhxcsdt2



QakBot C2 List

98.173.34.213:995

160.3.187.114:443

73.25.124.140:2222

24.50.118.93:443

82.127.125.209:990

83.110.109.106:2222

79.129.121.81:995

189.223.234.23:995

125.63.101.62:443

113.22.175.141:443

172.78.30.215:443

47.146.169.85:443

47.22.148.6:443

76.25.142.196:443

78.63.226.32:443

105.198.236.101:443

75.67.192.125:443

176.181.247.197:443

105.96.8.96:443

108.31.15.10:995

176.205.222.30:2078

115.133.243.6:443

83.110.11.244:2222

195.43.173.70:443

197.51.82.72:443

89.137.211.239:995

105.198.236.99:443

144.139.47.206:443

202.188.138.162:443

24.43.22.218:993

69.58.147.82:2078

157.131.108.180:443

92.59.35.196:2222

195.12.154.8:443

86.160.137.132:443

59.90.246.200:443

96.57.188.174:2222

172.87.157.235:3389

189.211.177.183:995

173.184.119.153:995

50.244.112.106:443

144.139.166.18:443

90.65.236.181:2222

81.150.181.168:2222

68.186.192.69:443

74.222.204.82:995

197.161.154.132:443

38.92.225.121:443

197.45.110.165:995

71.117.132.169:443

85.52.72.32:2222

217.133.54.140:32100

193.248.221.184:2222

95.77.223.148:443

83.110.103.152:443

80.227.5.69:443

209.210.187.52:995

50.29.166.232:995

108.160.123.244:443

24.152.219.253:995

81.97.154.100:443

203.198.96.37:443

80.11.173.82:8443

97.69.160.4:2222

196.151.252.84:443

172.115.177.204:2222

98.121.187.78:443

47.187.108.172:443

216.201.162.158:443

140.82.49.12:443

71.199.192.62:443

71.88.193.17:443

182.48.193.200:443

71.187.170.235:443

77.211.30.202:995

77.27.204.204:995

96.37.113.36:993

187.250.39.162:443

122.148.156.131:995

173.21.10.71:2222

119.153.43.235:3389

71.74.12.34:443

75.118.1.141:443

75.136.26.147:443

67.6.12.4:443

71.197.126.250:443

78.185.59.190:443

125.239.152.76:995

45.46.53.140:2222

98.240.24.57:443

199.19.117.131:443

113.211.120.112:443

74.68.144.202:443

73.153.211.227:443

98.252.118.134:443

189.222.59.177:443

187.250.177.33:995

186.28.55.211:443

189.210.115.207:443

90.101.117.122:2222

72.240.200.181:2222

151.205.102.42:443

24.55.112.61:443

82.12.157.95:995

189.146.183.105:443

72.252.201.69:443

109.12.111.14:443

24.229.150.54:995

209.210.187.52:443

67.8.103.21:443

47.196.192.184:443

24.139.72.117:443

79.115.174.55:443

94.53.92.42:443

86.236.77.68:2222

89.3.198.238:443

213.60.147.140:443

84.247.55.190:8443

2.7.116.188:2222

106.51.85.162:443

87.202.87.210:2222

142.117.191.18:2222

196.221.207.137:995

188.26.91.212:443

108.46.145.30:443

125.209.114.182:995

27.223.92.142:995

173.25.45.66:443

32.210.98.6:443

65.27.228.247:443

108.29.32.251:443

189.223.97.175:443

78.97.207.104:443

181.48.190.78:443

2.232.253.79:995

136.232.34.70:443

207.246.77.75:2222

45.77.115.208:443

207.246.77.75:8443

45.63.107.192:443

45.77.117.108:2222

45.77.117.108:8443

45.77.115.208:995

45.77.117.108:443

144.202.38.185:2222

149.28.98.196:995

144.202.38.185:995

149.28.101.90:8443

149.28.99.97:995

45.32.211.207:995



Tran Trung Kien (aka m4n0w4r) 

Malware Analysis Expert

 

R&D Center - VinCSS (a member of Vingroup)



No comments:

Post a Comment