Cảnh báo job lừa đảo — Dẫn dụ anh em dev tải và giải nén malware
Chào anh em,
Hôm nay mình muốn chia sẻ một tình huống lừa đảo tinh vi (Bài viết có nhiều yếu tố technical, xin thông cảm ạ) — Có thể nhắm vào những anh em dev đang nhận job freelance. Mình không bị dính, nhưng cũng mất kha khá thời gian để mổ xẻ ra. Mong anh em đọc để cảnh giác và tránh mắc bẫy.
Cái bẫy nhìn rất ẢO
Một người lạ inbox job fix code, hoặc up job tìm freelancer, kèm lời mời hấp dẫn:
“Anh ơi em có đoạn code chạy không được, fix giùm em với, trả 15 triệu.”
Nghe quá ngon đúng không? Chỉ cần sửa code mà nhận được 15 triệu? Giao tiếp rất thật thà, gửi ngay link ZIP kèm theo password giải nén.
Bên trong file zip có gì?
Entry point của mình Sau khi mình tải về và phân tích, đây là những gì mình thấy:
Trong app.js có gọi 3 file js, nhưng mình để ý nhất là file helper/css.js? (Đã css còn chấm js bị nghi là phải rồi bồ ơi)
css.js
Bên trong file đó, có gọi 1 hàm tên là site_version (ảnh bên dưới). Mình thấy check version gì mà gọi file txt, đã thế còn eval (eval là lệnh thực thi code js)
Tại sao lại đáng ngờ?
type.txt
File TXT đi kèm có 250 dòng trắng với dòng ghi chú duy nhất là “empty”
Dùng một loạt tên biến, tên hàm bị obfuscate (làm rối) để người đọc không hiểu ngay
Và rõ ràng nhất: không có task dành cho dev nào thực sự ở đây cả
Phân tích mã độc JavaScript — Một hành trình bóc tách
Mình sẽ chia sẻ quá trình phân tích một đoạn code JavaScript độc hại, cách mình lần theo các hàm gọi, giải mã hành vi của nó và cuối cùng lấy được mật khẩu để giải nén các file .zip chứa payload.
Entry Point: AQNoc()
Khi mở mã nguồn, việc đầu tiên mình làm là xác định entry point — điểm bắt đầu của toàn bộ quá trình thực thi. Ở đây, đó là hàm
AQNoc():
Mình tra vào tìm code của AQNoc() thì thấy một vòng lặp:
for (const cSQoc of cmwb) {
await wtUnc(cSQoc);
}
Tò mò về biến cmwb, mình log nó ra và nhận được:
{
zipFilePath: ‘C:\\Users\\WDAGUtilityAccount\\Desktop\\data\\helpers\\public\\js\\js.zip’,
outputDir: ‘C:\\Users\\WDAGUtilityAccount\\Desktop\\data\\helpers\\helpers\\init’,
executableName: ‘app.exe’
}
{
zipFilePath: ‘C:\\Users\\WDAGUtilityAccount\\Desktop\\data\\helpers\\public\\js\\node.zip’,
outputDir: ‘C:\\Users\\WDAGUtilityAccount\\Desktop\\data\\helpers\\helpers\\init’,
executableName: ‘node.dll’
}
Output console.log
Tới lúc này mình mới nhận ra là có 2 file zip trong folder /public/js
2 file zip → Đây chính là danh sách các file zip mà đoạn mã muốn xử lý.
Giải mã hàm wtUnc(...)
Trong hàm wtUnc(...), mình thấy rất nhiều phần obfuscate bằng các hàm như b12mb.rbIkb(...), b12mb.zfhjb(...), b12mb.Dsulb(...).
Nhưng điểm chính là ở đây:
const gBjoc = `${…}`;
await ksIb(gBjoc);
Ở đây ksIb(...) mình console.log ra thì nó ra chuỗi là "EXEC" điều này cho thấy đây là hàm dùng để thực thi command line, nên mình đoán gBjoc là lệnh hệ thống. Mình chèn thêm:
console.log("Command:", gBjoc);
Và thu được:
.\7za.exe x js.zip -o”C:\\…\\init” -pJNFWEIUFNWEF8N298F239889EWIFIENUWIFUNIUWNEFIUNWEIFUENWUIFNWEIFJDSNFKSDF
.\7za.exe x node.zip -o"C:\\...\\init" -pJNFWEIUFNWEF8N298F239889EWIFIENUWIFUNIUWNEFIUNWEIFUENWUIFNWEIFJDSNFKSDF
Console.log ra command Bingo! Đây chính là lệnh và mật khẩu giải nén hai file .zip chứa app.exe và node.dll.
Bên trong file zip có gì?
Mình đã thử mở 2 file zip là js.zip và node.zip từ trước nhưng bị yêu cầu nhập password. Sau khi trace xong command trên, mình đã có được password là:
JNFWEIUFNWEF8N298F239889EWIFIENUWIFUNIUWNEFIUNWEIFUENWUIFNWEIFJDSNFKSDF
Giải nén ra được 2 file:
app.exe node.dll Đây chính là 2 payload thực thi mà mã độc muốn chạy sau khi giải nén.
Tóm tắt quá trình
Xác định entry point AQNoc() Lần theo wtUnc(...) để hiểu xử lý từng file zip Sử dụng console.log(...) để lộ ra command chạy thực tế Trích xuất được mật khẩu giải nén từ chính command của malware Giải nén và thu được các file thực thi nghi vấn Bạn có thể áp dụng phương pháp này để phân tích nhiều loại mã độc JS khác: không cần hiểu toàn bộ, chỉ cần tập trung đúng điểm thực thi, và tận dụng hành vi runtime để lộ ra thông tin quan trọng.
Kết luận
Về file exe kia, mình đã thực hiện dynamic analysis, nhưng nó y hệt bài hôm qua mình viết. (Bài viết mình sẽ comment bên dưới)
Nó chỉ khác ở chỗ là do con này chỉ chạy node và không yêu cầu quyền admin, nên nó chỉ ăn cấp thông tin trình duyệt của bạn sau đó gửi về server cho hacker.
Đây không phải là “job”, mà là một chiêu lừa để phát tán mã độc. Chỉ cần bạn chạy thử file hoặc script, có thể bạn sẽ:
Bị đánh cắp tài khoản trình duyệt Bị cài keylogger hoặc backdoor Mất quyền kiểm soát máy Anh em dev cần lưu ý điều gì?
Không mở file lạ, đặc biệt là .exe, .bat, .ps1, hoặc script yêu cầu quyền hệ thống Không ham job “ngon bất ngờ”, nhất là khi người thuê không rõ ràng, không profile Nếu nhận file .zip có pass lạ: phân tích tĩnh trước khi giải nén, đừng chạy liền Dùng Windows Defender, Malwarebytes hoặc VirusTotal để kiểm tra file Note nhỏ: Mình chỉ là web dev bình thường, không chuyên phân tích mã độc — Và bài viết này có sử dụng ChatGPT để viết lại những đoạn phân tích kỹ thuật của mình bạn nào có thắc mắc thì comment để mình giải đáp ạ — Nếu bạn thấy bài viết hữu ích, hãy chia sẻ để mọi người cùng biết nhé. Cảm ơn anh em đã đọc!
All Rights Reserved