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 AffairsMalware: 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.

Dragos Ruiu, Stanley Kubrick e i Security Exalted

Questa storia del malware che può trasferire informazioni (a breve raggio) utilizzando come vettore per la comunicazione i segnali audio è davvero interessante. E’ il modo in cui è stata interpretata la notizia che lascia molto a desiderare. Gli inutili allarmismi, le osservazioni fantascientifiche e gli scenari ipotizzati stanno facendo rivoltare Kubrick nella sua tomba.

Tutte ipotesi che avvalorano la tesi secondo cui “Un computer sicuro è un computer spento” e di conseguenza, dato che la frase proviene da Mitnick, non sei un hacker se non pronunci testuali parole dinanzi a prove tangibili come quelle descritte su questo paper.

A questo punto non c’è da stupirsi se qualche azienda, dietro suggerimento dei security exalted, aggiorni le policy aziendali imponendo ai dipendenti di staccare la scheda audio dalle loro postazioni di lavoro.

 

Android Tunnel SSH in 5 min

Se vi dovesse servire al volo un tunnel ssh da utilizzare con il vostro dispositivo android provate a registrare un account free qui e usare le credenziali appena registrate per accedere al servizio tramite client SSH Tunnel configurabile in una manciata di secondi.

Dal portatile. Connessione al servizio:

$ ssh -p 22 -D 1080 -f -C -q -N myusername@shell.cjb.net

Da browser, su FoxyProxy abilitare SOCKS proxy e configurare Host: 127.0.0.1 e Port: 1080.