11/04/2025
Tu reçois un fichier PDF. Tu l’ouvres. Et… c’est Word qui se lance. Ça semble pas trop problématique, N’est-ce pas ?
Plein de personnes se diraient => “ top, même pas besoin de l’importer, Windows, c’est vraiment chouette en 2025 !”
En vérité, vous feriez mieux d’éteindre votre système dans les cinq secondes…
Ce que je vous décris, ce n’est pas anodin.
Cette technique, repérée en juillet dernier, s’appelle MalDoc in PDF.
L’idée ? Prendre un fichier Word malveillant et le déguiser en PDF pour tromper les outils de détection.
⸻
Comment ça marche ?
C’est un vrai travail d’illusionniste.
L’attaquant crée un fichier hybride, pour le comprendre, il faut dumper les octets avec hexdump par exemple:
1. Il commence par une en-tête classique de PDF : %PDF.
2. Ensuite, il colle un fichier Word (en MHT), contenant une macro.
3. L’extension du fichier reste .doc → Windows le lance avec Word.
4. Word reconnaît le format MHT → il lit la macro.
Et si les macros sont activées ?
Le code s’exécute direct. Sans prévenir. Sans pop-up. Rien.
Normal, c’est une macro !
Derrière, vous imaginez bien que le code exécuter n’est pas là pour nettoyer votre machine des malware que vous avez accumulé en entraînant sur des forums de partage de torrents…
L’objectif, c’est de voler vous donner, installer un accès persistant sur votre machine, ou autre joyeuseté du genre:
• Les outils classiques comme pdfid ne détectent rien d’anormal.
• Les sandbox ne réagissent pas.
• Les antivirus laissent passer.
Le fichier est perçu comme un PDF… mais c’est un trojan déguisé en Word.
C’est malin. Discret. Presque élégant, si ce n’était pas aussi dangereux.
⸻
Comment s’en protéger ?
Heureusement, certains outils ne sont pas dupes :
• OLEVBA peut analyser le fichier et repérer les structures Word + la présence de macros, même masquées.
• Des règles YARA personnalisées peuvent aussi faire le job.
Par exemple :
rule malware_MaldocinPDF {
strings:
$docfile2 = "" ascii nocase
$xlsfile2 = "" ascii nocase
$mhtfile0 = "mime" ascii nocase
$mhtfile1 = "content-location:" ascii nocase
$mhtfile2 = "content-type:" ascii nocase
condition:
(uint32(0) == 0x46445025) and
(1 of ($mhtfile*)) and
((1 of ($docfile*)) or (1 of ($xlsfile*)))
}
⸻
Et si les macros sont désactivées ?
Pas d’exécution. Pas de compromission, pour l’instant.
Mais la vraie faiblesse, c’est le contournement des outils d’analyse.