Journalisation des scans Wifi en PowerShell
Olivier que j’ai formé sur le Wifi pendant 3 jours en début de semaine m’a demandé un outil pour tracer tous les SSIDs et les BSSIDs présents sur le site de son usine. Il travaille dans un secteur où la sécurité informatique ou cybersécurité est loin d’être un vain mot ! Or, les utilisateurs recourent de plus en plus au BYOD et à leurs téléphones mobiles qu’ils mettent en partage de connexion pour accéder à Internet. J’ai pensé, une fois encore, au PowerShell.
La commande netsh
A l’aide de la commande netsh, vous pouvez disposer assez facilement des différents réseaux Wifi présents dans votre environnement. Lorsque le SSID est masqué, il faut alors recourir à un mode d’exploration sur l’adresse MAC – ou BSSID – de la borne, du mobile, de la tablette ou de la machine.
netsh wlan show networks mode=bssid
Le script PowerShell
Dans l’hypothèse où vous planifiez l’exécution de ce script, pensez à commenter la ligne où figure la commande Out-GridView en fin de fichier.
#Déclaration d'une whitelist de bornes connues $whitelist='18:a6:f7:c4:a2:7e','a4:08:f5:4b:ac:5a' #Le fichier de log $logfile='d:\ssid.log' $logs=@() #Récupération du contenu du fichier existant If(Test-Path -Path $logfile) { $logs+=Import-CSV -Path $logfile } $date=Get-Date #Scan des SSIDs et des BSSIDs $cmd=netsh wlan show networks mode=bssid $n=$cmd.Count For($i=0;$i -lt $n;$i++) { If($cmd[$i] -Match '^SSID[^:]+:.(.*)$') { $ssid=$Matches[1] $i++ $bool=$cmd[$i] -Match 'Type[^:]+:.(.+)$' $reseau=$Matches[1] $i++ $bool=$cmd[$i] -Match 'Authentification[^:]+:.(.+)$' $authent=$Matches[1] $i++ $bool=$cmd[$i] -Match 'Chiffrement[^:]+:.(.+)$' $chiffrement=$Matches[1] $i++ While($cmd[$i] -Match 'BSSID[^:]+:.(.+)$') { $bssid=$Matches[1] $i++ $bool=$cmd[$i] -Match 'Signal[^:]+:.(.+)$' $signal=$Matches[1] $i++ $bool=$cmd[$i] -Match 'Type[^:]+:.(.+)$' $radio=$Matches[1] $i++ $bool=$cmd[$i] -Match 'Canal[^:]+:.(.+)$' $canal=$Matches[1] $i=$i+2 If($bssid -notin $whitelist) { #Consignation des BSSIDs et des SSIDs $logs+=[PSCustomObject]@{date=$date;ssid=$ssid;reseau=$reseau;authentification=$authent;chiffrement=$chiffrement;bssid=$bssid;signal=$signal;radio=$radio;canal=$canal} } } } } $cmd=$null #Sauvegarde dans le fichier de logs If($logs) { $logs| Export-CSV -NoTypeInformation -Path $logfile #Facultatif : affichage des résultats si vous exécutez le script en mode interactif $logs|Out-GridView -Title 'Log Scan Wifi' } $logs=$null
Visualisation des logs
Le fichier contient tout l’historique de l’activité.