Ein drahtloser Zugang zu einem Netzwerk ist bequem – auch für potentielle Angreifer. Nur sind die meisten Zugriffspunkte heute mit einem Kennwort geschützt. Nur wie kommt man da heran? Es ist recht einfach: wenn man einen Windows Rechner mit einem WLAN-Netzwerk verbindet, dann speichert das Betriebssystem den Namen und das Kennwort für den nächsten Besuch ab. Das sind dann die bekannten Netzwerke:
Und es ist nun recht einfach, die zugehörigen Kennworte auszulesen. Das hat Microsoft selber so vorgesehen :-). Man benötigt nur eine cmd und den alten Befehl netsh. Mit diesem kann man sich alle gespeicherten Netzwerke anzeigen lassen:
und dann nach dem Kennwort eines Netzes fragen:
In der Zeile “Schlüsselinhalt” kann man nun einfach das Kennwort auslesen. 🙂
mein Powershell-Script
Mit einer PowerShell kann man nun das Ganze etwas automatisieren und aufhübschen:
$error.Clear() $Output = netsh wlan show profiles $WLANCreds = $Output | Select-String -Pattern "Profil f.r alle Benutzer :", "All User Profile" | ForEach-Object { $out = ($_ -split ":")[-1].Trim() -replace '"' $profile = netsh wlan show profiles name=$out key=clear $pw = $profile | select-string -Pattern "Authentifizierung","Authentication" if ($pw) { $pw2 = ($pw -split ":")[-1].Trim() -replace '"' if ($pw2 -eq "Open") { Write-Output "$out, <open>" } else { $key = $profile | select-string -Pattern "Schl.sselinhalt" ,"Key Content" if ($key) { $key = ($key -split ":")[-1].Trim() -replace '"' } $row = New-Object -TypeName psobject $row | Add-Member -MemberType NoteProperty -Name SSID -Value $out $row | Add-Member -MemberType NoteProperty -Name Auth -Value $pw2 $row | Add-Member -MemberType NoteProperty -Name Pass -Value $key $row } } } | Sort-Object -Property SSID if ($error) { foreach ($err in $error) {Write-host " ERROR: $($err.Exception.Message)"} } $WLANCreds | Format-Table -AutoSize | Out-String
Dann ist auch der Output angenehm übersichtlich:
Ach ja, das sind natürlich nicht meine aktuellen WLAN-Kennworte, sondern meine PhotoShop-Künste 🙂
Schutzmöglichkeiten
Der Schaden gerade bei größeren Netzwerken ist denkbar groß, da nach dem Auslesen der Kennworte kein “Hausbesuch” mehr erforderlich ist, um in das Netzwerk zu gelangen! Nur wie schützt man sich davor?
Keine administrativen Kennungen zur Anmeldung verwenden hilft in diesem Fall leider nicht viel, denn auch Standardbenutzer können netsh aufrufen – wie man am Bild oben leicht erkennen kann (was soll denn das @Microsoft??)
OK, was hilft denn nun? Generell sollte man sich überlegen, ob man über Funk überhaupt einen Zugang zum firmeninternen Netzwerk anbieten möchte. Für die vielen tragbaren Geräte wie Smartphones und Tablets genügt ja in der Regel ein WLAN-Segment, dass nur den Zugang zum Internet herstellt. Darüber lassen sich leicht Mails und andere Dinge synchronisieren. 🙂
Sollte eine Anbindung ins Firmennetzwerk wirklich erforderlich sein, dann könnt ihr die (hoffentlich verwalteten)Geräte mit Zertifikaten ausstatten und das WLAN mit WPA-Enterprise über einen Radius-Server absichern. Für AD-integrierte Geräte lässt sich leicht die Konfiguration dafür via GPO verteilen. Meinen Umbau stelle ich demnächst hier vor. 🙂
Mit WPA-Enterprise wird mein Script nur noch das hier auslesen:
Hier habe ich mein Netzwerk ws-its5 auf zertifikatbasierte Radius-Authentifizierung umgestellt. Daher ist nun das Kennwortfeld leer! 🙂 Natürlich muss nun das Zertifikat geschützt werden – aber das zeige ich euch ein anderes Mal.
Stay tuned!