
Durchsuche exponierte EBS-Volumes nach Geheimnissen
Dufflebag ist ein Tool, das öffentliche Elastic Block Storage (EBS)-Snapshots nach Geheimnissen durchsucht, die möglicherweise versehentlich zurückgelassen wurden. Sie werden überrascht sein, wie viele Passwörter und Geheimnisse einfach so herumliegen!
Das Tool ist als Elastic Beanstalk-Anwendung („EB“, nicht zu verwechseln mit EBS) organisiert und wird definitiv nicht funktionieren, wenn Sie versuchen, es auf Ihrem eigenen Rechner auszuführen.
Dufflebag hat viele bewegliche Teile, weil es in der Praxis ziemlich aufwändig ist, EBS-Volumes tatsächlich zu lesen. Sie müssen sich in einer AWS-Umgebung befinden, das Snapshot klonen, ein Volume aus dem Snapshot erstellen, das Volume anhängen, es mounten usw. Deshalb wurde es als Elastic Beanstalk-App erstellt, damit es automatisch nach Belieben hoch- oder herunterskalieren kann und das Ganze einfach wieder abgebaut werden kann, wenn Sie fertig sind.
Behalten Sie Ihre AWS-Konsole im Auge, um sicherzustellen, dass nichts außer Kontrolle gerät und Kosten verursacht. Wir haben versucht, an alle Eventualitäten zu denken und Fehlerbehandlungen bereitzustellen … aber Sie wurden gewarnt!
Sie müssen der Rolle aws-elasticbeanstalk-ec2-role einige zusätzliche AWS-IAM-Berechtigungen hinzufügen. Alternativ können Sie eine ganz neue Rolle mit diesen Berechtigungen erstellen und EB so konfigurieren, dass diese Rolle verwendet wird, aber das ist etwas aufwändiger. In jedem Fall müssen Sie Folgendes hinzufügen:
Die Kernanwendung ist in Go geschrieben, daher benötigen Sie einen Golang-Compiler. Die EB-Anwendung wird jedoch in eine .zip-Datei gepackt (so funktioniert EB nun einmal), sodass das Makefile eine Zip-Datei für Sie erstellt.
Überprüfen Sie Ihre Region. Dufflebag kann immer nur in einer AWS-Region gleichzeitig arbeiten. Wenn Sie jede Region durchsuchen möchten, müssen Sie so viele Instanzen bereitstellen. Um die Region zu ändern, ändern Sie den Inhalt der Quellcodedatei region.go.
Abhängigkeiten installieren: Ubuntu 18.04 x64:
sudo apt install make golang-go git
go get -u github.com/aws/aws-sdk-go
go get -u github.com/deckarep/golang-set
go get -u github.com/lib/pq
go get -u lukechampine.com/blake3
make
Sie sollten nun eine dufflebag.zip-Datei im Stammverzeichnis des Projekts sehen.
dufflebag beginnt. S3-Bucket-Namen müssen global eindeutig sein, daher benötigen Sie wahrscheinlich einen Suffix, der aus einer Reihe von Kauderwelsch oder etwas Ähnlichem besteht.Gehen Sie zu Ihrer AWS-Konsole und suchen Sie das Elastic Beanstalk-Menü. Dies ist wahrscheinlich auch über die CLI möglich, aber diese Beschreibung verwendet die Konsole. Wählen Sie Actions -> Create Environment.

Wählen Sie dann im nächsten Fenster Worker environment und klicken Sie auf Select.

Wählen Sie im nächsten Fenster unter Platform die Option Preconfigured -> Go.

Wählen Sie unter Application Code die Option Upload your Code.

Klicken Sie auf die Schaltfläche Upload und wählen Sie die soeben erstellte dufflebag.zip aus.

Klicken Sie abschließend auf Create Environment, um zu starten.
Es wird einige Minuten dauern, bis AWS alle Ressourcen erstellt hat und loslegen kann. Sobald die Erstellung abgeschlossen ist, beginnt Dufflebag sofort mit der Arbeit. Sie müssen nichts weiter tun.
Sobald alles läuft, können Sie es erneut ohne das Sicherheitsventil versuchen. Standardmäßig durchsucht Dufflebag nur 20 EBS-Snapshots (damit es bei Ihrem ersten Versuch nicht außer Kontrolle gerät). Um die Suche auf die gesamte Region auszuweiten, gehen Sie in populate.go, entfernen Sie die folgende Codezeile und erstellen Sie das Projekt neu:
//#####################################################################
//#### Safety Valve ####
//#### Remove this line of code below to search all of your region ####
//#####################################################################
snapshots = snapshots_result.Snapshots[0:20]
Einer der Gründe, warum Dufflebag als Elastic Beanstalk-App entwickelt wurde, ist die Möglichkeit, das Programm einfach hoch- oder herunterskalieren zu können. Standardmäßig läuft es nur auf einer Instanz und ist ziemlich langsam. Wenn Sie es jedoch etwas beschleunigen möchten, passen Sie die automatische Skalierung in Elastic Beanstalk an. Die vollständigen Optionen gehen über den Rahmen dieses Dokuments hinaus, daher überlasse ich es Ihnen, damit zu experimentieren. In der Praxis habe ich jedoch festgestellt, dass ein einfacher CPU-Auslöser recht gut funktioniert.
Beim Einrichten der Umgebung oben finden Sie die Optionen unter der Schaltfläche Configure more options (anstatt auf Create environment zu klicken) und dann auf Scaling.

Dufflebag kopiert alle interessanten Dateien in den zuvor erstellten S3-Bucket. (Technisch gesehen verwendet Dufflebag den ersten S3-Bucket, dessen Name mit „dufflebag“ beginnt.)
Sie können einfach die Dateien einzeln in Ihrem S3-Bucket beobachten. Sie werden wie folgt benannt:
originalfilename_blake3sum_volumeid
Wenn alles gut läuft, müssen Sie die Logs nicht lesen. Aber für den Fall der Fälle erlaubt Elastic Beanstalk Apps, während der Ausführung in Log-Dateien zu schreiben. Diese werden erfasst, indem Sie zur Registerkarte Logs navigieren. Klicken Sie dann auf Request Logs und Last 100 Lines. Dadurch erhalten Sie den aktuellsten Stapel von Dufflebag-Logs. Klicken Sie auf die Schaltfläche Download, um sie zu lesen. Diese Datei enthält eine Reihe anderer Systemlogs, aber der Dufflebag-Teil befindet sich ganz oben unter „/var/log/web-1.log".
Um den vollständigen Log-Verlauf zu sehen, wählen Sie Full Logs anstelle von Last 100 Lines. (Beachten Sie, dass EB standardmäßig Logs ziemlich aggressiv rotiert.)
Zusätzlich können Sie sich einen Überblick über den Gesamtfortschritt verschaffen, indem Sie die SQS-Warteschlange für die Umgebung anzeigen. Elastic Beanstalk-Worker-Umgebungen verwenden SQS zur Verwaltung des Workflows. Jede Nachricht in der Warteschlange von Dufflebag repräsentiert ein zu verarbeitendes EBS-Volume:

Die Spalte Messages Available zeigt an, wie viele Volumes noch nicht verarbeitet wurden. Die Spalte Messages in Flight zeigt an, wie viele Volumes gerade verarbeitet werden.
Dufflebag ist so programmiert, dass es nach Dingen sucht, von denen wir dachten, dass sie wahrscheinlich „interessant“ sind. Private Schlüssel, Passwörter, AWS-Schlüssel usw. Aber was, wenn Sie wirklich nach etwas suchen möchten, das spezifisch für SIE ist? Zum Beispiel arbeiten Sie bei bank.com und möchten sehen, was es da draußen gibt, das sich auf bank.com bezieht.
Dazu sind geringfügige Änderungen am Dufflebag-Code erforderlich, aber nicht sehr viele. Keine Sorge! Die Logik für die Suche befindet sich in inspector.go. Die Funktion pilfer() ist eine Goroutine, die die Überprüfung einer Datei übernimmt. Der Code dort mag auf den ersten Blick etwas einschüchternd wirken, aber hier ist, was er tut (und wie Sie ihn ohne große Schwierigkeiten ändern können).
Dateinamen-Blacklists:
blacklist_exact)blacklist_contains)blacklist_prefix)Sie können die Suchlogik hier recht einfach ändern, indem Sie einfach die Inhalte dieser drei Listen ändern. Ich würde jedoch generell empfehlen, sie intakt zu lassen. Diese Blacklists sind dafür ausgelegt, langweilige Dateien abzudecken, die in vielen Dateisystemen vorhanden sind, und verhindern, dass Dufflebag jede einzelne Datei in ganz AWS eingehend überprüfen muss. Die sensiblen Daten, nach denen Sie suchen, könnten in diesen Dateien sein … aber wahrscheinlich nicht.
Dateinamen-Whitelist:
IsSensitiveFileName() überprüft den Dateinamen anhand eines regulären Ausdrucks, der sensible Dateinamen findet. (z. B. /etc/shadow, bash_history usw.)Dateiinhalte:
checkContentsRegex() überprüft den Dateiinhalt anhand einer Reihe regulärer Ausdrücke. (Das Dateieingabeargument ist zeilenweise, daher ist die Eingabe für diese Funktion eine Zeile einer Datei, nicht die gesamte Datei.) Um nach Schlüsselwörtern zu suchen, die sich auf Ihre Organisation beziehen, ändern Sie einfach die regulären Ausdrücke in checkContentsRegex().