J'ai repris un produit d'un entrepreneur sur mon lieu de travail. L'outil collecte des métainformations. La nature exacte de l'information n'a pas d'importance pour la question, mais elle existe sous forme de fichier plat et / ou dans une base de données. D'une manière ou d'une autre, l'entrepreneur a configuré quelque chose sur le serveur pour transférer les journaux (sous forme de texte) à notre redirecteur Splunk. Nous ne pensons pas qu'il utilise Splunk Forwarder, car nous ne voyons aucune preuve de son existence (ni installée sur les lecteurs, ni en tant que services en cours d'exécution).
Nous ne savons quel port à distance vers l'avant va, et nous ne voyons le trafic du serveur Windows (sur lequel l'application est installée) au port distant.
Lorsque la connexion se produit, cela semble être aléatoire et de très courte durée. J'essaie de capturer quel processus établit cette connexion et où il réside sur le serveur Windows.
J'ai écrit le script suivant à cette fin, mais je ne suis pas du tout marié à l'idée d'utiliser Powershell s'il existe une meilleure méthode:
$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)
}
}
}
... Ce qui finit par détecter le trafic, mais le CSV produit se présente comme suit:
... 08/11/2017 08:25:06,
08/11/2017 08:25:06,
08/11/2017 08:25:07 ,,
08/11/2017 08:25:07 ,,
08/11/2017 08:25:07 ,,
08/11/2017 08:25:07 ,,
08/11/2017 08:25:14, Inactif, System.Diagnostics.Process (Idle) 08/11/2017 08:25:14, Inactif, System.Diagnostics.Process (Idle) 11/8/2017 8 : 25: 15, Au repos, System.Diagnostics.Process (Au repos) 08/11/2017 08:25:15, Au repos, System.Diagnostics.Process (Au repos) 08/11/2017 08:25:15, Idle, System.Diagnostics.Process (Idle) 11/8/2017 08:25:15, Idle, System.Diagnostics.Process (Idle) 11/8/2017 8:25:15, Idle, System.Diagnostics. Process (inactif) 08/11/2017 08:25:15, inactif, System.Diagnostics.Process (inactif) 11/8/2017 08:25:15, inactif, System.Diagnostics.Process (inactif) 11 / 8/2017 08:25:16, Veille, System.Diagnostics.Process (Idle) 08/11/2017 08:25:16, Veille, System.Diagnostics.Process (Veille) 11/8/2017 8:25 : 16 heures, ralenti, System.Diagnostics.Process (Idle) 08/11/2017 08:25:16, Veille, System.Diagnostics.Process (Idle) 08/11/2017 08:25:16, Veille, System.Diagnostics.Process (Idle) 08/11/2017 08:25:16 heures, veille, System.Diagnostics.Process (Idle)
...
... Plusieurs centaines de lignes de cela.
Comment puis-je déterminer un processus en cours d'exécution si je connais le port distant utilisé et que son exécution ne semble pas être conforme à une planification et que la connexion est de très courte durée?
la source
Get-Process
renvoie "Idle" (ou PID 0). Essayez de vous en débarrasserForEach-Object
et faites-le à lanetstat -ab >> C:\Temp\procs.txt
place (le script devra exécuter une version élevée).$aConnection.OwningProcess
renverrait 0 si$aConnection.State
est, par exemple,TimeWait
( attente d'un délai suffisant pour être sûr que le protocole distant a bien reçu l'accusé de réception de sa demande de fin de connexion ), voir laMSFT_NetTCPConnection
classe ; vous pouviez le voir courirnetstat -o 1
.Réponses:
Vous voudrez peut-être essayer d'utiliser un outil de capture de paquets tel que Netmon (également appelé Moniteur réseau). Utilisez un filtre de capture qui le gardera petit, filtre basé sur le port cible et l'adresse IP, laissez-le fonctionner pendant quelques heures et vous devriez voir le processus. Ensuite, recherchez simplement le disque pour cet exe. Netmon DL https://www.microsoft.com/en-us/download/details.aspx?id=4865 Netmon a été remplacé par le plus récent "Analyseur de messages" que je n'ai pas utilisé autant, certaines personnes aiment également Wireshark, mais Je ne suis pas sûr que Wireshark se situe au niveau du processus, à l'instar des outils de capture MS.
S'ils sont transférés via une tâche planifiée ... l'arborescence du planificateur de tâches peut s'avérer fastidieuse pour les recherches. Mais il existe également une interface de ligne de commande pour les tâches avec powershell,
Get-ScheduledTask
qui renvoie tous les noms de tâches et le chemin d'accès à la tâche. Peut-être que ça vaut le coup de regarder ça.la source