
Entschärfter Indikator für Kompromittierung (IOC) Extraktor.
Indicator of Compromise (IOC)-Extraktor für einige der am häufigsten verwendeten Artefakte.
Das iocextract-Paket ist eine Bibliothek und eine Kommandozeilenschnittstelle (CLI) zum Extrahieren von URLs, IP-Adressen, MD5/SHA-Hashes, E-Mail-Adressen und YARA-Regeln aus Textkorpora. Es ermöglicht, codierte und „defanged" IOCs zu extrahieren und sie optional zu decodieren oder zu refangen.
Es ist gängige Praxis, dass Malware-Analysten oder Endpunkt-Software IOCs wie URLs und IP-Adressen „defangen", um eine versehentliche Exposition gegenüber lebenden schädlichen Inhalten zu vermeiden. Das Extrahieren und Aggregieren dieser IOCs ist für Analysten oft wertvoll. Leider übersehen bestehende „IOC-Extraktions"-Werkzeuge diese oft, da sie von Standard-Regex nicht erfasst werden.
Zum Beispiel die einfache Defanging-Technik, Punkte in eckige Klammern zu setzen:
127[.]0[.]0[.]1
Vorhandene Werkzeuge, die einen einfachen IP-Adress-Regex verwenden, ignorieren diesen IOC vollständig.
Durch die Kombination von speziell entwickelten Regex mit einer benutzerdefinierten Nachbearbeitung können wir „defanged" IOCs sowohl erkennen als auch entschleiern. Dies spart Zeit und Mühe für den Analysten, der sonst manuell IOCs finden und in maschinenlesbares Format konvertieren müsste.
Viele Twitter-Nutzer posten C2s oder andere wertvolle IOC-Informationen mit defanged URLs. Zum Beispiel dieser Tweet von @InQuest:
Empfohlene Lektüre und großartige Arbeit von @unit42_intel:
https://researchcenter.paloaltonetworks.com/2018/02/unit42-sofacy-attacks-multiple-government-entities/ ...
InQuest-Kunden haben seit dem 6.3.2017 Erkennung für Bedrohungen, die von hotfixmsupload[.]com
bereitgestellt werden, und seit dem 1.2.18 für cdnverify[.]net.
Wenn wir dies durch den Extraktor laufen lassen, können wir leicht die URLs extrahieren:
https://researchcenter.paloaltonetworks.com/2018/02/unit42-sofacy-attacks-multiple-government-entities/
hotfixmsupload[.]com
cdnverify[.]net
Die Übergabe von refang=True zum Extraktionszeitpunkt würde die Verschleierung entfernen, aber da es sich um echte IOCs handelt, lassen wir sie in unserer Dokumentation defanged.
Möglicherweise müssen Sie die Python-Entwicklungs-Header installieren, um die regex-Abhängigkeit zu installieren. Auf Ubuntu/Debian-basierten Systemen versuchen Sie:
sudo apt-get install python-dev
Installieren Sie dann iocextract von pip:
pip install iocextract
Wenn Sie Probleme bei der Installation unter Windows haben, versuchen Sie, regex direkt zu installieren, indem Sie das passende Wheel von PyPI herunterladen und über pip installieren:
pip install regex-2018.06.21-cp27-none-win_amd64.whl
Versuchen Sie, einige defanged URLs zu extrahieren:
import iocextract
content = \
"""
Ich liebe example[.]com wirklich!
Alle Bots sind heutzutage auf hxxp://example.com/bad/url unterwegs.
C2: tcp://example[.]com:8989/bad
"""
for url in iocextract.extract_urls(content):
print(url)
# Ausgabe
# hxxp://example.com/bad/url
# tcp://example[.]com:8989/bad
# example[.]com
# tcp://example[.]com:8989/bad
HINWEIS: Einige URLs können doppelt auftauchen, wenn sie von mehreren Regexen erfasst werden.
Wenn Sie möchten, können Sie IOCs auch „refangen" oder gängige Verschleierungsmethoden entfernen:
import iocextract
for url in iocextract.extract_urls(content, refang=True):
print(url)
# Ausgabe
# http://example.com/bad/url
# http://example.com:8989/bad
# http://example.com
# http://example.com:8989/bad
Wenn Sie die extrahierten IOCs während der Extraktion überhaupt nicht defangen möchten, können Sie dies ebenfalls deaktivieren:
import iocextract
content = \
"""
http://example.com/bad/url
http://example.com:8989/bad
http://example.com
http://example.com:8989/bad
"""
for url in iocextract.extract_urls(content, defang=False):
print(url)
# Ausgabe
# http://example.com/bad/url
# http://example.com:8989/bad
# http://example.com
# http://example.com:8989/bad
Alle extract_*-Funktionen in dieser Bibliothek geben Iteratoren zurück, keine Listen. Der Vorteil dieses Verhaltens ist, dass iocextract extrem große Eingaben mit sehr geringem Overhead verarbeiten kann. Wenn Sie jedoch aus irgendeinem Grund mehrmals über die IOCs iterieren müssen, müssen Sie die Ergebnisse als Liste speichern:
import iocextract
content = \
"""
Ich liebe example[.]com wirklich!
Alle Bots sind heutzutage auf hxxp://example.com/bad/url unterwegs.
C2: tcp://example[.]com:8989/bad
"""
print(list(iocextract.extract_urls(content)))
# ['hxxp://example.com/bad/url', 'tcp://example[.]com:8989/bad', 'example[.]com', 'tcp://example[.]com:8989/bad']
Ein Kommandozeilenwerkzeug ist ebenfalls enthalten:
$ iocextract -h
usage: iocextract [-h] [--input INPUT] [--output OUTPUT] [--extract-emails]
[--extract-ips] [--extract-ipv4s] [--extract-ipv6s]
[--extract-urls] [--extract-yara-rules] [--extract-hashes]
[--custom-regex REGEX_FILE] [--refang] [--strip-urls]
[--wide]
Erweiterter Indicator of Compromise (IOC)-Extraktor. Wenn keine Argumente
angegeben werden, ist das Standardverhalten, alle IOCs zu extrahieren.
optionale Argumente:
-h, --help Zeigt diese Hilfemeldung an und beendet das Programm
--input INPUT Standard: stdin
--output OUTPUT Standard: stdout
--extract-emails
--extract-ips
--extract-ipv4s
--extract-ipv6s
--extract-urls
--extract-yara-rules
--extract-hashes
--custom-regex REGEX_FILE Datei mit benutzerdefinierten Regex-Zeichenfolgen, eine pro Zeile, mit jeweils einer Erfassungsgruppe
--refang Standard: nein
--strip-urls Entfernt möglichen Müll vom Ende der URLs. Standard: nein
--wide Verarbeitet die Eingabe vor, um Wide-Encoded-Zeichenübereinstimmungen zu ermöglichen. Standard: nein
HINWEIS: Nur URLs, E-Mails und IPv4-Adressen können „refangt" werden.
Sind Sie...