Pillole di #MalwareAnalysis
La struttura #PEB (Process Environment Block)
La PEB viene utilizzata da #Windows per gestire il processo che la detiene. Questa struttura fa parte di una struttura più grande chiamata #EPROCESS.
I campi della PEB non sono tutti documentati da parte di Microsoft in quanto le informazioni contenute dovrebbero (il condizionale è d’obbligo) essere utilizzate solo dal sistema operativo.
Spesso i #malware per evitare di essere studiati accedono ad alcuni campi nella PEB per capire se in quel momento vengono analizzati da un debugger e se la risposta è positiva si disattivano o comunque eseguono azioni per ingannare gli analisti.
Ma come fanno? Semplice!
La PEB si trova all’indirizzo di memoria FS:[0x30h] ed in particolare all’offset 0x02h vi è un campo chiamato #BeingDebugged che è 1 se attualmente il software viene analizzato da un debugger.
Lo stesso accade per il campo #NTFlags all’indirizzo 0x68h che in quel caso assume il valore 0x70h Un semplice codice Assembly che mette il valore BeingDebugged nello stack è il seguente:
mov eax, fs[0x30h] // faccio puntare eax al PEB
mov ecx, [eax+2] // in ecx metto il valore BeingDebugged
push ecx // metto ecx nello stack
Per vedere la Peb di un processo basta farlo eseguire dentro #WindDBG ed alla riga di comando dare il comando !Peb come vi faccio vedere nella figura in calce. La Peb può anche essere utilizzata per nascondere il nome delle funzioni importate rendendo impossibile l’utilizzo dei comandi strings o floss, ma questo ve lo spiego nel prox post ;-)
#cybersecurityUP #cybersecurity #zerodays
Pillole di #MalwareAnalysis
Mascherare un processo #Windows utilizzando la #PEB
Ho già spiegato in un post precedente cosa è la PEB e a cosa serve.
Tra i vari campi ne esiste uno chiamato #ProcessParameters, che si trova all’offset 0x020h, e che è a sua volta una struttura.
All’interno di questa struttura esiste il campo #ImagePathName, all’offset 0x60h, che viene utilizzato per memorizzare il path del file che ha originato al processo.
Ora a cosa può servire questa informazione?
Può essere utilizzata per modificare l'icona visualizzata dal processo all’interno di Task Monitor o Process Explorer.
Questo naturalmente è utile ad un processo, come un malware, che si vuole nascondere ad una analisi con uno degli strumenti che vi ho appena menzionato.
Se poi vogliamo modificare anche il nome visualizzato basta accedere al campo CommandLine, all’offset 0x70h
Si può utilizzare WinDbg per accedere a questi campi, ma molto più semplicemente si può utilizzare la primitiva GetProcAddress() applicata su NTDLL e sulla procedura NtQueryInformationProcess.
Questa primitiva permetterà di accedere alla Peb e in particolare a PebBaseAddress->ProcessParameters->ImagePathName.buffer consentendone la modifica.