
Première backdoor open source et publiquement disponible pour le System Management Mode sur les plateformes basées sur UEFI. Idéale comme terrain de jeu polyvalent pour diverses expériences SMM.
SMM backdoor pour plateformes basées sur UEFI
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Ceci est un projet hérité et abandonné, pour la version actuelle du backdoor, consultez la page du projet SMM Backdoor Next Gen et sa documentation :
https://github.com/Cr4sh/SmmBackdoorNg
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Pour plus d'informations sur ce projet, veuillez lire l'article suivant :
http://blog.cr4.sh/2015/07/building-reliable-smm-backdoor-for-uefi.html
Contenu du dépôt :
SmmBackdoor.py -- Programme Python qui permet d'infecter l'image PE d'un driver UEFI DXE avec le code du backdoor, de communiquer avec le backdoor installé pour lire la SMRAM et d'effectuer d'autres opérations utiles.
SmmBackdoor/ -- code source de la partie UEFI qui s'exécute en mode de gestion système.
SmmBackdoor.efi, SmmBackdoor.pdb -- binaire de la partie UEFI et ses symboles de débogage.
smm_call/ -- programme Linux de preuve de concept qui interagit avec le backdoor installé pour obtenir les privilèges root pour son processus.
Pour compiler le projet SmmBackdoor, vous devez disposer d'une machine Windows avec Visual Studio 2008 et le code source d'EDK2 (https://github.com/tianocore/edk2).
Instruction pas à pas :
Copiez le sous-répertoire SmmBackdoor dans le répertoire du code source d'EDK2.
Modifiez le fichier Conf/target.txt et définissez la valeur de la propriété ACTIVE_PLATFORM sur OvmfPkg/OvmfPkgX64.dsc.
Modifiez OvmfPkg/OvmfPkgX64.dsc et ajoutez les lignes suivantes à la fin du fichier :
#
# 3-rd party drivers
#
SmmBackdoor/SmmBackdoor.inf {
<LibraryClasses>
DebugLib|OvmfPkg/Library/PlatformDebugLibIoPort/PlatformDebugLibIoPort.inf
MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf
}
4. Lancez l'invite de commandes Visual Studio 2008 et exécutez cd vers le répertoire EDK2.
Exécutez Edk2Setup.bat --pull pour configurer l'environnement de compilation et télécharger les binaires requis.
cd SmmBackdoor && build
Après la compilation, le fichier image PE résultant sera créé dans Build/OvmfX64/DEBUG_VS2008x86/X64/SmmBackdoor/SmmBackdoor/OUTPUT/SmmBackdoor.efi
Pour exécuter SmmBackdoor.efi en tant que charge utile d'infection sur l'exemple de la carte mère Intel DQ77KB :
Extrayez le firmware de la carte mère à l'aide d'un programmateur SPI matériel.
Ouvrez l'image flash extraite dans UEFITool.
Extrayez l'image PE du fichier FFS avec GUID = 26A2481E-4424-46A2-9943-CC4039EAD8F8 et enregistrez-la dans le fichier extracted.bin.
Infectez l'image extraite avec SmmBackdoor.efi à l'aide de SmmBackdoor.py :
$ python SmmBackdoor.py --infect extracted.bin --output infected.bin --payload SmmBackdoor.efi
Dans UEFITool, remplacez l'image PE d'origine par infected.bin.
Enregistrez l'image flash modifiée dans un fichier et écrivez-la dans la ROM de la carte mère avec le programmateur.
Le backdoor dispose également de capacités de sortie de débogage qui permettent d'afficher les messages de débogage de la phase DXE à l'écran et de recevoir les messages de débogage de la phase runtime via le port COM.
Pour utiliser SmmBackdoor.py, vous devez installer la bibliothèque Python pefile (https://pypi.python.org/pypi/pefile) et le framework CHIPSEC (https://github.com/chipsec/chipsec), y compris les liaisons Python.
Commandes prises en charge :
SmmBackdoor.py --infect <source_path> --output <dest_path> --payload <payload_path> - Infecte l'image PE du driver DXE avec le code de backdoor spécifié.
SmmBackdoor.py --test - Vérifie la présence du backdoor et affiche les informations d'état de la structure BACKDOOR_INFO.
SmmBackdoor.py --dump-smram - Extrait toutes les régions SMRAM disponibles dans des fichiers.
SmmBackdoor.py --read-phys
- Affiche un dump hexadécimal de la page de mémoire physique à l'adresse donnée.SmmBackdoor.py --read-virt
- Affiche un dump hexadécimal de la page de mémoire virtuelle à l'adresse donnée.SmmBackdoor.py --timer-enable - Active le SMI périodique du timer requis pour smm_call (activé par défaut).
SmmBackdoor.py --timer-disable - Désactive le SMI périodique du timer.
Utilisation de smm_call :
smm_call [<arg_1> [<arg_2>]] - Envoie le code de contrôle et les arguments spécifiés au backdoor SMM.
-
smm_call --privesc - Demande au backdoor d'accorder les privilèges root au processus appelant et d'exécuter un shell de commandes.
Veuillez noter que ce code a été testé uniquement avec la carte mère Intel DQ77KB. Vous pouvez essayer de l'exécuter sur tout autre matériel compatible UEFI, mais certaines fonctionnalités du backdoor pourraient ne pas fonctionner.
Écrit par :
Dmytro Oleksiuk (aka Cr4sh)