Post Repeated payload size in PowerShell

Hello le monde ! et si on reprenait un peu le rythme avec un bout de PowerShell, non ? Cette semaine je vous partage quelques lignes de code qui m’ont permis de valider une règle de détection au taf. En effet quand un malware, virus, botnet ou un autre membre de cette grande famille s’installe sur un PC, une des première action qu’il va faire est de contacter son serveur de contrôle commande (C&C) ou à minima poster sur un site les infos qu’il a collecté. Et il arrive fréquemment qu’il fasse cette action de manière répétée, en envoyant toujours les même données.

Au niveau de la supervision, ça se détecte super bien dans les logs réseau (Proxy, Firewall ou IDS/IPS par exemple). Vous avez un flux répété à intervalles régulier qui fait toujours la même taille à l’octet prêt. Il faudra quant même « allow-listé » les quelques logiciel connus dans votre SI qui peuvent avoir ce comportement légitimement. Après ce qui reste ça vaut le coup de creuser un peu, vous avez une chance non-négligeable de chopper des vieux virus oublié sur votre parc qui n’arrivent plus à contacter leur C2 par exemple.

Bref, le script est en dessous, il est pas de moi je me rappel l’avoir lâchement trouvé sur un forum et adapté; mais pas moyen de remettre la main sur la source au moment au j’écris ces lignes (Si quelqu’un retrouve l’auteur je le rajouter volontiers en source ici, of course)

Post Repeated payload size in PowerShell

$destinationIp = "https://geekeries.org"
$payloadSize = 512000
$payload = "A" * $payloadSize
$numberOfRequests = 150

$totalBytesSent = 0
$totalBytesReceived = 0

1..$numberOfRequests | ForEach-Object {
$response = $null
$bytesReceived = 0
try {
$response = Invoke-WebRequest -Uri $destinationIp -Body $payload -Method Post
$bytesReceived = $response.RawContentLength
} catch {
# Catch the error to capture the bytes received in case of a 413 response (Payload Too Large)
$bytesReceived = $_.Exception.Response.ContentLength
}

$totalBytesSent += $payloadSize
$totalBytesReceived += $bytesReceived
$ratio = if ($totalBytesSent + $totalBytesReceived -eq 0) { 0 } else { ($totalBytesSent / ($totalBytesReceived + $totalBytesSent)) * 100 }

Write-Host @"
Request ${_}:
Bytes Sent: $payloadSize
Bytes Received: $bytesReceived
Total Bytes Sent so far: $totalBytesSent
Total Bytes Received so far: $totalBytesReceived
Send/Total Ratio so far: $($ratio.ToString("F2"))%
"@

Start-Sleep -Seconds 5
}

Voili voilou, vous pouvez vous en servir pour créer et tester un nouvelle règle de détection assez facilement. C’est pas celle ci qui vous permettra d’arrêter la dernière APT ZeroDay de la NSA mais c’est toujours un pas de plus dans la bonne direction. A la prochaine et d’ici là geekez bien !

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.