TerminalFix: đổi một hộp thoại, và payload nhảy từ một infostealer lên đường hầm vào mạng nội bộ

Tóm tắt
ClickFix cổ điển hướng nạn nhân tới hộp thoại Run của Windows. TerminalFix hướng họ tới Windows Terminal hoặc PowerShell.
Nghe như một chi tiết vụn vặt. Nhưng hộp thoại Run chỉ nhận một dòng và giới hạn độ dài, còn Windows Terminal nhận trọn một script nhiều dòng phức tạp. Microsoft nêu chính xác lý do: chuyển sang Terminal làm tăng khả năng script nhiều dòng thực thi thành công.
Đó là lý do payload nhảy từ một infostealer đơn lẻ — thứ mà các biến thể ClickFix trước đây thường phát tán — lên một chuỗi tám giai đoạn: DLL sideloading qua một binary Windows có chữ ký hợp lệ, payload giấu trong pixel của ảnh PNG, persistence kép, trinh sát Active Directory sâu, và cuối cùng là một implant reverse tunnel viết bằng Python biến máy nạn nhân thành điểm pivot vào mạng nội bộ.
Điểm quan trọng nhất về mặt phòng thủ: không có CVE, và không có bản vá. Mọi giai đoạn trong chuỗi đều dùng hành vi Windows có tài liệu đầy đủ.
Hành động ưu tiên: cấu hình Windows Terminal cảnh báo người dùng khi nội dung dán có nhiều dòng — đây là một thiết lập GPO, không tốn license, và nó chặn đúng bước mà toàn bộ chuỗi phụ thuộc vào.
TerminalFix khác ClickFix ở đâu, và tại sao điều đó quan trọng
| ClickFix cổ điển | TerminalFix | |
|---|---|---|
| Đích đến của lệnh | Hộp thoại Run (Win+R) | Windows Terminal hoặc PowerShell |
| Giới hạn payload | Một dòng, giới hạn độ dài | Script nhiều dòng, không giới hạn thực tế |
| Payload điển hình | Một infostealer | Chuỗi tám giai đoạn, kết thúc bằng reverse tunnel |
| Khả năng hiển thị | Không có | Terminal render màu và định dạng |
Điểm cuối cùng trong bảng bị đánh giá thấp nhưng lại quan trọng với hiệu quả social engineering. Vì Terminal render được màu, kẻ tấn công dùng chính khả năng đó để in ra thông báo Cloudflare giả:
Xóa màn hình terminal, in dòng "Starting Cloudflare verification..." màu cyan
Sau khi hoàn tất, in dòng "I am not a robot – Cloudflare ID: f47f2a8c21c9df4e" màu xanh lá Với người dùng, trải nghiệm không phải là "tôi vừa chạy một lệnh lạ" mà là "một quy trình xác thực đang chạy và đã hoàn tất". Toàn bộ hoạt động độc hại diễn ra giữa hai dòng thông báo đó.
Nhận định của tôi về mục này: đây là một ví dụ hiếm hoi mà một thay đổi ở tầng social engineering mở khóa một thay đổi ở tầng năng lực kỹ thuật. Không có exploit mới, không có kỹ thuật mới nào được phát minh. Kẻ tấn công chỉ đơn giản chuyển sang một cái hộp lớn hơn, và điều đó cho phép họ đưa vào cả một chương trình thay vì một dòng lệnh.
Đáng lưu ý thêm: Windows Terminal là ứng dụng mặc định trên Windows 11. Không cần cài đặt, không cần quyền quản trị.
Kill chain
Tổng quan chuỗi tấn công TerminalFix (nguồn: Microsoft Threat Intelligence).
Người dùng truy cập một website hợp pháp đã bị chiếm quyền. Trang gốc hiển thị trong chốc lát rồi bị thay bằng một overlay xác thực Cloudflare Turnstile giả — đầy đủ logo Cloudflare, ô "Verify you are human" và animation quay.
Khi người dùng tương tác với hộp thoại giả, một lệnh PowerShell độc hại được âm thầm copy vào clipboard. Hướng dẫn trên màn hình yêu cầu mở Windows Terminal hoặc PowerShell và dán vào.
Lệnh được dán tải một archive ZIP từ hạ tầng attacker bằng một User-Agent tùy chỉnh, giải nén vào
C:\ProgramData\f47f2a8c21c9df4e, rồi chạy1.batim lặng ở nền.1.batthực thiLockScreenContentServer.exe— một binary Windows thật, có chữ ký hợp lệ.Vì Windows loader phân giải thư mục ứng dụng trước
System32, binary này nạpdui70.dllđộc hại nằm cùng thư mục thay vì DLL thật của hệ thống.dui70.dllchứa một payload bị làm rối nặng trong resource section. Khi nạp, DLL lấy resource này, giải mã hoàn toàn trong bộ nhớ, và chuyển quyền thực thi sang nó — payload đã giải mã không bao giờ được ghi ra đĩa.PowerShell tầng hai tải ba ảnh PNG từ domain của attacker, trích payload nhị phân từ dữ liệu pixel, và ghép lại thành file trên đĩa.
Thiết lập persistence kép qua Registry Run key và scheduled task, ẩn thư mục làm việc.
Thực hiện trinh sát domain sâu.
Khởi chạy một file-watch loop làm kênh lệnh bất đồng bộ.
Tải Python runtime và implant
client.py, chạy quapythonw.exekhông cửa sổ, thiết lập reverse WebSocket tunnel tớigitnow[.]dev:443.
Hộp thoại xác thực Cloudflare Turnstile giả hiển thị trên website bị chiếm quyền (nguồn: Microsoft).
Hai file trong archive
| File | Mô tả | Vai trò |
|---|---|---|
LockScreenContentServer.exe |
Windows executable hợp pháp, có chữ ký | Host cho sideloading; nạp dui70.dll từ thư mục làm việc |
dui70.dll |
DLL giả danh "Windows DirectUI Engine" — không có chữ ký, timestamp giả đặt ở năm 2104 | Payload độc hại; thực thi PowerShell tầng hai khi được sideload |
LockScreenContentServer.exe có một import phụ thuộc tĩnh vào dui70.dll, tức Windows DirectUI Engine. Kẻ tấn công lạm dụng đúng phụ thuộc đó bằng cách thả một dui70.dll độc hại đặt cạnh executable.
Kết quả: thực thi bắt đầu bên trong một tiến trình đáng tin cậy, có chữ ký, cho phép kẻ tấn công thừa hưởng danh tiếng của nó và né các kiểm soát dựa trên định danh tiến trình.
Chi tiết timestamp giả đặt ở năm 2104 đáng ghi lại — đây là một artifact rất dễ kiểm tra và không có lý do hợp lệ nào để tồn tại.
Steganography: chia đôi DLL qua hai ảnh
Hàm Extract-RawFileFromImage — payload giấu trong dữ liệu kênh pixel (nguồn: Microsoft).
Sau khi được sideload, DLL độc hại khởi chạy một script PowerShell tải các payload bổ sung giấu bên trong file ảnh PNG.
Cơ chế trích xuất. Hàm Extract-RawFileFromImage đọc các kênh RGBA của từng pixel và dựng lại một binary nhúng. Tám byte đầu mã hóa độ dài payload dưới dạng số nguyên 64-bit, phần byte còn lại chứa dữ liệu file.
Ba ảnh, một DLL bị chia đôi. Script tải ba ảnh qua POST request tới hai domain nội dung có cơ chế failover:
Ảnh 1 → executable
Ảnh 2 → nửa đầu của DLL
Ảnh 3 → nửa sau của DLL
→ hai mảnh được nối lại sau khi trích
Việc chia DLL qua hai ảnh đáng phân tích riêng. Microsoft nêu rõ lý do: mã hóa dữ liệu payload trong file PNG khiến việc kiểm tra loại file và nội dung khó khăn hơn, và việc chia DLL qua hai ảnh che giấu thêm payload hoàn chỉnh khi đang truyền.
Nói cách khác, không ảnh nào chứa đủ một file thực thi hoàn chỉnh. Một công cụ quét nội dung tại gateway sẽ thấy ba ảnh PNG hợp lệ, không thấy binary nào.
Sau khi trích xuất xong, các ảnh nguồn bị xóa để giảm dấu vết forensic.
Persistence và ẩn mình
Chiến dịch thiết lập persistence dư thừa qua hai cơ chế độc lập. Script batch nhận đường dẫn payload làm tham số dòng lệnh, kiểm tra file tồn tại, rồi cấu hình cả hai cơ chế dưới cùng một tên giả: LockScreenContentServer_MuODG5yBM — chọn để hòa lẫn với thành phần Windows Lock Screen hợp lệ vốn đã bị lạm dụng ở bước trước.
Scheduled task chạy lại payload mỗi 60 phút (nguồn: Microsoft).
Registry Run key HKCU\...\Run với tên dạng service ngẫu nhiên
Scheduled task Chạy lại LockScreenContentServer.exe mỗi 60 phút
Ẩn thư mục attrib +h +s trên thư mục payload
Chu kỳ 60 phút là một đánh đổi đáng chú ý: nó đủ thưa để không tạo nhiễu rõ rệt, nhưng đủ dày để chiếm lại chỗ đứng trong vòng một giờ nếu tiến trình bị kết thúc.
Trinh sát Active Directory
Sau khi có persistence, mã độc thực hiện trinh sát sâu môi trường nạn nhân. Microsoft đánh giá hoạt động này nhất quán với một operator hands-on-keyboard hoặc một script đánh giá tự động được thiết kế để xác định xem máy bị chiếm có phải mục tiêu giá trị hay không — đặc biệt là nó có tham gia domain và có gần hạ tầng giá trị cao hay không.
Liệt kê Active Directory, bao gồm thu hoạch trường description của tài khoản (nguồn: Microsoft).
| Hoạt động | Kỹ thuật |
|---|---|
| Thu thập thông tin hệ thống | systeminfo với bộ lọc findstr đa ngôn ngữ — biến thể locale tiếng Anh, Tây Ban Nha và Đức |
| Khám phá domain trust | nltest /domain_trusts, nltest /dclist: |
| Liệt kê domain admin | net group "domain admins" /domain |
| Liệt kê máy tính và người dùng AD | ADSI searcher |
| Thu hoạch trường description của tài khoản AD | ADSI searcher |
| Dò tìm hạ tầng | Ping sweep có chủ đích các server theo tên |
Hai chi tiết đáng nhấn riêng.
Trường description của tài khoản AD. Đây là chi tiết tôi cho là quan trọng nhất trong phần trinh sát, và cũng là hạng mục kiểm tra rẻ nhất mà bài này tạo ra. Trường description trong Active Directory là nơi rất nhiều quản trị viên vẫn để lại ghi chú vận hành — và đôi khi cả mật khẩu tài khoản dịch vụ. Kẻ tấn công biết điều đó và thu hoạch trường này một cách có chủ đích.
Ping sweep theo tên server. Microsoft ghi nhận các tên được dò tìm tương ứng với các vai trò hạ tầng phổ biến: domain controller, cơ sở dữ liệu, backup, gateway và hệ thống mail. Đây không phải quét ngẫu nhiên — đây là việc lập bản đồ có mục tiêu, và dữ liệu thu được sẽ trở nên rất giá trị khi kết hợp với reverse tunnel ở giai đoạn cuối.
Vòng lặp lệnh bất đồng bộ qua filesystem
Mã độc triển khai một file-watch loop bằng PowerShell tạo ra một kênh C2 bất đồng bộ thông qua chính filesystem cục bộ. Cơ chế này giám sát một file "watch" để phát hiện thay đổi, thực thi nội dung của nó qua Invoke-Expression, và ghi kết quả vào một file output riêng.
Microsoft mô tả đây là "một kênh C2 bất đồng bộ nguyên thủy nhưng hiệu quả", và mô tả đó chính xác. Nó cho phép kẻ tấn công thực thi lệnh PowerShell tùy ý bằng cách ghi chúng vào file được theo dõi. Output được ghi vào file riêng, và attacker đọc lại qua reverse tunnel.
Mô hình thực thi tách rời này cho phép phát lệnh bất đồng bộ và lấy kết quả vào lúc thuận tiện — không cần một phiên kết nối liên tục.
Reverse tunnel: kẻ tấn công mang theo interpreter của chính mình
Đây là phần tôi cho là đáng chú ý nhất về mặt thiết kế trong toàn bộ chiến dịch.
Implant không dùng Python có sẵn trên máy. Nó tải một bản Python 3.14.5 embeddable, không sửa đổi, có chữ ký, trực tiếp từ bản phân phối chính thức của python.org, qua TLS 1.2. Toàn bộ logic độc hại nằm hoàn toàn trong file client.py đi kèm.
Microsoft mô tả điều này cho operator một môi trường thực thi di động, chịu được khác biệt phiên bản, và thừa hưởng sự tin cậy của một runtime mã nguồn mở hợp lệ.
Hệ quả với đội phòng thủ rất cụ thể: application allowlisting dựa trên nhà phát hành sẽ cho qua chuỗi này. Runtime hợp lệ thật, chữ ký hợp lệ thật, tải từ nguồn hợp lệ thật. Thứ duy nhất độc hại là một file .py văn bản thuần.
Việc chạy qua pythonw.exe — trình thông dịch Python không cửa sổ — nghĩa là không có console nào hiện ra cho người dùng thấy. Kết hợp với DEBUG = False mặc định và toàn bộ log đi vào stderr, implant hoạt động hoàn toàn im lặng.
Năng lực của client.py
Các loại message trong giao thức tunnel tùy chỉnh (nguồn: Microsoft).
| Năng lực | Mô tả |
|---|---|
| TLS WebSocket tunnel | Kết nối ra ngoài qua TLS cổng 443, nâng cấp lên WebSocket tại endpoint /tunnel. Xác minh chứng chỉ luôn bị tắt (CERT_NONE) |
| Proxy TCP tùy ý | Phân tích địa chỉ kiểu SOCKS5 (IPv4/IPv6/hostname) cho phép C2 chỉ định implant kết nối tới bất kỳ host và port nội bộ nào |
| Xoay User-Agent | Chọn ngẫu nhiên từ bốn chuỗi UA trình duyệt thật (Chrome, Firefox, Safari) cho mỗi kết nối |
| Remote shutdown | C2 có thể kết thúc implant từ xa qua MSG_SHUTDOWN; dùng os._exit() để bỏ qua cleanup của Python |
| Stream multiplexing | Header nhị phân tùy chỉnh 7 byte (type + stream ID + length) ghép nhiều kết nối tunnel qua một WebSocket duy nhất |
Giao thức mang tám loại message trải từ định danh implant, thiết lập kết nối, relay dữ liệu, keepalive, tới kết thúc từ xa.
Một nghịch lý đáng nói
Implant dùng TLS để hòa lẫn vào traffic web bình thường — Microsoft nêu rõ rằng trên đường truyền, lưu lượng này không phân biệt được với một phiên web mã hóa thông thường tới một đích duy nhất.
Nhưng xác minh chứng chỉ luôn bị tắt. Implant dùng TLS để ẩn mình, không phải để bảo mật.
Với đội phòng thủ, đây là một chi tiết có ý nghĩa vận hành cụ thể: nếu tổ chức có TLS inspection ở gateway, tunnel này không phát hiện được việc bị chặn giữa và vẫn tiếp tục chạy bình thường. Đó vừa là cơ hội — traffic có thể được kiểm tra — vừa là lời nhắc rằng implant không có cơ chế nào cảnh báo operator về việc bị giám sát.
Biến nạn nhân thành điểm pivot
Năng lực kết nối TCP tùy ý của implant (nguồn: Microsoft).
Khả năng phân tích địa chỉ kiểu SOCKS5 cho phép C2 tiếp cận bất kỳ host nào nhìn thấy được từ mạng của nạn nhân. Kết hợp với dữ liệu trinh sát thu thập trước đó — domain controller, SQL server, backup server, gateway — điều này biến máy bị chiếm thành một điểm pivot đầy đủ vào mạng nội bộ.
Đây là lý do Microsoft khuyến nghị các tổ chức phát hiện chỉ dấu của chiến dịch này nên coi máy bị ảnh hưởng là điểm pivot mạng tiềm năng và điều tra hoạt động di chuyển ngang cùng khả năng lộ credential.
IOC
IOC lấy từ báo cáo Microsoft Threat Intelligence ngày 28/08/2026. Domain đã defang.
Hash file (SHA-256)
# Archive ban đầu
18c2090e8a0ae0568af9b87e59eaf8270f23d2909600ed9db91a9444fd8b278f verify_pkg.zip
# Implant tunnel tùy chỉnh
b8d107800403b9197e5b7609ceacd8e4cac1b0f9a1d156e6dacd6c3f7794b36a client.py
# dui70.dll độc hại — 8 biến thể
ba77feed86bcda49308746421bdc684a432dd5d68c363975b2a3c6831bda3f07
026478003fe354134c03acf6890e7d3b153ba08a836eca42350db48f213872ab
032b529fac61e550f5dc9489686f519b82d64625fa05a8d9ecf8ba8be9b2ad22
df8221a933b38284ebdcb8bffc2df62123c9f5b5f421dd0b070e13e668b3eabf
eb1b4be34d05b394fb74efdeb95faecd1d1963be6ecc1b9db2b4757b491f01f0
5d43abf5c36ea203176d3300ff14af27b4be81810ad2679b3a62b255e3d6e1c8
9a7b4dcd51d9251c177d323d6aaecdfc86674f69bc1af048dc872926d22aaa24
342df92235c9dec81203b837addaa38bb85b64b4a48fe71b5303ca86d991991e
ededeacf30e493dd632d477fe770ba419aa2848f685ea049381a0a8d2cc3e84d
Tám biến thể
dui70.dllđáng nói riêng. Con số này cho thấy chiến dịch đang được vận hành với nhiều mẫu khác nhau chứ không phải một lần thả duy nhất — và nghĩa là chặn theo hash sẽ luôn chậm hơn một bước.
Chỉ dấu mạng
gitnow[.]dev # C2 cho implant reverse tunnel (cổng 443)
bestsocialmedianewspapper[.]com # Host ảnh steganography / phát tán payload
offlineupdater[.]com # Host ảnh steganography / failover
hxxps://linked-log[.]com/ # Website hợp pháp đã bị chiếm quyền
Artifact trên host
# Thư mục và file
C:\ProgramData\f47f2a8c21c9df4e\ Thư mục giải nén payload
1.bat Batch script khởi chạy chuỗi
LockScreenContentServer.exe Binary hợp pháp có chữ ký, bị lạm dụng
dui70.dll DLL độc hại — không chữ ký, timestamp giả năm 2104
client.py Implant reverse tunnel
pythonw.exe Python runtime không cửa sổ
# Persistence — cùng tên cho cả hai cơ chế
LockScreenContentServer_MuODG5yBM
→ HKCU\Software\Microsoft\Windows\CurrentVersion\Run
→ Scheduled task, chu kỳ 60 phút
# Ẩn thư mục
attrib +h +s trên thư mục payload
# Chuỗi trong lệnh khởi chạy implant
client.py --server --uuid cert.pem gitnow.dev
Artifact kỹ thuật dùng cho phát hiện
# Chuỗi trong lệnh PowerShell ban đầu
"Starting Cloudflare verification..." (in màu cyan)
"I am not a robot – Cloudflare ID: f47f2a8c21c9df4e" (in màu xanh lá)
# Runtime được tải về
Python 3.14.5 embeddable (bản chính thức từ python.org, tải qua TLS 1.2)
# Đặc điểm tunnel
Endpoint WebSocket: /tunnel
Header giao thức: 7 byte (type + stream ID + length)
Số loại message: 8
Xác minh chứng chỉ: CERT_NONE (luôn tắt)
User-Agent: xoay ngẫu nhiên giữa 4 chuỗi Chrome / Firefox / Safari
# Steganography
Ảnh PNG tải qua POST request
8 byte đầu = độ dài payload (int64), phần còn lại = dữ liệu file
Ảnh nguồn bị xóa sau khi trích xuất
Detection có sẵn của Microsoft Defender
Microsoft Defender Antivirus
Trojan:Win32/ClickFix.*
Trojan:Win32/TermFix.*
Trojan:Win32/Posilod.*
Trojan:Win64/DLLHijack.DAB!MTB
Trojan:Python/Indigo.SA
Microsoft Defender for Endpoint
Possible initial access from an emerging threat
Possible ClickFix activity
Potential initial access led to ransomware attempt
An executable file loaded an unexpected DLL file
Anomaly detected in ASEP registry
Suspicious Scheduled Task Process Launched
Suspicious scheduled task
Suspicious LDAP query
Suspicious Active Directory enumeration
Possible hands-on-keyboard pre-ransom activity
Anomalous account lookups
Possibly malicious use of proxy or tunneling tool
MITRE ATT&CK Mapping
Ánh xạ dưới đây do chính Microsoft công bố trong báo cáo gốc, phản ánh các hành vi quan sát được trong hoạt động này.
| Tactic | Technique ID | Technique Name | Ghi nhận trong chiến dịch |
|---|---|---|---|
| Initial Access | T1189 | Drive-by Compromise | Website bị chiếm quyền hiển thị overlay CAPTCHA giả |
| Execution | T1059.001 | Command and Scripting Interpreter: PowerShell | Lệnh PowerShell độc hại được người dùng dán vào Terminal |
| Execution | T1204.002 | User Execution: Malicious File | Người dùng dán và thực thi lệnh bị chiếm quyền clipboard |
| Persistence | T1547.001 | Boot or Logon Autostart Execution: Registry Run Keys | HKCU Run key chạy LockScreenContentServer.exe |
| Persistence | T1053.005 | Scheduled Task/Job: Scheduled Task | Scheduled task chạy mỗi 60 phút |
| Defense Evasion | T1574.002 | Hijack Execution Flow: DLL Side-Loading | dui70.dll độc hại được sideload bởi LockScreenContentServer.exe hợp pháp |
| Defense Evasion | T1027.003 | Obfuscated Files or Information: Steganography | Payload giấu trong dữ liệu pixel RGBA của ảnh PNG |
| Defense Evasion | T1564.001 | Hide Artifacts: Hidden Files and Directories | Lệnh attrib +h +s áp lên thư mục payload |
| Defense Evasion | T1036.005 | Masquerading: Match Legitimate Name or Location | DLL đặt tên dui70.dll để khớp framework DUI hợp lệ của Microsoft |
| Discovery | T1018 | Remote System Discovery | Truy vấn ADSI xác định máy chủ Windows Server và thực hiện ping sweep |
| Discovery | T1069.002 | Permission Groups Discovery: Domain Groups | Lệnh net group "domain admins" /domain |
| Discovery | T1482 | Domain Trust Discovery | nltest /domain_trusts và /dclist: |
| Discovery | T1087.002 | Account Discovery: Domain Account | ADSI searcher liệt kê trường description của tài khoản |
| Discovery | T1082 | System Information Discovery | systeminfo với bộ lọc findstr đa ngôn ngữ |
| Command and Control | T1572 | Protocol Tunneling | Reverse WebSocket tunnel qua TLS tới gitnow[.]dev:443 |
| Command and Control | T1071.001 | Application Layer Protocol: Web Protocols | Giao tiếp C2 qua HTTPS/WebSocket |
| Command and Control | T1105 | Ingress Tool Transfer | Python runtime và bộ implant được tải về và giải nén |
Nhận định
Không có CVE nghĩa là không có bản vá, và không có bản vá nghĩa là điểm can thiệp duy nhất là con người và cấu hình.
Đây là điều làm TerminalFix khác với phần lớn nội dung mà một đội TI xử lý hằng ngày. Không có phiên bản nào để nâng cấp, không có hotfix nào để triển khai, không có mục nào để đưa vào KEV. Mọi giai đoạn trong chuỗi đều dùng hành vi Windows có tài liệu: clipboard hoạt động đúng như thiết kế, Terminal chấp nhận nội dung dán đúng như thiết kế, Windows loader phân giải thư mục ứng dụng trước System32 đúng như thiết kế, và Python chạy file .py đúng như thiết kế.
Điều đó dịch chuyển toàn bộ trọng tâm phòng thủ sang cấu hình và hành vi người dùng.
Điểm can thiệp tốt nhất, và nó gần như miễn phí. Trong danh sách khuyến nghị của Microsoft có một mục dễ bị lướt qua: cấu hình Windows Terminal để cảnh báo người dùng khi nội dung họ đang dán có nhiều dòng. Đây là một thiết lập Group Policy. Nó không tốn license, không cần triển khai agent, và nó chặn đúng bước mà toàn bộ chuỗi tám giai đoạn phụ thuộc vào.
Toàn bộ chiến dịch này đứng hay đổ ở một khoảnh khắc: người dùng nhấn Ctrl+V vào một cửa sổ Terminal. Mọi thứ sau đó — sideloading, steganography, trinh sát AD, reverse tunnel — chỉ xảy ra nếu khoảnh khắc đó xảy ra.
Về việc kẻ tấn công mang theo interpreter của mình. Đây là mô thức mà tôi cho là sẽ còn gặp lại. Nếu chính sách application control của tổ chức bạn dựa trên nhà phát hành hoặc chữ ký, hãy đặt câu hỏi: nó sẽ làm gì với một bản Python chính thức, có chữ ký, tải từ python.org? Câu trả lời gần như chắc chắn là cho qua. Kiểm soát có ý nghĩa ở đây không phải là chặn runtime mà là kiểm soát việc runtime đó được đặt ở đâu và được gọi bởi ai — một Python interpreter nằm trong C:\ProgramData\ và được khởi chạy bởi một tiến trình không phải shell người dùng là bất thường tuyệt đối.
Về tám biến thể DLL. Việc Microsoft công bố tám hash dui70.dll khác nhau nói lên rằng chiến dịch đang được vận hành liên tục với mẫu được tạo lại thường xuyên. Với đội phòng thủ, điều này khẳng định lại một nguyên tắc quen thuộc: chặn theo hash luôn chậm hơn một bước. Cái bám được ở đây là quan hệ tiến trình — LockScreenContentServer.exe nạp một dui70.dll từ thư mục không phải C:\Windows\SystemApps.
Liên hệ Việt Nam
Windows Terminal đã là ứng dụng mặc định. Trên Windows 11, nó có sẵn — không cần cài đặt, không cần quyền quản trị, và người dùng thường không nghĩ về nó như một công cụ nguy hiểm. Trong nhiều tổ chức, hộp thoại Run được chú ý nhiều hơn Terminal về mặt kiểm soát, dù Terminal cho phép nhiều hơn hẳn.
Đào tạo nhận thức hiện tại không phủ được kịch bản này. Đây là điểm tôi muốn nhấn mạnh nhất cho phần liên hệ trong nước. Phần lớn nội dung đào tạo về phishing tập trung vào hai thông điệp: không mở file đính kèm lạ, và không click link lạ.
Ở đây không có file đính kèm nào và không có link tải nào. Nạn nhân tự copy và tự dán. Và website ban đầu là một site có thật đã bị chiếm quyền, nên lời khuyên "kiểm tra domain trước khi tin" cũng không áp dụng được.
Thông điệp cần bổ sung rất cụ thể: không bao giờ dán một lệnh vào Terminal, PowerShell hay hộp thoại Run theo hướng dẫn của một trang web — bất kể trang đó trông chính thống đến đâu và bất kể lệnh đó được giải thích là để làm gì. Một quy trình xác thực CAPTCHA hợp pháp không bao giờ yêu cầu người dùng mở terminal.
Trường description trong Active Directory. Trong nhiều môi trường doanh nghiệp Việt Nam, trường này được dùng làm nơi ghi chú vận hành — ai quản lý tài khoản, tài khoản dùng cho dịch vụ gì, và không hiếm trường hợp có cả mật khẩu tài khoản dịch vụ. Việc rà soát và làm sạch trường này là hạng mục làm được ngay, không tốn chi phí, và có giá trị vượt xa chiến dịch cụ thể này.
Về locale. Script trinh sát có biến thể cho tiếng Anh, Tây Ban Nha và Đức — không có tiếng Việt. Điều này cho thấy chiến dịch hiện tại chưa nhắm thị trường trong nước. Nhưng cần đọc đúng: đó là chỉ dấu về phạm vi nhắm mục tiêu hiện tại, không phải giới hạn kỹ thuật. Bản thân chuỗi tấn công hoàn toàn không phụ thuộc vào ngôn ngữ hệ thống, và việc bổ sung một biến thể locale là thay đổi vài dòng script.
Khuyến nghị
Cấu hình Windows Terminal cảnh báo khi nội dung dán có nhiều dòng qua Group Policy — biện pháp rẻ nhất và nhắm đúng bước quyết định của toàn bộ chuỗi.
Hạn chế PowerShell cho người dùng thường bằng AppLocker, App Control for Business hoặc Group Policy; cân nhắc chặn hoặc audit hộp thoại Run ở những nơi không cần cho công việc hằng ngày.
Cảnh báo trên
LockScreenContentServer.exechạy ngoàiC:\Windows\SystemApps, đặc biệt khi đi kèm việc nạpdui70.dll— quan hệ tiến trình này bắt được cả tám biến thể DLL và các mẫu chưa biết.Giám sát Python interpreter ở vị trí bất thường: một
pythonw.exenằm trongC:\ProgramData\hoặc được khởi chạy bởi tiến trình không phải shell người dùng là dấu hiệu không có trường hợp sử dụng hợp lệ.Rà soát và làm sạch trường description của tài khoản Active Directory — kẻ tấn công thu hoạch trường này có chủ đích vì nó thường chứa ghi chú vận hành và đôi khi cả mật khẩu.
Nếu phát hiện chỉ dấu của chiến dịch, coi máy bị ảnh hưởng là điểm pivot mạng: điều tra di chuyển ngang, và ưu tiên xoay toàn bộ credential có thể truy cập từ máy đó — bao gồm tài khoản domain admin nếu máy tham gia domain.
Tài liệu tham khảo
Microsoft Threat Intelligence — TerminalFix campaign deploys a reverse tunnel through multistage intrusion, Sagar Patil, Suriyaraj Natarajan, Parasharan Raghavan (28/08/2026) — báo cáo gốc, kèm IOC, detection và hunting query
BleepingComputer — Microsoft warns of TerminalFix attacks deploying reverse tunnels
The Hacker News — TerminalFix Uses Fake Cloudflare CAPTCHAs to Deploy Reverse-Tunnel Backdoor
The Register — Attack hides malware in PNGs and drops custom reverse tunnel on victims' machines
RH-ISAC — TerminalFix Campaign Targets Multiple Critical Sectors with ClickFix Variant
Microsoft Learn — Cấu hình Windows Terminal qua Group Policy
Microsoft Learn — Cảnh báo khi dán nội dung nhiều dòng
Microsoft Learn — Attack surface reduction rules





