Tôi đã tiếp nhận một sản phẩm từ một nhà thầu tại nơi tôi làm việc. Các công cụ thu thập thông tin. Bản chất chính xác của thông tin không quan trọng đối với câu hỏi, nhưng nó tồn tại dưới dạng tệp phẳng và / hoặc trong cơ sở dữ liệu. Bằng cách nào đó, nhà thầu đã cấu hình một cái gì đó trên máy chủ để chuyển tiếp nhật ký (dưới dạng văn bản) đến bộ chuyển tiếp Splunk của chúng tôi. Chúng tôi không nghĩ rằng anh ấy đang sử dụng Splunk Forwarder, vì chúng tôi không thấy bằng chứng về sự tồn tại của nó (được cài đặt ở bất kỳ đâu trên các ổ đĩa, hoặc khi các dịch vụ đang chạy).
Chúng ta biết những gì cổng từ xa về phía trước đang xảy đến, và chúng ta thấy lưu lượng từ các máy chủ Windows (mà trên đó các ứng dụng được cài đặt) vào cổng từ xa.
Khi kết nối xảy ra dường như là ngẫu nhiên, và sống rất ngắn. Tôi đang cố gắng để nắm bắt những gì quá trình đang thực hiện kết nối này và nơi nó sống trên máy chủ Windows.
Tôi đã viết kịch bản sau cho đến cuối, nhưng tôi không bao giờ kết hôn với ý tưởng sử dụng Powershell nếu có một phương pháp tốt hơn:
$foundConnections = @()
$foundProcesses = @()
while($true)
{
Start-Sleep -Milliseconds 100
$connections = Get-NetTCPConnection -RemotePort 30117 -ErrorAction Ignore
if($connections -ne $null)
{
if($connections.Count -ne $null -and $connections.Count -gt 1)
{
foreach($aConnection in $connections)
{
$foundConnections += $aConnection
$process = Get-Process -Id $aConnection.OwningProcess
Write-Output ($process)
$foundProcesses += $process
Add-Content -Path C:\Temp\procs.csv -Value ((Get-Date).ToString() + "," + $process.Name + "," + $process)
}
}
else
{
$foundConnections += $connections
$process = Get-Process -Id $connections.OwningProcess
Write-Output ($process)
$foundProcesses += $process
Add-Content -Path C:\Temp\procs.csv -Value ((Get-Date).ToString() + "," + $process.Name + "," + $process)
}
}
}
... Cuối cùng sẽ phát hiện ra lưu lượng truy cập, nhưng csv được sản xuất trông như thế này:
... 11/8/2017 8:25:06 SA ,,
11/8/2017 8:25:06 SA ,,
11/8/2017 8:25:07 SA ,,
11/8/2017 8:25:07 SA ,,
11/8/2017 8:25:07 SA ,,
11/8/2017 8:25:07 SA ,,
11/8/2017 8:25:14 AM, Idle, System.Diagnostics.Process (Idle) 11/8/2017 8:25:14 AM, Idle, System.Diagnostics.Process (Idle) 11/8/2017 8 : 25: 15 AM, nhàn rỗi, System.Diagnostics.Process (Idle) 11/8/2017 8:25:15 AM, Idle, System.Diagnostics.Process (Idle) 11/8/2017 8:25:15 AM, Nhàn rỗi, System.Diagnostics.Process (Idle) 11/8/2017 8:25:15 AM, Idle, System.Diagnostics.Process (Idle) 11/8/2017 8:25:15 AM, Idle, System.Diagnostics. Quá trình (nhàn rỗi) 11/8/2017 8:25:15 AM, Idle, System.Diagnostics.Process (Idle) 11/8/2017 8:25:15 AM, Idle, System.Diagnostics.Process (Idle) 11 / 8/2017 8:25:16 AM, Idle, System.Diagnostics.Process (Idle) 11/8/2017 8:25:16 AM, Idle, System.Diagnostics.Process (Idle) 11/8/2017 8:25 : 16 AM, Idle, System.Diagnostics.Process (Idle) 11/8/2017 8:25:16 AM, Idle, System.Diagnostics.Process (Idle) 11/8/2017 8:25:16 AM, Idle, System.Diagnostics.Process (nhàn rỗi) 11/8/2017 8:25:16 giờ sáng, nhàn rỗi, System.Diagnostics.Process (nhàn rỗi)
...
... Hàng trăm dòng đó.
Làm cách nào tôi có thể xác định một quy trình đang chạy nếu tôi biết cổng từ xa đang sử dụng và nó đang chạy dường như không tuân theo lịch trình và kết nối rất ngắn?
$aConnection.OwningProcess
sẽ trả về 0 nếu $aConnection.State
là ví dụ TimeWait
( Chờ đủ thời gian để vượt qua để chắc chắn rằng TCP từ xa đã nhận được xác nhận về yêu cầu chấm dứt kết nối của nó ), xem MSFT_NetTCPConnection
lớp ; bạn có thể nhìn thấy nó chạy netstat -o 1
.
Get-Process
trả về "Idle" (còn gọi là PID 0). Thay vào đó, hãy thử loại bỏForEach-Object
và làmnetstat -ab >> C:\Temp\procs.txt
(kịch bản sẽ cần chạy cao).