
Primo backdoor System Management Mode open source e pubblicamente disponibile per piattaforme basate su UEFI. Ottimo come terreno di gioco generico per vari esperimenti SMM.
Backdoor SMM per piattaforme basate su UEFI
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Questo è un progetto legacy abbandonato, per la versione corrente della backdoor consulta la pagina del progetto SMM Backdoor Next Gen e la sua documentazione:
https://github.com/Cr4sh/SmmBackdoorNg
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Per maggiori informazioni su questo progetto, leggi il seguente articolo:
http://blog.cr4.sh/2015/07/building-reliable-smm-backdoor-for-uefi.html
Contenuto del repository:
SmmBackdoor.py -- Programma Python che consente di infettare l'immagine PE di un driver DXE UEFI con il codice della backdoor, comunicare con la backdoor installata per leggere la SMRAM e fare altre cose utili.
SmmBackdoor/ -- Codice sorgente della parte UEFI che viene eseguita in System Management Mode.
SmmBackdoor.efi, SmmBackdoor.pdb -- Binario della parte UEFI e i relativi simboli di debug.
smm_call/ -- Programma Linux proof of concept che interagisce con la backdoor installata per ottenere privilegi di root per il proprio processo.
Per compilare il progetto SmmBackdoor è necessario disporre di una macchina Windows con Visual Studio 2008 e il codice sorgente di EDK2 (https://github.com/tianocore/edk2).
Istruzioni passo passo:
Copiare la sottodirectory SmmBackdoor nella directory del codice sorgente di EDK2.
Modificare il file Conf/target.txt e impostare il valore della proprietà ACTIVE_PLATFORM su OvmfPkg/OvmfPkgX64.dsc.
Modificare OvmfPkg/OvmfPkgX64.dsc e aggiungere le seguenti righe alla fine del file:
#
# Driver di terze parti
#
SmmBackdoor/SmmBackdoor.inf {
<LibraryClasses>
DebugLib|OvmfPkg/Library/PlatformDebugLibIoPort/PlatformDebugLibIoPort.inf
MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf
}
4. Eseguire il Prompt dei comandi di Visual Studio 2008 e fare cd nella directory EDK2.
Eseguire Edk2Setup.bat --pull per configurare l'ambiente di compilazione e scaricare i binari richiesti.
cd SmmBackdoor && build
Dopo la compilazione, il file immagine PE risultante verrà creato in Build/OvmfX64/DEBUG_VS2008x86/X64/SmmBackdoor/SmmBackdoor/OUTPUT/SmmBackdoor.efi
Per eseguire SmmBackdoor.efi come payload dell'infector, ad esempio sulla scheda madre Intel DQ77KB:
Scaricare il firmware della scheda madre utilizzando un programmatore SPI hardware.
Aprire l'immagine flash scaricata in UEFITool.
Estrarre l'immagine PE del file FFS con GUID = 26A2481E-4424-46A2-9943-CC4039EAD8F8 e salvarla nel file extracted.bin.
Infettare l'immagine estratta con SmmBackdoor.efi usando SmmBackdoor.py:
$ python SmmBackdoor.py --infect extracted.bin --output infected.bin --payload SmmBackdoor.efi
In UEFITool sostituire l'immagine PE originale con infected.bin.
Salvare l'immagine flash modificata in un file e scriverla nella ROM della scheda madre con il programmatore.
La backdoor dispone anche di funzionalità di output di debug che consentono di visualizzare i messaggi di debug della fase DXE sullo schermo e ricevere i messaggi di debug della fase runtime tramite porta COM.
Per usare SmmBackdoor.py è necessario installare la libreria Python pefile (https://pypi.python.org/pypi/pefile) e il framework CHIPSEC (https://github.com/chipsec/chipsec) inclusi i binding Python.
Comandi supportati:
SmmBackdoor.py --infect <source_path> --output <dest_path> --payload <payload_path> - Infetta l'immagine PE del driver DXE con il codice della backdoor specificato.
SmmBackdoor.py --test - Verifica la presenza della backdoor e stampa le informazioni di stato dalla struttura BACKDOOR_INFO.
SmmBackdoor.py --dump-smram - Scarica tutte le regioni SMRAM disponibili nei file.
SmmBackdoor.py --read-phys
- Stampa il dump esadecimale della pagina di memoria fisica all'indirizzo indicato.SmmBackdoor.py --read-virt
- Stampa il dump esadecimale della pagina di memoria virtuale all'indirizzo indicato.SmmBackdoor.py --timer-enable - Abilita la SMI timer periodica richiesta per smm_call (di default è abilitata).
SmmBackdoor.py --timer-disable - Disabilita la SMI timer periodica.
Utilizzo di smm_call:
smm_call [<arg_1> [<arg_2>]] - Invia il codice di controllo e gli argomenti specificati alla backdoor SMM.
-
smm_call --privesc - Chiede alla backdoor di concedere privilegi di root al processo chiamante e avvia una shell di comandi.
Tieni presente che questo codice è stato testato solo con la scheda madre Intel DQ77KB. Puoi provare a eseguirlo su qualsiasi altro hardware compatibile con UEFI, ma alcune funzionalità della backdoor potrebbero non funzionare.
Scritto da:
Dmytro Oleksiuk (alias Cr4sh)