lOMoARcPSD| 58815430
Phân ch nh mã độc
Instrucons: Phân ch nh mã độc brbbot.exe trong thư mục sample buoi 2.zip ( pass giải
nén: infected). Xác định:
1. Mã độc có bị virustotal gán nhãn độc hại hay không?
2. Mã độc có đạt kỹ thuật persistence?
3. Strings của le mã độc gợi ý điều gì?
4. Dấu hiệu le của mã độc xuất hiện trên máy nạn nhân?
5. Dấu hiệu về network của mã độc?
6. Mã độc sử dụng thuật toán gì để giải mã cong?
7. Mã độc thuộc loại mã độc nào?
Soluon
1. Mã độc có bị virustotal gán nhãn độc hại hay không?
Sau khi upload le lên VirusTotal website đưa ra kết quả rằng 63/73 nhà cung cấp bảo mật n
nhãn tệp này là độc hại. 2. Mã độc có đạt kỹ thut persistence?
“Persistent Techniques” là các kỹ thuật giúp mã độc tạo được sự tồn tại và duy trì hoạt động
trong hệ thống mục êu. Em sẽ trình bày sơ lược về cái nhìn tổng quan đầu ên đối với le mã
độc này.
Hàm wWinMain đầu ên khởi tạo Winsock (WSAStartup), giao ếp với C&C Server
Hàm sub_140001150(), có thể m cong của máy? hoặc là tài nguyên nào đó rồi lưu vào
le tạm thời brbcong.tmp
Hàm sub_140002230() lấy tên tệp, kiểm tra xem tệp có đang ở APPDATA hay không, sau
đó tạo một bản sao của tệp ở một vị trí cố định. Đặc biệt, hàm đã mở khóa Registry, sau
đó thêm le brbbot sẽ được thực thi mỗi lần máy chạy. Đồng thời hàm cũng di chuyển
hay xóa tệp brbcong.tmp v11 = RegOpenKeyExA(
HKEY_LOCAL_MACHINE,
"Soware\\Microso\\Windows\\CurrentVersion\\Run",
0,
0x20006u,
&hKey);
Hàm sub_1400012E0(&unk_140014560) trích xuất các tham số (uri, exec, conf, le, exit,
...) là các tham số cong, có thể sử dụng những dữ liệu này để mã độc hoạt động
Hàm sub_140001C10(&unk_140014560, &v9, &hInternet) có thể tạo ra một url, sau đó
mã hóa trước khi gửi request. Phần dữ liệu này có thể là thông n của máy bị mã độc
tấn công.
strcpy(Format, "%s?i=%s&c=%s&p=%s");
lOMoARcPSD| 58815430
Hàm sub_140002550(), hàm ở cuối của chương trình, có nhiệm vụ xóa le tạm
brbcong.tmp, sau đó mở khóa Registry và xóa le mã độc brbbot, sau đó đóng Registry.
Bên cạnh đó, mã độc cũng sử dụng một số API như
InternetCloseHandle, sau đó dọn dẹp tài nguyên bằng WSACleanup... Một điểm đáng
chú ý là, các hàm kể trên quản lí bộ nhớ khá kĩ lưỡng, đều giải phóng bộ nhớ trước khi kết
thúc hàm (HeapFree...). Ví dụ như ở hàm sub_140002230():
if ( hKey )
RegCloseKey(hKey); if ( v0
< 0 && v2 )
DeleteFileA(v1);
if ( v1 )
{
v13 = GetProcessHeap();
HeapFree(v13, 0, v1);
}
hay ở hàm wWinMain if (
lpMem )
{
ProcessHeap = GetProcessHeap();
HeapFree(ProcessHeap, 0, lpMem);
} đặc biệt, hàm sub_140002550():
{
RegDeleteValueA(hKey, "brbbot");
RegFlushKey(hKey);
v2 = 0;
}
Như vậy, có thể nói rằng mã độc đã đạt được kỹ thuật persistence như: Registry Keys, Startup
Programs. Mã độc này đã lưu các tệp nguy hiểm vào trong Appdata của người dùng, đồng thời
xóa dấu vết để người dùng không phát hiện.
3. Strings của le mã độc gợi ý điều gì?
Sau khi strings le mã độc, em có thế thấy được một số điều như:
các API liên quan tới việc quản lí le hay registry: RegSetValueExA RegOpenKeyExA
RegDeleteValueA RegFlushKey RegCloseKey
Các hàm mã hóa: CryptAcquireContextW CryptDeriveKey
CryptReleaseContext CryptEncrypt CryptCreateHash CryptDestroyKey
CryptDecrypt CryptDestroyHash CryptHashData các hàm
liên quan tới mạng, truyền tải dữ liệu:
InternetQueryDataAvailable InternetReadFile InternetCloseHandle
HpQueryInfoA InternetConnectA InternetSetOponA
HpOpenRequestA HpSendRequestA InternetOpenA
lOMoARcPSD| 58815430
các hàm quản lí dữ liệu: CreateFileA FindResourceA LoadResource
HeapAlloc HeapFree GetProcessHeap WriteFile SizeofResource
GetLastError LockResource GetModuleHandleA CloseHandle
GetComputerNameA HeapReAlloc MoveFileExA Bên cạnh đó,
có một số dữ kiện đặc biệt khác như:
Soware\Microso\Windows\CurrentVersion\Run, như phần phân ch sơ lược ở trên,
đây là một register key. có thể mã độc sử dụng các kỹ thuật liên quan.
brbcong.tmp, brbbot là tên các tệp được le mã độc tạo ra.
HTTP/1.1 Connecon: close, %s?i=%s&c=%s&p=%s, Mozilla/4.0 (compable; MSIE 8.0;
Windows NT 6.1; Trident/4.0) là request, url với các params, và một User-agent giả. Có
thkhẳng định rằng mã độc này liên quan tới việc truyền thông n, dữ liệu mạng
internet
4. Dấu hiệu le của mã độc xuất hiện trên máy nạn nhân?
Tuy rằng các le có thể được xóa sau khi mã độc thực hiện(?), em có thể sẽ kiểm tra le
brbcong.tmp hay brbbot trong \AppData\Local\Temp\ chẳng hạn.
Còn có thể kiểm tra Register key xem liệu có mã độc xuất hiện ở đấy không.
5. Dấu hiệu về network của mã độc?
Như đã trình bày ở các phần trên, sau khi phân ch le mã độc thì phát hiện được rất nhiều dấu
hiệu về Network.
Em sẽ trình bày lại quá trình từ đầu về network:
Có kiểu dữ liệu HINTERNET, struct WSAData
Đầu ên, WSAStartup khởi tạo winsock
Sau khi lấy được cong của người dùng (?),hàm sub_140001C10 khởi tạo url với param
(param có thể chứa cong người dùng (?) %s?i= %s&c=%s&p=%s), đồng thời lấy IP của
người dùng, khởi tạo 1 useragent và request.
Mã độc cũng đã nhận dữ liệu từ CCsever, sau đó tạo le brb là mã độc và mã hóa. Sau
đó có thể gây ảnh hưởng tới máy bị nhiễm mã độc (?). Hàm cũng sử dụng API
InternetCloseHandle và WaitForSingleObject.
6. Mã độc sử dụng thuật toán gì để giải mã cong?
Em chưa thấy phần mà mã độc sử dụng thuật toán để giải mã, tuy nhiên em đã thấy nhiều
những phân đoạn mã hóa.
Ví dụ mã độc đã mã hóa url được gửi đi bằng cách xor dữ liệu với một vị trí trong le:
*v13++ ^= *(_BYTE *)(a1 + 1300); sau đó chuyển sang hex và có thể sử dụng
secret key sau để kí: qmemcpy(v27, "#3#or%5452o#8A", 14);
Mã độc cũng đã sử dụng hàm băm để mã hóa le brbcong.tmp
}
if ( !CryptAcquireContextW(&phProv, 0i64, L"Microso Enhanced
Cryptographic Provider v1.0", 1u, 0) ) GetLastError();
if ( (GetLastError() != -2146893802
|| CryptAcquireContextW(&phProv, 0i64, L"Microso Enhanced
lOMoARcPSD| 58815430
Cryptographic Provider v1.0", 1u, 8u))
&& CryptCreateHash(phProv, 0x8003u, 0i64, 0, &phHash)
&& CryptHashData(phHash, "YnJiYm90", 8u, 0)
&& CryptDeriveKey(phProv, 0x6801u, phHash, 0x800000u, &phKey) )
{
7. Mã độc thuộc loại mã độc nào?
Mã độc có thể là một Trojan có khả năng tạo backdoor.
Phân ch động mẫu Lab3-2.dll trong 'sample buoi 3.zip' pass infected. Bạn hãy trả lời các câu
hỏi sau:
1. Cách cài đặt mã độc?
2. Mã độc đạt được persistence như thế nào?
3. Cách chạy mã độc sau khi cài đặt?
4. Xác định PID của ến trình đang chạy mã độc.
5. Dấu hiệu host-based(le, process, registry, service) trên máy bị nhiễm mã độc?
6. Dấu hiệu về network trên máy bị nhiễm mã độc?
Soluon
Sử dụng rundll32 Lab3-2.dll, system infomer không phát hiện thấy chương trình gì.
Thử với entrypoint Install, ta thấy le rundll32.exe
Phân ch hàm Install
Đầu ên, hàm mở regiskey HKEY_LOCAL_MACHINE
Sau đó hàm sẽ lấy giá trị của registry key và lưu vào Data
Hàm sẽ kiểm tra xem trong Data có giá trị String2 hay không, có thể là một chuỗi dịch vụ
Kết nối đến SCM và tạo dịch vụ, cấu hình vào Registry sao cho le dll được thực thi mỗi
khi máy chạy
Như vậy, hàm Install có thể cài đặt một dịch vụ lên máy khi được thực thi
Phân ch hàm ServiceMain
lOMoARcPSD| 58815430
Bài tập phân ch động mã độc
Chử Đức Anh - B23DCAT004
Instrucons
Phân ch động mẫu Lab3-2.dll trong 'sample buoi 3.zip' pass infected. Bạn hãy trả lời các câu
hỏi sau:
1. Cách cài đặt mã độc?
2. Mã độc đạt được persistence như thế nào?
3. Cách chạy mã độc sau khi cài đặt?
4. Xác định PID của ến trình đang chạy mã độc.
5. Dấu hiệu host-based(le, process, registry, service) trên máy bị nhiễm mã độc?
6. Dấu hiệu về network trên máy bị nhiễm mã độc? 1 : Cách cài dặt mã độc
Tải le từ Teams, em nhận được 1 le .dll ( dynamic link library ). Vì trước đó đã làm 1 bài trong
PTITCTF phải debug loại le này nên em biết phải dùng command rundll32.exe với đúng tham
số truyền vào để cài đặt được 1 le dll
2 : Mã độc đạt được persistence như thế nào?
Ở bài này em chưa phân ch được cụ thể cách mã độc đạt được persistence bằng phân ch
động ạ. Em có thử phân ch nh, cụ thể là đọc source thì em thấy đoạn đầu này ( dòng 40
đến 50 hàm Install ) có việc xử lí Registry Key có vẻ khả nghi do:
lần 1 gọi hàm check thì truyền vào SubKey 1 giá trị
lần 2 gán thì lại dùng ValueName với 1 database khác?
3. Cách chạy mã độc sau khi cài đặt?
Cách thực thi như em đã đề cập ở trên, em có 2 cách nhưng về bản chất đều là 1 Cách đầu ên
là sử dụng cmd => rundll32.exe lename, [entry point] [args] => rundll32.exe Lab3-2.dll, Install (
Hình ảnh mã độc được ghi lại trong processhacker sau khi thực thi )
lOMoARcPSD| 58815430
Cách thứ 2 : chọn local Windows debugger trong IDA và truyền các tham số này vào process
opons, debug nhưng mình chưa đặt breakpoint nào thì nó vẫn run hết cả chương trình như
bình thường
lOMoARcPSD| 58815430
4. Xác định PID của ến trình đang chạy mã độc.
Khi run le mã độc, có 1 tệp khả nghi tên WerFault.exe xuất hiện đi kèm với le rundll32.exe, vì
vậy em nghi ngờ nó là mã độc và PID của nó em m được trong process hacker là 7696,
ới đây là ảnh khi em lter trong process monitor
lOMoARcPSD| 58815430
5. Dấu hiệu host-based(le, process, registry, service) trên máy bị nhiễm mã độc?
Sau khi lter theo PID 7696 để m các ến trình liên quan đến mã độc, em m được các dấu
hiệu cho việc thay đổi registry ( Open, Set Info Key, Close Key rất nhiều )
lOMoARcPSD| 58815430
và cũng có các process liên quan đến le cụ thể như Write, Create, Open, ...
lOMoARcPSD| 58815430
Dù m được nhưng do khả năng phân ch động của em còn chưa tốt, em mới chỉ dừng lại ở
mức m được chứ chưa rõ làm sao để có thể phân ch nó đã làm cụ thể gì trong từng ến trình
y ạ. Ngoài ra em có m được thông n giống bài buổi trước, cụ thể mã độc này chỉ hoạt động
đưc ở trên Windows
XP 6.11, em m thấy khi strings trong IDA
6 : Dấu hiệu về network trên máy bị nhiễm mã độc?
Ở cả 2 phần quan trọng của mã độc này ( Install và Uninstall ) em đều thấy có chứa comment
bên phần ASM IPRIP. Sau một hồi m kiếm thông n thì em được biết IPRIP là 1 phương thức,
giao thức mạng cũng giống như là HTTP nên đây là 1 dấu hiệu sẽ liên quan đến network. Em
chưa sử dụng mấy nhưng em nghĩ có thể User bị nhiễm mã độc sử dụng wireshark để check
xem có phương thức bất thường nào là IPRIP vừa thực hiện vài ến trình thì đó có thể là dấu
hiệu. Ngoài ra em cũng chưa m được dấu hiệu nào khác bởi sau khi Install mã độc tự kill chính
mình bằng hàm Uninstall để xoá dấu vết.
Phân ch nh mã độc brbbot.exe
Họ và tên : Chử Đức Anh
Mã sinh viên : B23DCAT004
Bài tập : Phân ch nh mã độc brbbot.exe trong thư mục sample buoi 2.zip ( pass giải nén:
infected). Xác định:
1. Mã độc có bị virustotal gán nhãn độc hại hay không?
2. Mã độc có đạt kỹ thuật persistence?
3. Strings của le mã độc gợi ý điều gì?
4. Dấu hiệu le của mã độc xuất hiện trên máy nạn nhân?
5. Dấu hiệu về network của mã độc?
6. Mã độc sử dụng thuật toán gì để giải mã cong?
7. Mã độc thuộc loại mã độc nào?
Bài làm
1. Mã độc bị virustotal gán nhãn độc hại (63/73 security vendors agged this le as
malicious), nó có thể là 1 con trojan hoặc ransomware
2. Theo em m hiểu, kỹ thuật persistence là các kỹ thuật giúp mã độc tạo được sự tồn tại
và duy trì hoạt động trong hệ thống, và mã độc này đã
lOMoARcPSD| 58815430
đạt được mục đích khi sử dụng kỹ thuật này ( đạt được persistence ), cụ thể theo em
phân ch em nhận ra 2 ý nổi bật dưới đây:
a. Mã độc đã thực hiện kỹ thuật persistence bằng cách chỉnh sửa registry, cụ thể là thêm mục
"brbbot" vào vị trí HKEY_LOCAL_MACHINE\Soware\
Microso\Windows\CurrentVersion\Run. Nhờ đó, mã độc sẽ tự động chạy mỗi khi hệ thống
khởi động, giúp duy trì hoạt động mà không cần sự can thiệp từ người dùng.
lOMoARcPSD| 58815430
b. Tuy nhiên, em cũng thấy mã độc sử dụng các WinAPI như
GetStartupInfoW, WSAStartup, WSACleanup. Em nghĩ chúng có thể đóng vai trò quan trọng
trong quá trình khởi động và duy trì hoạt động của mã độc. Đây có thể là cách mã độc ngụy
trang dưới các ứng dụng phổ biến để tránh bị phát hiện. Ngoài ra em cũng để ý có 1 user-agent
của Mozilla, em không biết liệu đây có phải kiểu n mình dưới dạng tên của 1 trình duyệt chạy
trong hệ thống không nên em chỉ để nó ở dạng nh nghi ạ.
lOMoARcPSD| 58815430
3. Trong strings của le mã độc, em m thấy những thông n em nghĩ là có ích sau:
a. Chuỗi Agent Mozilla/4.0 (compable; MSIE 8.0; Windows NT 6.1; Trident/4.0) cùng với
phiên bản HTTP/1.1 cho thấy mã độc có khả năng sử dụng user-agent giống trình duyệt để che
giấu các kết nối mạng. Hoặc là em nghĩ nó có thể là user-agent của chính người tạo ra mã độc
này ạ?
b. Các chuỗi mã hóa: Các hàm CryptEncrypt, CryptDestroyKey, và CryptCreateHash là các
API mã hóa của Windows. Em nghĩ nó có thể gợi ý mã độc đã sử dụng kỹ thuật mã hóa để bảo
vệ dữ liệu của nó hoặc để thực hiện các cuộc tấn công ransomware tống ền hoặc có thể là nó
lợi dụng API mã hoá của Win để giải mã hay mã hoá gì đó cho tránh bị phát hiện. ( Em có được
ếp xúc với cái này trong CTF aack defense, cụ thể là người tấn công sẽ mã hoá các ag dưới
dạng base64 chẳng hạn thì người phòng thủ nếu chỉ lter để m chuỗi "ag" thì sẽ không thể
lter được ag dạng base64 vừa bị tấn công vào và bỏ sót nó, vì vậy em cũng nghi ngờ nó là 1
cách làm tương tự )
c. Chuỗi liên quan đến thao tác le và Internet: Các hàm như InternetReadFile,
InternetConnectA, CreateFileA, DeleteFileA, CopyFileA, và WriteFile cho thấy mã độc có khả
năng tương tác với các tệp n hệ thống và thực hiện các kết nối qua Internet, nó là dấu hiệu
cho thấy mã độc có thể thực hiện các hành vi như tải xuống tệp, xóa dấu vết hoặc giao ếp với
máy chủ điều khiển từ xa.
4. Theo em trong cụ thể bài này - trường hợp này, dấu hiệu le mã độc này đã xuất hiện
trên máy nạn nhân chính là việc tệp n được sao chép trong thư mục APPDATA và sự
xuất hiện của khóa "brbbot" trong registry tại vị trí
HKEY_LOCAL_MACHINE\Soware\Microso\Windows\ CurrentVersion\Run. Hoặc có
thể chuỗi Mozilla/4.0 (compable; MSIE 8.0; Windows NT 6.1) sẽ xuất hiện dưới dạng
một ến trình (process), tạo sự ngụy trang giống như một phiên bản của trình duyệt hợp
pháp như em đã đề cập bên trên ạ?
5. Vnetwork, theo em thấy chỉ có 1 vài điểm liên quan nằm ở trong hàm WinMain, mã
độc có call WinAPI CreateEventW rồi sau đó call 1 loạt các hàm như sub_14001840 để
đọc le copy le hay nhận chỉ thị từ
Internet ạ em không chắc phần này lắm
lOMoARcPSD| 58815430
Sau khi đã nhận được chỉ thị, nó sẽ close kết nối Internet lại để ếp tục ẩn mình
Update : Ngoài ra, theo em thấy trong phần này dữ liệu đã được mã độc mã hoá cẩn thận trước
khi gửi đi trong hàm sub_140001C10, điều này có thể lí giải bởi việc theo em m hiểu, các
botnet sẽ cần phải trao đổi và nhận chỉ thị từ các C&C (Command and Control Server nên đ
tránh bị phát hiện các dữ liệu được mã hoá rất cẩn thận khi đi qua 3 bước mã hoá, 1 là xor do {
+ +v11; *v13++ ^= *(_BYTE *)(a1 + 1300); LODWORD(v12) = nSize; } while ( v11 < nSize ); và
ớc 2 hex do { sprin(v17, "%02x", (unsigned int)*v16); v17 += 2; ++v16; --v12; } while ( v12 );,
ớc 3 là xor lần
cuối qmemcpy(v27, "#3#or%5452o#8A", 14); do { *v27++ ^= 0x41u; -v26; } while ( v26 );
lOMoARcPSD| 58815430
6. Em chưa m được những nội dung liên quan đến việc giải mã cong lắm (em chưa m ra
mã độc sẽ giải mã dữ liệu gì và lúc nào, em chỉ thấy nó dùng strstr để m các substring
ới đây). Hiện em m được 2 phần liên quan đến việc mã hoá dữ liệu của botnet sau
đó sẽ trả về cho C&C.
if ( v1 >= 0 )
{
v5 = ndString(Src, (unsigned int)Size, "uri", &v31); v6 = v31;
v4 = v5; if ( v5 >= 0 )
{
v7 = ndString(v2, (unsigned int)v3, "exec", &v32); v8 = v32;
v4 = v7; if ( v7 >= 0 )
{
v9 = ndString(v2, (unsigned int)v3, "le", &v37); v10 =
v37; v4 = v9; if ( v9 >= 0 )
{
v11 = ndString(v2, (unsigned int)v3, "conf", &v28); v12 =
v28; v4 = v11; if ( v11 >= 0 )
{
v13 = ndString(v2, (unsigned int)v3, "exit", &Source); v14 =
Source; v4 = v13; if ( v13 >= 0 )
{
v15 = ndString(v2, (unsigned int)v3, "sleep", (char **)&lpMem); v16 = (const
char *)lpMem;
v4 = v15; if (
v15 >= 0 )
{
v4 = ndString(v2, (unsigned int)v3, "encode", &Buer);
if ( v4 >= 0 )
{
if ( strlen(Buer) > 2
|| strlen(v14) > 0x104
|| (v17 = v28, strlen(v28) > 0x104)
|| strlen(v37) > 0x104
|| strlen(v8) > 0x104
|| strlen(v6) > 0x104 )
{
v4 = -2147024809;
}
else
{
lOMoARcPSD| 58815430
memset((void *)a1, 0, 1308ui64); sscanf(Buer,
"%2x", a1 + 1300);
*(_DWORD *)(a1 + 1304) = atoi((const char *)lpMem);
strncpy((char *)(a1 + 520), v14, strlen(v14)); strncpy((char *)(a1 + 780),
v17, strlen(v17)); strncpy((char *)(a1 + 1040), v37, strlen(v37));
strncpy((char *)(a1 + 260), v8, strlen(v8)); strncpy((char *)a1, v6,
strlen(v6)); v4 = 0;
}
v16 = (const char *)lpMem;
} }
if ( v16 )
{
v18 = strlen(v16) + 1; v19 =
lpMem;
memset(lpMem, 0, v18 - 1); ProcessHeap =
GetProcessHeap();
HeapFree(ProcessHeap, 0, v19);
} }
if ( v14 )
{
memset(v14, 0, strlen(v14)); v21 =
GetProcessHeap(); HeapFree(v21, 0, v14);
}
v12 = v28;
} if (
v12 )
{
memset(v12, 0, strlen(v12)); v22 =
GetProcessHeap();
HeapFree(v22, 0, v12);
}
v10 = v37;
} if (
v10 )
{
memset(v10, 0, strlen(v10)); v23 =
GetProcessHeap();
HeapFree(v23, 0, v10);
} }
if ( v8 )
lOMoARcPSD| 58815430
{
memset(v8, 0, strlen(v8)); v24 =
GetProcessHeap();
HeapFree(v24, 0, v8);
} } if
( v6 )
{
memset(v6, 0, strlen(v6)); v25 =
GetProcessHeap();
HeapFree(v25, 0, v6);
}
}
7. Theo tất cnhững gì mà em đã phân ch trên, kết hợp với đề bài có tên brbbot em
"mạnh dạn" đoán đây là 1 con trojan horse cụ thể là loại botnet malware ạ =)))

Preview text:

lOMoAR cPSD| 58815430
Phân tích tĩnh mã độc
Instructions: Phân tích tĩnh mã độc brbbot.exe trong thư mục sample buoi 2.zip ( pass giải
nén: infected). Xác định:
1. Mã độc có bị virustotal gán nhãn độc hại hay không?
2. Mã độc có đạt kỹ thuật persistence?
3. Strings của file mã độc gợi ý điều gì?
4. Dấu hiệu file của mã độc xuất hiện trên máy nạn nhân?
5. Dấu hiệu về network của mã độc?
6. Mã độc sử dụng thuật toán gì để giải mã config?
7. Mã độc thuộc loại mã độc nào? Solution
1. Mã độc có bị virustotal gán nhãn độc hại hay không?
Sau khi upload file lên VirusTotal website đưa ra kết quả rằng 63/73 nhà cung cấp bảo mật gán
nhãn tệp này là độc hại. 2. Mã độc có đạt kỹ thuật persistence?
“Persistent Techniques” là các kỹ thuật giúp mã độc tạo được sự tồn tại và duy trì hoạt động
trong hệ thống mục tiêu. Em sẽ trình bày sơ lược về cái nhìn tổng quan đầu tiên đối với file mã độc này.
Hàm wWinMain đầu tiên khởi tạo Winsock (WSAStartup), giao tiếp với C&C Server •
Hàm sub_140001150(), có thể tìm config của máy? hoặc là tài nguyên nào đó rồi lưu vào
file tạm thời brbconfig.tmp •
Hàm sub_140002230() lấy tên tệp, kiểm tra xem tệp có đang ở APPDATA hay không, sau
đó tạo một bản sao của tệp ở một vị trí cố định. Đặc biệt, hàm đã mở khóa Registry, sau
đó thêm file brbbot sẽ được thực thi mỗi lần máy chạy. Đồng thời hàm cũng di chuyển
hay xóa tệp brbconfig.tmp v11 = RegOpenKeyExA( HKEY_LOCAL_MACHINE,
"Software\\Microsoft\\Windows\\CurrentVersion\\Run", 0, 0x20006u, &hKey); •
Hàm sub_1400012E0(&unk_140014560) trích xuất các tham số (uri, exec, conf, file, exit,
...) là các tham số config, có thể sử dụng những dữ liệu này để mã độc hoạt động •
Hàm sub_140001C10(&unk_140014560, &v9, &hInternet) có thể tạo ra một url, sau đó
mã hóa trước khi gửi request. Phần dữ liệu này có thể là thông tin của máy bị mã độc tấn công.
strcpy(Format, "%s?i=%s&c=%s&p=%s"); lOMoAR cPSD| 58815430 •
Hàm sub_140002550(), hàm ở cuối của chương trình, có nhiệm vụ xóa file tạm
brbconfig.tmp, sau đó mở khóa Registry và xóa file mã độc brbbot, sau đó đóng Registry. •
Bên cạnh đó, mã độc cũng sử dụng một số API như
InternetCloseHandle, sau đó dọn dẹp tài nguyên bằng WSACleanup... Một điểm đáng
chú ý là, các hàm kể trên quản lí bộ nhớ khá kĩ lưỡng, đều giải phóng bộ nhớ trước khi kết
thúc hàm (HeapFree...). Ví dụ như ở hàm sub_140002230(): if ( hKey ) RegCloseKey(hKey); if ( v0 < 0 && v2 ) DeleteFileA(v1); if ( v1 ) { v13 = GetProcessHeap(); HeapFree(v13, 0, v1); } hay ở hàm wWinMain if ( lpMem ) {
ProcessHeap = GetProcessHeap();
HeapFree(ProcessHeap, 0, lpMem);
} đặc biệt, hàm sub_140002550(): {
RegDeleteValueA(hKey, "brbbot"); RegFlushKey(hKey); v2 = 0; }
Như vậy, có thể nói rằng mã độc đã đạt được kỹ thuật persistence như: Registry Keys, Startup
Programs. Mã độc này đã lưu các tệp nguy hiểm vào trong Appdata của người dùng, đồng thời
xóa dấu vết để người dùng không phát hiện.
3. Strings của file mã độc gợi ý điều gì?
Sau khi strings file mã độc, em có thế thấy được một số điều như: •
các API liên quan tới việc quản lí file hay registry: RegSetValueExA RegOpenKeyExA
RegDeleteValueA RegFlushKey RegCloseKey •
Các hàm mã hóa: CryptAcquireContextW CryptDeriveKey
CryptReleaseContext CryptEncrypt CryptCreateHash CryptDestroyKey
CryptDecrypt CryptDestroyHash CryptHashData các hàm
liên quan tới mạng, truyền tải dữ liệu:
InternetQueryDataAvailable InternetReadFile InternetCloseHandle
HttpQueryInfoA InternetConnectA InternetSetOptionA
HttpOpenRequestA HttpSendRequestA InternetOpenA lOMoAR cPSD| 58815430 •
các hàm quản lí dữ liệu: CreateFileA FindResourceA LoadResource
HeapAlloc HeapFree GetProcessHeap WriteFile SizeofResource
GetLastError LockResource GetModuleHandleA CloseHandle
GetComputerNameA HeapReAlloc MoveFileExA Bên cạnh đó,
có một số dữ kiện đặc biệt khác như: •
Software\Microsoft\Windows\CurrentVersion\Run, như phần phân tích sơ lược ở trên,
đây là một register key. có thể mã độc sử dụng các kỹ thuật liên quan. •
brbconfig.tmp, brbbot là tên các tệp được file mã độc tạo ra. •
HTTP/1.1 Connection: close, %s?i=%s&c=%s&p=%s, Mozilla/4.0 (compatible; MSIE 8.0;
Windows NT 6.1; Trident/4.0) là request, url với các params, và một User-agent giả. Có
thể khẳng định rằng mã độc này liên quan tới việc truyền thông tin, dữ liệu mạng internet
4. Dấu hiệu file của mã độc xuất hiện trên máy nạn nhân?
Tuy rằng các file có thể được xóa sau khi mã độc thực hiện(?), em có thể sẽ kiểm tra file
brbconfig.tmp hay brbbot trong \AppData\Local\Temp\ chẳng hạn.
Còn có thể kiểm tra Register key xem liệu có mã độc xuất hiện ở đấy không.
5. Dấu hiệu về network của mã độc?
Như đã trình bày ở các phần trên, sau khi phân tích file mã độc thì phát hiện được rất nhiều dấu hiệu về Network.
Em sẽ trình bày lại quá trình từ đầu về network: •
Có kiểu dữ liệu HINTERNET, struct WSAData •
Đầu tiên, WSAStartup khởi tạo winsock •
Sau khi lấy được config của người dùng (?),hàm sub_140001C10 khởi tạo url với param
(param có thể chứa config người dùng (?) %s?i= %s&c=%s&p=%s), đồng thời lấy IP của
người dùng, khởi tạo 1 useragent và request. •
Mã độc cũng đã nhận dữ liệu từ CCsever, sau đó tạo file brb là mã độc và mã hóa. Sau
đó có thể gây ảnh hưởng tới máy bị nhiễm mã độc (?). Hàm cũng sử dụng API
InternetCloseHandle và WaitForSingleObject.
6. Mã độc sử dụng thuật toán gì để giải mã config?
Em chưa thấy phần mà mã độc sử dụng thuật toán để giải mã, tuy nhiên em đã thấy nhiều
những phân đoạn mã hóa.
Ví dụ mã độc đã mã hóa url được gửi đi bằng cách xor dữ liệu với một vị trí trong file:
*v13++ ^= *(_BYTE *)(a1 + 1300); sau đó chuyển sang hex và có thể sử dụng
secret key sau để kí: qmemcpy(v27, "#3#or%5452o#8A", 14);
Mã độc cũng đã sử dụng hàm băm để mã hóa file brbconfig.tmp }
if ( !CryptAcquireContextW(&phProv, 0i64, L"Microsoft Enhanced
Cryptographic Provider v1.0", 1u, 0) ) GetLastError();
if ( (GetLastError() != -2146893802
|| CryptAcquireContextW(&phProv, 0i64, L"Microsoft Enhanced lOMoAR cPSD| 58815430
Cryptographic Provider v1.0", 1u, 8u))
&& CryptCreateHash(phProv, 0x8003u, 0i64, 0, &phHash)
&& CryptHashData(phHash, "YnJiYm90", 8u, 0)
&& CryptDeriveKey(phProv, 0x6801u, phHash, 0x800000u, &phKey) ) {
7. Mã độc thuộc loại mã độc nào?
Mã độc có thể là một Trojan có khả năng tạo backdoor.
Phân tích động mẫu Lab3-2.dll trong 'sample buoi 3.zip' pass infected. Bạn hãy trả lời các câu hỏi sau:
1. Cách cài đặt mã độc?
2. Mã độc đạt được persistence như thế nào?
3. Cách chạy mã độc sau khi cài đặt?
4. Xác định PID của tiến trình đang chạy mã độc.
5. Dấu hiệu host-based(file, process, registry, service) trên máy bị nhiễm mã độc?
6. Dấu hiệu về network trên máy bị nhiễm mã độc? Solution
Sử dụng rundll32 Lab3-2.dll, system infomer không phát hiện thấy chương trình gì.
Thử với entrypoint Install, ta thấy file rundll32.exe
Phân tích hàm Install
Đầu tiên, hàm mở regiskey HKEY_LOCAL_MACHINE •
Sau đó hàm sẽ lấy giá trị của registry key và lưu vào Data •
Hàm sẽ kiểm tra xem trong Data có giá trị String2 hay không, có thể là một chuỗi dịch vụ •
Kết nối đến SCM và tạo dịch vụ, cấu hình vào Registry sao cho file dll được thực thi mỗi khi máy chạy •
Như vậy, hàm Install có thể cài đặt một dịch vụ lên máy khi được thực thi
Phân tích hàm ServiceMain lOMoAR cPSD| 58815430
Bài tập phân tích động mã độc
Chử Đức Anh - B23DCAT004 Instructions
Phân tích động mẫu Lab3-2.dll trong 'sample buoi 3.zip' pass infected. Bạn hãy trả lời các câu hỏi sau:
1. Cách cài đặt mã độc?
2. Mã độc đạt được persistence như thế nào?
3. Cách chạy mã độc sau khi cài đặt?
4. Xác định PID của tiến trình đang chạy mã độc.
5. Dấu hiệu host-based(file, process, registry, service) trên máy bị nhiễm mã độc?
6. Dấu hiệu về network trên máy bị nhiễm mã độc? 1 : Cách cài dặt mã độc
Tải file từ Teams, em nhận được 1 file .dll ( dynamic link library ). Vì trước đó đã làm 1 bài trong
PTITCTF phải debug loại file này nên em biết phải dùng command rundll32.exe với đúng tham
số truyền vào để cài đặt được 1 file dll
2 : Mã độc đạt được persistence như thế nào?
Ở bài này em chưa phân tích được cụ thể cách mã độc đạt được persistence bằng phân tích
động ạ. Em có thử phân tích tĩnh, cụ thể là đọc source thì em thấy ở đoạn đầu này ( dòng 40
đến 50 hàm Install ) có việc xử lí Registry Key có vẻ khả nghi do:
lần 1 gọi hàm check thì truyền vào SubKey 1 giá trị
lần 2 gán thì lại dùng ValueName với 1 database khác?
3. Cách chạy mã độc sau khi cài đặt?
Cách thực thi như em đã đề cập ở trên, em có 2 cách nhưng về bản chất đều là 1 Cách đầu tiên
là sử dụng cmd => rundll32.exe filename, [entry point] [args] => rundll32.exe Lab3-2.dll, Install (
Hình ảnh mã độc được ghi lại trong processhacker sau khi thực thi ) lOMoAR cPSD| 58815430
Cách thứ 2 : chọn local Windows debugger trong IDA và truyền các tham số này vào process
options, debug nhưng mình chưa đặt breakpoint nào thì nó vẫn run hết cả chương trình như bình thường lOMoAR cPSD| 58815430
4. Xác định PID của tiến trình đang chạy mã độc.
Khi run file mã độc, có 1 tệp khả nghi tên WerFault.exe xuất hiện đi kèm với file rundll32.exe, vì
vậy em nghi ngờ nó là mã độc và PID của nó em tìm được trong process hacker là 7696,
dưới đây là ảnh khi em filter trong process monitor lOMoAR cPSD| 58815430
5. Dấu hiệu host-based(file, process, registry, service) trên máy bị nhiễm mã độc?
Sau khi filter theo PID 7696 để tìm các tiến trình liên quan đến mã độc, em tìm được các dấu
hiệu cho việc thay đổi registry ( Open, Set Info Key, Close Key rất nhiều ) lOMoAR cPSD| 58815430
và cũng có các process liên quan đến file cụ thể như Write, Create, Open, ... lOMoAR cPSD| 58815430
Dù tìm được nhưng do khả năng phân tích động của em còn chưa tốt, em mới chỉ dừng lại ở
mức tìm được chứ chưa rõ làm sao để có thể phân tích nó đã làm cụ thể gì trong từng tiến trình
ấy ạ. Ngoài ra em có tìm được thông tin giống bài buổi trước, cụ thể mã độc này chỉ hoạt động được ở trên Windows
XP 6.11, em tìm thấy khi strings trong IDA
6 : Dấu hiệu về network trên máy bị nhiễm mã độc?
Ở cả 2 phần quan trọng của mã độc này ( Install và Uninstall ) em đều thấy có chứa comment
bên phần ASM IPRIP. Sau một hồi tìm kiếm thông tin thì em được biết IPRIP là 1 phương thức,
giao thức mạng cũng giống như là HTTP nên đây là 1 dấu hiệu sẽ liên quan đến network. Em
chưa sử dụng mấy nhưng em nghĩ có thể User bị nhiễm mã độc sử dụng wireshark để check
xem có phương thức bất thường nào là IPRIP vừa thực hiện vài tiến trình thì đó có thể là dấu
hiệu. Ngoài ra em cũng chưa tìm được dấu hiệu nào khác bởi sau khi Install mã độc tự kill chính
mình bằng hàm Uninstall để xoá dấu vết.
Phân tích tĩnh mã độc brbbot.exe
Họ và tên : Chử Đức Anh
Mã sinh viên : B23DCAT004
Bài tập : Phân tích tĩnh mã độc brbbot.exe trong thư mục sample buoi 2.zip ( pass giải nén: infected). Xác định:
1. Mã độc có bị virustotal gán nhãn độc hại hay không?
2. Mã độc có đạt kỹ thuật persistence?
3. Strings của file mã độc gợi ý điều gì?
4. Dấu hiệu file của mã độc xuất hiện trên máy nạn nhân?
5. Dấu hiệu về network của mã độc?
6. Mã độc sử dụng thuật toán gì để giải mã config?
7. Mã độc thuộc loại mã độc nào? Bài làm
1. Mã độc bị virustotal gán nhãn độc hại (63/73 security vendors flagged this file as
malicious), nó có thể là 1 con trojan hoặc ransomware
2. Theo em tìm hiểu, kỹ thuật persistence là các kỹ thuật giúp mã độc tạo được sự tồn tại
và duy trì hoạt động trong hệ thống, và mã độc này đã lOMoAR cPSD| 58815430
đạt được mục đích khi sử dụng kỹ thuật này ( đạt được persistence ), cụ thể theo em
phân tích em nhận ra 2 ý nổi bật dưới đây:
a. Mã độc đã thực hiện kỹ thuật persistence bằng cách chỉnh sửa registry, cụ thể là thêm mục
"brbbot" vào vị trí HKEY_LOCAL_MACHINE\Software\
Microsoft\Windows\CurrentVersion\Run. Nhờ đó, mã độc sẽ tự động chạy mỗi khi hệ thống
khởi động, giúp duy trì hoạt động mà không cần sự can thiệp từ người dùng. lOMoAR cPSD| 58815430
b. Tuy nhiên, em cũng thấy mã độc sử dụng các WinAPI như
GetStartupInfoW, WSAStartup, WSACleanup. Em nghĩ chúng có thể đóng vai trò quan trọng
trong quá trình khởi động và duy trì hoạt động của mã độc. Đây có thể là cách mã độc ngụy
trang dưới các ứng dụng phổ biến để tránh bị phát hiện. Ngoài ra em cũng để ý có 1 user-agent
của Mozilla, em không biết liệu đây có phải kiểu ẩn mình dưới dạng tên của 1 trình duyệt chạy
trong hệ thống không nên em chỉ để nó ở dạng tình nghi ạ. lOMoAR cPSD| 58815430
3. Trong strings của file mã độc, em tìm thấy những thông tin em nghĩ là có ích sau: a.
Chuỗi Agent Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0) cùng với
phiên bản HTTP/1.1 cho thấy mã độc có khả năng sử dụng user-agent giống trình duyệt để che
giấu các kết nối mạng. Hoặc là em nghĩ nó có thể là user-agent của chính người tạo ra mã độc này ạ? b.
Các chuỗi mã hóa: Các hàm CryptEncrypt, CryptDestroyKey, và CryptCreateHash là các
API mã hóa của Windows. Em nghĩ nó có thể gợi ý mã độc đã sử dụng kỹ thuật mã hóa để bảo
vệ dữ liệu của nó hoặc để thực hiện các cuộc tấn công ransomware tống tiền ạ hoặc có thể là nó
lợi dụng API mã hoá của Win để giải mã hay mã hoá gì đó cho tránh bị phát hiện. ( Em có được
tiếp xúc với cái này trong CTF attack defense, cụ thể là người tấn công sẽ mã hoá các flag dưới
dạng base64 chẳng hạn thì người phòng thủ nếu chỉ filter để tìm chuỗi "flag" thì sẽ không thể
filter được flag dạng base64 vừa bị tấn công vào và bỏ sót nó, vì vậy em cũng nghi ngờ nó là 1 cách làm tương tự ) c.
Chuỗi liên quan đến thao tác file và Internet: Các hàm như InternetReadFile,
InternetConnectA, CreateFileA, DeleteFileA, CopyFileA, và WriteFile cho thấy mã độc có khả
năng tương tác với các tệp tin hệ thống và thực hiện các kết nối qua Internet, nó là dấu hiệu
cho thấy mã độc có thể thực hiện các hành vi như tải xuống tệp, xóa dấu vết hoặc giao tiếp với
máy chủ điều khiển từ xa.
4. Theo em trong cụ thể bài này - trường hợp này, dấu hiệu file mã độc này đã xuất hiện
trên máy nạn nhân chính là việc tệp tin được sao chép trong thư mục APPDATA và sự
xuất hiện của khóa "brbbot" trong registry tại vị trí
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\ CurrentVersion\Run. Hoặc có
thể chuỗi Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1) sẽ xuất hiện dưới dạng
một tiến trình (process), tạo sự ngụy trang giống như một phiên bản của trình duyệt hợp
pháp như em đã đề cập bên trên ạ?
5. Về network, theo em thấy chỉ có 1 vài điểm liên quan nằm ở trong hàm WinMain, mã
độc có call WinAPI CreateEventW rồi sau đó call 1 loạt các hàm như sub_14001840 để
đọc file copy file hay nhận chỉ thị từ
Internet ạ em không chắc phần này lắm lOMoAR cPSD| 58815430
Sau khi đã nhận được chỉ thị, nó sẽ close kết nối Internet lại để tiếp tục ẩn mình
Update : Ngoài ra, theo em thấy trong phần này dữ liệu đã được mã độc mã hoá cẩn thận trước
khi gửi đi trong hàm sub_140001C10, điều này có thể lí giải bởi việc theo em tìm hiểu, các
botnet sẽ cần phải trao đổi và nhận chỉ thị từ các C&C (Command and Control Server nên để
tránh bị phát hiện các dữ liệu được mã hoá rất cẩn thận khi đi qua 3 bước mã hoá, 1 là xor do {
+ +v11; *v13++ ^= *(_BYTE *)(a1 + 1300); LODWORD(v12) = nSize; } while ( v11 < nSize ); và
bước 2 hex do { sprintf(v17, "%02x", (unsigned int)*v16); v17 += 2; ++v16; --v12; } while ( v12 );, bước 3 là xor lần
cuối qmemcpy(v27, "#3#or%5452o#8A", 14); do { *v27++ ^= 0x41u; -v26; } while ( v26 ); lOMoAR cPSD| 58815430
6. Em chưa tìm được những nội dung liên quan đến việc giải mã config lắm (em chưa tìm ra
mã độc sẽ giải mã dữ liệu gì và lúc nào, em chỉ thấy nó dùng strstr để tìm các substring
dưới đây). Hiện em tìm được 2 phần liên quan đến việc mã hoá dữ liệu của botnet sau
đó sẽ trả về cho C&C. if ( v1 >= 0 ) {
v5 = findString(Src, (unsigned int)Size, "uri", &v31); v6 = v31; v4 = v5; if ( v5 >= 0 ) {
v7 = findString(v2, (unsigned int)v3, "exec", &v32); v8 = v32; v4 = v7; if ( v7 >= 0 ) {
v9 = findString(v2, (unsigned int)v3, "file", &v37); v10 =
v37; v4 = v9; if ( v9 >= 0 ) {
v11 = findString(v2, (unsigned int)v3, "conf", &v28); v12 =
v28; v4 = v11; if ( v11 >= 0 ) {
v13 = findString(v2, (unsigned int)v3, "exit", &Source); v14 =
Source; v4 = v13; if ( v13 >= 0 ) {
v15 = findString(v2, (unsigned int)v3, "sleep", (char **)&lpMem); v16 = (const char *)lpMem; v4 = v15; if ( v15 >= 0 ) {
v4 = findString(v2, (unsigned int)v3, "encode", &Buffer); if ( v4 >= 0 ) { if ( strlen(Buffer) > 2 || strlen(v14) > 0x104
|| (v17 = v28, strlen(v28) > 0x104) || strlen(v37) > 0x104 || strlen(v8) > 0x104 || strlen(v6) > 0x104 ) { v4 = -2147024809; } else { lOMoAR cPSD| 58815430
memset((void *)a1, 0, 1308ui64); sscanf(Buffer, "%2x", a1 + 1300);
*(_DWORD *)(a1 + 1304) = atoi((const char *)lpMem);
strncpy((char *)(a1 + 520), v14, strlen(v14)); strncpy((char *)(a1 + 780),
v17, strlen(v17)); strncpy((char *)(a1 + 1040), v37, strlen(v37));
strncpy((char *)(a1 + 260), v8, strlen(v8)); strncpy((char *)a1, v6, strlen(v6)); v4 = 0; } v16 = (const char *)lpMem; } } if ( v16 ) { v18 = strlen(v16) + 1; v19 = lpMem;
memset(lpMem, 0, v18 - 1); ProcessHeap = GetProcessHeap();
HeapFree(ProcessHeap, 0, v19); } } if ( v14 ) {
memset(v14, 0, strlen(v14)); v21 =
GetProcessHeap(); HeapFree(v21, 0, v14); } v12 = v28; } if ( v12 ) {
memset(v12, 0, strlen(v12)); v22 = GetProcessHeap(); HeapFree(v22, 0, v12); } v10 = v37; } if ( v10 ) {
memset(v10, 0, strlen(v10)); v23 = GetProcessHeap(); HeapFree(v23, 0, v10); } } if ( v8 ) lOMoAR cPSD| 58815430 {
memset(v8, 0, strlen(v8)); v24 = GetProcessHeap(); HeapFree(v24, 0, v8); } } if ( v6 ) {
memset(v6, 0, strlen(v6)); v25 = GetProcessHeap(); HeapFree(v25, 0, v6); } }
7. Theo tất cả những gì mà em đã phân tích trên, kết hợp với đề bài có tên brbbot em
"mạnh dạn" đoán đây là 1 con trojan horse cụ thể là loại botnet malware ạ =)))