SECURITY

Mit SNICat Datenexfiltration aufdecken

Ich hatte früher eine Katze, die verrückt nach Eiscreme war. Ich glaube, ich hatte ihr als Kätzchen mal etwas Eis gegeben. Seit dem versuchte sie immer, wenn sie jemand Eis essen sah, auf Biegen und Brechen etwas abzubekommen. Und selbst wenn ihr eine bestimmte Geschmacksrichtung nicht besonders zu schmecken schien, war sie trotzdem sehr erpicht darauf, etwas vom dem Eis zu stibitzen.

Genau wie meine Katze sich ständig auf Eiscreme stürzte, so versuchen Hacker unentwegt Unternehmen anzugreifen, um in böswilliger Absicht an ihre Daten zu gelangen. Und genau wie die vielen Geschmackssorten von Eiscreme, die meine Katze damals „exfiltriert“ hat, gibt es auch bei der Datenexfiltration eine Reihe unterschiedlicher (Geschmacks-)Arten.

  • Vanille: Exfiltration über Box oder andere Cloud-Speicher
  • Schokolade: Exfiltration über FTP/SCP usw.
  • Cookie Dough: Exfiltration über ICMP
  • Rocky Road Fudge: Exfiltration über DNS
     

Und erst jüngst tauchte eine neue Art von Datenexfiltration im Hacker-Kühlschrank auf:

  • Cookies and Cream: Exfiltration über SNI
     

Mnemonic Labs hat kürzlich einen sehr coolen Proof-of-Concept-Blog veröffentlicht, in dem dargestellt wird, wie die SNI-Erweiterung von TLS zum Exfiltrieren von Daten verwendet werden kann. Dies hat starke Ähnlichkeit zur Datenexfiltration mithilfe anderer exotischer (Geschmacks-)Arten. Die Arbeit von Mnemonic hat gezeigt, dass durch die SNI-Exfiltrationsmethode viele Sicherheitskontrollen erfolgreich umgangen werden können – für mich Grund genug, eine kleine Übung zur Aufdeckung von Datenklau in Splunk durchzuführen.

Bevor wir mit der Praxis loslegen, hier ein paar Informationen zum Proof-of-Concept-Code aus dem Mnemonic-Blog:

SNICat besteht auch zwei separaten, aber voneinander abhängigen Komponenten:

  • Einem passiven Agent, der auf dem Ziel, einem nach Möglichkeit bereits kompromittierten Host, abgelegt werden soll. Sein einziger Zweck besteht darin, eine Verbindung zum C2 herzustellen und die übergebenen Befehle auszuführen.
  • Einem C2-Server, der den Agent von einem beliebigen Punkt im Internet aus steuert.
     

Um diese SNI-Informationen sehen zu können, verwende ich Zeek zum Erfassen der Übertragungsdaten. Die Zeek-Daten sammle ich dann in Splunk, und durch Einsatz der Splunk Decrypt-App kann ich die Base32-codierten SNI-Daten entschlüsseln (SNICat verwendet für seine Exfiltration Base32-Codierung).

Hier ist eine kurze exemplarische Darstellung meiner Vorgehensweise und der Splunk-Suchen, die dazu verwendet wurden. Weitere Informationen zum Mnemonic-Code findet ihr im oben genannten Blog-Post von Mnemonic.

  • Starten des SNICat C2-Servers und Herstellen der Verbindung mit dem Agent-Code auf den jeweiligen Hosts:


  • Hier sehen wir, wie der SNICat C2 einen LS-Befehl auf dem kompromittierten Host ausführt, um die Dateien im aktuellen Verzeichnis aufzulisten (Ihr könnt andere Vorgänge wie CD ausführen, um das Verzeichnis zu wechseln, wenn Ihr andere Stellen auf dem Host erforschen möchtet).


Die folgende Suche nimmt die verschiedenen SNICat-Befehle auf, die im SNI-Feld übergeben, mithilfe des SSL-Decoders von Zeek erfasst und dann in Splunk aufgenommen werden. Ich habe eine Abbildung hinzugefügt, in der die erfassten Events dargestellt sind, während der SNICat C2-Server seine verschiedenen Funktionen durchläuft.

index=main sourcetype="bro:ssl:json" | rex field=server_name 
"(?(LIST|LS|SIZE|LD|CB|CD|EX|ALIVE|EXIT|WHERE|finito)-[A-Za-z0-9]{16}\.)" 
| stats count by snicat

Und schließlich sehen wir hier den SNICat C2-Server beim Auswählen einer Datei, die per SNI exfiltriert werden soll. Ich entscheide mich, die passwd-Datei zu exfiltrieren, wie das jeder gute Angreifer tun würde.

  •  

Hier die Suche zum Anwenden von Regex auf das Feld server_name (das Feld, das wir mit den von Zeek erfassten SNI-Informationen ausgefüllt haben).

  • index=main sourcetype="bro:ssl:json"  | search server_name=*  | rex field=server_name "(?P^[A-Z2-7]+=*)"  | eval b32len=len(base32_encoded_sni)  | where b32len>10  | decrypt field=base32_encoded_sni b32() emit('base32_decoded_command')  | table base32_decoded_command base32_encoded_sni
Und hier sehen wir die resultierenden Events, wobei die decodierten Base32-Daten die exfiltrierten Daten anzeigen (das unterste Event ist SNICat beim Ausführen des LS-Befehls zum Abrufen der Verzeichnisauflistung, das mittlere Event ist die Ausführung des Size-Befehls von SNICat zum Ermitteln der Dateigrößen, und das oberste Event ist der Inhalt der gerade exfiltrierten passwd-Datei). Offensichtlich kann die Suche auch zum Decodieren anderer Daten jenseits des SNICat-Verhaltens verwendet werden, was zum Aufdecken anderer Methoden der Datenexfiltration in eurer Umgebung genutzt werden kann.

  • Hier noch einmal vergrößert, zur besseren Lesbarkeit:

 

In Kürze werde ich SNICat-Erkennung zum Splunk Enterprise Security Content Update zur Nutzung mit Splunk Enterprise Security hinzufügen. Bis dahin könnt Ihr aber gerne die oben dargestellten Suchen verwenden.

Happy Splunking!

In Kürze werde ich dem Splunk Enterprise Security-Inhaltsupdate SNICat-Erkennung für die Nutzung mit Splunk Enterprise Security hinzufügen, aber bis dahin könnt Ihr gerne die oben dargestellten Suchen verwenden.

Viel Spaß beim Splunken!

*Dieser Artikel wurde aus dem Englischen übersetzt und editiert. Den Originalblogpost findet ihr hier:  Detecting Data Exfiltration Via the Use of SNICat.

----------------------------------------------------
Thanks!
Splunk

Splunk
Posted by

Splunk

TAGS
Show All Tags
Show Less Tags