Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
iocextract — Extracteur d'Indicateur de Compromis (IOC) Désactivé. | Kitploit
Outils/GitHubGitHub/pedramamini/iocextract
Gestion des Indicateurs de Compromission (IOC)OSINT (Renseignement de Sources Ouvertes)Flux et Agrégateurs de MenacesAnalyse ForensiqueCollecte d'InformationsAnalyse de MalwareCriminalistique NumériqueRenseignement sur les Menaces
GitHubpedramamini/iocextract

iocextract

Extracteur d'Indicateur de Compromis (IOC) Désactivé.

Voir le dépôt
584924il y a 2 ansVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Site web
Partager

iocextract

Développé par InQuest État de la build Statut de la documentation Version PyPI

Indicateur de compromission (IOC) pour certains des artefacts les plus couramment ingérés.

Table des matières

  • Aperçu
    • Le problème
    • Notre solution
    • Exemple d'utilisation
  • Installation
  • Utilisation
    • Bibliothèque
    • Interface en ligne de commande
  • Informations utiles
    • FAQ
    • Plus de détails
    • Expression régulière personnalisée
    • Projets connexes
    • Contribuer

Aperçu

Télécharger l’outil

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.

Le problème

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 :

root@kitploit:~
127[.]0[.]0[.]1

Les outils existants qui utilisent une expression régulière simple pour les adresses IP ignoreront complètement cet IOC.

Notre solution

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.

Exemple d'utilisation

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 :

root@kitploit:~
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 :

root@kitploit:~
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.

Installation

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 :

root@kitploit:~
sudo apt-get install python-dev

Ensuite, installez iocextract via pip :

root@kitploit:~
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 :

root@kitploit:~
pip install regex-2018.06.21-cp27-none-win_amd64.whl

Utilisation

Bibliothèque

Essayez d'extraire quelques URL désarmées :

root@kitploit:~
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 :

root@kitploit:~
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 :

root@kitploit:~
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 :

root@kitploit:~
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']

Interface en ligne de commande

Un outil en ligne de commande est également inclus :

root@kitploit:~
$ 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 ».

Informations utiles

FAQ

Est-ce que vous...

Q. Extrayez des IOC potentiellement désarmés à partir de texte brut, comme le contenu de tweets ou d'articles de blog ?

R. Oui ! C'est exactement ce pour quoi iocextract a été conçu, et là où il donne les meilleurs résultats. Vous voulez aller plus loin et automatiser l'extraction et le stockage ? Consultez ThreatIngestor.

Q. Extrayez des URL qui ont été encodées en hexadécimal ou en base64 ?

R. Oui, mais la CLI pourrait ne pas vous donner les meilleurs résultats. Essayez d'écrire un script Python et d'appeler iocextract.extract_encoded_urls directement.

Remarque : Vous vous retrouverez très probablement avec des déchets supplémentaires à la fin des URL.

Q. Extrayez des IOC qui n'ont pas été désarmés, depuis du HTML/XML/RTF ?

R. Peut-être, mais vous devriez envisager d'utiliser le drapeau CLI --strip-urls (ou le paramètre strip=True dans la bibliothèque), et vous pourriez encore obtenir quelques déchets supplémentaires dans votre sortie. Si vous extrayez depuis du HTML, envisagez d'utiliser quelque chose comme Beautiful Soup pour d'abord isoler le contenu textuel, puis passez-le à iocextract, comme ceci.

Q. Extrayez des IOC qui n'ont pas été désarmés, depuis des données binaires comme des exécutables, ou des entrées très volumineuses ?

R. Il existe une version très simpliste de cela disponible lors de l'utilisation en tant que bibliothèque, mais elle nécessite le paramètre defang=False et pourrait potentiellement manquer certains des IOC. Les expressions régulières dans iocextract sont conçues pour être flexibles afin de capturer les IOC désarmés. Si vous ne parvenez pas à collecter les informations dont vous avez besoin, envisagez d'utiliser quelque chose comme Cacador à la place.

Plus de détails

Cette bibliothèque prend actuellement en charge les IOC suivants :

  • Adresses IP
    • IPv4 entièrement pris en charge
    • IPv6 partiellement pris en charge
  • URL
    • Avec spécificateur de protocole : http, https, tcp, udp, ftp, sftp, ftps
    • Avec ancrage [.], même sans spécificateur de protocole
    • Les URL IPv4 et IPv6 (RFC2732) sont prises en charge
    • URL encodées en hexadécimal avec spécificateur de protocole : http, https, ftp
    • URL encodées en URL avec spécificateur de protocole : http, https, ftp, ftps, sftp
    • URL encodées en base64 avec spécificateur de protocole : http, https, ftp
  • E-mails
    • Partiellement pris en charge, ancrage sur @ ou at
  • Règles YARA
    • Avec imports, includes et commentaires
  • Hachages
    • MD5
    • SHA1
    • SHA256
    • SHA512
  • Numéros de téléphone
  • Expression régulière personnalisée
    • Avec exactement un groupe de capture

Pour les adresses IPv4, les techniques de désarmement suivantes sont prises en charge :

TechniqueDésarméRéarmé
. -> [.]1[.]1[.]1[.]11.1.1.1
. -> (.)1(.)1(.)1(.)11.1.1.1
. -> \.1\.1\.1\.11.1.1.1
Partiel1[.1[.1.]11.1.1.1
Toute combinaison1.)1[.1.)11.1.1.1

Pour les adresses e-mail, les techniques de désarmement suivantes sont prises en charge :

TechniqueDésarméRéarmé
. -> [.]me@example[.]com[email protected]
. -> (.)me@example(.)com[email protected]
. -> {.}me@example{.}com[email protected]
. -> _dot_me@example dot com[email protected]
@ -> [@]me[@]example.com[email protected]
@ -> (@)me(@)example.com[email protected]
@ -> {@}me{@}example.com[email protected]
@ -> _at_me at example.com[email protected]
Partielme@} example[.com[email protected]
Espaces ajoutésme@example [.] com[email protected]
Toute combinaisonme @example [.)com[email protected]

Pour les URL, les techniques de désarmement suivantes sont prises en charge :

TechniqueDésarméRéarmé
. -> [.]example[.]com/pathhttp://example.com/path
. -> (.)example(.)com/pathhttp://example.com/path
. -> \.example\.com/pathhttp://example.com/path
Partielhttp://example[.com/pathhttp://example.com/path
/ -> [/]http://example.com[/]pathhttp://example.com/path
Cisco ESAhttp:// example .com /pathhttp://example.com/path
:// -> __http__example.com/pathhttp://example.com/path
:// -> :\\http:\\example.com/pathhttp://example.com/path
: -> [:]http[:]//example.com/pathhttp://example.com/path
hxxphxxp://example.com/pathhttp://example.com/path
Toute combinaisonhxxp__ example( .com[/]pathhttp://example.com/path
Encodé en hex687474703a2f2f6578616d706c652e636f6d2f70617468http://example.com/path
Encodé en URL

REMARQUE : Les tableaux ci-dessus ne sont pas exhaustifs, et d'autres motifs d'URL/désarmement peuvent également être extraits correctement. Si vous remarquez quelque chose qui manque ou ne fonctionne pas correctement, n'hésitez pas à nous le faire savoir via les Problèmes GitHub.

L'expression régulière base64 a été générée avec l'outil regex base64 de @deadpixi.

Expression régulière personnalisée

Si vous souhaitez utiliser la CLI pour extraire des IOC à l'aide de votre propre expression régulière personnalisée, créez un fichier texte brut avec une chaîne d'expression régulière par ligne, et passez-le avec le drapeau --custom-regex. Assurez-vous que chaque chaîne d'expression régulière inclue exactement un groupe de capture.

Par exemple :

root@kitploit:~
http://(example\.com)/
(?:https|ftp)://(example\.com)/

Ce fichier d'expression régulière personnalisée extraira le domaine example.com des URL correspondantes. Le groupe non capturant (?: ) ne sera pas inclus dans les correspondances.

Si vous souhaitez extraire la correspondance entière, mettez simplement des parenthèses autour de toute votre chaîne d'expression régulière, comme ceci :

root@kitploit:~
(https?://.*?.com)

Si votre expression régulière est invalide, vous verrez un message d'erreur comme celui-ci :

root@kitploit:~
Error in custom regex: missing ) at position 5

Si votre expression régulière n'inclut pas de groupe de capture, vous verrez un message d'erreur comme celui-ci :

root@kitploit:~
Error in custom regex: no such group

Utilisez toujours un seul groupe de capture lorsque vous travaillez avec une expression régulière personnalisée. Voici un exemple rapide :

root@kitploit:~
[
    r'(my regex)',  # Cela produit 'my regex' si le motif correspond
    r'my (re)gex',  # Cela produit 're' si le motif correspond
]

Utiliser plus d'un seul groupe de capture peut entraîner des résultats inattendus. Regardez cet exemple :

root@kitploit:~
[
    r'my regex',  # Cela ne produit rien
    r'(my) (re)gex',  # Cela produit 'my' si le motif correspond
]

Pourquoi ? Parce que le résultat produira toujours uniquement la correspondance du premier groupe de chaque expression régulière.

Pour des requêtes d'expressions régulières plus complexes, vous pouvez combiner des groupes de capture et non capturants comme ceci :

root@kitploit:~
[
    r'(?:my|your) (re)gex',  # Cela produit 're' si le motif correspond
]

Vous pouvez maintenant comparer la syntaxe (?: ) pour les groupes non capturants par rapport à la syntaxe ( ) pour le groupe de capture.

Projets connexes

Si iocextract ne correspond pas à votre cas d'utilisation, plusieurs projets similaires existent. Consultez les balises defang et indicators-of-compromise sur GitHub, ainsi que :

  • Cacador en Go
  • ioc-extractor en JavaScript
  • Cyobstract en Python

Si vous souhaitez automatiser l'extraction, l'enrichissement, l'exportation et plus encore des IOC, consultez ThreatIngestor.

Si vous travaillez avec des règles YARA, vous pourriez être intéressé par plyara.

Contribuer

Si vous avez une technique de désarmement qui ne passe pas à travers l'extracteur, ou si vous trouvez des bogues, les Pull Requests et les Issues sont toujours les bienvenus. La bibliothèque est publiée sous une licence GPL-2.0 .

Qui utilise iocextract ?

  • InQuest
  • PacketTotal

Vous l'utilisez ? Vous voulez voir votre site listé ici ? Faites-le nous savoir !

http%3A%2F%2fexample%2Ecom%2Fpath
http://example.com/path
Encodé en base64aHR0cDovL2V4YW1wbGUuY29tL3BhdGgKhttp://example.com/path