- Một nhân viên báo máy "tự mở ứng dụng, chuột tự di chuyển".
- Điều tra forensic phát hiện kẻ tấn công vào qua TeamViewer, nén file nhạy cảm, exfiltrate, rồi xoá dấu vết — toàn bộ không dùng một dòng malware nào.
- Phân tích chi tiết qua TeamViewer logs, NTFS USN Journal và PowerShell history.
TL;DR
Một vụ xâm nhập Windows điển hình kiểu Living-off-the-Land (LotL): kẻ tấn công không cài malware, chỉ dùng TeamViewer hợp pháp để remote vào máy nạn nhân, nén tài liệu nhạy cảm, exfil ra hạ tầng bên ngoài, rồi xoá chứng cứ. Investigator tái dựng toàn bộ chuỗi bằng cách tương quan 3 artifact trên Windows: Connections_incoming.txt + TeamViewer15_Logfile.log (ai vào, khi nào, từ IP nào), ConsoleHost_history.txt (lệnh PowerShell attacker gõ), và NTFS USN Journal $J (ai tạo archive, ai xoá file). Case study này cho thấy AV/EDR không nhìn thấy gì bất thường — nhưng forensic artifacts thì không nói dối.
Bối cảnh vụ việc
Một nhân viên báo hiện tượng lạ: ứng dụng tự bật, con trỏ chuột di chuyển mà không ai chạm máy. Đội IR vào cuộc và xác định máy đang bị điều khiển từ xa qua TeamViewer — công cụ hoàn toàn hợp pháp, có chữ ký số, được nhiều tổ chức cài sẵn cho mục đích hỗ trợ kỹ thuật.
Câu hỏi đặt ra cho forensic team: ai đã kết nối, khi nào, và làm gì trong phiên đó? Vì không có malware để trace, mọi dấu vết phải lấy từ artifact hệ điều hành và log của chính TeamViewer.
Tại sao case này quan trọng
Đây là pattern LotL kinh điển: attacker dùng công cụ được tin cậy (binary ký số, traffic mã hoá TLS qua port 5938 tới hạ tầng TeamViewer, trông y hệt phiên admin hợp lệ) thay cho malware. AV không flag. EDR nếu không tune rule "TeamViewer.exe spawn shell" cũng chỉ thấy một session remote bình thường. Lối vào thường là credential bị lộ, unattended-access password yếu, hoặc cấu hình mặc định — không cần exploit.
Hậu quả: xâm nhập gần như vô hình trong logs "bảo mật" truyền thống, nhưng để lại dấu vết rất rõ trong forensic artifacts. Ai không biết đọc những artifact đó thì không phát hiện được. Ai biết — dựng lại được toàn bộ attack chain tới từng phút.
Artifact chính: đọc đâu, tìm gì
Ba tầng artifact được tương quan trong vụ này:
1. TeamViewer logs — ai, khi nào, từ đâu
| File | Vai trò | Múi giờ |
|---|---|---|
C:\Program Files(x86)\TeamViewer\Connections_incoming.txt | Log phiên incoming thành công. Chứa: TeamViewer ID bên kết nối, display name, start/end time, logged-on user, connection type, unique ID. | UTC |
C:\Users\<user>\AppData\Roaming\TeamViewer\Connections.txt | Log phiên outgoing từ máy này. | UTC |
C:\Program Files(x86)\TeamViewer\TeamViewer15_Logfile.log (+ _OLD.log) | Verbose diagnostic. Chứa public IP, PID, keyboard layout, failed attempts, file-transfer flag. | Local time |
...\AppData\Roaming\TeamViewer\MRU\RemoteSupport\*.tvc | Cache các ID đã kết nối thành công — populate dropdown "Partner ID". | — |
Grep pattern quan trọng trong TeamViewer15_Logfile.log:
punch received— luôn chứa public IP thực của bên kết nối, kể cả qua relay.Login::Identify— TeamViewer ID của source PC (ngay cả khiConnections_incoming.txtđã bị xoá).New Participant added in CParticipantManager— display name của incoming session.Trying connection to— các ID mà attacker thử pivot tới (lateral movement).
2. NTFS USN Journal — ai tạo archive, ai xoá file
USN Journal (\$Extend\$UsnJrnl:$J alternate data stream) ghi mọi thay đổi trên volume NTFS. Kể cả khi file bị xoá và bản ghi MFT bị reuse, entry trong journal vẫn còn. Reason code quan trọng: FILE_CREATE + DATA_EXTEND + CLOSE liên tiếp trên .zip/.rar = staging exfil; FILE_DELETE = wipe evidence. Parser: MFTECmd (Eric Zimmerman), UsnJrnl2Csv, Autopsy — output CSV rồi merge super-timeline với TimelineExplorer / plaso.
3. PowerShell history — lệnh attacker đã gõ
File: C:\Users\<user>\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt. Persistent qua reboot, lưu tối đa ~4096 dòng.
Reveal chính xác syntax attacker đã dùng: download cradle, Compress-Archive, Invoke-WebRequest upload ra ngoài, Remove-Item wipe folder.
Hạn chế cần biết:
- PSReadLine < PowerShell 7 không ghi timestamp — phải cross-ref với Windows Event ID 4104 (Script Block Logging) hoặc 400/800 (Engine Lifecycle) để gán thời gian chính xác.
- Chỉ bắt lệnh gõ vào console interactive.
-File script.ps1và-EncodedCommandkhông vào file này. - Dễ wipe:
Clear-HistoryhoặcSet-PSReadLineOption -HistorySaveStyle SaveNothing. Đây chính là lý do PHẢI ship log về SIEM real-time.
Attack chain tái dựng
Tương quan 3 nguồn artifact cho ra timeline:
- Remote access via TeamViewer —
Connections_incoming.txtcó entry với TeamViewer ID lạ, thời điểm ngoài giờ hành chính.punch receivedtrong verbose log trả về public IP ở một quốc gia không ai đang công tác. - Interactive session kéo dài vài phút — start/end time trong
Connections_incoming.txtxác nhận attacker điều khiển máy tương tác, khớp với lời khai nhân viên. - Compression — USN Journal hiện chuỗi
FILE_CREATE+DATA_EXTENDcho một file.ziptrong thư mục chứa tài liệu mật, cùng timestamp với phiên remote.ConsoleHost_history.txtcó lệnhCompress-Archivetương ứng. - Data exfiltration —
Invoke-WebRequest/Invoke-RestMethodtrong PS history trỏ tới một endpoint ngoài. PID của TeamViewer trong verbose log cũng gợi ý file-transfer flag được set. - Evidence deletion — USN Journal ghi
FILE_DELETEcho nhiều tài liệu nhạy cảm trong vòng vài giây sau bước exfil. File đã mất, nhưng dấu vết xoá thì không.
Khi nào áp dụng playbook này
Pattern lặp lại ở mọi incident có "công cụ admin bị lợi dụng": TeamViewer, AnyDesk, ScreenConnect, Atera, LogMeIn, Splashtop, RustDesk. Artifact path khác nhau nhưng phương pháp luận giống hệt: log connection của tool (ai, khi nào, từ IP nào) + USN Journal (file system trong cửa sổ thời gian đó) + PowerShell/Prefetch/Sysmon (lệnh và process đã chạy). Dùng tốt cho: insider threat, BEC lan sang endpoint, ransomware initial access qua RMM, helpdesk scam.
Giới hạn cần biết khi điều tra
- UTC vs local time:
Connections_incoming.txtdùng UTC, verbose log dùng local time — nhầm là sai cả timeline. - Log có thể bị wipe: admin quyền cao xoá được
Connections_incoming.txt. Khi đó dựa vào verbose log,.tvccache, Volume Shadow Copy. - USN Journal ring buffer mặc định ~32MB — với máy trọng yếu nên tăng:
fsutil usn createjournal m=1073741824 a=134217728 C:. - PSReadLine < PS7 không có timestamp — phải bật Script Block Logging (Event 4104) để có thời gian thật.
Hardening rút ra từ case
- Application control: WDAC / AppLocker chặn mọi RMM không whitelist — ở cả layer binary lẫn DNS.
- MFA + trusted-device binding cho mọi remote-support account; tắt unattended-access password không cần thiết.
- EDR rule: alert khi
TeamViewer.exe(hoặc RMM bất kỳ) spawnpowershell.exe,cmd.exe,rar.exe,7z.exe— signal LotL rất mạnh. - Log forwarding real-time: ship
Connections_incoming.txt, verbose log,ConsoleHost_history.txtvề SIEM. Attacker wipe được file local — không wipe được bản đã ship. - Bật PowerShell Script Block Logging (GPO → Event 4104) + tăng USN Journal size. Chi phí gần bằng không, giá trị IR rất cao.
Case này là minh hoạ sống cho nguyên lý DFIR cốt lõi: không có malware không có nghĩa là không có dấu vết. Attacker luôn chạm vào file system, process tree, và network — và Windows ghi lại rất nhiều trong mặc định. Việc của defender là biết chỗ nào có log, đọc được log đó, và quan trọng hơn: ship log ra khỏi máy trước khi kẻ tấn công kịp wipe.
Nguồn: Cyber Fibers, Ben's IR Notes, Forensafe, Undercode, ACSC, @HackersCuriosos.