
Moteur de triage statique de malwares en Go : calcule les hachages des fichiers, extrait les chaînes et les IOC, analyse les formats PE/ELF/Mach-O/APK, évalue les capacités et génère des rapports JSON, YARA, Sigma, STIX et PDF.
Moteur d'analyse statique de logiciels malveillants — aucune dépendance externe, sans cgo, lié statiquement
FlatScan est un moteur de production d'analyse statique de logiciels malveillants et de génération de rapports, écrit en Go pur. Il est conçu pour les analystes qui ont besoin d'un triage rapide, d'une extraction d'IOC, d'une détection de capacités suspectes, de rapports exécutifs et d'un transfert de règles de chasse — le tout sans exécuter l'échantillon.
FlatScan lit un fichier, le hache, identifie le format, extrait les chaînes, décode les données encodées suspectes, extrait et trie les IOC, inspecte les métadonnées des exécutables/conteneurs, note les résultats, les enrichit en un profil de logiciel malveillant, et produit des sorties en texte, JSON, PDF, HTML, IOC, YARA, Sigma, STIX 2.1, base de données de cas et packs de rapports.
Le triage de logiciels malveillants s'adresse souvent à deux publics :
| Public | Besoins |
|---|---|
| Analystes de sécurité | Preuves techniques : hachages, chaînes, imports, IOC, entropie, sections, données décodées, TTP, règles de chasse |
| RSSI / Direction | Contexte de risque : ce que c'est probablement, pourquoi c'est important, impact métier, actions recommandées |
FlatScan répond aux deux. Il effectue une analyse statique pour la sécurité et la rapidité, puis convertit le résultat en sortie lisible par machine et en rapport prêt pour la direction.
graph LR
A[Malware Sample] --> B[FlatScan Engine]
B --> C[Analyst Reports]
B --> D[Executive Reports]
B --> E[Machine-Readable]
B --> F[Hunting Rules]
C -->|HTML, Full Text| G[SOC Team]
D -->|PDF, Executive MD| H[CISO / Board]
E -->|JSON, STIX 2.1| I[SIEM / SOAR]
F -->|YARA, Sigma| J[EDR / Hunt Team]
FlatScan est conçu comme un pipeline d'analyse multi-étapes avec exécution parallèle, un système de plugins et aucune dépendance externe — go.mod ne requiert rien, et le moteur de désassemblage pur Go est intégré dans l'arborescence sous internal/x86asm (une copie non modifiée de golang.org/x/arch/x86/x86asm, BSD-3-Clause). Pas de cgo, aucune dépendance d'exécution ou système, aucun réseau nécessaire pour compiler.
graph TB
subgraph "Input Layer"
CLI[CLI Parser] --> CFG[Config]
INT[Interactive Mode] --> CFG
SHL[Shell Mode] --> CFG
WCH[Watch Mode] --> CFG
end
subgraph "I/O Layer"
CFG --> MMP{File > 100MB?}
MMP -->|Yes| MMAP[Memory-Mapped I/O]
MMP -->|No| BUF[Buffered Read]
MMAP --> DATA[Raw Bytes + Hashes]
BUF --> DATA
end
subgraph "Analysis Pipeline"
DATA --> DET[File Type Detection]
DET --> ENT[Entropy Analysis]
ENT --> STR[String Extraction]
STR --> IOC[IOC Extraction]
IOC --> DEC[Decoder Pass]
DEC --> CRP[Corpus Build]
CRP --> PAT[Pattern Matching]
PAT --> PG["Parallel Group"]
subgraph PG["⚡ Parallel Stages"]
FMT[Format Analysis]
CRV[Safe Carving]
CRY[Crypto/Config]
SIM[Similarity Hash]
end
PG --> SEQ[Sequential Stages]
SEQ --> PLG[Plugin Engine]
PLG --> SCR[Risk Scoring]
end
subgraph "Output Layer"
SCR --> TXT[Text Report]
SCR --> JSN[JSON]
SCR --> PDF[PDF Report]
SCR --> HTM[HTML Report]
SCR --> YAR[YARA Rule]
SCR --> SIG[Sigma Rule]
SCR --> STX[STIX 2.1]
SCR --> RPK[Report Pack]
end
style PG fill:#1a1a2e,stroke:#e94560,stroke-width:2px
style SCR fill:#0f3460,stroke:#e94560,stroke-width:2px
| Principe | Implémentation |
|---|---|
| Zéro dépendance externe | go.mod n'exige rien et il n'y a pas de go.sum. La bibliothèque standard Go plus un paquet vendu, non modifié — internal/x86asm, une copie de golang.org/x/arch/x86/x86asm (BSD-3-Clause, moteur de désassemblage) conservée dans l'arborescence afin que la compilation ne nécessite aucun téléchargement ni réseau. Pas de cgo, pas de bibliothèques natives, pas de dépendances à l'exécution |
| Statique uniquement | N'exécute jamais l'échantillon — lit les octets et les métadonnées |
| Thread-Safe | parallelRun() avec findings protégés par mutex, vérifié par le détecteur de courses. Les étapes d'analyse récupèrent les paniques individuellement, afin qu'un échantillon malformé ne puisse pas interrompre un lot |
| Portable sur toutes les plateformes | Compile pour Linux, macOS, Windows ; mmap sur Linux avec repli transparent |
| Extensible | Interface de plugin + manifestes JSON pour des détections personnalisées sans recompilation |
| Vérification | Résultat |
|---|---|
go build / go vet / gofmt -l | Propre |
go test ./... | 189 tests (344 cas incluant les sous-tests), tous réussis |
go test -race ./... | Propre |
go test -cover ./... | 50,6 % des instructions |
golangci-lint run | 0 problème (errcheck, govet, staticcheck, gosec, errorlint, ineffassign, unused, bodyclose, nilerr, misspell, unconvert, wastedassign) |
govulncheck ./... | Aucune vulnérabilité trouvée |
Environnement de test. Vérifié sur Fedora Linux 44 (x86_64, noyau 7.1.7) avec Go 1.26.5. Le
plancher de go.mod est Go 1.25. La CI exécute également la même suite sur ubuntu-latest.
Linux est la seule plateforme sur laquelle ces résultats sont mesurés : macOS et Windows sont
des cibles prises en charge et le code se compile de manière croisée pour celles-ci, mais les chiffres ci-dessus ne
sont pas reproduits indépendamment sur ces plateformes, et mmap_linux.go est réservé à Linux par
construction (les autres plateformes utilisent le repli par lecture tamponnée).
Le moteur traite les fichiers à travers 18 étapes avec une exécution parallèle pour les opérations indépendantes :