
Extracteur d'Indicateur de Compromis (IOC) Désactivé.
Indicateur de compromission (IOC) pour certains des artefacts les plus couramment ingérés.
Le paquet iocextract est une bibliothèque et une interface en ligne de commande (CLI) pour extraire des URL, adresses IP, hachages MD5/SHA, adresses e-mail et règles YARA à partir de corpus textuels. Il permet d'extraire des IOC encodés et « désarmés » (defanged) et, si vous le souhaitez, de les décoder ou de les réarmer.
Il est courant que les analystes malware ou les logiciels endpoint « désarment » les IOC tels que les URL et adresses IP afin d'éviter une exposition accidentelle à du contenu malveillant actif. Pouvoir extraire et agréger ces IOC est souvent précieux pour les analystes. Malheureusement, les outils existants d'« extraction d'IOC » les ignorent souvent, car ils ne sont pas capturés par les expressions régulières standard.
Par exemple, la technique simple de désarmement qui consiste à entourer les points de crochets :
127[.]0[.]0[.]1
Les outils existants qui utilisent une expression régulière simple pour les adresses IP ignoreront complètement cet IOC.
En combinant des expressions régulières spécialement conçues avec un post-traitement personnalisé, nous sommes capables de détecter et de dés-obfusquer les IOC « désarmés ». Cela fait gagner du temps et des efforts à l'analyste, qui autrement devrait trouver et convertir manuellement les IOC dans un format lisible par machine.
De nombreux utilisateurs de Twitter publient des C2 ou d'autres informations précieuses d'IOC avec des URL désarmées. Par exemple, ce tweet de @InQuest :
Lecture recommandée et excellent travail de @unit42_intel :
https://researchcenter.paloaltonetworks.com/2018/02/unit42-sofacy-attacks-multiple-government-entities/ ...
Les clients d'InQuest ont une détection pour les menaces provenant de hotfixmsupload[.]com
depuis le 03/06/2017 et de cdnverify[.]net depuis le 01/02/18.
Si on exécute cela via l'extracteur, on peut facilement extraire les URL :
https://researchcenter.paloaltonetworks.com/2018/02/unit42-sofacy-attacks-multiple-government-entities/
hotfixmsupload[.]com
cdnverify[.]net
En passant refang=True lors de l'extraction, on supprimerait l'obfuscation, mais comme ce sont des vrais IOC, laissons-les désarmés dans notre documentation.
Vous devrez peut-être installer les en-têtes de développement Python pour pouvoir installer la dépendance regex. Sur les systèmes basés sur Ubuntu/Debian, essayez :
sudo apt-get install python-dev
Ensuite, installez iocextract via pip :
pip install iocextract
Si vous rencontrez des problèmes d'installation sous Windows, essayez d'installer regex directement en téléchargeant la roue appropriée depuis PyPI et en installant via pip :
pip install regex-2018.06.21-cp27-none-win_amd64.whl
Essayez d'extraire quelques URL désarmées :
import iocextract
content = \
"""
J'aime vraiment example[.]com !
Tous les bots sont sur hxxp://example.com/bad/url ces jours-ci.
C2: tcp://example[.]com:8989/bad
"""
for url in iocextract.extract_urls(content):
print(url)
# Sortie
# hxxp://example.com/bad/url
# tcp://example[.]com:8989/bad
# example[.]com
# tcp://example[.]com:8989/bad
REMARQUE : Certaines URL peuvent apparaître deux fois si elles sont capturées par plusieurs expressions régulières.
Si vous le souhaitez, vous pouvez aussi « réarmer », ou supprimer les méthodes d'obfuscation courantes des IOC :
import iocextract
for url in iocextract.extract_urls(content, refang=True):
print(url)
# Sortie
# http://example.com/bad/url
# http://example.com:8989/bad
# http://example.com
# http://example.com:8989/bad
Si vous ne souhaitez pas désarmer du tout les IOC extraits lors de l'extraction, vous pouvez aussi le désactiver :
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)
# Sortie
# http://example.com/bad/url
# http://example.com:8989/bad
# http://example.com
# http://example.com:8989/bad
Toutes les fonctions extract_* de cette bibliothèque renvoient des itérateurs, pas des listes. L'avantage de ce comportement est que iocextract peut traiter des entrées extrêmement volumineuses avec une très faible surcharge. Cependant, si pour une raison quelconque vous devez itérer plusieurs fois sur les IOC, vous devrez enregistrer les résultats sous forme de liste :
import iocextract
content = \
"""
J'aime vraiment example[.]com !
Tous les bots sont sur hxxp://example.com/bad/url ces jours-ci.
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']
Un outil en ligne de commande est également inclus :
$ 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]
Extracteur avancé d'indicateurs de compromission (IOC). Si aucun argument
n'est spécifié, le comportement par défaut est d'extraire tous les IOC.
arguments optionnels :
-h, --help affiche ce message d'aide et quitte
--input INPUT défaut : stdin
--output OUTPUT défaut : stdout
--extract-emails
--extract-ips
--extract-ipv4s
--extract-ipv6s
--extract-urls
--extract-yara-rules
--extract-hashes
--custom-regex REGEX_FILE fichier contenant des chaînes d'expression régulière personnalisées, une par ligne, avec un groupe de capture chacune
--refang défaut : non
--strip-urls supprime les possibles déchets à la fin des URL. défaut : non
--wide prétraite l'entrée pour permettre les correspondances de caractères encodés sur largeur. défaut : non
REMARQUE : Seules les URL, les e-mails et les adresses IPv4 peuvent être « réarmés ».
Est-ce que vous...