SSTIC 2013 - Binaires polyglottes

Par Ange Albertini

Les exécutables PE lors de la compromission d’un utilisateur sont embarqués dans divers formats de fichiers pour échapper aux anti-virus. Pour bien se défendre, il faut pouvoir détecter un fichier PE dans divers formats (pdf, html, java, etc…). La bonne compréhension du format PE permet de mieux détecter lorsqu’un exécutable windows est embarqué dans un autre fichier.

Concrètement, il est possible de placer un fichier PE contenant du HTML et exécutable sous n’importe quel navigateur du moment que le navigateur trouve sa balise <HTML>. Dans un fichier PDF, il est possible de placer le PE dans un objet pdf factice n’importe ou dans le document. Pour Java, vu que c’est un .zip, on peut mettre le PE n’importe où. Et donc si on veut combiner tout ces fichiers en un et conserver un fichier valide en pdf, en html, en PE et en .zip, il suffit de les assembler dans le bon ordre.

Bon, ça c’est trop facile, alors histoire de bien faire crasher les parsers, l’orateur à joué avec des fonctions peu documentées, et le même fichier génère des rendus graphiques différents, et des comportements différents. Il est donc envisageable de placer la charge utile dans une section du document qui ne sera exécuté que par un lecteur pdf particulier.

En jouant sur la structure de ces formats et les erreurs de parsing, l’orateur à ainsi créé des fichiers multi-formats qui viennent paumer les parsers des anti-virus qui catégorisent alors un exécutable comme un pdf. Le laxisme sur les formats des fichiers est donc un fléau pour la sécurité, et une aubaine pour les attaquants.