Bối cảnh: máy gọi đi đâu không biết?
Một tình huống quen thuộc: firewall log hoặc monitoring báo máy Windows đang gọi liên tục về một
domain lạ — api.something.com — nhưng bạn không biết đó là ứng dụng nào. Không phải
malware, có thể chỉ là một app nào đó tự update hoặc telemetry. Nhưng không xác định được thì
không thể kết luận.
Windows không có giao diện đơn giản để xem "process X đang kết nối tới domain Y". Phải biết đúng công cụ mới điều tra được nhanh.
4 công cụ, 4 cách tiếp cận
Cách cổ điển nhất. netstat liệt kê connection kèm PID, tasklist ghép PID
ra tên process. Dùng được ngay trên mọi máy Windows.
Bước 1: Tìm IP của domain cần điều tra:
cmd (Administrator)nslookup api.freshstartwalk.org Server: UnKnown Address: 192.168.1.1 Non-authoritative answer: Name: api.freshstartwalk.org Address: 104.21.45.67
Bước 2: Tìm kết nối đang active đến IP đó:
cmd (Administrator)Xem tất cả connection đang ESTABLISHED, kèm PID netstat -ano | findstr "ESTABLISHED" Hoặc filter thẳng theo IP của domain: netstat -ano | findstr "104.21.45.67" TCP 192.168.1.10:52341 104.21.45.67:443 ESTABLISHED 4872
Bước 3: Tra PID ra tên process:
cmd (Administrator)tasklist /fi "PID eq 4872" Image Name PID Session Name Mem Usage ============ ===== ============ ========== chrome.exe 4872 Console 185,420 K
netstat một mình không đủ — cần TCPView hoặc ProcMon để
bắt được event đúng lúc kết nối xảy ra.
TCPView là công cụ GUI của Sysinternals (Microsoft) hiển thị real-time toàn bộ TCP/UDP connection trên máy — process nào, kết nối tới IP/port nào, trạng thái gì. Không cần ghép PID thủ công, không cần gõ lệnh.
Download tại: Microsoft Sysinternals → TCPView (tìm "TCPView site:microsoft.com").
Giải nén, chạy Tcpview.exe với quyền Administrator.
Sau khi mở:
- Nhìn vào cột Remote Address — tìm domain hoặc IP cần điều tra
- Cột Process bên trái cho thấy ngay ứng dụng nào đang kết nối
- Dùng View → Filter để lọc theo domain/IP nếu danh sách dài
- Connection mới xuất hiện sẽ highlight xanh, connection đóng sẽ highlight đỏ
Process Monitor (ProcMon) là công cụ mạnh nhất trong bộ Sysinternals — ghi lại mọi event của mọi process: file, registry, network, process. Dùng khi cần audit sâu hơn hoặc bắt event ngắt quãng (không phải connection thường xuyên).
Cách setup filter để theo dõi domain cụ thể:
- Mở Process Monitor với quyền Administrator
- Vào Filter → Filter... (Ctrl+L)
- Thêm filter:
OperationisTCP Connect→ Include - Thêm filter thứ hai:
Pathcontainsfreshstartwalk→ Include - Apply và chờ — mỗi lần máy gọi domain đó, event sẽ xuất hiện kèm tên process và full path
Khi cần kết quả có thể export, tích hợp vào script, hoặc chạy trên nhiều máy từ xa — PowerShell là lựa chọn duy nhất. Script dưới đây liệt kê tất cả connection đang active kèm tên process và đường dẫn file thực thi:
PowerShell (Administrator)Get-NetTCPConnection | Where-Object {$_.State -eq "Established"} | ForEach-Object { $proc = Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue [PSCustomObject]@{ LocalPort = $_.LocalPort RemoteAddr = $_.RemoteAddress RemotePort = $_.RemotePort PID = $_.OwningProcess Process = $proc.Name Path = $proc.Path } } | Format-Table -AutoSize
Export ra CSV để phân tích hoặc gửi cho người khác:
PowerShell — export CSV# Thêm | Export-Csv vào cuối pipeline Get-NetTCPConnection | Where-Object {$_.State -eq "Established"} | ForEach-Object { $proc = Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue [PSCustomObject]@{ RemoteAddr = $_.RemoteAddress RemotePort = $_.RemotePort Process = $proc.Name Path = $proc.Path } } | Export-Csv -Path "C:\connections.csv" -NoTypeInformation
Chọn công cụ nào?
| Tình huống | Công cụ phù hợp | Lý do |
|---|---|---|
| Cần xác định ngay, không muốn cài thêm gì | netstat + tasklist | Nhanh nhất built-in, không phụ thuộc |
| Muốn nhìn real-time, thấy ngay, ít thao tác | TCPView | Trực quan GUI rõ ràng, highlight đổi màu |
| Connection không liên tục, cần bắt đúng lúc xảy ra | Process Monitor | Deep audit ghi log event, không bỏ sót |
| Cần export, chạy trên nhiều máy, hoặc tích hợp script | PowerShell | Tự động hoá pipeline, CSV, remote WinRM |
Quy trình thực tế thường đi theo thứ tự: thử netstat trước (30 giây), nếu không bắt được thì mở TCPView (2 phút), nếu vẫn không thấy thì mới dùng ProcMon với filter để chờ event.
Tìm ra rồi, làm gì tiếp?
Sau khi xác định được process, bước tiếp theo tuỳ thuộc vào kết quả:
- Là ứng dụng hợp lệ (browser, updater, telemetry): Xem cài đặt privacy của app đó. Nhiều ứng dụng cho phép tắt telemetry hoặc block cụ thể connection trong Windows Firewall.
-
Là process không rõ nguồn gốc: Tra hash file thực thi trên VirusTotal
(
Get-FileHash "path\to\process.exe"trong PowerShell để lấy SHA256). - Muốn chặn hoàn toàn: Tạo Outbound rule trong Windows Defender Firewall — block theo tên process hoặc theo IP/domain cụ thể.
PowerShell — lấy hash để kiểm tra VirusTotal# Thay đường dẫn bằng Path lấy được từ bước điều tra Get-FileHash "C:\Program Files\SomeApp\app.exe" -Algorithm SHA256 Algorithm Hash Path --------- ---- ---- SHA256 3A7B2C...F9E1D4 C:\Program Files\... # Copy hash, paste vào virustotal.com để kiểm tra
%AppData% hoặc %Temp%, hoặc VirusTotal cho kết quả dương tính —
đó là dấu hiệu nghiêm trọng. Cô lập máy khỏi mạng và tiến hành phân tích sâu hơn.
Case study: node.exe giả Edge task
Sau khi phát hiện traffic đến api.freshstartwalk.org, áp dụng các phương pháp trên
cho kết quả: process thủ phạm là node.exe — nhưng không phải Node.js cài chính thống.
Đường dẫn đầy đủ: C:\WINDOWS\system32\EdgeVersionHealthCheckerV2Task-fzf8\node.exe.
Tên thư mục EdgeVersionHealthCheckerV2Task-fzf8 được thiết kế để trông như
một scheduled task của Microsoft Edge. Nhưng khi chạy
schtasks /query /fo LIST /v | findstr /i EdgeVersion — không có kết quả nào trả về.
Nghĩa là: không có task nào với tên đó tồn tại trong hệ thống. Thư mục chỉ mượn tên để ngụy trang.
Bắt process tự spawn lại bằng PowerShell loop
Vấn đề: process node.exe liên tục bị tắt rồi spawn lại với PID mới — mỗi lần chỉ sống
vài chục giây. Netstat và TCPView snapshot không đủ nhanh để bắt kịp. Giải pháp: chạy vòng lặp
PowerShell polling liên tục để theo dõi.
PowerShell (Administrator) — polling loopwhile ($true) { Get-Process node -ErrorAction SilentlyContinue | Select Id, Path, StartTime Start-Sleep -Milliseconds 200 }
Output sau vài giây chạy:
outputId Path StartTime -- ---- --------- 5752 C:\WINDOWS\system32\EdgeVersionHealthCheckerV2Task-fzf8\node.exe 20/04/2026 11:08:01 5752 C:\WINDOWS\system32\EdgeVersionHealthCheckerV2Task-fzf8\node.exe 20/04/2026 11:08:01 ... 8972 C:\WINDOWS\system32\EdgeVersionHealthCheckerV2Task-fzf8\node.exe 20/04/2026 11:08:39 ...
PID thay đổi (5752 → 8972 → ...) nhưng đường dẫn giống nhau — xác nhận đây là một process được spawn định kỳ từ cùng một nơi. Interval khoảng 30–40 giây một lần.
-Milliseconds 50 nếu cần bắt process sống rất ngắn.
Phân tích thư mục nghi vấn
Bước tiếp theo: inspect nội dung thư mục chứa process. Chạy dir để xem toàn bộ file:
Những điểm đáng ngờ khi nhìn vào directory listing:
-
Tên folder giả danh Edge task — nhưng
schtasks /query | findstr EdgeVersionkhông trả về kết quả nào. Không có task Windows nào với tên đó. -
node.exe nặng 89 MB nằm trong
system32— Node.js runtime đầy đủ được nhúng vào, không phải file hệ thống Windows. -
app.js nặng 4.8 MB — ứng dụng Node.js minified/bundled. Kèm
preload.js— pattern quen thuộc của Electron app. -
Các file .node tên random hash — native addon (C++ module) được compile sẵn. Không có file nào tên thông thường hay chữ ký rõ ràng.
-
winpty-agent.exe + winpty.dll — thư viện terminal emulation. Thường thấy trong Git for Windows, ConEmu — không liên quan gì đến Edge health check.
-
Không có chữ ký số của Microsoft — tất cả file đều có thể verify bằng
Get-AuthenticodeSignature. File hợp lệ của Microsoft sẽ có chữ ký.
Truy vết nguồn gốc qua ngày tháng file
Thay vì vội kết luận là malware, bước quan trọng là đối chiếu timestamp file với lịch sử cài đặt phần mềm. Hai đợt file rõ ràng:
| File | Ngày tháng | Nhận định |
|---|---|---|
| winpty-agent.exe | 14/10/2025 | Lần cài đầu |
| node.exe | 29/10/2025 | Lần cài đầu |
| node.zip | 21/11/2025 | Bundle gốc |
| winpty.dll | 10/12/2025 | Lần cài đầu |
| app.js, preload.js, *.node | 24/02/2026 | Lần update |
| build.zip | 25/02/2026 | Lần update |
| db/ (folder) | 20/04/2026 | Runtime data |
Kiểm tra lịch sử cài đặt qua Programs and Features (Control Panel) hoặc PowerShell:
PowerShell — xem lịch sử cài đặt# Xem tất cả phần mềm đã cài, sort theo ngày Get-ItemProperty "HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*" | Select DisplayName, InstallDate, DisplayVersion | Where-Object { $_.InstallDate } | Sort-Object InstallDate -Descending | Format-Table -AutoSize # Lọc cụ thể theo tên nghi vấn Get-ItemProperty "HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*" | Where-Object { $_.DisplayName -like "*BlueStacks*" } | Select DisplayName, InstallDate, DisplayVersion
Kết quả cho thấy BlueStacks được cài vào tháng 10/2025 — khớp với timestamp
của node.exe và winpty-agent.exe. Đợt update tháng 2/2026 khớp với
lần BlueStacks tự update app.js và các module.
Kết luận: BlueStacks
api.freshstartwalk.org là endpoint telemetry/update của BlueStacks —
phần mềm giả lập Android trên Windows. BlueStacks cài một background service viết bằng Node.js,
ẩn trong system32 với tên thư mục giả danh Edge task để tránh bị chú ý.
Về bản chất đây không phải malware — nhưng hành vi ngụy trang dưới tên Microsoft, spawn process định kỳ không có UI, và gọi API nền mà không thông báo là những pattern đáng lo ngại từ góc độ bảo mật doanh nghiệp.
Tuỳ mục đích sử dụng, có thể xử lý theo một trong ba cách:
-
Gỡ cài BlueStacks hoàn toàn: Control Panel → Uninstall. Folder
EdgeVersionHealthCheckerV2Task-fzf8sẽ được dọn sạch theo. -
Vẫn muốn dùng BlueStacks, nhưng chặn telemetry: Tạo Outbound rule trong
Windows Defender Firewall — block
node.exetheo đường dẫn cụ thể hoặc block domain*.freshstartwalk.orgở DNS/firewall layer. -
Tắt service BlueStacks nền: Vào
services.msc, tìm các service BlueStacks (thường có tênBstHdLogRotatorSvc,BlueStacksAgent...) và set Startup Type → Manual hoặc Disabled.
schtasks /query | findstr <tên> rất hữu ích — nếu task không
tồn tại mà folder đã mượn tên, đó là dấu hiệu đáng điều tra thêm.