While working as a SOC analyst, you may encounter alerts from the enterprise Endpoint Detection and Response (EDR) system regarding unusual activity on an end-user machine. In one instance, a user reported receiving an email containing a DOC file from an unknown sender. The user subsequently submitted the document for analysis to ensure it does not pose a security risk.
Author: @Josh Stroschein
Q1: What is the SHA256 hash of the DOC file?
Yêu cầu: Xác định giá trị băm SHA256 của tệp DOC độc hại
Sử dụng lệnh sha256sum tính toán mã băm cho tệp tài liệu document.doc

ff2c8cadaa0fd8da6138cce6fce37e001f53a5d9ceccd67945b15ae273f4d751
Q2: Multiple streams contain macros in this document. Provide the number of the lowest one.
Yêu cầu: Tìm số thứ tự của luồng stream nhỏ nhất có chứa macro trong tài liệu
Sử dụng oledump phân tích cấu trúc các stream trong tệp Word độc hại để phát hiện mã macro

Chữ cái M hoặc m đánh dấu luồng chứa mã macro và luồng có chỉ số nhỏ nhất là 8
8
Q3: What is the decryption key of the obfuscated code?
Yêu cầu: Xác định khóa giải mã được dùng cho đoạn mã bị làm rối
Trích xuất và giải nén mã macro VBA từ stream 8 bằng tham số –vbadecompress của oledump.py tôi ghi nhận chuỗi khóa giải mã được truyền vào lệnh thực thi

EzZETcSXyKAdF_e5I2i1
Q4: What is the name of the dropped file?
Yêu cầu: Xác định tên của tệp được tạo ra trên hệ thống
Đọc luồng mã VBA xác định đường dẫn tệp script được malware ghi vào thư mục %appdata%\Microsoft\Windows

maintools.js
Q5: This script uses what language?
Yêu cầu: Xác định ngôn ngữ lập trình của tệp script này
Tệp rơi xuống mang đuôi mở rộng .js và được WScript.Shell gọi thực thi trực tiếp trên hệ thống Windows thông qua engine JScript

JScript
Q6: What is the name of the variable that is assigned the command-line arguments?
Yêu cầu: Xác định tên biến nhận các tham số truyền vào từ dòng lệnh
Trong mã VBA phát hiện malware trích xuất đoạn mã nhúng từ offset byte 81 với độ dài 16827 byte

Dùng lệnh grep với cờ -b định vị vị trí byte của chuỗi dấu hiệu nhận diện trong tệp DOC

Sử dụng công cụ dd trích xuất chính xác payload script từ vị trí offset 148158 với kích thước 16827 byte

Mở tệp maintools.js vừa bóc tách kiểm tra dòng đầu tiên thấy biến wvy1 được gán nhận mảng tham số dòng lệnh WScript.Arguments

wvy1
Q7: How many command-line arguments does this script expect?
Yêu cầu: Xác định số lượng tham số dòng lệnh mà script yêu cầu khi thực thi
Kiểm tra câu lệnh điều kiện rà soát độ dài mảng tham số dòng lệnh wvy1(0) xác nhận script yêu cầu ít nhất 1 tham số

1
Q8: What instruction is executed if this script encounters an error?
Yêu cầu: Xác định lệnh sẽ được thực thi khi script gặp lỗi
Khối lệnh try catch được thiết lập để bắt các ngoại lệ và gọi hàm thoát tiến trình WScript.Quit() khi xảy ra lỗi thực thi

WScript.Quit()
Q9: What function returns the next stage of code (i.e. the first round of obfuscated code)?
Yêu cầu: Xác định hàm trả về đoạn mã cho giai đoạn tiếp theo
Biến ES3c được gán kết quả trả về từ hàm y3zb chứa chuỗi mã độc đã làm rối cho giai đoạn xử lý kế tiếp

y3zb
Q10: The function LXv5 is important, what variable is assigned a key string value in determining what this function does?
Yêu cầu: Xác định tên biến chứa chuỗi khóa định hình chức năng của hàm LXv5
Kiểm tra hàm LXv5 thấy biến LUK7 được khởi tạo một chuỗi bảng chữ cái đặc trưng

LUK7
Q11: What encoding scheme is this function responsible for decoding?
Yêu cầu: Xác định cơ chế mã hóa mà hàm này đảm nhận giải mã
Chuỗi ký tự được gán cho biến LUK7 chính là bảng mã tiêu chuẩn của thuật toán Base64
1 | ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/ |
Base64
Q12: In the function CpPT, the first two for() loops are responsible for what important part of this function?
Yêu cầu: Xác định chức năng của hai vòng lặp for đầu tiên trong hàm CpPT
Hai vòng lặp for đầu tiên thực hiện khởi tạo mảng trạng thái 256 phần tử và hoán vị các giá trị dựa trên khóa giải mã tương ứng với thuật toán sinh lịch trình khóa Key-Scheduling Algorithm

1 | for (var i = 0; i < 256; i++) { |
Key-Scheduling Algorithm
Q13: The function CpPT requires two arguments, where does the value of the first argument come from?
Yêu cầu: Xác định nguồn gốc giá trị của đối số thứ nhất trong hàm CpPT
Đối số đầu tiên ssWZ được truyền vào từ phần tử đầu tiên của mảng tham số dòng lệnh command-line argument

command-line argument
Q14: For the function CpPT, what does the first argument represent?
Yêu cầu: Xác định ý nghĩa thực sự của đối số thứ nhất trong hàm CpPT
Trong script tệp maintools.js đối số đầu tiên ssWZ lấy trực tiếp từ tham số dòng lệnh wvy1(0)

Đối chiếu lại lệnh thực thi trong mã VBA chuỗi ký tự EzZETcSXyKAdF_e5I2i1 được truyền vào làm tham số chính là khóa giải mã key cho thuật toán

key
Q15: What encryption algorithm does the function CpPT implement in this script?
Yêu cầu: Xác định thuật toán mã hóa được hàm CpPT triển khai
Cấu trúc khởi tạo mảng hoán vị 256 byte qua KSA kết hợp với vòng lặp tạo dòng khóa PRGA để giải mã payload là thuật toán mã hóa dòng đối xứng RC4
RC4
Q16: What function is responsible for executing the deobfuscated code?
Yêu cầu: Xác định hàm chịu trách nhiệm thực thi đoạn mã đã được giải mã
Sau khi chuỗi mã độc trải qua giải mã Base64 và RC4 nó được chuyển thẳng vào hàm eval để nạp và thực thi trực tiếp trong bộ nhớ

eval
Q17: What Windows Script Host program can be used to execute this script in command-line mode?
Yêu cầu: Xác định chương trình Windows Script Host dùng để chạy script này ở chế độ dòng lệnh
Nạp chuỗi làm rối vào CyberChef giải mã tuần tự qua Base64 và thuật toán RC4 với chuỗi khóa EzZETcSXyKAdF_e5I2i1 thu được mã nguồn sử dụng đối tượng WScript Để chạy tệp script này ở chế độ dòng lệnh trên hệ thống Windows cần sử dụng chương trình cscript.exe

cscript.exe
Q18: What is the name of the first function defined in the deobfuscated code?
Yêu cầu: Xác định tên hàm đầu tiên được định nghĩa trong đoạn mã sau khi giải mã hoàn chỉnh
Từ kết quả giải mã ở trên quan sát dòng đầu tiên của mã nguồn hàm đầu tiên được khai báo là UspD

UspD