Defensive

Klartextpasswörter

Wie Klartextpasswörter gefunden werden können.


Zugangsdaten, die in Klartext gespeichert werden, sind ein gängiges Problem und werden von sämtlich Angreifern gerne ausgenutzt. Dieses Thema wurde jedoch schon ausgiebig diskutiert und die Lösung ist zumindest für die Endbenutzer relativ simpel, nämlich das Verwenden eines Passwortmanagers. Angriffe und Hardening eines solchen Passwortmanagers haben wir bereits in diesem Blogpost angeschaut. Vergessen gehen jedoch häufig gespeicherte Zugangsdaten auf Netzwerk-Shares, ein gefundenes Fressen für Angreifer.

Zuerst befassen wir uns damit, wie ein Unternehmen auf gespeicherte Klartextzugangsdaten überprüft werden kann. Diese Aufgabe ist nämlich gar nicht so einfach, wie man im ersten Moment denken könnte. Wie erkennt man, dass ein gespeichertes Wort ein Passwort darstellt und insbesondere wofür es verwendet wird? Steht diese Information nicht explizit dort, wird es schon eher schwierig das Passwort als solches zu erkennen und den Verwendungszeck zu erraten. Anders verhält es sich natürlich, wenn dieser Kontext gegeben ist, zum Beispiel in einem Skript, welches Klartextpasswörter enthält.

Glücklicherweise ist das Verfahren für Angreifer und Verteidiger im Prinzip dasselbe und es können die gleichen Tools und Methoden verwendet werden. Zugangsdaten, die für einen Angreifer einfach aufzufinden sind, sind somit auch für die Verteidiger einfach zu entdecken und zu bereinigen. Im Umkehrschluss sind Zugangsdaten, welche für die Verteidigung schwierig zu entdecken sind, auch für die Angreifer schwierig zu entdecken und das Auffinden entsprechend mit mehr Aufwand verbunden. Diese Methodik der Verteidigung kann in der Cyber Security übrigens ziemlich oft und sehr effektiv eingesetzt werden. Durch das Verwenden der gleichen Methoden und Tools der Angreifer zur Verteidigung, kann deren Aufwand sehr schnell massiv vergrössert werden. Somit bleibt mehr Zeit zur Entdeckung eines Angriffes und finanziell motivierte Angreifer verlieren hoffentlich die «Lust» und suchen sich ein einfacheres Ziel.

Viele Privilege-Escalation-Skripts wie PowerUp und WinPeas suchen schon standartmässig nach offensichtlichen Passwörtern. Das Ausführen solcher Skripts ist auch sonst sehr zu empfehlen, werden so einfache Möglichkeiten zur Privilege Escalation schnell offenbart. Gezielt nach Schlagwörtern in verschiedenen Dateitypen, die auf Passwörter hindeuten, kann zum Beispiel schon mit einem solchen simplen Powershell-Skript gesucht werden:

function Password-Search()
{
     param([Parameter(Mandatory = $true)] [string]$Path="")
     Write-Output "***Searching***"
     Get-ChildItem -Path $Path *.txt -Recurse | Select-String -Pattern "passw"
     Get-ChildItem -Path $Path *.ps1 -Recurse | Select-String -Pattern "passw"
Write-Output "***Done***"
}

Password-Search

Als Pfad kann auch ein Netzwerk-Share verwendet werden und dort gesucht werden.

Sehr beliebt bei Angreifern und etwas ausgereifter ist das Tool LaZagne. Das Tool geht jedoch etwas weiter und versucht generell Passwörter, gespeichert auf dem lokalen Computer, zu erhalten.

Nun wollen wir aber auf die Netzwerk-Shares zu sprechen kommen. Zugriffsrechte von Benutzern auf Netzwerk-Shares werden häufig etwas zu liberal vergeben und so kann es passieren, dass plötzlich sämtliche Benutzer Zugriff auf einen Netzwerk-Share erhalten, welcher eigentlich nur kurz in einem Entwicklungsprozess für spezifische Nutzer benötigt wurde. Im schlimmsten Fall liegt auf einem solchen Netzwerk-Share ein Powershell-Skript mit Zugangsdaten eines Service Accounts mit hohen Berechtigungen und dem Angreifer wird es extrem leicht gemacht. Erneut können Angreifer und Verteidiger wieder exakt die gleichen Methoden verwenden. Mit dem Tool SharpShares können alle erreichbaren Netzwerk-Shares des ausführenden Benutzers angezeigt werden.

SharpShare

Nebenbei: Sollte hier bei einem Netzwerk-Share (ausgenommen das ausführende System) C$ angezeigt werden, heisst das in der Regel, dass der entsprechende User Administratorenrechte auf dem System hat und dieser Sachverhalt sollte unbedingt überprüft werden.

Im Idealfall können diese Erkenntnisse nun schon genutzt werden und unnötige Zugriffsrechte auf Netzwerk-Shares entfernt werden. Dies lohnt sich auf alle Fälle, die Angriffsfläche wird mit solchen Zugriffsrechten auch unabhängig von allfälligen Zugriffsdaten auf den Shares massiv verkleinert.

Das Tool Snaffler kann zum Auffinden von Zugangsdaten auf diesen Netzwerk-Shares verwendet werden. Die Erklärungen des Erstellers zur Verwendung sind dabei jedoch etwas tückisch und von humoristischer Art. Wie immer ist bei Tools von Github Vorsicht geboten, heisst den Source Code genau studieren und auf alle Fälle selbst kompilieren. Da das Tool in C# geschrieben ist, sollte dies mit VisualStudio relativ einfach machbar sein. Der Nachteil beim Verwenden von Tools von Angreifern ist, dass diese gerne auch von AV- oder EDR-Produkten detektiert werden. Dies kann jedoch auch als guter Test der eingesetzten Produkte angeschaut werden und das Ausführen kann in einer kontrollierten Art und Weise vollzogen werden.

Das Tool kann zum Beispiel wie folgt ausgeführt werden:

snaffler.exe -s -v Info -j 200
-s Output wird direkt ausgegeben
-o schreibt den Output in das angegebene File
-v Verbosity Level: Trace, Debug, Info, Data (nur Resultate)
-j Anzahl Bytes als Kontext zu den Findings

snaffler

In unserer kleinen Test-AD werden schon relativ viele Resultate ausgegeben und False Positives müssen aussortiert werden.

Machine Learning scheint prädestiniert für das Auffinden von Passwörtern zu sein und tatsächlich gibt es schon Tools, welche diesen Ansatz verfolgen. Erst kürzlich wurde von Will Schroeder das Tool DeePass veröffentlicht und sein Ansatz in seinem Blog erklärt. Das Tool ist mit Docker einfach lokal zu installieren und liefert schnelle Resultate.

DeepPass Upload

Files können lokal hochgeladen werden und das Passwort in der Dokumentation wird tatsächlich erkannt.

DeePass Results

Das Passwort wird erkannt, ohne dass ein spezifischer Hinweis auf ein folgendes Passwort in dem Text vorhanden wäre.

DeePass File

In diesem Fall kann ein zusätzliches Passwort danke Machine Learning gefunden werden, welches mit den anderen Tools nicht zu finden gewesen wäre. Der grosse Knackpunkt bei diesem Verfahren ist jedoch das Trainieren des Models mit passenden Daten. So funktioniert das Model aktuell relativ gut für englischsprachige Daten, jedoch nicht für anderssprachige, das Model müsste zuerst mit entsprechenden Daten trainiert werden. Das Erhalten und Kategorisieren solcher Daten dürfte dabei eine grössere Hürde sein. Dennoch zeigt das Tool eindrücklich auf, wie Machine Learning auch für Angreifer interessant genutzt werden kann.

Ein grosses Problem wird bei allen Tools augenscheinlich. Am Ende braucht es immer noch einen Menschen, welcher diese Resultate einordnet und False Positives aussortiert. Dieses Problem betriff sowohl die Angreifer als auch die Verteidiger gleichermassen. Als Verteidiger muss es deshalb das Ziel sein, die am einfachsten aufzufindenden Zugangsdaten auszumerzen und somit den Aufwand auch für die Angreifer möglichst hochzutreiben. Können dabei gleichzeitig die Zugriffsrechte auf Netzwerk-Shares eingeschränkt werden und unnötige Administratorenrechte aufgedeckt werden, wird die Security mit relativ wenig Aufwand massiv gesteigert. Durch gezieltes Suchen von Klartext-Zugangsdaten und Hinweisen der verantwortlichen Personen kann auch die Awareness der Mitarbeiter gesteigert werden. Denn am Ende kann das ursprüngliche Problem nur auf eine Art gelöst werden: sämtliche Mitarbeiter müssen sich des Problems bewusst sein und jedes Mal, wenn irgendwo ein Passwort in Klartext ersichtlich ist, sollten sämtliche Alarmglocken läuten und Alternativen gesucht werden.

Similar posts