Table of Contents
Trước đây, tôi muốn chia sẻ trải nghiệm cá nhân của mình về một cuộc phỏng vấn
kết thúc bằng lừa đảo, nó thực sự nguy hiểm cho chúng tôi vì dữ liệu của chúng
tôi có thể bị đánh cắp một cách vô thức (Vì cuộc phỏng vấn diễn ra trực tiếp
và chia sẻ màn hình với người liên quan, vì vậy nếu chúng tôi không làm vậy
không tập trung, chúng ta có thể bị mắc kẹt). May mắn thay, trong trường hợp
của tôi, kẻ tấn công đã không thực hiện thành công.
Câu chuyện
Vào một ngày nắng đẹp, tôi tình cờ mở Linkedin thì có thông báo trò chuyện của
ai đó đang mời làm việc từ xa, đây là cuộc trò chuyện.
Với lời đề nghị như vậy, tôi rất thích thú. Sau đó anh ấy đã tạo link phỏng vấn cấp độ bằng google Meet.
Sau đó, anh ấy phỏng vấn tôi và hỏi tôi đã làm những dự án nào, tôi giữ vai
trò gì và mức lương mong muốn của tôi. Sau đó, anh ấy hỏi về người dùng
GitHub của tôi. Tôi được mời tham gia một dự án sử dụng Node.js và anh ấy
yêu cầu tôi chia sẻ màn hình của mình vì anh ấy nói đây là giai đoạn sàng
lọc (cho đến nay vẫn chưa có gì đáng ngờ).
Tôi cũng đã sao chép dự án, và sau đó tôi luôn kiểm tra các hàm độc hại
như eval (tại sao lại là eval??? vì hàm eval có thể thực thi các chuỗi
dưới dạng mã. Nếu chuỗi đến từ một nguồn không đáng tin cậy (chẳng hạn như
dữ liệu đầu vào của người dùng), thì kẻ tấn công có thể chèn mã độc để
thực thi. Bạn có thể đọc thêm tại đây hoặc trong các bài viết khác
how-evil-is-eval.
Chắc chắn, hàm này được gọi khi gọi utils.assets() trong tệp
./server/config/util.js
(click để xem hình gốc)
Sau đó, trong buổi phỏng vấn. Tôi đã nói với người phỏng vấn (cố gắng tốt
lắm Diddy, và kết thúc cuộc gọi).
Có một điều mà tôi nghi ngờ là mã
JavaScript đã bị làm rối (obfuscated).
Thông thường, có nhiều lý do khiến mã bị làm rối chẳng hạn như:
- Làm cho mã khó đọc đối với mọi người.
- Tránh việc đảo ngược (reverse engineering) để hiểu mã luồng.
- Một số người chèn mã độc (cho phép họ đánh cắp các tệp quan trọng trên PC của chúng ta)
Tôi sẽ chia bài viết thành hai phần: Phân tích tĩnh và Phân tích động
1. Phân tích tĩnh
Trong lần đảo ngược này, tôi sẽ tập trung vào phần hàm JavaScript, bạn có
thể kiểm tra
tại đây.
Mã có thể được kiểm tra sau khi giải mã (tuy nhiên vẫn còn một số mã cần
được sắp xếp lại để vẫn có thể đọc được)
tại đây.
Ngoài ra, có một số hàm mà tôi bỏ qua. Vì vậy, tôi chỉ thảo luận về các
hàm quan trọng.
Trong hàm _0x3c0bfd tìm kiếm thông tin như hostname, platform, homedir và tmpdir sau đó khởi tạo máy chủ tới http://86.104.74.51:1224.
Tôi kiểm tra máy chủ, nó đã được tạo từ ngày 2024-03-28
Ngoài ra, mã bị làm rối sẽ lấy dữ liệu nhạy cảm như:
1. Cấu hình ví Solana (Nếu bạn là người chơi tiền điện tử, bạn đã quen
thuộc với điều này)
4. Keychain (Giống như quản lý mật khẩu có thể lưu trữ thông tin như passwords, người dùng Mac chắc hẳn đã quen thuộc với nó)
Sau đó sau khi lấy được thông tin quan trọng, nó sẽ được tải lên máy chủ http://86.104.74.51:1224/uploads với phương thức POST
2. Phân tích động
Bước đầu tiên, chuẩn bị VMware hoặc một môi trường đặc biệt để tránh các
cuộc tấn công và thay đổi máy chủ thành localhost, ví dụ: http://86.104.74.51:1224 thành http://127.0.0.1:1224, sau đó thay
đổi thành máy chủ localhost.
Đừng quên sử dụng trình gỡ lỗi.
Sau đó mở Chrome DevTools bằng quyền truy cập chrome://inspect và nhấp vào Open dedicated DevTools for Node
Chúng ta có thể thấy nội dung của từng biến
_0x1e3887: sohais-MacBook-Air.local // hostname
_0x20b1f0: darwin // platform
_0x4753a5: /Users/sohai // homedir
_0x171a9c: /var/folders/d_/865r6lh90g5cn8bcy1p99z6m0000gn/T //tmpdir
Sau đó, gọi hàm _0x59c6d8 có một nền tảng kiểm tra, trong trường hợp này
tôi sử dụng là darwin
Vì vậy, mã sẽ gọi yêu cầu đến URL http://127.0.0.1:1224/client/5/507 vì
tôi đặt nó thành localhost, nó phải là 404
Nhưng nếu tôi thay đổi yêu cầu trực tiếp bằng curl với máy chủ gốc http://86.104.74.51:1224/client/5/507, phản hồi là mã python được mã hóa bằng base64 với zlib nén cũng sử dụng
lặp lại 50 lần và tự động thực thi.
Như chúng ta có thể thấy có 3 hàm chính:
1. download_payload
2. download_browse
3. download_mclip
Sau đó, mỗi hàm sẽ yêu cầu một tệp trên máy chủ http://86.104.74.51:1224/
sau đó sẽ lưu tệp trong homedir và thực thi tệp đó trong nền.
1. download_payload
Tạo một URL yêu cầu http://86.104.74.51:1224/client/5/507 tệp được lưu
trên /homedir/.n2/pay hoặc /Users/sohai/.n2/pay
Sau đó, tệp được thực thi. Đối với tệp giải mã, bạn có thể kiểm tra tại đây
* Có một điều thú vị, nếu hệ điều hành là Darwin thì mã sẽ ngay lập tức
stopped / exited.
2. download_browse
Tạo một yêu cầu URL http://86.104.74.51:1224/brow/5/507 tệp lưu tại /homedir/.n2/bow hoặc /Users/sohai/.n2/bow
Sau đó, tệp được thực thi. Đối với tệp giải mã, bạn có thể kiểm tra tại đây
Nếu tôi kiểm tra mã, đó là mã nhưng đủ độc đáo để tìm ra tải
trọng, vì nó được lưu trữ ngẫu nhiên trong máy chủ pastebin.
Sau đó, một số danh sách URL được XOR bằng khóa !!!HappyPenguin1950!!! như
một ví dụ về pastebin https://pastebin.com/raw/suEqUQBY
Nếu tôi XOR một lần nữa thì đầu ra là http://23.254.229.101/cat-video (tôi đã tạo bộ giải mã tại đây)
3. download_mclip
Tạo một URL yêu cầu http://86.104.74.51:1224/mclip/5/507 tệp lưu tại
/homedir/.n2/mlip hoặc /Users/sohai/.n2/mlip
Sau đó, tệp được thực thi. Đối với tệp giải mã, bạn có thể kiểm tra tại đây
Được thiết kế đặc biệt như một keylogger, nếu một ứng dụng như chrome.exe
và bold.exe đang chạy, nó sẽ ghi lại mọi lần gõ bàn phím.
Sau đó sẽ có một kiểm tra ismnemonic (điều này dành riêng cho ví tiền điện
tử) nói cách khác, kẻ tấn công cố tình nhắm mục tiêu vào ví tiền điện tử
sau đó tất cả dữ liệu sẽ được gửi đến máy chủ http://95.164.7.171:8637/api/clip
bằng phương thức POST.
Chuyển đến trình gỡ lỗi
Nếu tệp được tải xuống thành công. Sau đó, tải trọng sẽ được lưu trong tên
tệp /Users/sohai/.sysinfo
Sau đó nó sẽ thực thi tệp python3 /Users/sohai/.sysinfo
Sau đó đoạn mã sẽ gọi hàm _0x4e6119(), chúng ta có thể thấy nó ở tab bên
phải
Đoạn mã liệt kê thành công mọi ứng dụng như Chrome, Brave, Opera,
[ 'nkbihfbeogaeaoehlefnkodbefgpgknn', 'ejbalbakoplchlghecdalmeeeajnimhm', 'fhbohimaelbohpjbbldcngcnapndodjp', 'ibnejdfjmmkpcnlpebklmnkoeoihofec', 'bfnaelmomeimhlpmgjnjophhpkkoljpa', 'aeachknmefphepccionboohckonoeemg', 'hifafgmccdpekplomjjkcfgodnhcellj', 'jblndlipeogpafnldhgmapagcccfchpi', 'acmacodkjbdgmoleebolmdjonilkdbch', 'dlcobpjiigpikoobohmabehhmhfoodbb', 'mcohilncbfahbmgdjkbpemcciiolgcge', 'agoakfejjabomempkjlepdflaleeobhb', 'omaabbefbmiijedngplfjmnooppbclkk', 'aholpfdialjgjfhomihkjbmgjidlcdno', 'nphplpgoakhhjchkkhmiggakijnkhfnd', 'penjlddjkjgpnkllboccdgccekpkcbin', 'lgmpcpglpngdoalbgeoldeajfclnhafa', 'fldfpgipfncgndfolcbkdeeknbbbnhcc', 'bhhhlbepdkbapadjdnnojkbgioiodbic', 'gjnckgkfmgmibbkoficdidcljeaaaheg', 'afbcbjpbpfadlkmhmclhkeeodmamcflc', ]
Một trong số đó là metamask.
Có một số bước mà tôi bỏ qua, chẳng hạn như (kiểm tra từng hồ sơ cho đến
200)
Và sau khi tất cả dữ liệu đã được truy xuất thành công, cuối cùng tất cả các tệp sẽ được tải lên máy chủ của kẻ tấn công. rong trường hợp này, tôi đã thay đổi máy chủ gốc thành http://127.0.0.1:1224.
Từ phân tích động, chúng ta có thể lấy List API trên máy chủ 86.104.74.51
1. GET http://86.104.74.51:1224/client/5/507 (init dropper backdoor)
2. POST http://86.104.74.51:1224/uploads (upload logger)
3. GET http://86.104.74.51:1224/brow/5/507 (dropper berupa malware)
4. GET http://86.104.74.51:1224/mclip/5/507 (dropper berupa keylogger)
5. GET http://86.104.74.51:1224/pdown (tải xuống trình biên dịch python3
cho windows)
Sau đó là máy chủ bổ sung 95.164.7.171 như một vùng chứa keylogger
1. POST http://95.164.7.171:8637/api/clip (tải lên kết quả keylogger)
Danh sách các cổng mở:
Biết đâu, có người muốn thử hack lại thì sao...
Kết luận, với tư cách là nhà phát triển, chúng ta phải luôn cẩn thận khi
một người nào đó mà chúng ta không biết chạy một chương trình, mặc dù trông giống như một câu hỏi phỏng vấn. Và luôn kiểm tra thư viện mà
chúng ta sử dụng, có thể thư viện mà chúng ta sử dụng cũng không an toàn.
dependency-confusion
Và cuối cùng cảm ơn những người đã dành thời gian đọc bài viết này.
Nguồn: https://sohay666.github.io/