Image File Execution Options

“Image File Execution Options” è una chiave di registro annidata sotto “HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion” che stando alla documentazione Microsoft può essere configurata per lanciare un debug all’avvio di una qualsiasi applicazione. In pratica è sufficiente creare una sottochiave con il nome dell’applicazione di cui si desidera eseguire il debug, assegnare il valore stringa “Debugger” e associare come valore data il percorso completo al debug (un altro eseguibile) che si vuole utilizzare.

Ai tempi, probabilmente, Microsoft non tenne in considerazione il fatto che qualcuno avrebbe potuto sfruttare questa feature per scopi meno nobili. Già nel 2007 gli sviluppatori del malware Gromozon anzichè utilizzare la classica chiave di registro “Run” sfruttarono questa tecnica associando il path del malware all’eseguibile explorer.exe per assicurarsi che venisse lanciato ad ogni riavvio del sistema.

In passato ho notato questo genere di attività dai log di Process Monitor ma non ho mai attenzionato a fondo la questione. Di recente mi capitato di analizzare un malware che fa uso improprio di questa feature e cercando in rete ho trovato un vecchio documento che descrive bene i metodi alternativi al corretto utilizzo della chiave di registro “Image File Execution Options”. Dateci un’occhiata, ne vale la pena.

Cyber*

Leggendo alcuni articoli su cyber(security|war|warfare|intelligence|defense) pubblicati sul web da testate di spessore viene da pensare che qualcosa in tal senso si stia muovendo. Tutto lascia presagire che vi sia una (lenta) presa di coscienza da parte degli organi preposti alla gestione della sicurezza nazionale e che lentamente ci si stia preparando per fronteggiare i numerosi cyber attacchi provenienti da ogni parte del mondo. (Per cyber attacchi in questo contesto si fa particolare riferimento a malware di stato e compromissioni di server che reggono infrastrutture critiche).

I target sono già censiti, e non è una novità dire che buona parte di loro è sotto assedio. Il business delle armi digitali proprio in questi ultimi anni ha delineato un mercato fiorente e in continua evoluzione, idem per le strategie di attacco atte a garantire maggiore probabilità di successo. Oggi si passa anche per il mobile e i social network.

Quello che si sta cercando di fare, in realtà, è ufficializzare la presenza di una “forza armata” in grado di intraprendere un’azione di guerra (se così la vogliamo definire, spesso propagandata come iniziativa di difesa), già in corso da anni, basata su attacchi e contrattacchi informatici che mirano a compromettere o mettere del tutto fuori uso target sensibili e a carpire informazioni riservate dai Paesi avversari.

Ma generalmente per esprimere questo concetto vengono usate parole differenti, ecco qualche esempio: La Nato si allarga alla cyberguerra: “Attacco informatico come invasione armata” oppure Israel to Create Cyber Security Authority after Alleged Iranian Hacker Attack o ancora Tactical Cyber: How to Move Forward.

Malware PE Firmati Digitalmente

Da quando Davide Barbato mi ha sottoposto la necessità di rilevare la presenza di firma digitale nei malware PE ho cominciato a interessarmi al problema. In passato si sono verificati casi in cui qualche malware è stato distribuito con firma digitale, Stuxnet nel 2010 fu forse il primo caso serio, ma oggi questa pratica pare diventata abbastanza comune.

In merito alla necessità appena descritta non esiste una documentazione ufficiale, qualcuno per fortuna ha già affrontato la questione per vie indirette e fornito buoni spunti per comprendere meglio la struttura di un PE e da qui ottenere le giuste specifiche per individuare l’eventuale presenza di una Digital Signature all’interno di un file PE.

Stando a quanto riportato da Peter Gutmann nel 2000, uno dei campi dell’ OptionalHeader, quello relativo all’indice delle directory che contiene i puntatori ai dati nella rispettiva sezione, presenta una directory (non documentata) denominata IMAGE_DIRECTORY_ENTRY_SECURITY. Quando un PE è firmato digitalmente il VirtualAddress e il Size relativi a questa entry directory forniscono l’indirizzo di partenza della firma all’interno del PE (solitamente posizionato alla fine) e le dimensioni del blocco di codice con valori diversi da zero.

Analizzando un file PE firmato,  come esempio è stato scelto Procmon.exe, dalle proprietà del file possiamo osservare il tab “Digital Signatures”:

procmon-digital-sign

I valori che otteniamo richiamando la entry directory IMAGE_DIRECTORY_ENTRY_SECURITY sono i seguenti:

  • IMAGE_DIRECTORY_ENTRY_SECURITY.VirtualAddress = 25A400
  • IMAGE_DIRECTORY_ENTRY_SECURITY.Size = 6776

Conoscendo entrambi i valori è possibile individuare la posizione esatta della Digital Signature a partire dall’indirizzo fornito dal VirtualAddress (25A400) fino al termine del blocco di byte pari al valore ottenuto da Size (6676).

procmon-hex.sign

In fede a queste informazioni,  ho incluso in PEframe (rilascerò a giorni la nuova versione) un check che riguarda proprio la Digital Signature e una sezione che ne mostra i dettagli (VA, Size, MD5 e SHA-1) se il check è andato a buon fine. Ecco un esempio.

peframe-procmon-sign

Per questioni di praticità PEframe si limiterà a informare l’analista che il malware analizzato è firmato digitalmente e restituirà le informazioni utili a identificare univocamente il blocco di codice contenuto nel malware (PE). Per l’estrazione e la verifica della firma è sempre possibile ricorrere a disitool di Didier Stevens o altri strumenti come SignTool rilasciato da Microsoft.

REMnux 5 include PEframe

L’ultima release di REMnux include PEframe tra i tool per l’analisi statica dei malware. Se vi aiutate con la mind map dei tools lo trovate alla voce “Statically Examine PE Files”.

Dal terminale è raggiungibile al path /usr/local/peframe
cd /usr/local/peframe && ./peframe.py

peframe-remnux

Per i malware analysts più distratti ricordo che la versione attuale di PEframe è la 4.0, a partire dalla quale è stato introdotto l’output in formato JSON e un database SQLite per i risultati delle scansioni.

FBI ufficialmente interessata al malware

Che l’FBI nutra un forte interesse per i malware di ultima generazione e per il codice malevolo in generale non è mai stato un segreto, ma di recente (la scorsa settimana) il FBO (Federal Business Opportunities) ha pubblicato un documento in cui si richiede ufficialmente ai potenziali fornitori la ricezione di 30/40 GB di malware al giorno. Inutile discutere sulle nobili cause che hanno indotto l’FBI a puntare sul malware e a collezionare codice malevolo.

The Federal Bureau of Investigation (FBI) has a requirement to provide technical analysis of digital methods, software and data, and provide technical support of field investigations and intelligence operations that involve computers, networks and malicious software. [..] Critical to the success of the FBI is the collection of malware from multiple industry, law enforcement and research sources.

Approfondimenti: Security Affairs – Malware: Request for Quote (RFQ)

Dal Filename al Profile ID di Facebook

Forse non tutti sanno che Facebook da qualche mese ha rimosso il profile/user id da tutti i nomi delle foto, per cui il giochetto che proposi nel 2010 per risalire dal nome file presente nella url statica della foto condivisa su facebook all’utente che l’aveva caricata sul social network non è più valido.

Ora i parametri numerici presenti nel nome della foto sono 3 e non 5 come prima. L’id dell’album (fbid != profile id) in cui è stata caricata la foto è stato mantenuto quindi, se avete la fortuna che l’utente non ha impostato l’opzione di condivisione su Friends Only, è ancora possibile risalire al profile id di chi l’ha caricata.

La procedura manuale è leggermente macchinosa ma con l’aiuto di fbid tutto diventa più semplice. Ad esempio, dal nome file di questa foto qui possiamo facilmente scoprire che l’utente facebook che l’ha caricata e condivisa sul suo diario è Mark Zuckerberg.

$ python fbid.py https://fbcdn-sphotos-a-a.akamaihd.net/hphotos-ak-prn2/t31.0-8/1275272_10101026493146301_791186452_o.jpg

id                 4
name               Mark Zuckerberg
first_name         Mark
last_name          Zuckerberg
link               https://www.facebook.com/zuck
gender             male
locale             en_US
username           zuck

Non so per quanto tempo durerà ancora questo giochetto ma una cosa è certa, le informazioni che è possibile ricavare dalle foto condivise su facebook rappresentano una prova digitale di fondamentale importanza in ambito forense.

E’ bene ricordarsi di non sottovalutare in fase di indagini la  ricerca sul disco delle foto scaricate da facebook.

$ find / -name "[0-9]*_[0-9]*_[0-9]*_[a-z].jpg"

E non dimenticare di acquisire la prova online tramite hashbot prima di sottoporla all’analisi di fbid.

Accessibilità e Usabilità. Nei panni di un Non Vedente

Vi siete mai chiesti quali sono i disagi che una persona con problemi di disabilità visiva quotidianamente incontra navigando siti web che non rispettano gli standard di accessibilità? Io un’idea credevo di essermela fatta ma dopo aver visionato il video pubblicato da Giuseppe Di Grande (cieco dal 1996), una vecchia conoscenza che in questi giorni ho avuto il piacere di rincontrare sul web, mi sono dovuto ricredere.

Giuseppe ha preso in esame il sito del Comune di Avola ed ha realizzato un video di 18 minuti che ci fa comprendere quanto è importante l’accessibilità per un non vedente. Qui l’articolo intero.

Il Mistero di Flurry

Ogni tanto una sbirciatina ai pacchetti inviati dal proprio dispositivo mobile in standby non fa male. Così ho scoperto che il mio S4 invia richieste POST verso data.flurry.com/aap.do passandogli una serie di informazioni relative al modello del mio dispositivo e alla location la TimeZone.

13:39:56.417002 IP XXX.XXX.XXX.XXX.41173 216.52.203.13.http: Flags [P.], seq 242:549, ack 1, win 14600, length 307

…P…..B.GP.9..T…………..x…Di=.:..59QR3V2AUENSYVGAIMAS..1.2….AND6c8b520d59b96b81…DdX!P…Di=.h….

device.model..GT-I9505..build.brand.. sambuild.product..jfltexx....1.2...

Di=.h...it_IT..Europe/Rome...

La cosa strana è che il mio proxy, attraverso il quale ho catturato il traffico, si trova oltreoceano e nonostante ciò a Flurry (ora capisco come fanno statistiche) viene fornita la mia corretta posizione geografica.

Ora vorrei capire qual è l’app che contatta Flurry e come diavolo fa a rilevare la mia posizione visto che i servizi di geolocalizzazione, gps e wifi sono stati preventivamente disabilitati.

Dubbio Amletico

Profilo facebook privato. Cosa vuol dire? Può definirsi privato un profilo facebook i cui contenuti risultano accessibili a chiunque disponga di un account per accedere al medesimo social network senza che i due profili siano in contatto tra di loro? In questo caso si può parlare di profilo facebook privato?

Gestione delle dipendenze in bash

Mentre per python non ho mai trovato difficoltà a gestire la disponibilità dei moduli importati con bash mi tocca fare i conti con la verifica delle dipendenze. In passato ho usato svariate soluzioni, tutte funzionanti per carità, ma avere a che fare con codice lungo e spesso ripetuto non è una buona soluzione, soprattutto se le dipendenze da verificare non sono poche. Credo invece che queste poche righe possano risolvere il problema a monte.

DEP="nc,arp"
IFS=, dep_array=($DEP) # Split
for i in "${!dep_array[@]}"; do
	# echo ${dep_array[$i]}
	if [ -z `which ${dep_array[$i]}` ]; then
		echo "Please install ${dep_array[$i]}"
		exit
	fi
done

Se avete suggerimenti non esitate a condividerli.