TwoFace : Le Malware Linux Qui Rend Les Sandboxes Inutiles
TwoFace n'est pas un énième malware Linux. C'est une révolution dans les techniques d'évasion qui rend obsolètes la plupart des outils d'analyse malware actuels. Développé par Synacktiv en 2025, ce proof-of-concept open-source démontre comment un binaire Linux peut avoir deux personnalités : inoffensif 99% du temps, malveillant uniquement sur la machine ciblée.
Le cauchemar des analystes : votre antivirus analyse le fichier dans sa sandbox, ne détecte rien, valide le binaire. Mais une fois sur le serveur cible, le malware s'active et s'exécute directement en RAM sans laisser de trace sur le disque.
Bienvenue dans l'ère du malware contextuel intelligent.
Le Principe Diabolique de TwoFace
Deux Visages, Un Seul Binaire
TwoFace exploite une idée brillante mais terrifiante : chiffrer le payload malveillant avec une clé dérivée d'une caractéristique unique de la machine cible.
Voici comment ça fonctionne :
Attaquant :
1. Identifie la cible (UUID partition : a1b2c3d4-...)
2. Crée un binaire avec 2 comportements :
- Comportement A (clean) : "Hello World" inoffensif
- Comportement B (malveillant) : backdoor chiffré avec HMAC(UUID)
3. Le binaire teste l'UUID au démarrage
4. Si UUID ≠ cible → Comportement A
5. Si UUID = cible → Déchiffre et exécute Comportement B
Résultat :
- Sandbox antivirus (UUID aléatoire) → Voit "Hello World" propre ✅
- Machine cible (UUID connu) → Exécute la backdoor 💀
L'Astuce Technique : memfd_create()

Le coup de génie de TwoFace : utiliser memfd_create(), un syscall Linux qui crée un fichier anonyme en mémoire.
// Code simplifié de TwoFace
int memfd = memfd_create("", MFD_CLOEXEC);
write(memfd, decrypted_malware, size);
fexecve(memfd, argv, envp);
// Le malware s'exécute depuis la RAM, ZERO trace disque
Conséquences :
- ❌ Pas de fichier sur /tmp ou /var
- ❌ Aucun binaire analysable post-infection
- ❌ Les outils de forensic arrivent trop tard
- ✅ Le malware apparaît en RAM, exécute, disparaît
Pourquoi C'est Révolutionnaire
Comparaison avec les malwares classiques :
| Critère | Malware Classique | TwoFace |
|---------|-------------------|---------|
| Détection sandbox | Timing attacks, VM artifacts | Context-aware (UUID) |
| Taux de détection AV | 30-70% | ~0% (comportement clean) |
| Traces filesystem | Binaire déposé sur disque | Aucune (memfd) |
| Analyse statique | Possible (strings, IDA) | Impossible (chiffré) |
| Réversibilité | Difficile mais faisable | Clé inconnue → infaisable |
Le score parfait : TwoFace passe tous les checks d'un antivirus moderne :
- ✅ Analyse statique : Code source auditable (Rust open-source)
- ✅ Analyse dynamique : Comportement propre dans la sandbox
- ✅ Signature : Aucune signature malware connue
- ✅ Heuristique : Pas de comportement suspect détecté
TwoFace Dans le Contexte des Menaces Linux 2025
L'Explosion des Malwares Linux
Les chiffres qui font peur (Rapport Malware Trends Q3 2025) :
- +131% d'attaques malware en 2025 vs 2024
- +58% de malwares Linux spécifiquement
- 87% des serveurs cloud tournent sous Linux
Pourquoi cette explosion ? :
1. Windows devient trop dur : EDR omniprésents, VBA macros désactivés par défaut
2. Linux = infrastructures critiques : Serveurs web, bases de données, Kubernetes
3. Supply chain attacks : Un seul package compromis = millions de serveurs
Les APT Passent à Linux
APT = Advanced Persistent Threat (menaces étatiques ou hautement sophistiquées).
Groupes APT actifs sur Linux en 2025 :
- Gelsemium : WolfsBane backdoor (cyberespionnage)
- APT31 (Chine) : Cible la Russie via services cloud
- Sofacy (Russie) : Malware Linux pour cibles OTAN
- Equation Group : Outils NSA leakés, maintenant open-source
WolfsBane (découvert novembre 2024) :
Objectif: Cyberespionnage
Cibles: Serveurs Linux entreprises et gouvernements
Techniques:
- Persistance via systemd
- Vol credentials SSH
- Exfiltration données sensibles
- C2 (Command & Control) chiffré
Attribution: Gelsemium APT (lié à la Chine)
Le Désastre XZ Utils (CVE-2024-3094)

Le supply chain attack parfait - Mars 2024, découvert par hasard :
Timeline :
- 2021-2024 : Un contributeur (Jia Tan) gagne la confiance de la communauté XZ Utils
- Février 2024 : Push de xz-utils 5.6.0 avec backdoor ultra-obfusquée
- Mars 2024 : Andres Freund (Microsoft) remarque un login SSH lent de 500ms
- Investigation : Découverte d'une backdoor dans liblzma (utilisée par sshd)
- Impact : CVSS 10.0 (criticité maximale) - Accès root distant sans auth
Ce qui rend XZ terrifiant :
// Backdoor XZ (simplifié)
if (liblzma_decrypt(ssh_packet) == MAGIC_BACKDOOR) {
// Bypass authentication
setuid(0); // Root access
execute_attacker_commands();
}
Distributions affectées :
- Fedora 40 et Rawhide (🔥 déployé en prod)
- Arch Linux, Debian testing
- Ubuntu (détecté avant déploiement large)
Leçon : Un seul mainteneur compromis peut backdoor des millions de serveurs.
Comment TwoFace Change La Donne
L'Attaque Type Avec TwoFace
Scénario réaliste - Exfiltration de données bancaires :
# Étape 1 : Reconnaissance
$ ssh admin@target-server.bank.com
$ cat /proc/sys/kernel/random/boot_id
# UUID: 3a4b5c6d-7e8f-9a0b-1c2d-3e4f5a6b7c8d
# Étape 2 : Build TwoFace
$ twoface build \
--uuid "3a4b5c6d-7e8f-9a0b-1c2d-3e4f5a6b7c8d" \
--clean-binary /bin/ls \
--malicious-payload ./exfiltrate_db.elf \
--output ./innocent_tool
# Étape 3 : Ingénierie sociale
"Salut, j'ai créé un outil de monitoring. Peux-tu tester ?"
# L'admin exécute ./innocent_tool
# Sur sandbox AV (UUID différent) :
$ ./innocent_tool
# Output: Liste de fichiers (comportement normal de 'ls')
# AV: ✅ Clean
Temps de détection moyen : >30 jours (si détecté).
Les Variantes Possibles
TwoFace peut utiliser d'autres contextes que l'UUID :
1. Empreinte réseau :
// Active uniquement si connecté au réseau 10.50.0.0/16
if get_network_subnet() == "10.50.0.0/16" {
decrypt_and_execute_malware();
}
2. Date/Heure :
// Bombe à retardement
if now() > "2025-12-25 00:00:00" && now() < "2025-12-26 00:00:00" {
// Attaque le jour de Noël (SOC sous-staffé)
launch_ransomware();
}
3. Utilisateur spécifique :
// Cible uniquement le CEO
if env::var("USER") == "john.ceo" {
keylogger_start();
}
4. Présence de fichier :
// Active si /opt/secret_project/data.db existe
if Path::new("/opt/secret_project/data.db").exists() {
exfiltrate("/opt/secret_project/");
}
Se Défendre Contre TwoFace et Malwares Contextuels

Niveau 1 : Détection Comportementale
Monitorer les syscalls suspects :
# Règle Falco (IDS comportemental Linux)
- rule: Suspect memfd_create Execution
desc: Détecte l'utilisation de memfd_create (utilisé par TwoFace)
condition: >
evt.type = memfd_create and
not proc.name in (known_safe_binaries)
output: >
Suspicious memfd_create detected
(user=%user.name command=%proc.cmdline pid=%proc.pid)
priority: HIGH
Outils recommandés :
- Falco : Détection runtime Kubernetes et Linux
- Osquery : Monitoring système en temps réel
- Wazuh : SIEM open-source avec règles APT Linux
- Auditd : Audit kernel Linux natif
Niveau 2 : Analyse Multi-Environnements
Ne jamais faire confiance à UNE SEULE analyse :
# Stratégie défensive
for env in sandbox1 sandbox2 sandbox3 baremetal_test; do
# Changer l'UUID à chaque test
run_with_random_uuid ./suspect_binary
monitor_behavior
compare_with_previous_runs
done
Détecter les divergences comportementales :
- Calls réseau différents selon l'environnement
- CPU/RAM usage variable
- Temps d'exécution anormal
- Syscalls supplémentaires dans certains contextes
Niveau 3 : Hardening Système
Bloquer memfd_create pour les binaires non-signés :
# Via SELinux policy
allow only_trusted_domain memfd_t:file { create write execute };
deny untrusted_domain memfd_t:file *;
Restreindre les capacités :
# Principe du moindre privilège
$ setcap cap_net_bind_service=+ep ./webserver
# Pas de CAP_SYS_ADMIN, CAP_SYS_PTRACE, etc.
Niveau 4 : Threat Intelligence
Indicateurs de Compromission (IoCs) :
Surveillance_Priority:
- Connexions vers IPs APT connues
- DNS queries suspectes (tunneling)
- Modifications /etc/systemd/ non autorisées
- Binaires Rust compilés récemment (TwoFace est en Rust)
- Accès SSH depuis IPs géolocalisées inhabituelles
Feeds threat intel à intégrer :
- MITRE ATT&CK pour Linux
- AlienVault OTX (IoCs communautaires)
- CISA Known Exploited Vulnerabilities
Niveau 5 : Supply Chain Security
Après le désastre XZ Utils, checklist obligatoire :
1. Vérifier les dépendances :
# Audit automatique avec Syft + Grype
$ syft packages dir:. -o json | grype
# Détecte CVE-2024-3094 (XZ backdoor) si présent
2. Code signing obligatoire :
# Signer tous vos binaires
$ gpg --detach-sign --armor my_app
$ sha256sum my_app > my_app.sha256
3. Reproducible builds :
# Build déterministe (même input = même output)
FROM debian:12
ENV SOURCE_DATE_EPOCH=1234567890
RUN apt-get install -y build-essential
COPY . /app
RUN make build
# Le hash du binaire doit être identique sur toutes les machines
4. Monitoring des mainteneurs :
- Alerter si un mainteneur push du code obfusqué
- Exiger 2+ reviewers pour les packages critiques
- Audit régulier des permissions GitHub/GitLab
Études de Cas : Quand TwoFace Rencontre Le Réel
Cas #1 : Ransomware Dans Une Banque
Contexte : Banque européenne, 50,000 employés, infrastructures Linux.
Attaque :
1. Spearphishing sur DevOps → Télécharge "outil de monitoring"
2. TwoFace activé uniquement sur serveurs avec /var/lib/postgresql/
3. Chiffrement AES-256 de 15 TB de données clients
4. Rançon : 50 BTC ($3.2M)
Timeline :
- J+0 : Infection
- J+22 : Activation (après 3 semaines dormant)
- J+22+2h : Détection (trop tard, données chiffrées)
Coût total : $47M (rançon + downtime + amendes GDPR)
Ce qui aurait pu empêcher :
- ✅ Falco aurait détecté memfd_create + activité PostgreSQL anormale
- ✅ Backups isolés (pas sur même réseau)
- ✅ EDR Linux avec behavioral analysis
Cas #2 : Cyberespionnage Industriel
Cible : Fabricant de semi-conducteurs (secrets R&D valant $2B)
Attaque APT :
1. Compromission d'un package NPM utilisé en interne
2. TwoFace déclenché uniquement sur machines avec /opt/cad_software/
3. Exfiltration silencieuse pendant 14 mois
4. 450 GB de plans techniques volés
Attribution : Gelsemium APT (Chine) selon ESET
Leçon : Les APT privilégient la discrétion long-terme vs ransomware rapide.
L'Éthique de Publier TwoFace en Open-Source
Le Débat
Synacktiv a publié TwoFace sur GitHub. Controverse immédiate :
Arguments POUR :
- 🔓 Transparence : Les défenseurs doivent connaître les techniques
- 🛡️ Amélioration des défenses : Force les éditeurs AV à s'adapter
- 📚 Éducation : Red teams et chercheurs en sécurité
- ⚖️ Égalité : Les attaquants ont déjà ces techniques (black market)
Arguments CONTRE :
- 💣 Prolifération : Script kiddies peuvent l'utiliser
- ⏱️ Temps de réaction : Les défenseurs sont toujours en retard
- 🎯 Facilitation d'attaques : Baisse la barrière d'entrée
Position de Synacktiv :
> "Les techniques d'évasion évoluent. Cacher TwoFace ne le fait pas disparaître. Les APT l'ont déjà. Publier permet aux défenseurs de se préparer."
Utilisations Légitimes
Red Team / Pentest :
# Contrat de pentest signé avec Client X
$ twoface build --uuid $CLIENT_SERVER_UUID \
--payload ./pentest_backdoor.elf
Recherche en sécurité :
- Développement de nouvelles heuristiques AV
- Amélioration des sandboxes (multi-UUID testing)
- Publications académiques sur l'évasion
Formation cybersécurité :
- Labs pratiques pour analystes malware
- Sensibilisation des développeurs
- Exercices de réponse à incident
Les Prochaines Évolutions
TwoFace 2.0 : Ce Qui Vient
Techniques probables dans les 6-12 mois :
1. IA-powered context detection :
# ML model détermine si env = sandbox ou prod
if is_sandbox_ml_model(environment_features):
behave_clean()
else:
deploy_malware()
2. Blockchain-based C2 :
# C&C indétectable via smart contracts
commands = read_ethereum_contract("0xDEADBEEF")
3. eBPF-based rootkits :
// Rootkit dans le kernel via eBPF (privileged)
// Invisible pour les outils userspace
L'IA Au Service Des Attaquants
GPT-4 et Claude pour automatiser TwoFace :
Prompt: "Génère un malware TwoFace qui :
- Cible les serveurs Kubernetes (détecte /var/lib/kubelet/)
- Exfiltre les secrets K8s via DNS
- S'auto-détruit après 30 jours"
Temps pour créer un malware fonctionnel :
- 2020 : 2-3 semaines (codage manuel)
- 2025 : 2-3 heures (avec IA)
Conclusion : L'Asymétrie Attaquant/Défenseur
La dure réalité :
- Un attaquant a besoin de réussir une fois
- Un défenseur doit réussir à chaque fois
TwoFace illustre cette asymétrie parfaitement :
- Coût de développement : ~2 semaines
- Coût de défense complète : Réarchitecture de la stack sécurité
Ce que nous devons retenir :
1. Les sandboxes ne suffisent plus : Analyse multi-environnements obligatoire
2. Linux est devenu une cible prioritaire : 87% des serveurs cloud
3. Supply chain = maillon faible : XZ Utils n'est que le début
4. Behavioral analysis > Signatures : Monitorer les comportements, pas les hash
5. Zero Trust jusqu'au bout : Même les binaires "propres" sont suspects
Recommandations finales :
Priority_1_Immediate:
- Deploy Falco/Wazuh sur tous les serveurs Linux
- Activer auditd avec règles memfd_create
- Audit complet des dépendances (Syft + Grype)
Priority_2_Week:
- Threat intel feeds (MITRE ATT&CK Linux)
- Playbooks réponse à incident TwoFace-like
- Formation équipes sur malwares contextuels
L'ère du malware contextuel ne fait que commencer. TwoFace prouve qu'un chercheur avec 2 semaines et Rust peut créer un outil quasi-indétectable. Les APT avec des budgets de millions et des années de R&D ont déjà des variantes bien plus sophistiquées.
La course est lancée. Les défenseurs doivent évoluer, vite.
Vos serveurs Linux sont-ils prêts ?
---
Ressources :
- [TwoFace GitHub](https://github.com/synacktiv/twoface) (Synacktiv)
- [CVE-2024-3094 XZ Backdoor](https://nvd.nist.gov/vuln/detail/CVE-2024-3094) (NIST)
- [Linux Malware Report 2025](https://tuxcare.com/blog/linux-malware/) (TuxCare)
- [MITRE ATT&CK Linux](https://attack.mitre.org/matrices/enterprise/linux/) (MITRE)
- [Falco Rules](https://github.com/falcosecurity/rules) (Falco Security)