venerdì 14 novembre 2014

Windows Quick Tip: Verificare la data di installazione originale di Windows

Per verificare la data di installazione di Windows possiamo utilizzare il comando SystemInfo dal prompt dei comandi. SystemInfo ci fornisce molte informazioni sul sistema sia relative al software (versione sistema operativo, aggiornamenti installati, nome della postazione, data di installazione di Windows, ecc.) sia relative all'hardware(produttore, modello, ram installata ecc.).
Le numerose informazioni visualizzate dal comando potrebbero essere difficili da consultare nella finestra del prompt dei comandi. Potremmo pensare di salvare tutte le informazioni all'interno di un file di testo in modo da visualizzarle comodamente con un editor di testo come ad es. blocco note. Per dirottare l'output di SystemInfo all'interno di un file di testo possiamo utilizzare il seguente comando:
systeminfo >c:\informazioni-sistema.txt

se vogliamo visualizzare solo la data di installazione originale di Windows dobbiamo utilizzare il comando:
systeminfo | find /I "Data di installazione originale"

per la versione in inglese di windows:
systeminfo | find /I "Original Install Date"


SystemInfo
FIG 1 - SystemInfo

giovedì 13 novembre 2014

Windows Quick Tip: Bypassare la finestra di dialogo di conferma eliminazione file

I file e le cartelle che cancelliamo in ambiente Windows vengono spostati, per default, all'interno del cestino. Quando cancelliamo normalmente un file o una cartella (senza usare la cancellazione definitiva tramite la combinazione di tasti SHIFT+CANC), Windows visualizza una finestra di dialogo che ci chiede di confermare o annullare l'operazione di cancellazione.


Finestra di dialogo Elimina file
FIG 1 - Finestra di dialogo Elimina file
Se vogliamo disabilitare la finestra di dialogo di conferma possiamo procedere nel seguente modo:
  • Cliccare con il tasto destro del mouse sull'icona del cestino di windows
  • Dal menu contestuale selezionare Proprietà
  • Togliere la spunta alla voce Visualizza conferma eliminazione e cliccare su Applica per rendere effettiva la modifica
Visualizza conferma eliminazione
FIG 2 - Visualizza conferma eliminazione
Da adesso in poi non ci verrà più richiesta la conferma di eliminazione ma i file cancellati continueranno ad essere spostati all'interno cestino.

mercoledì 12 novembre 2014

Gmail: Visualizzare solo i messaggi da leggere


Chi riceve molte email ogni giorno e non riesce a leggerle tutte può presto ritrovarsi con email da leggere arretrate difficili da individuare.
In questi casi può essere utile avere a disposizione una funzione/filtro che ci consenta di visualizzare solo le email da leggere. Apparentemente gmail non fornisce tale funzionalità.
Per ottenere questa funzione possiamo avvalerci dell'ottimo motore di ricerca integrato in gmail. All'interno della casella di ricerca basta digitare is:unread per ottenere tutti i messaggi non letti presenti sulla nostra casella di posta. Se vogliamo solo i messaggi non letti di una particolare cartella basta aggiungere in:<nome cartella>. Ad es se vogliamo visualizzare tutti i messaggi non letti presenti in posta in arrivo basta digitare is:unread in:inbox

Il completamento automatico ci viene in contro suggerendoci varie opzioni. Se utilizziamo spesso la ricerca possiamo salvare la pagina nei preferiti/segnalibri del browser.


FIG 1 - Gmail:messaggi da leggere

lunedì 10 novembre 2014

Windows Quick Tip: Disabilitare la schermata di blocco in Windows 8 e 8.1

Se vogliamo disabilitare la schermata di blocco presente in Windows 8.1 (e Windows 8) possiamo adottare uno dei seguenti metodi

Metodo 1
Il primo metodo che illustrerò, consiste nell'agire manualmente all'interno del registro di configurazione del sistema operativo. Questo è l'unico metodo adottabile sui sistemi su cui non è installata la versione Pro o Enterprise di Windows 8/8.1.
  • Il primo passo da seguire è quello di avviare l'editor del registro di sistema. Tramite la combinazione di tasti WIN+R viene aperta la finestra di dialogo Esegui. Digitare regedit seguito da invio.
  • Posizionarsi su
    HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows
  • Creare, se non presente, la chiave Personalization
  • Spostarsi all'interno della chiave Personalization quindi creare un nuovo valore DWORD (32-bit), nominarlo in NoLockScreen e valorizzarlo ad 1
Cliccando sul link di seguito è possibile scaricare i file .reg per abilitare/disabilitare la schermata di blocco
DOWNLOAD


Metodo 2
Il secondo metodo consiste nell'utilizzo dell'Editor Criteri di gruppo locali.
  • Premere WIN+R e digitare gpedit.msc seguito da invio per avviare l'Editor Criteri di gruppo locali.
  • Spostarsi su Criteri Computer locale->Configurazione computer->Modelli amministrativi->Pannello di controllo->Personalizzazione
  • Cliccare 2 volte su Non visualizzare la schermata di blocco e impostare l'opzione Attivata, quindi confermare su OK

GPEDIT: Non visualizzare la schermata di blocco
FIG 1 - GPEDIT: Non visualizzare la schermata di blocco


Non visualizzare la schermata di blocco
FIG 2 - Non visualizzare la schermata di blocco

venerdì 7 novembre 2014

Windows Quick Tip: Rimuovere l'integrazione con OneDrive da Windows 8.1


In Windows 8.1 Microsoft ha integrato il suo servizio di memorizzazione nel cloud: OneDrive (servizio un tempo conosciuto con il nome SkyDrive). Chi non utilizza il servizio OneDrive e vuole rimuovere tale integrazione nel Sistema operativo può procedere con uno dei seguenti metodi.

Metodo 1
Il primo metodo consiste nell'agire manualmente all'interno del registro di sistema creando una nuova policy. Tale metodo è l'unico adottabile nel caso in cui si utilizzi una versione standard di Windows 8.1 (quindi non una versione Pro o Enterprise).
  • Avviare l'editor del registro di sistema (regedit.exe)
  • Posizionarsi su
    HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows
  • Creare, se non presente, la chiave Skydrive
  • Spostarsi all'interno della chiave Skydrive e creare un nuovo valore DWORD (32-bit) nominarlo in DisableFileSync e valorizzarlo ad 1
  • Riavviare il sistema per rendere effettive le modifiche
Di seguito è possibile scaricare i file .reg per abilitare/disabilitare l'integrazione di OneDrive in Windows 8.1
DOWNLOAD



Metodo 2
Il secondo metodo consiste nell'utilizzare l’editor criteri di gruppo locali (gpedit.msc) presente a partire dalla versione Pro di Windows 8/8.1
  • Premere la combinazione di tasti WIN+R per aprire la finestra di dialogo Esegui e digitare gpedit.msc seguito da invio per aprire l'editor criteri di gruppo locali
  • Posizionarsi su Criteri Computer Locale->Configurazione Computer->Modelli Amministrativi->Componenti di Windows->OneDrive
  • Eseguire doppio clic su Impedisci uso di OneDrive per archiviazione file e selezionare l'opzione Attivata quindi confermare cliccando su OK
Le modifiche, in questo caso, vengono applicate immediatamente

GPEDIT: Impedisci uso di OneDrive per archiviazione file
FIG 1 - GPEDIT: Impedisci uso di OneDrive per archiviazione file

Attiva policy Impedisci uso di OneDrive per archiviazione file
FIG 2 - Attiva policy Impedisci uso di OneDrive per archiviazione file

martedì 4 novembre 2014

Come ingannare gli antivirus

Spesso, per testare la sicurezza della nostra rete o delle nostre workstation, ci troviamo a dover utilizzare tool di terze parti che gli antivirus identificano come "Hacker tools" impedendoci di portare a termine il nostro lavoro.

In questo articolo mostrerò alcune tecniche per tentare di nascondere i nostri tools agli antivirus. Non tratterò l’argomento in maniera dettagliata in quanto per farlo sarebbe necessario pubblicare un vero e proprio libro ma cercherò di trattare le tecniche più utilizzate e dare qualche spunto al lettore che potrà, in autonomia, approfondire il tema. 




Premessa
Le tecniche che vedremo di seguito non saranno efficaci con tutti gli antivirus. Come sapete i software antivirus adottano diversi sistemi per il riconoscimento di codice maligno: analizzano i file e li confrontano con i database delle "firme", analizzano l’esecuzione dei programmi in memoria e il loro comportamento (scansione euristica), ecc. 

La scansione euristica, offerta ormai da quasi tutti i software antivirus, non si basa su database di impronte virali ma cerca di rilevare nuovi virus semplicemente verificando le operazione che il file sta cercando di eseguire. Se tali operazioni risultano sospette, allora l’antivirus provvederà a bloccare il file eventualmente segnalandolo con un messaggio di allerta. Proprio per questo modo di operare la scansione euristica è più difficile da aggirare.

Le tecniche che illustrerò saranno in grado di ingannare solo gli antivirus che analizzano il pattern/firma del file confrontandola con quelle memorizzate nel loro database di impronte virali.


Iniziamo
Uno dei tool che viene bloccato dagli antivirus in quanto considerato "Hacker Tool" è NetCat. NetCat è un programmino opensource a riga di comando molto flessibile che ci permette di ottenere la shell di un sistema remoto, eseguire la scansione delle porte, inviare email, trasferire file, chattare, creare backdoor e tant’altro.

Una versione di NetCat per Windows potete scaricarla dal seguente link

Se avete installato un antivirus è probabile che l’eseguibile venga riconosciuto come virus e bloccato o eliminato, pertanto è consigliabile disabilitare temporaneamente l’antivirus. Se non vi fidate e volete lavorare in tutta sicurezza allora vi consiglio di lavorare su una macchina virtuale.

Scompattate il file .zip in una cartella. All’interno del file zip, oltre al file eseguibile, trovano posto i sorgenti dell’applicazione.

Per verificare quanti e quali antivirus identificano l’eseguibile di NetCat (nc.exe) come virus possiamo effettuare l’upload del file su www.virustotal.com e farlo analizzare.

Virustotal è un servizio che permette l’analisi di file sospetti per la rapida identificazione di virus, malware e trojan. Il file segnalato dall’utente viene verificato confrontandolo con i database delle impronte virali dei maggiori antivirus in circolazione.

Nel nostro caso Virustotal indica che nc.exe viene segnalato come pericoloso dal 31 dei 55 antivirus in elenco. Cosa possiamo fare per migliorare la situazione?

Prima scansione con Virustotal
FIG 1 - Prima scansione con Virustotal

Opzione 1: Alterare il codice sorgente
Uno dei metodi che possiamo utilizzare è quello di andare ad alterare il codice sorgente in modo tale da alterarne l’impronta e renderlo non più riconoscibile dagli antivirus.

Nel nostro caso agiremo sul codice sorgente di NetCat che abbiamo scaricato precedentemente. Iniziamo subito con dire che aggiungere commenti al file sorgente non andrà a modificare in alcun modo il file eseguibile, infatti  tutti i compilatori ignorano i commenti passando all'istruzione successiva. Quindi dobbiamo trovare un modo per far si che il file eseguibile ottenuto sia diverso da quello originale pur mantenendo le sue funzionalità.

Un metodo per ottenere un file eseguibile leggermente diverso da quello originale è provare a modificare le impostazioni del compilatore o, meglio ancora, utilizzare un compilatore diverso. I compilatori tendono ad ottimizzare aspetti diversi dell’applicazione producendo, in questo modo, eseguibili leggermente diversi tra loro. Ad es. i compilatori Intel tendono ad ottimizzare il codice per i propri processori, il compilatore incluso in Microsoft Visual Studio, invece, ottimizzerà il file eseguibile per essere eseguito sui propri sistemi operativi ecc. Proviamo a verificare quanto ho scritto fin’ora.

  • Rinominiamo il file nc.exe in originale.nc.exe 
  • Andiamo a modificare il file makefile aprendolo con un editor di testo e andando a cancellare gli spazi antecedenti a $(cc) e $(link) sostituendoli con una tabulazione (righe 11, 14 ,  17 e 21). Questa operazione va fatta in quanto gli spazi potrebbero dare fastidio al nostro compilatore.
  • Ricompiliamo il tutto. Per chi dispone di Visual Studio Express (scaricabile gratuitamente dal sito Microsoft) oppure Visual Studio (quest’ultimo è a pagamento) è possibile compilare il file utilizzando nmake. Per utilizzare nmake è necessario avviare il prompt dei comandi di Visual Studio: da Start->Tutti i Programmi->Microsoft Visual Studio->Visual Studio Tools->Prompt dei comandi di Visual Studio
    Dal prompt dei comandi posizionarsi nella cartella contenente i file sorgenti e digitare semplicemente
    Nmake
  • Nmake provvederà a compilare i file facendo riferimento ai comandi presenti nel file makefile. Al termine della compilazione nella cartella dovremmo trovare il nuovo file nc.exe.
    Eseguiamo l’upload del file su www.virustotal.com e con grande sorpresa scopriamo che con questa semplice operazione nc.exe viene segnalato da un numero inferiore di antivirus. 
Scansione con Virustotal dopo ricompilazione
FIG 2 - Scansione con Virustotal dopo ricompilazione


  • Prima di cantare vittoria verifichiamo se il nuovo file funziona. Dal prompt dei comandi posizioniamoci nella cartella dove è presente il file nc.exe e digitiamo il seguente comando
    nc -v -w2 -z 192.168.0.3 1-200
    tale comando esegue la scansione delle porte, comprese tra 1 e 200, sulla postazione con indirizzo ip 192.168.0.3 e ci informa quali porte risultano aperte. Il comando funziona correttamente e dimostra che il nostro file è perfettamente funzionante.
  • Altre modifiche che possiamo apportare al codice sorgente sono la modifica dei nomi delle variabili globali, il nome dei metodi, modificare leggermente le procedure/funzioni. 
Nel caso in cui non avessimo a disposizione il sorgente del file allora possiamo modificare il codice aiutandoci con un debugger e un editor esadecimale. In questo caso l’operazione diventerebbe molto più complicata ma comunque fattibile.


Opzione 2: Utilizzare runtime Packers
L’utilizzo di runtime packers permette di modificare la struttura all'interno di un file eseguibile. I runtime packers non sono altro che dei software che riescono a comprimere un file eseguibile senza però togliergli la capacità di esecuzione: le dimensioni del file diminuiscono ma il file rimane comunque eseguibile. Una volta lanciati si auto decomprimono in memoria e iniziano la loro esecuzione in modo del tutto trasparente all’utente.

Di runtime Packers ce ne sono molti in circolazione, tra i più diffusi troviamo UPX, ASPack, PEProtect, UPack, PESpin, MEW, FSG e tanti altri ancora.

  • Scarichiamo UPX per Windows dal seguente URL http://upx.sourceforge.net/  e scompattiamolo
  • Copiamo il file originale.nc.exe che abbiamo visto nell’Opzione 1 nella cartella dove abbiamo scompattato UPX
  • Dal prompt dei comandi accediamo alla cartella di upx e digitiamo il seguente comando:
    upx -9 originale.nc.exe
  • Una volta che il file è stato compresso eseguiamo l’upload su www.virustotal.com ed eseguiamo l’analisi, vedremo che rispetto al file originale viene riconosciuto da un minore numero di antivirus. Non è molto ma è pur sempre un miglioramento. Nulla ci vieta di eseguire in sequenza più runtime packers per migliorare ulteriormente questo risultato, l’importante è non esagerare anche perché i miglioramenti sono limitati.

Opzione 3: Utilizzare software per proteggere il codice dal reverse engineering
Questo tipo di software, concettualmente, funziona in modo analogo ai runtime packers con la differenza che non si limita a comprimere il codice ma provvede anche a modificarne la struttura e a criptarlo per rendere difficile l’operazione di reverse.  Solitamente il codice x86 viene sostituito con un byte code proprietario.

I software più utilizzati in tal senso sono tipo Themida (www.oreans.com) e VMprotect (www.vmprotect.com) entrambi di tipo commerciale. In questo articolo mostrerò il funzionamento di Themida (sul sito www.oreans.com è possibile scaricare una demo del prodotto). La versione di Themida utilizzata è l'ultima disponibile al momento, si tratta della versione 2.3.2.0. La demo non richiede alcuna installazione, basta eseguire la versione a 32 o 64bit in base al software che si intende proteggere.

L'utilizzo del software è molto semplice, una volta avviato non ci resta che indicare il file che vogliamo proteggere e smanettare con le varie opzioni per impostare le protezioni di nostro gradimento quindi non ci resta che cliccare sul pulsante Protect.



Themida
FIG 3 - Themida
Anche lasciando tutte le impostazioni di default si ottiene un risultato discreto. Proteggendo il nostro file originale.nc.exe analizzando il file prodotto con virustotal notiamo che il numero di antivirus che segnalano il file ancora come pericoloso è molto ridotto.
Analisi di Virustotal del file protetto da Themida
FIG 4 - Analisi di Virustotal del file protetto da Themida



Opzione 4: Binding 
Nascondere l’estensione del file tramite l’apposita opzione presente nel sistema operativo o effettuare il binding sono due operazioni idonee ad ingannare l’utente ma non l’antivirus, ragione per cui verranno solo accennate in questo articolo. 

Il binding consiste nell’unire più eseguibili in uno. Tra i tool più utilizzati in passato il più noto è sicuramente eLiTeWrap piuttosto vecchiotto e ormai riconosciuto da tutti gli antivirus. Veniva utilizzato spesso per creare una backdoor con VNC.

Di programmi che effettuano il binding ce ne sono molti in giro ed è possibile costruirsene di propri con poche righe di codice. Oltre a eLiTeWrap che è gratuito e open source, troviamo File Joiner, Exe Fusion, Quick Batch File Compiler e tanti altri ancora. Possiamo persino utilizzare l’utility IExpress inclusa in Windows oppure, con gli appositi tool di compressione(ad es. Winzip e Winrar), possiamo creare un file autoestraente in cui specifichiamo un file da eseguire al termine dell’estrazione. L’icona dei file creati con utility come IExpress, Winrar e Winzip sono facilmente riconoscibili e possono insospettire l’utente ma possiamo modificarle facilmente utilizzando tool come Resource Hacker  (http://angusj.com/resourcehacker).

Basta fare una piccola ricerca con google per trovare tante altre utility adatte a questo scopo.


Altre Opzioni


Modificare con debugger ed editor esadecimale il file eseguibile

Utilizzando software come LordPe, Hex Workshop e Ollydbg è possibile andare a modificare direttamente il file eseguibile magari  aggiungendo una routine di codifica/decodifica  eseguita a runtime, ad es. una routine XOR,  così come dimostrato da Mati Aharoni (esperto di sicurezza informatica che ha contribuito allo sviluppo di BackTrack) allo Shmoocon 2008(convention annuale degli hacker sulla east coast degli Stati Uniti).

L’operazione consiste nell’inserire uno stub all’interno del file con il compito di criptare/decriptare il file.  In pratica procediamo nel seguente modo:


Aggiungiamo alla fine del file dei byte in modo da creare spazio per la nostra routine;

  • Inseriamo la nostra routine alla fine del file;
  • Modifichiamo la prima istruzione del file in modo tale che salti alla prima istruzione della routine appena aggiunta;
  • Al termine della nostra routine inseriamo un salto per ritornare al flusso originale del programma
Per semplicità ci atteniamo all'esempio fatto da Mati Aharoni utilizzando una routine che esegue l’XOR pertanto non parliamo più di criptare/decriptare ma di codifica/decodifica.


  • Aprire il file binario con LordPE, cliccare sul pulsante Sections quindi, nella nuova finestra dal titolo [ Section Table ], cliccare sulla riga .idata con il tasto destro del mouse e selezionare, dal menu contestuale, la voce edit section header. Andiamo a modificare i campi VirtualSize e RawSice aggiungendo il valore 1000.

    LordPE Sections
    FIG 5 - LordPE Sections

    LordPE .idata
    FIG 6 - LordPE .idata
  • Clicchiamo sul pulsante accanto al campo Flags e, nella finestra che appare, assicuriamoci di impostare il Flag Executable as a code. Confermiamo la modifica cliccando sul pulsante OK fino a ritornare alla finestra [ Section Table ]

    LordPE [ Section Flags]
    FIG 7 - LordPE [ Section Flags] 
  • Clicchiamo con il tasto destro del mouse in corrispondenza della riga .text e, dal menu contestuale, selezioniamo la voce edit section header.
  • Clicchiamo sul pulsante accanto al campo Flags e impostiamo il flag Writeable. Tale opzione va abilitata in quanto l’operazione di codifica/decodifica avverrà proprio nella sezione .text. Confermiamo la modifica cliccando sempre su OK fino a ritornare alla finestra [ Section Table ]. Chiudiamo la finestra quindi clicchiamo prima sul pulsante Save e successivamente su OK
    Possiamo chiudere l’applicazione Lord PE

    LordPE [ Section Flags ]
    FIG 8 - LordPE [ Section Flags ]
A questo punto tentando di eseguire il file verrà visualizzato un messaggio di errore che avvisa l’utente che non si tratta di un’applicazione Windows valida. Ciò è dovuto al fatto che abbiamo indicato le nuove dimensioni della sezione .idata senza modificare le dimensioni effettive del file e questo manda in tilt l’IP. Ecco che per rimediare utilizziamo un altro tool Hex Workshop.
  • Avviamo Hex Workshop e posizioniamoci alla fine del file, clicchiamo con il tasto destro e dal menu selezioniamo la voce Insert

    Hex Workshop
    FIG 9 - Hex Workshop
  • Nel campo Number of bytes inseriamo 1000 (per il nostro scopo possiamo inserire anche meno byte ma meglio tenerci larghi) e assicuriamoci che l’opzione Hex sia selezionata. Clicchiamo su OK e salviamo il file. Possiamo uscire da Hex Workshop.

    Hex Workshop
    FIG 10 - Hex Workshop
Adesso tentando di eseguire il nostro file non riceveremo più alcun messaggio di errore. Le operazioni che abbiamo eseguito fino a questo momento hanno aggiunto lo spazio per l’inserimento della nostra routine XOR. Per questa attività ci serviamo di Ollydbg.
  • Apriamo il nostro file da Ollydbg. Il debugger si posiziona subito sulla riga di nostro interesse (entry Point) che è rappresentata dalla prima istruzione. Copiamo le prime 4 righe e incolliamole in blocco note, ci serviranno più tardi per il return dalla nostra routine.
    Per semplicità di seguito riporto le righe di nostro interesse che andremo a copiare:
    00404C00 > $ 55             PUSH EBP
    00404C01   . 8BEC           MOV EBP,ESP
    00404C03   . 6A FF          PUSH -1
    00404C05   . 68 00B04000    PUSH nc.0040B000
    OllyDbg
    FIG 11 - OllyDbg 
  • Visualizziamo la Memory Map: dal menu View selezionare la voce Memory. Nella nuova finestra cliccare 2 volte sulla sezione .idata
    .
    OllyDbg Memory Map
    FIG 12 - OllyDbg Memory Map
  • A questo punto si aprirà una nuova finestra contenente il dump della sezione .idata. Scorriamo e individuiamo il punto in cui iniziano i byte da noi inseriti. Non è importante essere estremamente precisi, possiamo anche non selezionare con precisione il punto di inizio del nostro blocco ma un po’ di indirizzi più avanti. Troviamo che l’indirizzo 00412830 fa al caso nostro.
  • Chiudiamo la schermata e la finestra Memory Dump per ritornare alla schermata principale (CPU - main thread). Posizioniamoci sulla prima riga che abbiamo copiato (Nel nostro caso all’indirizzo 00404C00. Nel caso ci fossimo spostati inavvertitamente: selezionare una riga qualsiasi, cliccarci su con il tasto destro del mouse quindi selezionare go to e successivamente Origins. Se Origins non appare nel menu vuol dire che siamo già sulla prima riga)
  • Adesso dobbiamo modificare il flusso di esecuzione. Clicchiamo 2 volte sulla prima riga. Apparirà una finestra che ci permetterà di modificare l’istruzione. Inseriamo nell'apposito campo l’istruzione JMP 00412830 dove 00412830 rappresenta il punto di inizio del nostro blocco vuoto aggiunto precedentemente e da cui faremo iniziare la nostra routine

    OllyDbg JMP
    FIG 13 - OllyDbg JMP
  • Dopo l’inserimento dell’istruzione JMP notiamo che anche le righe immediatamente successive sono modificate. Adesso dobbiamo individuare l’intervallo di indirizzi che ci interessa codificare. La codifica dovrà partire dall'istruzione immediatamente successiva a quella di JMP da noi inserita, quindi si parte dall'indirizzo 00404C05. Scorriamo fino a raggiungere quasi la fine del file e notiamo che dall'indirizzo  0040A770 non ci sono più istruzioni. Quindi possiamo concludere che l’intervallo che ci interessa codificare/decodificare va dall'indirizzo 00404C05 al  0040A770
  • Salviamo il file nel seguente modo: clicchiamo con il tasto destro del mouse in un qualsiasi punto del codice assembly, selezioniamo la voce copy to executable quindi selezioniamo all modification e successivamente copy all. Nella nuova finestra che appare clicchiamo nuovamente in un punto qualsiasi con il tasto destro del mouse e selezioniamo save file. Diamo il nome al file e procediamo con il salvataggio.
  • Apriamo il file appena salvato in Ollydbg. Dovremmo già essere posizionati sull Entry point (00404C00 JMP 00412830). Premiamo il tasto F7 che ci porterà all'indirizzo 00412830 dove aggiungeremo la nostra routine XOR. A partire dall'indirizzo 00412830 dobbiamo inserire le istruzioni della nostra routine così come visto precedentemente con l’istruzione JMP 00412830. Di seguito riporto le istruzioni da inserire:
    MOV EAX, 00404C05 # Memorizza l'indirizzo da cui iniziare la codifica/decodifica
    XOR BYTE PTR DS:[EAX],0F # Esegue una XOR
    INC EAX # incrementa EAX
    CMP EAX, 0040A770 #verifica se abbiamo raggiunto la fine della parte da codificare..
    JLE SHORT <XOR LOOP> #..altrimenti, salta nuovamente al comando xor
    Al posto di <XOR LOOP> va messo l’indirizzo dell’istruzione XOR BYTE PTR DS:[EAX],0F, nel nostro caso tale indirizzo è 00412835
  • Sempre proseguendo aggiungiamo anche le istruzioni che abbiamo copiato nel blocco note
    PUSH EBP
    MOV EBP,ESP
    PUSH -1

    Al posto dell’istruzione  00404C05   . 68 00B04000    PUSH nc.0040B000 utilizziamo la seguente
    JMP 00404C05
    Da notare che il salto viene fatto all’indirizzo 00404C05 che rappresenta l’indirizzo della istruzione PUSH originaria
  • Salviamo il file come abbiamo fatto precedentemente ed eseguiamolo da Ollydbg. Otteniamo un errore di accesso: Access Violation when reading…
    L’errore è dovuto al fatto che il file è stato codificato con la routine XOR quindi il programma sta cercando di eseguire un istruzione codificata che, ovviamente, non riconosce come valida. Adesso non ci resta che copiare le istruzioni codificate e salvarle come un file eseguibile, in questo modo alla successiva esecuzione la routine XOR provvederà a decodificarlo in memoria.
    Selezioniamo le righe da 00404c05 - 0040A770 che rappresenta la parte di file codificata dalla routine XOR. Clicchiamo con il tasto destro sulle righe selezionate quindi scegliamo copy to executable e successivamente selection. Nella nuova schermata clicchiamo nuovamente con il tasto destro e selezioniamo Save file.

    OllyDbg copy to executable
    FIG 14 - OllyDbg copy to executable
Abbiamo terminato. Adesso il file codificato è salvato sul disco. Al successivo avvio del file la routine XOR provvederà ad effettuare la decodifica in memoria.
Adesso non ci resta che verificare, tramite virustotal se il file modificato viene ancora riconosciuto dagli antivirus . Eseguiamo l’upload sul sito www.virustotal.com e procediamo con l’analisi. Il file viene ancora riconosciuto come pericoloso da molti antivirus. Ovviamente utilizzando un tipo di codifica semplice come quella XOR non potevamo aspettarci risultati miracolosi ma nulla ci vieta di sostituire la nostra routine con una più complessa ed efficace.


PE-Scrambler
PE-Scrambler è un tools creato da Nick Harbour che effettua lo scrambler e l’offuscamento del codice in un file binario (istruzioni e chiamate di funzioni). Il tool fu presentato al DEFCON del 2008. Il tool, seppur obsoleto, è ancora possibile trovarlo in rete facendo una ricerca con google 
L’utilizzo è molto semplice. Da riga di comando basta digitare

pescrambler -i <INPUT.exe> -o <OUTPUT.exe>


Il punto debole dei compressori tipo UPX sta proprio nel loro modo di operare. Questi  tool comprimono/criptano il codice binario ed aggiungono al file uno stub che permette, in fase di esecuzione, di procedere all’operazione inversa in memoria. Una volta eseguito il file, lo stub verrà eseguito prima di ogni altra istruzione e provvederà a decomprimere/decriptare le successive istruzioni in memoria. Gli antivirus che verificano i dati presenti in RAM, confrontandoli con il database delle impronte virali, riconoscono in questo modo il file sospetto bloccandolo.

PE-Scrambler funziona in modo leggermente diverso. Il tool, dopo aver effettuato il disassembler del file binario, effettua lo scrambler dei dati e delle istruzioni presenti. All'interno del file viene aggiunta una funzione di 65-byte che effettua da dispatcher per tutte le altre chiamate a funzione. Il tool, infatti, provvede ad individuare tutte le chiamate a funzione, interne ed esterne, e le dirotta al dispatcher che provvede a richiamarle correttamente utilizzando una tabella di lookup contenente l’indirizzo di ritorno e quello target.

Gli antivirus hanno preso le contromisure adeguate e utilizzando questo tool non si ottengono risultati apprezzabili.



NTFS Alternate Data Streams 

Un altro metodo utilizzato per nascondere file sospetti dall’antivirus è quello di utilizzare NTFS Alternate Data Streams, ma nel nostro caso questa opzione è da scartare in quanto, per poter procedere alla creazione di un ADS, è necessario prima che il file binario sia presente sulla macchina target e per fare ciò è necessario aver già ingannato l’antivirus. Inoltre tale tecnica funzionerebbe solo su partizioni NTFS. Trasferendo il file su altri file system, ad es su file system FAT di una penna USB,  l’ADS verrebbe perso.


Cygwin

Ricompilare il file con Cygwin è un’altra ipotesi da scartare in quanto in questo caso dovremmo distribuire l’eseguibile con la libreria cygwin.dll, una cosa non molto conveniente.


Conclusioni

Come si può immaginare l’argomento è molto vasto e in continua evoluzione e trattarlo nella sua interezza richiede molto spazio e tempo. Con questo articolo ho trattato una minima parte dell'argomento utilizzando anche tool non più utilizzati ma spero di aver suscitato la curiosità di qualche lettore ad un approfondimento. Ritornerò comunque sull'argomento.



lunedì 3 novembre 2014

VBS: Recuperare il product key di Windows tramite VBS


Esistono diversi tool di terze parti che permettono il recupero del product key del sistema operativo e di altre applicazioni, tra questi segnalo l'ottimo ProduKey della NirSoft (www.nirsoft.net) scaricabile gratuitamente ed eseguibile senza alcuna installazione.
In questo articolo verrà mostrato come recuperare il product key di Windows tramite uno script VBS.
Il Product Key di Windows è una sequenza di 25 caratteri (lettere e numeri) divisi in 5 gruppi da 5 caratteri ognuno. I caratteri utilizzati all'interno di un product key sono BCDFGHJKMPQRTVWXY2346789 mentre non vengono utilizzati i caratteri AEILNOSUZ015. Il product key è memorizzato all'interno del registro di sistema e codificato in un valore DWORD all'interno della chiave HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DigitalProductId.
Nella decodifica del valore DWORD DigitalProductId bisogna fare attenzione alla versione di Windows infatti, a partire da Windows 8, il metodo di codifica del product key è cambiato.

Lo script che ho creato visualizza le informazioni relative al nome del prodotto, il Product ID e il Product Key permettendo, inoltre, di salvare le informazioni trovate all'interno di un file di testo (.txt).
Di seguito il sorgente dello script VBS


Option Explicit 

Dim strComputer, objWMIService, objItem, Caption, colItems
Dim ProductName,ProductID,ProductKey,ProductInfo, Version, Win8Version, WinOlderVersion
Win8Version = "6.2 6.3"
WinOlderVersion ="6.1 6.0 5.2 5.1 5.0"

'Di seguito i valori della stringa CurrentVersion presente all'interno della chiave HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion che indica la versione di Windows
'Windows 8.1                 6.3
'Windows Server 2012 R2      6.3
'Windows 8                   6.2
'Windows Server 2012         6.2
'Windows 7                   6.1
'Windows Server 2008 R2      6.1
'Windows Server 2008         6.0
'Windows Vista               6.0
'Windows Server 2003 R2      5.2
'Windows Server 2003         5.2
'Windows XP 64-Bit Edition   5.2
'Windows XP                  5.1
'Windows 2000                5.0
'Crea oggetto wscript.shell
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_OperatingSystem",,48)
' in Caption memorizzo la Versione di Windows
For Each objItem in colItems
    Caption = objItem.Caption  
Next
 Dim objshell,path,DigitalID, Result 
 Set objshell = CreateObject("WScript.Shell")
 'Recupero le informazioni dalle chiavi di registro"
 DigitalID = objshell.RegRead("HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DigitalProductId")
 ProductName = "Product Name: " & objshell.RegRead("HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProductName")
 ProductID = "Product ID: " & objshell.RegRead("HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProductID")
 Version= objshell.RegRead("HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\CurrentVersion")
 
 If InStr(Win8Version,Version) Then
  'Windows 8 o Windows 8.1
  ProductKey = "Product Key: " & GetKeyWindows8(DigitalID) 
 Else
  If InStr(WinOlderVersion,Version) Then
     ' Windows 7 o antecedente
  ProductKey = "Product Key: " & GetKeyWindows7(DigitalID) 
  Else
     msgBox "Versione di Windows non supportata." & vblf &"Il presente Script è stato testato per versioni di Windows comprese tra Windows 2000 e Windows 8.1" , vbOKOnly+vbCritical, "Versione Windows non supportata"
  ProductKey ="Product Key: Non Rilevato"
     End If   
  
 End If
 
 ProductInfo = ProductName  & vbNewLine & ProductID  & vbNewLine & ProductKey
 'Mostra i dati e chiedi se si intende salvare in un file
 If vbYes = MsgBox(ProductInfo  & vblf & vblf & "Vuoi salvare le informazioni in un file?", vbYesNo + vbQuestion, "Windows Product Key") then
    Save ProductInfo
 End If


'Convert i valori binari della chiave "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DigitalProductId" in caratteri per Windows 8
Function GetKeyWindows8(Key)
    Const KeyOffset = 52
    Dim isWin8, Maps, i, j, Current, KeyOutput, Last, keypart1, insert
    'Check if OS is Windows 8
    isWin8 = (Key(66) \ 6) And 1
    Key(66) = (Key(66) And &HF7) Or ((isWin8 And 2) * 4)
    i = 24
    Maps = "BCDFGHJKMPQRTVWXY2346789"
    Do
        Current= 0
        j = 14
        Do
           Current = Current* 256
           Current = Key(j + KeyOffset) + Current
           Key(j + KeyOffset) = (Current \ 24)
           Current=Current Mod 24
            j = j -1
        Loop While j >= 0
        i = i -1
        KeyOutput = Mid(Maps,Current+ 1, 1) & KeyOutput
        Last = Current
    Loop While i >= 0 
    keypart1 = Mid(KeyOutput, 2, Last)
    insert = "N"
    KeyOutput = Replace(KeyOutput, keypart1, keypart1 & insert, 2, 1, 0)
    If Last = 0 Then KeyOutput = insert & KeyOutput
    GetKeyWindows8 = Mid(KeyOutput, 1, 5) & "-" & Mid(KeyOutput, 6, 5) & "-" & Mid(KeyOutput, 11, 5) & "-" & Mid(KeyOutput, 16, 5) & "-" & Mid(KeyOutput, 21, 5)
 
End Function
'Converte i valori binari della chiave "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DigitalProductId" in caratteri per Windows 7
Function GetKeyWindows7(ProductID)
    Const KeyOffset = 52
 Dim i, Cur, x, Maps
    i = 0
    Maps = "BCDFGHJKMPQRTVWXY2346789"
    Do
        Cur = 0
        x = 14
  i=i+1
        Do
            Cur = Cur * 256
            Cur = ProductID(x + KeyOffset) + Cur
            ProductID(x + KeyOffset) = (Cur \ 24) And 255
            Cur = Cur Mod 24
            x = x -1
        Loop While x >= 0
  if (i Mod 6) = 0 Then
   ProductKey = "-" & ProductKey
   i = i + 1
  End If  
  ProductKey = Mid(Maps, Cur + 1, 1) & ProductKey   
    Loop While i < 29
    GetKeyWindows7 = ProductKey
End Function

'Salva i dati in un file
Function Save(Data)
    Dim fso, fName, txt,objshell,UserName
    Set objshell = CreateObject("wscript.shell")
    'Crea un file di testo con nome WindowsKeyInfo.txt, nello stesso percorso del vbs, contenente le informazioni
    fName = "WindowsKeyInfo.txt"
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set txt = fso.CreateTextFile(fName)
    txt.Writeline Data
    txt.Close
End Function

Per chi volesse scaricare il file VBS può utilizzare il link di seguito
DOWNLOAD