
Un moteur d’analyse statique extensible et déterministe qui extrait des IOC à haute signalétique depuis des binaires PE et du texte, conçu pour l’automatisation des SOC et les pipelines modernes d’analyse des menaces.
Ceci est le moteur IOCX d'origine pour l'extraction statique déterministe d'IOC et l'analyse PE. Tout autre dépôt utilisant le nom « iocx » n'est pas affilié à ce projet.
Liens officiels :
Les malwares modernes sont adverses par défaut — malformés, furtifs et conçus pour briser les extracteurs naïfs.
IOCX est conçu pour les environnements où l'exactitude et le déterminisme comptent réellement.
IOCX est le moteur officiel d'extraction statique d'IOC — un système déterministe et conscient du format binaire, conçu pour la DFIR, l'automatisation SOC, la sécurité CI/CD et les pipelines de renseignement sur les menaces à grande échelle.
Contrairement aux extracteurs basés uniquement sur des regex ou aux outils dépendant de sandbox, IOCX effectue :
C'est un composant central de l'écosystème MalX Labs pour l'analyse moderne et évolutive des menaces.
echo "http://malicious.example" | iocx -
Ou analysez un fichier PE en toute sécurité :
iocx suspicious.exe -a deep
Les équipes de sécurité sont confrontées à trois problèmes persistants :
IOCX résout cela avec un moteur déterministe, exclusivement statique, conçu pour l'automatisation, la sécurité et le passage à l'échelle.
IOCX n'est volontairement pas :
Il n'exécute jamais de code non fiable. Il n'effectue jamais d'analyse dynamique. Il est exclusivement statique par conception — pour la sécurité, le déterminisme et la compatibilité CI/CD.
IOCX est conçu pour les réalités des malwares modernes, et non pour les hypothèses des outils hérités.
Sortie stable et reproductible — pas d'aléatoire, pas de volatilité.
L'exécution est dangereuse. L'analyse statique est prévisible, évolutive et adaptée à la CI.
PE malformés, RVA corrompues, chaînes hostiles — IOCX les traite comme des entrées normales.
Les systèmes en aval ne doivent jamais casser lors d'une mise à niveau.
150–300 Mo/s sur texte brut. 6–15 Mo/s sur les PE typiques. Prévisibles même sous charge adverse dans le pire des cas.
Ces engagements découlent d'une méthodologie de recherche publiée pour l'analyse structurelle des PE — construction déterministe de fixtures, discipline de l'anomalie unique et comportement du chargeur Windows comme oracle d'exactitude. Voir docs/methodology.md pour la méthodologie complète, et paax.dev pour la taxonomie plus large des PE adverses et la suite commerciale de fixtures.
| Capacité | IOCX | Extracteurs d'IOC typiques | Outils Sandbox / Dynamiques |
|---|---|---|---|
| Sécurité | Zéro exécution, exclusivement statique | Regex uniquement, aucune sécurité binaire | Exécute du code non fiable (risque élevé) |
| Déterminisme | Sortie entièrement déterministe | Non déterministe sous bruit | Non déterministe par conception |
| Conscience du binaire | Analyse PE complète, heuristiques | Aucun support binaire | Oui, mais dangereux + lent |
| Résilience adverse | Testé contre les PE malformés, chaînes hostiles | Facilement contourné | Plante ou classifie souvent mal |
| Performances | 150–300 Mo/s (texte), 6–15 Mo/s (PE) | Très variable | Extrêmement lent |
| Adapté à la CI/CD | Oui — sûr, déterministe, rapide | Partiel | Non — dangereux pour les pipelines |
| Stabilité du schéma | Garantie | Rare | Aucune |
En bref : IOCX est conçu pour la réalité adverse réelle, et non pour des entrées idéalisées.
150–300 Mo/s de débit soutenu Chemin rapide — aucune analyse PE.
| Détecteur | Temps pour 1 Mo | Débit |
|---|---|---|
| Crypto | 0,0037 s | ~270 Mo/s |
| Chemins de fichiers | 0,0041 s | ~250 Mo/s |
| IP | 0,0065 s | ~156 Mo/s |
| Domaines | 0,0035 s | ~300 Mo/s |
.pdata) ; 14 nouveaux codes de raison ; 15 validateurs au total.dumpbin sur de vrais binairespython-magic, qui provoquait des échecs d'importation sur les systèmes Windows--min-length est prévu pour v0.7.5idnapip install iocx
iocx suspicious.exe
echo "Visit http://bad.example.com" | iocx -
iocx suspicious.exe -a
from iocx.engine import Engine
engine = Engine()
results = engine.extract("suspicious.exe")
print(results)
IOCX produit un JSON structuré et déterministe qui inclut les IOC, les métadonnées PE, l'analyse des sections, les heuristiques et les indicateurs d'obfuscation.
L'exemple ci-dessous est une sortie abrégée d'un véritable échantillon PE adverse. Il illustre la forme et la profondeur du schéma tout en gardant une taille raisonnable à des fins de documentation.
{
"file": "heuristic_rich.full.exe",
"type": "PE",
"iocs": {
"urls": ["http://not-a-real-domain.test/payload"],
"domains": ["example-malware.com"],
"ips": ["192.0.2.123"],
"hashes": [
"abcd1234ef567890abcd1234ef567890",
"1234567890",
"3333333333333333"
],
"filepaths": [
"/usr/src/mingw-w64-11.0.1-3build1/mingw-w64-crt/crt/crtexe.c",
"/usr/x86_64-w64-mingw32/include",
"/usr/src/mingw-w64-11.0.1-3build1/mingw-w64-crt/crt/pseudo-reloc.c"
]
},
"metadata": {
"file_type": "PE",
"imports": ["KERNEL32.dll", "msvcrt.dll", "USER32.dll"],
"sections": [
".text", ".data", ".rwx", ".rdata",
"UPX0", ".pdata", ".xdata", ".tls"
],
"resources": [],
"resource_strings": [],
"delayed_imports": [],
"bound_imports": [],
"exports": [],
"signatures": [],
"has_signature": false,
"tls": {
"start_address": 5368758272,
"end_address": 5368758280,
"callbacks": 5368754232
},
"header": {
"entry_point": 5088,
"image_base": 5368709120,
"machine": "AMD64",
"subsystem": "Windows GUI"
},
"optional_header": {
"section_alignment": 4096,
"file_alignment": 512,
"size_of_image": 155648
}
},
"analysis": {
"sections": [
{ "name": ".text", "entropy": 5.92 },
{ "name": ".rwx", "entropy": 0 },
{ "name": "UPX0", "entropy": 0.34 },
{ "name": ".rdata", "entropy": 4.03 }
],
"obfuscation": [
{
"value": "abnormal_section_layout_virtual_only",
"category": "obfuscation_hint",
"metadata": {
"section": ".bss",
"raw_size": 0,
"virtual_size": 384
}
}
],
"extended": [
{
"value": "summary",
"category": "pe_metadata",
"metadata": {
"dll_count": 3,
"import_count": 45,
"resource_count": 0,
"has_tls": true,
"has_signature": false
}
}
],
"heuristics": [
{
"value": "packer_suspected",
"metadata": {
"reason": "packer_section_name",
"section": "UPX0"
}
},
{
"value": "anti_debug_heuristic",
"metadata": {
"reason": "anti_debug_api_import",
"dll": "kernel32.dll",
"function": "CheckRemoteDebuggerPresent"
}
},
{
"value": "anti_debug_heuristic",
"metadata": {
"reason": "timing_api_import",
"dll": "kernel32.dll",
"function": "GetTickCount"
}
},
{
"value": "pe_structure_anomaly",
"metadata": {
"reason": "section_overlaps_headers",
"section": ".bss",
"raw_address": 0,
"size_of_headers": 1536
}
},
{
"value": "pe_structure_anomaly",
"metadata": {
"reason": "data_directory_overlap",
"directory_a": "IMAGE_DIRECTORY_ENTRY_IMPORT",
"directory_b": "IMAGE_DIRECTORY_ENTRY_IAT"
}
}
]
}
}
iocx/
├── examples/
├── docs/
├── tests/
└── iocx
├── detectors/
├── parsers/
├── plugins/
├── cli/
└── analysis/
IOCX est conçu pour être étendu de manière sûre et prévisible. Les plugins sont des citoyens de première classe, validés par les mêmes tests déterministes par instantanés que le moteur principal.
Vous pouvez construire :
Voir :
docs/specs/overlap-suppression.mddocs/specs/plugin-authoring-guidelines.mdIOCX est plus qu'un simple binaire — c'est un écosystème modulaire :
IOCX est utilisé dans :
Partout où des indicateurs doivent être extraits en toute sécurité, de manière déterministe et à grande échelle, IOCX s'intègre.
Tous les échantillons de test sont :
IOCX applique des seuils de performance stricts en CI pour garantir :
Voir :
docs/performance.mdLe nom IOCX désigne exclusivement le moteur officiel publié sur :
iocxiocx-<plugin>iocx-extension-<name>iocx-detector-<feature>Le développement d'IOCX se concentre sur la stabilité, l'extensibilité et une couverture plus approfondie de l'analyse statique. Les éléments ci-dessous représentent les domaines de travail et d'exploration en cours.
Nous accueillons favorablement :
Voir CONTRIBUTING.md pour les directives.
Si vous découvrez un problème de sécurité, n'ouvrez pas de ticket GitHub.
Suivez les instructions dans SECURITY.md.
Licence MPL‑2.0 — voir LICENSE.