Visualizzazione post con etichetta file2vbs. Mostra tutti i post
Visualizzazione post con etichetta file2vbs. Mostra tutti i post

martedì 9 settembre 2014

BPMTK: Basic Process Manipulation Tool Kit


BPMTK è un utility open source creata da Didier Stevens (http://blog.didierstevens.com/) e appositamente pensata per la manipolazione dei processi in esecuzione in ambiente Windows.

BPMTK rappresenta un valido sostituto di gpdisable ormai non più supportato e , anzi, ne migliora diverse caratteristiche. L’utility permette di effettuare il dump della memoria, ricerche e sostituzioni all’interno della memoria utilizzata dai processi, DLL injection e molto altro.
A partire da Windows Vista, Microsoft ha cercato di rimediare e proteggere i suoi sistemi operativi da questo tipo di vulnerabilità introducendo il concetto di processo protetto: un tipo di processo che viene eseguito in uno spazio di memoria protetto dagli altri processi. Un processo protetto per essere considerato tale deve essere firmato da Microsoft.

Di seguito mostrerò alcuni esempi su come bypassare diverse protezioni utilizzando BPMTK.

Bypassare le Software Restriction Policies

Le Group Policy (in italiano conosciute come Criteri di Gruppo) vengono utilizzare per la configurazione e la gestione di un sistema Microsoft e in particolare vengono utilizzate in Active Directory. Le Group Policy permettono la configurazione di ogni aspetto del funzionamento delle workstation collegate alla rete aziendale, ad es. possiamo impedire all’utente di effettuare alcune operazioni o utilizzare alcuni programmi. 

Le Software Restriction Policies (SRP) sono una funzionalità delle Group Policy (GPO) che permettono all’amministratore di imporre restrizioni sul software che l’utente può eseguire. Le GPO vengono applicate attraverso le funzioni contenute in advapi32.dll. Diversi programmi, tra cui explorer.exe, richiamano tale DLL. Quando un utente tenta di eseguire un programma, explorer.exe, tramite le funzioni messe a disposizione da advapi32.dll, verifica se è autorizzato dalle GPO. Un ruolo importante in questa verifica è svolto dalla chiave TransparentEnabled. La presenza di tale chiave indica che le SRP sono attive e vanno verificate.  Un’utenza limitata non ha i permessi per andare a modificare le SRP pertanto sembrerebbe che il sistema non possa essere bypassato ma c’è un particolare. L’utente può modificare il codice contenuto all’interno del processi su cui ha i permessi come ad es.  explorer.exe. Cosa possiamo fare affinchè explorer.exe non vada ad interrogare la chiave TransparentEnabled? Dobbiamo fare in modo che la chiave TransparentEnabled non venga trovata dalle funzioni di advapi32.dll e quindi facendo credere al sistema di verifica che non è impostata alcuna SRP.

A questo punto interviene la nostra utility:
  • Scarichiamo l’utility da http://www.didierstevens.com/files/software/bpmtk_V0_1_6_0.zip
  • Scompattiamo il file in una cartella
  • Creiamo un file di testo e nominiamolo bypass-SRP.txt
  • All’interno del file copiamo il seguente codice:
    dll-name advapi32.dll
    search-and-write module:. unicode:TransparentEnabled ascii:X
  • Salviamo il file nella cartella contenente BPMTK;
  • Dal prompt dei comandi spostiamoci nella cartella dove abbiamo salvato il file .txt.
  • Eseguiamo il seguente comando:
    bpmtk bypass-SRP.txt


Con i comandi indicati all’interno del file .txt non facciamo altro che dire a BPMTK di cercare, in tutti i processi che caricano advapi32.dll, la stringa TransparentEnabled e sostituire la T con la X. Così facendo il nome della chiave diventerà XransparentEnabled.

Tuttavia questo procedimento non disabilita le SRP per i processi già in esecuzione. Le SRP, infatti, una volta caricate dal registro vengono memorizzate nella cache in modo da evitare continui accessi al registro che rallenterebbe l’esecuzione. Per rendere non valida la cache e quindi forzare la lettura dal registro bisogna aspettare un update delle GPO oppure forzarle con il comando gpupdate /force (se si tratta di utente limitato probabilmente non potrà forzare l’update delle GPO).
Anche in questo caso l’utility BPMTK ci viene incontro. La memorizzazione nella cache delle SRP viene controllata dalla variabile _g_ bInitializedFirstTime presente in advapi32.dll. Nella versione 5.1.2600.2180 di advapi32.api.dll la variabile è memorizzata all’indirizzo 77E463C8. Assegnando a tale variabile il valore 0 si rende non valida la cache. Modifichiamo il nostro file bypass-SRP.txt in modo tale che contenga le seguenti istruzioni:


dll-name advapi32.dll
search-and-write module:. unicode:TransparentEnabled ascii:X
write version:5.1.2600.2180 hex:77E463C8 hex:00

E se l’utente limitato non dispone di permessi per eseguire BPMTK?

Bypassare le Software Restriction Policies tramite BPMTK e le macro di Excel

Nel caso in cui l’utente non disponga i necessari permessi per eseguire BPMTK ma gli è permesso di eseguire macro in Excel allora possiamo sfruttare il VBScript.

In questo caso lo stesso autore di BPMTK ci mette a disposizione sul proprio sito una sua utility creata in python che permette di includere un file .exe o .dll in un file .vbs. È possible scaricare il programma al seguente link: www.didierstevens.com/files/software/file2vbscript_v0_3.zip

Per poter eseguire il programma è necessario aver installato un interprete python. Possiamo scaricare Python da www.python.it/download/

Una volta scompattato il file file2vbscript_v0_3.zip  e installato python copiamo il file file2vbscript.py nella stessa cartella del file bpmtk.exe.
Dal prompt dei comandi spostiamoci nella cartella che contiene i 2 file e digitiamo il seguente comando

file2vbscript.py -o BPMTK.exe nostroScript.vbs

Il programma non fa altro che eseguire il dump del file .exe e memorizzarlo all’interno del file .vbs.
Nel caso in cui volessimo eseguire il dump di una dll allora l’opzione da utilizzare è –l come mostrato di seguito:

file2vbscript -l bpmtk.dll bpmtk.vbs

Ora che abbiamo visto come includere una dll o un file eseguibile all’interno di un VBS abbiamo un altro problema: come facciamo ad includere il file bypass-SRP.txt visto precedentemente all’interno del nostro file VBS?

Basta eseguire il comando

bpmtk bypass-SRP.txt bpmtk-cmd.exe


Con questo comando non facciamo altro che eseguire una copia del file bpmtk.exe con incluso il file di testo. Il file risultante, come indicato nel comando, è bpmtk-cmd.exe.

Per quanti non dispongono di Python e non vogliono installarlo, ho realizzato un semplice programmino in C# (senza troppe pretese) per raggiungere lo stesso scopo. Nella realizzazione non mi sono discostato molto dal programma di Didier Stevens. Il codice C# è molto semplice e presenta diversi aspetti che possono essere migliorati ma per il nostro scopo va più che bene.

Da QUI potete scaricare il sorgente e il programma compilato.

Il programma, essendo già compilato, non necessita dell’installazione di Python inoltre presenta un’interfaccia grafica che ne facilita l’utilizzo e consente di integrare, insieme ad un file .exe, anche un file txt all’interno del vbs. Lo svantaggio sta nel fatto che è più lento nell’eseguire l’operazione di Dump.
File2VBS in C#
FIG 1 - File2VBS in C#

Eseguendo il mio programma appare un’interfaccia grafica dove andremo a selezionare l’output che ci interessa:
  • Office: se ci interessa un output da poter utilizzare come macro all'interno di un'applicazione Office (più avanti vedremo come utilizzarlo in Excel);
  • Library: se stiamo eseguendo il dump di una DLL;
  • Stand Alone: se ci interessa un VBS da eseguire autonomamente attraverso WSH;
  • Don’t execute: non esegue il file di dump generato.
Dopodiché specifichiamo il file che intendiamo utilizzare (exe o dll), un eventuale file di testo da integrare nel VBS e il nome del file di output. 

Clicchiamo su Proceed e attendiamo che la progress bar scompaia. A questo punto, una volta creato il nostro file VBS, non ci resta che inserirlo all’interno di Excel e farlo eseguire come Macro.

Creare una macro Excel 2013 con il file VBS

Il nostro file VBS può essere utilizzato all’interno di Excel come macro. Possiamo fare in modo che quando il file Excel venga aperto la macro venga eseguita automaticamente. Di seguito mostro i passaggi da eseguire per Excel 2013:


  • Avviare Excel 2013 e creare un nuovo foglio di lavoro vuoto;
  • Dal menu File selezionare Opzioni quindi cliccare su Personalizza barra multifunzione;
  • Nel riquadro Schede principali selezionare la casella relativa alla scheda Sviluppo

Schede principali - Sviluppo
FIG 2 - Schede principali - Sviluppo

  • A questo punto tra i ribbon di Excel troviamo anche la voce Sviluppo. Aprire il ribbon Sviluppo e cliccare sull’icona Sicurezza Macro.

FIG 3 - Sicurezza Macro

  • Selezionare Attiva tutte le macro (scelta non consigliata; potrebbe venire eseguito codice pericoloso) e confermiamo su OK
  • Cliccare sull’icona Visual Basic (oppure utilizziamo la combinazione ALT+F11)
  • Nella riquadro Progetto - VBAProject fare clic con il pulsante destro del mouse sull'oggetto Questa_cartella_di_lavoro (ThisWorkbook in inglese) e quindi selezionare Visualizza codice
  • Nel riquadro a destra, incollare il codice presente all’interno del file VBS prodotto da File2VBS
  • Se vogliamo che il codice venga eseguito all'apertura del file allora nell'elenco Oggetto, sopra alla finestra Codice, selezionare Workbook. Per l'evento Open verrà creata automaticamente una routine vuota nominata Workbook_Open(). Aggiungere alla procedura la chiamata a DoIt in modo che appaia come la seguente:
 
Private Sub Workbook_Open()
 DoIt
End Sub

Excel 2013 VBA
FIG 4 - Excel 2013 VBA



Bypassare le retrizioni relative all’esecuzione del prompt dei comandi

Solitamente gli amministratori di sistema disabilitano l’accesso al prompt dei comandi (CMD.EXE) da parte degli utenti. Tale restrizione non viene applicata con una Software Restriction Policy (SRP) bensì con una GPO dedicata. 

Quando viene eseguito cmd.exe va a verificare la presenza della chiave di registro DisableCMD. Se tale chiave è presente allora cmd.exe non verrà eseguito e, al suo posto, apparirà un messaggio che avverte l’utente della restrizione.

Con BPMTK è possibile bypassare anche questo tipo di restrizione:
  • Creiamo un file di testo e nominiamolo bypass-CMD.txt
  • All’interno del file copiamo il seguente codice:
    start cmd.exe 
    search-and-write module:.  unicode:DisableCMD hex:41
  • Salviamo il file nella cartella contenente BPMTK;
  • Dal prompt dei comandi spostiamoci nella cartella dove abbiamo salvato il file .txt.
  • Eseguiamo il seguente comando:
    bpmtk bypass-CMD.txt

Praticamente andiamo ad eseguire il prompt dei comandi (CMD.EXE) e andiamo ad intercettare la chiave DisableCMD che andremo a rinominare in AisableCMD in modo da non farla trovare a CMD.EXE.






Con questo termino il presente articolo. BPMTK offre numerose possibilità che non è possibile trattare in un singolo articolo pertanto è probabile che in futuro ritornerò sull'argomento.