Vor ein paar Wochen haben wir Censeyeauf den Markt gebracht, ein Open-Source-Dienstprogramm, das Forschern und Bedrohungsjägern helfen soll, Censys Scandaten zu untersuchen und automatisch neue Erkenntnisse zu gewinnen. Lesen Sie unsere ursprüngliche Ankündigung hier, falls Sie sie noch nicht gesehen haben. Es ist unglaublich aufregend, die Screenshots und Entdeckungen zu sehen, die die Leute teilen - einige wirklich faszinierende Ergebnisse sind bereits dabei herausgekommen. Das Tool in Aktion zu sehen und coole Erkenntnisse zu gewinnen? Das ist einfach großartig.
Eines der ersten Dinge, die wir nach der ersten Veröffentlichung in Angriff nehmen wollten, war der Aufbau eines Rahmens, der die Erweiterung des Systems in zwei Schlüsselbereichen erleichtert:
- Generation der Abfrage: Wir brauchten eine einfache Möglichkeit, uns in die Host-Datenverarbeitungspipeline einzuklinken und dynamisch Abfragen für Berichte und Pivotings zu erstellen. So konnten wir beispielsweise Dateinamen aus über HTTP geöffneten Verzeichnissen analysieren und in anderen geöffneten Verzeichnissen nach diesen Dateien suchen. Diese generierten Abfragen mussten genauso behandelt werden wie die bereits vorhandenen Felddefinitionen, Pivot-Gewicht-Konfigurationen und alles andere.
- Datenbeschriftung: Wir wollten eine einfache Möglichkeit haben, den endgültigen Berichten benutzerdefinierte Beschriftungen hinzuzufügen, die uns mehr Kontrolle und Flexibilität bei der Anzeige der Ergebnisse geben würden. Zum Beispiel könnten wir den Host in einer externen Datenbank nachschlagen und eine Zeichenfolge zur Kennzeichnung des Hosts zurückgeben.
Um dies zu ermöglichen, haben wir ein einfaches Plugin-System mit dem Namen Censeye Gadgets entwickelt und begonnen, einige der von uns gewünschten Funktionen zu implementieren. Diese sind nun in der Standardinstallation von v1.0.0 enthalten.
Hinweis Sie können alle verfügbaren Gadgets anzeigen, indem Sie den Befehl ausführen:
~$ censeye -list-gadgets
Abfragegenerator-Gadgets
Abfragegenerator-Gadgets lesen Censys Host-Scandaten und erzeugen eine oder mehrere Suchabfragen, die wie jedes andere Feld in der Censeye-Konfiguration behandelt werden. Der folgende Abschnitt beschreibt die Gadgets, die wir derzeit implementiert haben.
Open-Directory-Gadget
Dieses Gadget verarbeitet ein Censys Host-Ergebnis, identifiziert Dienste mit einem offenen HTTP-Verzeichnis, extrahiert Dateinamen aus dem Antwortkörper und generiert Suchanfragen, um diese Dateinamen in anderen HTTP-Antwortkörpern zu finden.
Im folgenden Screenshot haben wir Censeye gegen 209.105.248.135 mit der Option "-g odir"Flagge, die das Open Directory Gadget aktiviert. Der Bericht enthält nun mehrere Schlüssel mit der Bezeichnung "open-directory.gadget.censeye", deren Werte Censys Suchanfragen enthalten, um bestimmte Dateinamen auf anderen Hosts zu finden.
Bei genauerer Betrachtung erzeugt dieses Gadget drei Abfragen für die Dateien "sostener.vbs", "svchost.vbs"und "sostener1.vbs". Die erste Datei wurde auf sechs anderen Hosts mit offenen Verzeichnissen gefunden, während die letzten beiden nur auf dem von uns betrachteten Host zu existieren scheinen.
Und genau wie alle anderen konfigurierten Felder können diese Daten für die automatische Pivotierungverwendet werden ! Führen Sie zum Beispiel den folgenden Befehl mit einer minimalen Pivot-Gewichtung von 0,9 aus (um NTLM-Felder beim Pivoting zu überspringen) und setzen Sie die Tiefe auf 1:
~$ censeye 209.105.248.135 -Gadget odir -min-Schwenkgewicht 0.9 -tiefe 1
Hier können wir sehen, dass die Daten der geöffneten Verzeichnisdatei ("sostener.vbs") verwendet wird, um andere Hosts zu finden, wie im Pivot-Baum unten gezeigt wird:
Konfigurieren des Open-Directory-Gadgets
Die Standardkonfiguration des Gadgets "Verzeichnis öffnen" sieht wie folgt aus (beachten Sie, dass es standardmäßig deaktiviert ist):
Dieses Gadget hat nur zwei konfigurierbare Variablen:
- max_files: Begrenzt die Abfragegenerierung auf die ersten N Dateien im HTTP-Antwortkörper. Der Standardwert ist 32, wodurch verhindert wird, dass große offene Verzeichnisse übermäßig viel Zeit und Ressourcen verbrauchen.
- min_chars: Sorgt dafür, dass nur Dateinamen mit mindestens dieser Anzahl von Zeichen verarbeitet werden.
Das Gadget muss zur Feldkonfiguration hinzugefügt werden, um sicherzustellen, dass diese Felder wie jedes andere behandelt werden. (Ja, das ist viel "Feld" in einem Satz!) Glücklicherweise wird dies bereits von der integrierten Standardkonfiguration gehandhabt, und ja, Sie können auch ignorierte Werte hinzufügen, genau wie andere Felder. So sieht es aus:
Das edle Gadget
Das "Nobbler"-Gadget zielt auf unbekannte Dienste ab ("services.service_name=UNKNOWN"). Es extrahiert das Rohbanner und generiert Wildcard-Suchen an verschiedenen Offsets innerhalb der Antwort.
Wenn Sie schon einmal mit Protokolldaten gearbeitet haben, ist Ihnen wahrscheinlich aufgefallen, dass viele Binärprotokolle oder Framing-Systeme einen strukturierten Header oder eine magische Zahl enthalten, gefolgt von dynamischen Nutzdaten. Das Nobbler-Gadget wurde entwickelt, um automatisch andere Dienste zu finden, die dieses Konzept im Sinn haben.
Schauen wir uns ein Beispiel aus der Praxis an, wie wir dieses Gadget zur Identifizierung von Metasploit-Nutzlasten eingesetzt haben!
Wir stießen auf einen zufälligen Host(45.144.137.45) mit einer ungewöhnlichen Anzahl von Diensten, die Censys nicht identifizieren konnte. Die Ausführung von Censeye mit dem "nobbler" mit folgendem Befehl aktiviert:
~$ censeye -gadget nobbler 45.144.137.45
Die Ausgabe (siehe Screenshot unten) zeigt vier von Nobbler generierte Zeilen, die jeweils einige interessante Metriken enthalten.
Nobbler hat die folgenden Abfragen erstellt und darüber berichtet:
Je spezifischer die Abfrage wird, desto weniger Hosts werden gefunden. Dies deutet stark darauf hin, dass diese Dienste Daten präsentieren, die in einer maschineninterpretierbaren Weise erstellt oder kompiliert wurden. Daher haben wir beschlossen, einige dieser Daten manuell zu überprüfen, indem wir Netcat verwenden und die Ausgabe in die Datei "data.bin" leiten:
~$ netcat 45.144.137.45 56241 > data.bin
Der Dateibefehl war nicht sehr hilfreich, um herauszufinden, worum es sich handelt:
~$ Datei data.bin
data.bin: Daten
Binwalk konnte jedoch feststellen, dass es sich um eine Art ELF-Binary handelt, zumindest ab Offset 126 in der Datei.
Schließlich wendeten wir uns dem Super-Elite-Hacker-Tool Strings zu, um zu sehen, ob uns etwas Bedeutsames auffiel - und da hatten wir einen Aha-Moment.
Mit einer einfachen Websuche und fast ohne Aufwand konnten wir diesen Dienst schnell als Metasploit (Meterpreter)-Nutzlast identifizieren, die so konfiguriert ist, dass sie Mettle ausführt und eine Verbindung zurück zu diesem Host herstellt.
Während verschiedene generierte Payloads unterschiedliche Daten in Censys erzeugen können, vereinfacht das "Nobbler"-Gadget den Prozess, indem es die ersten paar Bytes an verschiedenen Offsets untersucht, um Gemeinsamkeiten in den Rohdaten aufzudecken. Zu allem Überfluss wissen wir jetzt, dass alles, was dieser Censys Suchanfrage entspricht, höchstwahrscheinlich mit Metasploit zusammenhängt!
Konfigurieren des Nobbler-Gadgets
Die Standardkonfiguration für nobler ist standardmäßig deaktiviert, kann aber mit dem Flag "-gadget nobbler" aktiviert werden; unten ist die eingebaute Standardkonfiguration:
Das "nobbler"-Gadget hat nur eine Konfigurationsrichtlinie: die Iterationen Array. Dieses definiert die Offsets, an denen Wildcard-Suchen für unbekannte Dienste generiert werden. Standardmäßig verwendet es die Offsets 4, 8, 16 und 32.
Da dies mit dem Wert services.banner_hex in den Daten von Censys funktioniert, ist zu beachten, dass 2 Bytes dieser Daten 1 Byte der tatsächlichen Daten entsprechen. So entsprechen beispielsweise 8 Byte Bannerdaten 2 Byte tatsächlicher Daten und so weiter. Mit den Standardeinstellungen bedeutet dies, dass wir Abfragen für 2 Byte, 4 Byte, 8 Byte und 16 Byte tatsächlicher Daten erzeugen.
Damit dieses Gadget bei der Pivotisierung verwendet werden kann, muss es auch der Feldkonfiguration hinzugefügt werden (in der Standardeinstellung ist es bereits vorhanden):
Etikettierer Gadgets
Diese Gadgets sind einfach und haben ein einziges Ziel: die Hostdaten durch Hinzufügen relevanter Beschriftungen zu erweitern. Derzeit haben wir zwei Beschriftungs-Gadgets implementiert:
- ThreatFox (-Gadget Threatfox): Überprüft, ob der Host gesehen oder gemeldet wurde auf ThreatFox.
- VirusTotal (-Gadget-Virustotal): Prüft, ob der Host gesehen oder gemeldet wurde auf VirusTotal.
Im Folgenden finden Sie ein Beispiel (unter Verwendung des zuvor betrachteten Hosts) für diese Etikettier-Gadgets:
Entwickeln Sie Ihr eigene Gadgets
Wenn Sie Ihr eigenes System implementieren möchten eigene Abfragegenerator oder Host-Labeler implementieren möchten, schauen Sie sich das Censeye GitHub-Repository um zu sehen, wie die vorhandenen Gadgets funktionieren - sie sind extrem (und vielleicht peinlich) einfach.
Abschließende Überlegungen
Censeye war eine unterhaltsame Entwicklung von einfachen Bausteinen, die aufeinander gestapelt wurden, um ein leistungsfähiges und hilfreiches Dienstprogramm für eine sehr kleine Zielgruppe zu schaffen. Wenn Sie mehr erfahren möchten, lesen Sie bitte den ursprünglichen Ankündigungspost über Censeye.
Dieses Open-Source-Dienstprogramm ist auf GitHub gehostet; Kommentare, Probleme und Patches sind willkommen!
Eine letzte Sache, die wir erwähnen wollten, war, dass Censeye jetzt auf PyPI ist und mit Python pip installiert werden kann:
~$ pip install censeye -upgrade