
iocx v0.7.6.1
Un motore di analisi statica estensibile e deterministico che estrae IOC ad alto segnale da binari PE e testo, progettato per l'automazione SOC e le pipeline moderne di analisi delle minacce.
IOCX
Estrazione IOC deterministica e a rischio zero per le pipeline di sicurezza moderne
Estrazione statica di IOC da un file PE tramite la CLI di IOCX
Progetto ufficiale IOCX
Questo è il motore IOCX originale per l'estrazione statica deterministica di IOC e l'analisi PE. Qualsiasi altro repository che utilizzi il nome "iocx" non è affiliato a questo progetto.
Link ufficiali:
- PyPI: https://pypi.org/project/iocx/
- Github: https://github.com/iocx-dev/iocx
- Sito web: https://iocx.dev/
Perché IOCX è importante
Il malware moderno è adversarial per impostazione predefinita — malformato, evasivo e progettato per rompere gli estrattori ingenui.
- Gli strumenti ignari dei binari collassano di fronte a PE malformati
- Le sandbox sono insicure e inutilizzabili in CI/CD
- La riproducibilità è essenziale per le pipeline automatizzate
IOCX è costruito per ambienti in cui correttezza e determinismo contano davvero.
Il motore IOCX
IOCX è il motore ufficiale di estrazione statica di IOC — un sistema deterministico e consapevole dei binari, costruito per DFIR, automazione SOC, sicurezza CI/CD e pipeline di threat-intel su larga scala.
A differenza degli estrattori basati solo su regex o degli strumenti dipendenti da sandbox, IOCX esegue:
- analisi puramente statica
- rischio di esecuzione zero
- output stabile e deterministico
- euristiche testate in modo adversariale
È un componente centrale dell'ecosistema MalX Labs per un'analisi delle minacce moderna e scalabile.
Prova IOCX in 10 secondi
echo "http://malicious.example" | iocx -
Oppure analizza un file PE in sicurezza:
iocx suspicious.exe -a deep
Perché esiste IOCX
I team di sicurezza affrontano tre problemi persistenti:
- Gli estrattori regex si rompono con input adversarial
- Il sandboxing è insicuro, lento e inadatto all'automazione
- La maggior parte degli strumenti IOC è incoerente, lenta o produce output leggermente diversi tra un'esecuzione e l'altra
IOCX risolve questo con un motore deterministico e puramente statico progettato per automazione, sicurezza e scala.
Cosa IOCX non è
IOCX è intenzionalmente non:
- una sandbox
- uno strumento di analisi comportamentale
- un emulatore
- un motore di enrichment
Non esegue mai codice non attendibile. Non esegue mai analisi dinamica. È puramente statico per progettazione — per sicurezza, determinismo e compatibilità con CI/CD.
Filosofia di progettazione
IOCX è progettato per le realtà del malware moderno, non per le assunzioni degli strumenti legacy.
1. Determinismo invece di ambiguità
Output stabile e riproducibile — nessuna casualità, nessuna volatilità.
2. Statico invece di dinamico
L'esecuzione è insicura. L'analisi statica è prevedibile, scalabile e adatta alla CI.
3. Ingegneria adversarial-first
PE malformati, RVA corrotti, stringhe ostili — IOCX li tratta come input normali.
4. Stabilità dello schema come contratto
I sistemi a valle non dovrebbero mai rompersi con un aggiornamento.
5. Prestazioni senza compromessi
150–300 MB/s su testo grezzo. 6–15 MB/s su PE tipici. Prevedibile anche sotto carico adversarial nel caso peggiore.
Questi impegni derivano da una metodologia di ricerca pubblicata per l'analisi strutturale dei PE — costruzione deterministica di fixture, disciplina dell'anomalia singola e comportamento del loader di Windows come oracolo di correttezza. Vedi docs/methodology.md per la metodologia completa, e paax.dev per la tassonomia più ampia dei PE adversarial e la suite commerciale di fixture.
Cosa rende IOCX diverso
| Capacità | IOCX | Estrattori IOC tipici | Strumenti sandbox / dinamici |
|---|---|---|---|
| Sicurezza | Zero esecuzione, puramente statico | Solo regex, nessuna sicurezza sui binari | Esegue codice non attendibile (alto rischio) |
| Determinismo | Output completamente deterministico | Non deterministico sotto rumore | Non deterministico per progettazione |
| Consapevolezza dei binari | Parsing PE completo, euristiche | Nessun supporto ai binari | Sì, ma insicuro + lento |
| Resilienza adversarial | Testato contro PE malformati, stringhe ostili | Facilmente aggirabile | Spesso va in crash o classifica erroneamente |
| Prestazioni | 150–300 MB/s (testo), 6–15 MB/s (PE) | Altamente variabili | Estremamente lento |
| Compatibilità CI/CD | Sì — sicuro, deterministico, veloce | Parziale | No — insicuro per le pipeline |
| Stabilità dello schema | Garantita | Rara | Nessuna |
In breve: IOCX è costruito per la realtà adversarial concreta, non per input idealizzati.
Casi d'uso
CI/CD & DevSecOps
- Analizza i binari prima del rilascio
- Rileva URL, IP o segreti accidentali nelle build
- Applica gate di sicurezza con rischio di esecuzione zero
SOC & Incident Response
- Estrai indicatori da alert o dal testo negli appunti dell'analista
- Ispeziona campioni di malware in sicurezza senza esecuzione
- Normalizza gli IOC in JSON strutturato
Threat Intelligence
- Elabora feed su larga scala
- Analizza report non strutturati
- Costruisci pipeline di enrichment su output deterministico
Automazione & Scripting
- Invia log o artefatti attraverso IOCX tramite pipe
- Usa l'API Python per flussi ETL o batch
- Estendi con rilevatori personalizzati
Profili di prestazioni
1. Estrazione IOC grezza (testo, log, buffer)
150–300 MB/s di throughput sostenuto Percorso veloce — nessun parsing PE.
| Rilevatore | Tempo per 1 MB | Throughput |
|---|---|---|
| Crypto | 0.0037 s | ~270 MB/s |
| Filepaths | 0.0041 s | ~250 MB/s |
| IP | 0.0065 s | ~156 MB/s |
| Domini | 0.0035 s | ~300 MB/s |
2. File PE tipici (~39 KB)
- 0.0122 s (tipico)
- 0.0145 s (con euristiche)
- 6–15 MB/s di throughput
3. PE adversarial denso (1.5 MB)
- 0.192 s
- ~7.6 MB/s di throughput
- Attiva anomalie TLS, anomalie strutturali, pattern anti-debug
4. Motore completo (non-PE)
- 1 MB: 0.038 s
Punti salienti delle versioni
Mostra cronologia versioni
v0.7.6.2 — Validatore della tabella di importazione
- Nuovo validatore strutturale deterministico della tabella di importazione (codici motivo
IMPORT_*). version_infoora viene analizzato e reso disponibile a ogni livello di analisi (non solo con-a full), tramite una nuova proiezione pubblica limitata.- CLI ricostruita: output
--versionbrandizzato, testo--helppiù chiaro, gruppi di argomenti riorganizzati. - Corretto un crash del parser di rilocazione raggiungibile da qualsiasi entry, un bug dell'offset della data-directory PE32+ e diverse perdite silenziose di errori su export/risorse.
- Nuovo controllo CI statico che impedisce ai tag di errore del parser di rimanere silenziosamente non consumati dai validatori.
- Suite di test: da 2.136 a 2.802 test.
v0.7.6.1 — Validatore della directory delle eccezioni
- Aggiunge una validazione semantica approfondita della directory delle eccezioni PE (
.pdata); 14 nuovi codici motivo; 15 validatori in totale. - Corregge un difetto che sopprimeva i risultati strutturali in tutto il motore.
- Quattro ulteriori controlli sono risultati morti in produzione: due sul posizionamento delle directory, uno sulla mappatura delle sezioni e uno sul controllo dei limiti della directory delle risorse.
- Visibile nell'output: i risultati precedentemente soppressi o etichettati erroneamente ora appariranno.
- Test: da 1620 a 2136. Copertura: 100%.
v0.7.6 — Espansione dei validatori strutturali: directory debug e relocations
- Due nuovi validatori strutturali PE - relocations e debug
- I validatori WIN_CERTIFICATE e tls ora ricavano la verità strutturale da parser di struct dedicati, indipendenti da pefile
- 12 nuovi codici motivo con tassonomie di sotto-motivi risolte per priorità
- Parsing deterministico a livello di byte - nessuna dipendenza dall'interpretazione lazy di pefile
- 1620 test con copertura al 100%
v0.7.5 — Espansione dei validatori strutturali
- Quattro nuovi validatori strutturali PE — exports, delay-load imports, VS_VERSIONINFO e gerarchia delle risorse
- 24 nuovi codici motivo con tassonomie di sotto-motivi risolte per priorità
- Parsing deterministico a livello di byte — nessuna dipendenza dall'interpretazione lazy di pefile
- Metadati rilevanti per la sicurezza — caratteristiche DLL, decodifica di subsystem/machine, entropia per risorsa
- 1370 test con copertura al 100% — verificati end-to-end rispetto a
dumpbinsu binari reali
v0.7.4.1 — Hotfix di compatibilità Windows
- Rimossa la dipendenza
python-magic, che causava errori di importazione sui sistemi Windows - Aggiunto un rilevatore di tipo di file in puro Python per la piena portabilità multipiattaforma
- Migliorata la logica di rilevamento PE applicando una validazione PE rigorosa e compatibile con Windows.
- Nessuna modifica comportamentale all'estrazione degli IOC
- La correzione di coerenza di
--min-lengthè pianificata per la v0.7.5
v0.7.4 — Parsing avanzato delle directory
- Parsing e validazione completi della Load Config Directory
- Metadati estesi dell'Optional Header per euristiche a valle
- Nuove euristiche GuardCF, cookie, anomalie
- Analisi PE più veloce
- 99 fixture PE nella suite di test; 45 completamente validate rispetto alla specifica
v0.7.3 — Correttezza strutturale ed euristiche deterministiche
- Rafforzamento importante di tutti i validatori strutturali PE
- Comportamento deterministico e stabile rispetto agli snapshot
- ReasonCodes chiari e coerenti
- Euristiche più solide costruite sulla verità strutturale
v0.7.2 — Correzione delle dipendenze
- Aggiunta la dipendenza
idnamancante - Nessuna modifica comportamentale o allo schema
v0.7.1 — Espansione delle euristiche adversarial e rafforzamento del parser
- Sei nuove euristiche PE
- Corpus PE adversarial ampliato
- Estrattori domain/URL/crypto/hash rafforzati
- Output deterministico validato tramite snapshot
v0.7.0 — Euristiche deterministiche e fondazione del testing adversarial
- Euristiche deterministiche
- Campioni adversarial di livello 3
- Test con contratto su snapshot
- Correzione del crash di Rich Header
v0.6.0 — Schema di output stabile e metadati deterministici
- Schema JSON completamente stabile
- Metadati PE normalizzati
- Livelli di analisi formalizzati
v0.5.0 — Livelli di analisi, analisi delle sezioni PE, indizi di offuscamento
- Nuovo sistema di livelli di analisi
- Analisi strutturale PE
- Euristiche di offuscamento
v0.4.0 — Architettura a plugin
- Motore di regole pronto per i plugin
- Flusso di rilevamento unificato
v0.3.0 — Rilevamento IOC crypto
- Rilevamento di wallet Ethereum e Bitcoin
v0.2.0 — Rilevamento IP ad alta affidabilità
- Miglioramenti importanti a IPv4/IPv6
Avvio rapido
Installazione
pip install iocx
Estrai IOC da un file
iocx suspicious.exe
Estrai da testo
echo "Visit http://bad.example.com" | iocx -
Abilita l'analisi PE
iocx suspicious.exe -a
API Python
from iocx.engine import Engine
engine = Engine()
results = engine.extract("suspicious.exe")
print(results)
Esempio di output
IOCX produce JSON strutturato e deterministico che include IOC, metadati PE, analisi delle sezioni, euristiche e indicatori di offuscamento.
L'esempio seguente è un output abbreviato di un campione PE adversarial reale. Dimostra la forma e la profondità dello schema mantenendo una dimensione gestibile per scopi di documentazione.
Mostra esempio di output JSON
{
"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"
}
}
]
}
}
Architettura
iocx/
├── examples/
├── docs/
├── tests/
└── iocx
├── detectors/
├── parsers/
├── plugins/
├── cli/
└── analysis/
Ecosistema di plugin ed estensibilità
IOCX è progettato per essere esteso in modo sicuro e prevedibile. I plugin sono cittadini di prima classe, validati dagli stessi test deterministici su snapshot del motore principale.
Puoi costruire:
- rilevatori IOC personalizzati
- regole regex personalizzate
- plugin consapevoli dei binari
- euristiche interne
- estrattori specifici per pipeline
Vedi:
docs/specs/overlap-suppression.mddocs/specs/plugin-authoring-guidelines.md
Panoramica dell'ecosistema
IOCX è più di un singolo binario — è un ecosistema modulare:
- Motore principale — estrazione IOC deterministica + analisi PE
- Sistema di plugin — rilevatori e moduli di analisi personalizzati
- Corpus adversarial — PE malformati, stringhe ostili, campioni fuzz
- Framework di snapshot testing — garantisce output deterministico
- Benchmark di prestazioni — applicati in CI
- Suite di documentazione — specifiche, contratti e guide ai plugin
Chi usa IOCX?
IOCX è utilizzato in:
- team DFIR
- pipeline di automazione SOC
- gate di sicurezza CI/CD
- piattaforme di threat-intel
- laboratori di ricerca sul malware
- team di security engineering
Ovunque gli indicatori debbano essere estratti in sicurezza, in modo deterministico e su larga scala, IOCX è adatto.
Test sicuri (nessun malware richiesto)
Tutti i campioni di test sono:
- Sintetici
- Benigni
- Pubblicamente sicuri (EICAR, GTUBE)
- Progettati per evitare la gestione accidentale di malware
Garanzie di prestazioni
IOCX applica soglie di prestazioni rigorose in CI per garantire:
- Nessun blocco da backtracking regex
- Nessun rallentamento patologico
- Prestazioni stabili tra le release
Vedi:
docs/performance.md
Identità e denominazione del progetto
Il nome IOCX si riferisce esclusivamente al motore ufficiale pubblicato su:
Non consentito
- Repository chiamati
iocx - Strumenti chiamati "iocx" non facenti parte di questo progetto
- Insinuare un'affiliazione senza permesso
Consentito
iocx-<plugin>iocx-extension-<name>iocx-detector-<feature>
Repository ufficiali IOCX
- Motore principale: https://github.com/iocx-dev/iocx
- Meta-repo dei plugin: https://github.com/iocx-dev/iocx-plugins
- Documentazione: https://github.com/iocx-dev/iocx/tree/main/docs/specs
- Pacchetto PyPI: https://pypi.org/project/iocx/
Roadmap
Lo sviluppo di IOCX si concentra su stabilità, estensibilità e copertura più profonda dell'analisi statica. Gli elementi seguenti rappresentano aree di lavoro ed esplorazione in corso.
- Euristiche PE estese (comportamento delay-load, anomalie strutturali, pattern di rilocazione)
- Regole di soppressione selettiva per flussi OSINT, DFIR e threat-intel
- Estrazione di metadati ELF e Mach-O
- Modalità di analisi batch per flussi multi-artefatto
- Modalità di output in stile YARA e hook di enrichment
- Analisi statica indipendente dal tipo di binario
- Ecosistema di plugin multipiattaforma
- Binding linguistici per Rust, Go e Node.js
Contribuire
Accogliamo con favore:
- Nuovi rilevatori
- Miglioramenti ai parser
- Aggiornamenti alla documentazione
- Campioni adversarial sintetici
Vedi CONTRIBUTING.md per le linee guida.
Sicurezza
Se scopri un problema di sicurezza, non aprire una issue su GitHub.
Segui le istruzioni in SECURITY.md.
Licenza
Licenza MPL-2.0 — vedi LICENSE.