









Preview text:
3. Phân tích kĩ thuật 3.1. Phân tích Stage 1
Ở bước ầu tiên này, loader (ược xem là payload thứ nhất) thực hiện nhiệm vụ trích xuất dữ liệu, giải mã
ra payload thứ hai (payload này có thể là dll hoặc exe), thực thi payload từ bộ nhớ.
Sử dụng IDA, sau khi kết thúc quá trình tự ộng phân tích, IDA ã nhận diện tới 5385 hàm:
Code tại start() của loader như sau:
Mặc dù số lượng hàm nhận diện ược nhiều như trên, phần lớn trong ó là các hàm APIs của Windows
cũng như các hàm thư viện của Delphi thì việc tìm ra oạn code chính liên quan tới việc giải mã ra
payload thứ hai cũng vẫn sẽ mất thời gian. Thông qua sự hỗ trợ của capa, tôi nhanh chóng tìm ược oạn
code liên quan ến việc thực thi payload thứ hai và từ ó truy ngược về oạn code thực hiện nhiệm vụ giải mã ra payload này.
Toàn bộ code tại sub_498CDC() sẽ thực hiện nhiệm vụ parse payload, mapping vào bộ nhớ và thực thi
payload. Code tại hàm này trước và sau khi áp dụng các struct liên quan:
Truy ngược lên sẽ tới sub_4994EC(), hàm này thực hiện nhiệm vụ:
Đọc toàn bộ dữ liệu từ resource có tên "T__7412N15D" vào bộ nhớ.
Tìm chuỗi "OPPO" trong resource data ể lấy dữ liệu của payload ã bị mã hóa.
Thực hiện giải mã ra payload thứ hai. Key ể giải mã là một giá trị số.
Tìm chuỗi trong payload thứ hai và thay thế nó bằng chuỗi URL ã bị mã hóa.
Trong hình trên, key giải mã là một số nguyên ược chuyển ổi từ chuỗi. Với sample này key giải mã có giá
trị là 0x30. Công việc của oạn code giải mã payload như hình dưới ây:
Toàn bộ oạn code trên ược viết lại bằng python như sau:
Sau khi giải mã ra payload, loader sẽ thực hiện tìm kiếm và thay thế chuỗi gồm 168 kí tự “z” bằng chuỗi
URL ã bị mã hóa. Cuối cùng gọi sub_498CDC() ể thực thi payload sau khi ã thay thế.
Toàn bộ quá trình phân tích kĩ thuật từ ầu ến giờ có thể hiện thực bằng python script ể thu ược payload thứ hai. 3.2. Phân tích Stage 2
Kiểm tra payload thu ược ở bước trên, nó cũng ược viết bằng Delphi:
Tương tự như trên, tôi tìm ược sub_45BE08() có nhiệm vụ cấp phát vùng nhớ, mapping payload cuối
cùng sau giải mã vào vùng nhớ này, rồi thực thi payload ã giải mã này.
Bằng việc truy ngược code, tôi tìm thấy oạn mã bắt ầu tại TForm1_Timer1Timer (do IDA nhận diện ược
thông qua signature) tại ịa chỉ 0x45CC10. Code tại ây thực hiện giải mã ra Url và kiểm tra kết nối Internet
bằng cách thử kết nối tới Url ã giải mã là https://www.microsoft.com, trước khi gọi f_main_loader() tại ịa chỉ 0x45C26C.
Thuật toán giải mã kí tự tại hàm f_decode_char_and_concat_str() ơn giản như sau: dec_char = (enc_char
>> 4) | (0x10 * enc_char);
Tại f_main_loader(), mã ộc cũng sử dụng hàm tương tự như trên ể giải mã ra chuỗi "Yes". Chuỗi này ược
sử dụng làm xor_Key cho việc giải mã ra Url ể tải về payload cuối (Url bị mã hóa chính là chuỗi ở bước
thay thế ã mô tả ở trên) cũng như giải mã payload tải về. Hàm f_decode_url_and_payload(void *enc_buf,
LPSTR szKey, void *dec_buf) nhận ba tham số truyền vào:
Tham số ầu tiên enc_buf là nơi chứa dữ liệu bị mã hóa.
Tham số thứ hai szKey là chuỗi "Yes" dùng ể giải mã.
Tham số thứ ba dec_buf là nơi chứa dữ liệu ã giải mã.
Đi sâu vào hàm giải mã này sẽ thấy nó thực hiện vòng lặp giải mã toàn bộ dữ liệu, mỗi lần lặp lấy 2 bytes,
chuyển ổi chuỗi sang số nguyên, sau ó em xor với kí tự lấy ra từ key giải mã. Dữ liệu sau giải mã ược lưu vào vùng nhớ.
Toàn bộ hàm giải mã này ược viết lại bằng python như sau:
Quay trở lại f_main_loader(), ầu tiên nó sẽ giải mã ra Url của payload cuối:
Thực hiện giải mã bằng oạn code python ở trên, thu ược Url như hình dưới ây:
Tiếp theo, mã ộc sử dụng WinHTTP WinHttpRequest COM object ể tải payload ã mã hóa từ Url trên. Việc
thay ổi sang sử dụng COM object có thể nhằm tránh bị phát hiện bởi các chương trình AV so với việc sử
dụng các hàm Internet APIs thuộc thư viện Wininet ở một số sample khác.
Ở ây, tôi sử dụng wget ể tải payload về, kiểm tra thấy nó ược lưu dưới dạng các chuỗi hex tương tự như
chuỗi Url bị mã hóa ở trên.
Payload sau khi tải về sẽ ược ảo ngược dữ liệu và giải mã bằng chính hàm f_decode_url_and_payload
với cùng key giải mã là "Yes". Bằng kĩ thuật tương tự, payload này cũng ược mapping vào bộ nhớ và thực thi.
Với payload ã tải về cùng với oạn code python ở trên, tôi có thể giải mã và thu ược payload cuối cùng.
Payload này là một file dll, cũng ược viết bằng Delphi: 3.3. Phân tích Stage 3
Payload trên khá phức tạp, nó thực hiện nhiệm vụ sau:
Đọc dữ liệu từ resource có tên "DVCLAL" vào bộ nhớ.
Giải mã resource, sau ó dựa vào dấu hiệu “*()%@5YT!@#G__T@#$%^&*()__#@$#57$#!@” ể ọc
các dữ liệu ã giải mã vào các biến tương ứng.
Lấy thông tin thư mục của người dùng thông qua biến môi trường %USERPROFILE% và cấu thành
ường dẫn tới thư mục %USERPROFILE%\AppData\Local.
Tạo các file Vwnt.url và Vwntnet.exe (bản sao của loader) tại thư mục %USERPROFILE%\AppData \Local
nếu các file này chưa tồn tại, sau ó thiết lập giá trị “Vwnt” tại “HKCU\Software\Microsoft
\Windows\CurrentVersion\Run” trỏ tới file %USERPROFILE%\AppData\Local\Vwnt.url. Ghi vào file
Vwnt.url với nội dung trỏ tới Vwntnet.exe:
Thực hiện kết hợp các data ã giải mã từ resource ở trên ể giải mã ra một payload mới.
Giải mã ra hàm thực hiện nhiệm vụ inject payload. Kiểm tra nếu có "C:\Program Files (x86)\internet
explorer\ieinstal.exe", sẽ thực hiện inject payload vào ieinstal.exe.
Dựa vào các strings có trong payload ã inject vào ieinstal.exe có thể khẳng ịnh nó thuộc dòng Warzone
RAT. Một dòng RAT khá nổi tiếng, ược cung cấp trực tuyến cũng như quảng bá trên nhiều diễn àn của tội phạm mạng. 4. Tham khảo
MalwareBazaar Database(ModiLoader) DBatLoader/ModiLoaderAnalysis – First Stage
capa:Automatically Identify Malware Capabilities
Warzone:Behind the enemy lines
Click here for English version Tran Trung Kien (aka m4n0w4r)
R&D Center - VinCSS (a member of Vingroup) at Friday, September 11, 2020
Labels: Malware Analysis, ModiLoader, Reverse Engineering, Tutorials No comments: Post a Comment Newer Post Home Older Post
Subscribe to: Post Comments (Atom) Disclaimer 1.
Các nội dung trên blog này nằm trong khuôn khổ các hoạt ộng óng góp cho cộng ồng an ninh
mạng Việt Nam của Công ty TNHH Dịch vụ An ninh mạng VinCSS thuộc Tập oànVingroup. 2.
Các chuyên gia về dịch ngược và phân tích mã ộc của VinCSS sẽ phân tích các mã ộc phức tạp,
nguy hiểm nhắm ến và e doạ trực tiếp các cơ quan, tổ chức và cá nhân Việt Nam.Chúng tôi chú trọng
công bố sớm các ặc tính kỹ thuật và nhận dạng của mã ộc ể giúp cộng ồng phòng chống, giảm thiểu thiệt
hại. Chúng tôi sẽ cố gắng phối hợp và hỗ trợ các cơ quan chức năng trong phạm vi có thể và luôn ặt ạo ức
nghề nghiệp lên hàng ầu. 3.
VinCSS luôn cố gắng tối a ể ảm bảo tính chính xác của các mẫu sample, nội dung phân tích. Tuy
nhiên, chúng tôi sẽ không chịu bất cứ trách nhiệm nào liên quan ến việc sử dụnglại, suy diễn hay các
thiệt hại khác có thể xảy ra cho bên thứ ba khi các thông tin ược công bố hay do sử dụng lại các thông tin trên blog này.