
Outil d'analyse statique et dynamique pour détecter les codes malveillants, les binaires suspects et les violations de la vie privée
Installation - Utilisation - Analyse dynamique - Règles YARA - CI/CD
Docs : Anglais | Tiếng Việt
Outil d'analyse statique et dynamique pour détecter les codes malveillants, les binaires suspects et les violations de la vie privée. Analyse le code source, les exécutables compilés (.exe, .dll, .elf), les bundles macOS (.app, .dmg, .pkg), les applications mobiles (.apk, .ipa) et les paquets applicatifs avec des règles YARA, un bac à sable comportemental Docker, l'analyse mobile MobSF, la désobfuscation de payloads et des rapports multi-formats (JSON, HTML, SARIF).
pip install malware-check
pipx install malware-check
git clone https://github.com/momenbasel/malware-check.git
cd malware-check
pip install -e ".[dev]"
Ceci installe la CLI de base. L'analyse binaire via pefile/lief, la détection de fichiers par IA via magika et l'analyse YARA via yara-python sont des options supplémentaires facultatives.
# Noyau + analyse binaire + détection de fichiers par IA + YARA
pip install malware-check[full]
# Ou installer uniquement ce dont vous avez besoin
pip install malware-check[binary]
pip install malware-check[detect]
pip install malware-check[yara]
# Ou installer les extras manuellement
pip install pefile lief magika yara-python
pip install malware-check[detect]
Une fois installé, malware-check utilise Magika pour améliorer l'identification des fichiers multiplateformes, enrichir les métadonnées file_type et orienter les fichiers sans extension ou déguisés vers le bon analyseur en fonction du contenu plutôt que du nom de fichier.
# Nécessite Docker - https://docs.docker.com/get-docker/
# Construire l'image du bac à sable (une seule fois)
malware-check build-sandbox
malware-check info
La commande info indiquera si la détection de fichiers par Magika est disponible.
Installer en tant que skill Claude Code pour que Claude puisse analyser des fichiers pour vous :
# Installer le skill depuis GitHub
npx skills install momenbasel/malware-check --skill malware-check
# Ou manuellement : copier skill/SKILL.md dans votre répertoire de skills
cp -r skill/ ~/.claude/skills/malware-check/
Ensuite, dans Claude Code, dites : "scan this file for malware" ou "is this binary safe?" et Claude utilisera malware-check automatiquement.
Vous avez également besoin de l'outil CLI installé :
pip install malware-check pefile lief yara-python
Installer l'outil et l'ajouter à vos instructions d'agent Codex :
# 1. Installer la CLI
pip install malware-check pefile lief yara-python
# 2. Ajouter à vos instructions Codex (codex.md ou prompt système)
echo 'Utilisez `malware-check scan <path> --verbose` pour analyser les fichiers à la recherche de malwares.' >> AGENTS.md
# 3. Ou installer en tant que skill Codex
cp -r skill/ .codex/skills/malware-check/
Pour tout agent de codage IA prenant en charge l'utilisation d'outils ou des instructions personnalisées :
# 1. Installer
pip install malware-check
# 2. Ajouter aux instructions de l'agent :
# "Lorsqu'on vous demande de vérifier du code/des binaires pour des malwares, utilisez : malware-check scan <cible> --verbose"
# "Pour les rapports : malware-check scan <cible> --format html -o rapport.html"
# "Pour CI/CD : malware-check scan <cible> --format sarif -o resultats.sarif --exit-code"
malware-check scan suspicious_file.py
# Meilleurs résultats lorsque malware-check[detect] est installé
malware-check scan suspicious_payload --verbose
malware-check scan /path/to/project --verbose
# Construire le bac à sable d'abord (une seule fois)
malware-check build-sandbox
# Analyser avec analyse comportementale
malware-check scan malware.exe --dynamic
malware-check scan /Applications/SuspiciousApp.app --dynamic --verbose
# Rapport JSON
malware-check scan target/ --format json -o rapport.json
# Tableau de bord HTML
malware-check scan target/ --format html -o rapport.html
# SARIF pour CI/CD
malware-check scan target/ --format sarif -o resultats.sarif
# Sortir avec un code non nul en cas de résultats (pour les barrières CI)
malware-check scan . --format sarif -o resultats.sarif --exit-code
malware-check info
name: Security Scan
on: [push, pull_request]
jobs:
malware-check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.12"
- name: Install malware-check
run: pip install malware-check
- name: Run scan
run: malware-check scan . --format sarif -o results.sarif --exit-code
- name: Upload SARIF
if: always()
uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: results.sarif
malware-check/
├── src/malware_check/
│ ├── cli.py # Point d'entrée CLI Click
│ ├── scanner.py # Orchestrateur + détection de fichiers facultative basée sur Magika
│ ├── models.py # Modèles de données Finding, FileAnalysis, ScanResult
│ ├── analyzers/
│ │ ├── code.py # Correspondance de motifs dans le code source (40+ règles)
│ │ ├── binary.py # Analyse PE/Mach-O/ELF
│ │ ├── privacy.py # PII, suivi, autorisations
│ │ ├── yara_engine.py # Compilation et analyse des règles YARA
│ │ └── dynamic.py # Analyse comportementale dans le bac à sable Docker
│ └── reporters/
│ ├── console_reporter.py # Sortie terminal enrichie
│ ├── json_reporter.py # Export JSON
│ ├── html_reporter.py # Tableau de bord HTML (Jinja2)
│ └── sarif_reporter.py # SARIF 2.1.0 pour CI/CD
├── rules/yara/ # Règles YARA incluses
├── tests/ # Suite de tests pytest
└── pyproject.toml # Métadonnées du projet
Ajoutez des règles personnalisées dans n'importe quel répertoire et transmettez-les via --yara-rules :
malware-check scan cible/ --yara-rules /chemin/vers/mes/regles/
Les règles prennent en charge les champs de métadonnées pour la sévérité, la catégorie, la confiance, CWE et le mapping MITRE ATT&CK :
rule Ma_Regle_Personnalisee {
meta:
description = "Détecter un motif de malware personnalisé"
severity = "critical"
category = "backdoor"
confidence = "0.90"
mitre = "T1059"
cwe = "CWE-94"
recommendation = "Supprimer le code malveillant"
strings:
$pattern = "chaine_suspecte"
condition:
$pattern
}
Le bac à sable Docker fournit une analyse comportementale avec isolation complète :
Comportements surveillés :
# Cloner et installer les dépendances de développement
git clone https://github.com/momenbasel/malware-check.git
cd malware-check
pip install -e ".[dev]"
# Optionnel : inclure les extras Magika, YARA et binaires pendant le développement
pip install -e ".[dev,full]"
# Exécuter les tests
pytest
# Linting
ruff check src/ tests/
Licence MIT - voir LICENSE pour les détails.
| Catégorie | Exemples de détection |
|---|
| Reverse shells | Python socket+subprocess, bash /dev/tcp, netcat, PowerShell TCPClient, socat |
| Backdoors | Web shells (PHP/JSP/ASP.NET), injection de commandes (Python/JS/Java/Ruby/Go/C), bind shells, routes cachées, chargement de code distant, création d'utilisateur, SSTI, désérialisation non sécurisée |
| Obfuscation | Chaînes Base64+eval, construction de codes de caractères, payloads hexadécimaux, imports dynamiques |
| Mineurs de crypto | Connexions à des pools Stratum, API de minage, adresses de portefeuille (BTC/ETH/XMR) |
| Ransomwares | Parcours de chiffrement de fichiers, messages de rançon, patterns de chiffrement+renommage |
| Vol d'identifiants | Secrets codés en dur, vol du presse-papiers, récupération des variables d'environnement, fichiers d'identifiants de navigateur |
| Chaîne d'approvisionnement | Hooks d'installation npm/pip suspects, confusion de dépendances, registres personnalisés |
| Persistance | Création de cron/schtasks, clés de registre Run, LaunchAgent/Daemon, manipulation SUID |
| Élévation de privilèges | Manipulation du bit SUID, setuid(0), chown root |
| Anti-analyse | Détection de débogueur, détection de machine virtuelle, callbacks TLS, utilisation de ptrace |
| Keyloggers | GetAsyncKeyState, SetWindowsHookEx, pynput, CGEventTapCreate |
| Vie privée | SDK de suivi (40+), champs PII (SSN, cartes de crédit, données biométriques, santé), autorisations invasives, empreinte numérique de l'appareil |
| Indicateurs binaires | Binaires packés (UPX, haute entropie), sections RWX, imports suspects, code non signé/trafiqué |
| Protection | Implémentation |
|---|
| Isolation réseau | --network none (par défaut) |
| Limite mémoire | 512 Mo |
| Limite CPU | 1 cœur |
| Limite de processus | 100 PID |
| Système de fichiers en lecture seule | --read-only avec tmpfs pour /tmp et /evidence |
| Capacités | Toutes supprimées (--cap-drop=ALL) |
| Élévation de privilèges | Bloquée (--security-opt=no-new-privileges) |
| Timeout | Configurable (par défaut 30 s) |
| Technique | ID | Détection |
|---|
| Interpréteur de commandes et de scripts | T1059 | Reverse shells, patterns eval/exec |
| Composant logiciel serveur : Web shell | T1505.003 | Web shells PHP/JSP/ASP |
| Informations ou fichiers obfusqués | T1027 | Base64, codes de caractères, encodage hexadécimal |
| Détournement de ressources | T1496 | Pools et outils de minage de crypto-monnaies |
| Données chiffrées pour impact | T1486 | Chiffrement de fichiers par ransomware |
| Capture d'entrée : Keylogging | T1056.001 | Hooks et enregistreurs de clavier |
| Tâche planifiée / Job | T1053 | Cron, schtasks, LaunchAgent |
| Démarrage ou connexion automatique | T1547 | Clés de registre Run |
| Injection de processus | T1055 | VirtualAllocEx + WriteProcessMemory |
| Identifiants depuis des magasins de mots de passe | T1555 | Accès aux fichiers d'identifiants du navigateur |
| Contournement du contrôle d'élévation | T1548 | Manipulation du bit SUID |
| Évasion de débogueur | T1622 | Appels d'API anti-débogage |
| Compromission de la chaîne d'approvisionnement | T1195 | Hooks d'installation malveillants |