Détection de malwares 0-day pour les binaires, le code source et les scripts (qui ne craint pas)
Atomdrift Scan est un scanner de logiciels malveillants moderne basé sur l'apprentissage automatique, conçu pour détecter les attaques 0-day contre la chaîne d'approvisionnement logicielle.
Il est conçu pour être déterministe, rapide et flexible, et intégrable dans n'importe quel flux de travail ou outil de sécurité que vous avez en tête, et peut opérer sur des fichiers, des archives, des URL, des PURL ou des processus.
En septembre 2026, Atomdrift Scan affiche un taux de détection 0-day de 98 %, soit +34 % d'avance sur tout autre scanner : commercial ou open source.
Comment Atomdrift obtient-il d'aussi bons résultats ? D'abord, il couvre plus de terrain que tout autre scanner :
Plus important encore, les règles sont constamment actualisées grâce à l'apprentissage par renforcement sur de nouveaux échantillons, blogs et articles techniques, ce qui donne environ 1000 règles mises à jour quotidiennement.
Si vous êtes sur un hôte de type UNIX (macOS, Linux, BSD, Solaris, illumos, Android) :
curl -fsSL https://install.atomdrift.org/scan.sh | sh
Si vous êtes sur Windows :
irm https://install.atomdrift.org/scan.ps1 | iex
Ou, si vous avez Rust installé et souhaitez simplement le compiler depuis les sources :
make install
Si une analyse binaire plus poussée est nécessaire, vous devriez également installer 7-Zip, rizin, upx et innoextract.
Sur Windows, avec winget :
winget install --exact --id 7zip.7zip
winget install --exact --id Rizin.Rizin
winget install --exact --id UPX.UPX
winget install --exact --id dscharrer.innoextract
Sur les systèmes de type Unix, installez le 7-Zip upstream (brew install sevenzip, apt install 7zip) plutôt que p7zip — son 7z ne peut pas lire l'APFS, donc le contenu des .dmg n'est pas analysé.
# Scan a file, directory, or archive recusively:
atomscan ./project
atomscan release.tgz
# Fetch a package from its registry and scan it.
atomscan purl npm/[email protected]
# Fetch and scan a URL.
atomscan url https://example.com/download
# EXPERIMENTAL: Scan running process executables, or triage the wider host
atomscan ps
atomscan sys
# JSON output for programmatic access
atomscan -f json ./project
Les codes de sortie rendent l'intégration CI triviale :
0 : tous les échantillons sont bénins1 : échantillon hostile détecté2 : échantillon suspect détecté3 : erreur d'analyse4 : le jeu de règles était incomplet — l'analyse s'est exécutée avec moins de règles que
ne le définit le jeu de traits, donc tout résultat autre qu'hostile ne prouve rien. Relancez-la.
atomscan n'enverra jamais de données de télémétrie. Il se connectera cependant à Internet pour 2 raisons :
--no-update ou SCAN_NO_UPDATE_CHECK=1--follow=none pour n'analyser que l'artefact demandé.Contrairement aux autres scanners de logiciels malveillants, Atomdrift vous permet d'ajuster la sensibilité en termes de niveau de faux positifs acceptable à l'aide du drapeau -l :
-l0 : strict, fixe le seuil de confiance à un point où aucun faux positif n'a été observé.-l25 : le point par défaut : 25 faux positifs pour 100 millions de fichiers.-l1000 : permissif, environ 1 faux positif pour 100 000 fichiers.REMARQUE : pour les formats de fichiers dont nous n'avons pas 100 millions d'échantillons, le taux de faux positifs observé peut atteindre 5 à 6 fois le niveau demandé. Les résultats peuvent varier.
Les surcharges brutes --threshold-hostile et --threshold-suspicious sont disponibles
pour les utilisateurs qui souhaitent micromanager directement les seuils de probabilité, mais ces valeurs ne sont pas garanties stables, et ces drapeaux ne peuvent pas être combinés avec -l.
Pour une interprétation supplémentaire, les utilisateurs peuvent fournir l'accès à un LLM via le drapeau --llm. Ce drapeau a deux objectifs :
Par défaut, atomscan envoie les preuves interprétées (pas le fichier original) à http://localhost:8000/v1 — pour être utilisé avec un service local comme Ollama ou vLLM ; mais il peut aussi être configuré pour utiliser un service distant comme Claude, ChatGPT ou DeepSeek.
Aucun modèle n'est codé en dur : sauf si vous passez --llm-model, atomscan demande au point de terminaison quels modèles il sert et utilise le plus grand qu'il liste. Nous recommandons de servir Qwen/Qwen3.8-27B.
Si le point de terminaison nécessite un jeton bearer, placez-le dans ~/.tok/llm (mode 0600) et atomscan l'enverra automatiquement ; --llm-key et SCAN_LLM_KEY remplacent ce fichier.
--llm accepte également une chaîne de basculement séparée par des virgules, essayée dans l'ordre — --llm 'https://llm.isotope13.ai/v1,openrouter' évalue sur votre propre point de terminaison et ne recourt à celui facturé que lorsqu'il ne peut pas répondre.
atomscan --llm ./project
atomscan --llm http://model-host:8000/v1 --llm-model my-model ./project
atomscan --llm openrouter --llm-model qwen/qwen3.8-27b ./project
--llm openrouter communique avec https://openrouter.ai/api/v1. La clé provient de --llm-key, SCAN_LLM_KEY ou ~/.tok/openrouter (première ligne non vide). --llm-model vaut par défaut openrouter/auto (le routeur automatique d'OpenRouter) s'il est omis — le reste du catalogue n'est pas sélectionné automatiquement.
make deploy sous Linux accepte les mêmes noms : LLM=openrouter (ou LLM_URL=openrouter), et LLM_MODEL=qwen/qwen3.8-27b uniquement pour épingler un modèle au lieu de openrouter/auto. L'unité ne peut pas lire le répertoire personnel de l'opérateur (ProtectHome=true), donc le script de déploiement copie ~/.tok/openrouter dans le répertoire d'état du service.
Le scanner reconnaît plus de 100 types de fichiers et de conteneurs. La couverture représentative comprend :
| Catégorie | Formats |
|---|---|
| Binaires et bytecode | Mach-O, ELF, PE, WebAssembly, Android DEX, Java .class, Python .pyc, BEAM |
| Source | Python, JavaScript, TypeScript, Go, Rust, Java, C, C++, C#, Ruby, PHP, Perl, Lua, Swift, Objective-C, Kotlin, Scala, Groovy, Zig, Elixir, Clojure, Shell, PowerShell, Batch, VBScript, AppleScript, JCL |
| Fichiers de build, manifeste et verrouillage | package.json, package-lock.json, Cargo.toml, Cargo.lock, pyproject.toml, requirements.txt, Poetry, Pipenv, Composer, Yarn, pnpm, Go modules, binding.gyp, GitHub Actions, systemd units, Makefile, Dockerfile |
| Archives et images disque | ZIP, TAR, gzip, bzip2, XZ, zstd, 7-Zip, RAR, CAB, ASAR, DMG, ISO |
| Paquets et conteneurs | deb, rpm, APK, npm, wheel, egg, sdist, gem, crate, conda, NuGet, IPA, CRX, XPI, VSIX, images OCI/Docker, paquets FreeBSD, Arch, Void et Gentoo |
| Documents et données | OLE2, OOXML, OpenDocument, PDF, RTF, Markdown, HTML, XML, SVG, plist, JPEG, PNG, LNK, CHM, Python pickle |
Le jeu de règles inclut des comportements spécifiques aux plateformes pour Linux, macOS, Windows, Android, iOS, les BSD, AIX, Solaris, QNX, z/OS, ESXi, OpenWrt, VxWorks, RouterOS, FortiOS, PAN-OS, IOS-XE, Junos, NetScaler et les appliances Ivanti.
La matrice de compilation par défaut couvre Linux, macOS, FreeBSD, OpenBSD, NetBSD, illumos, Solaris et Windows sur plusieurs architectures de processeur. La profondeur des tests varie selon la cible ; consultez le workflow de build pour la matrice actuelle.
Atomdrift Scan est disponible sous Apache License 2.0.
Toutes les contributions sont les bienvenues !