Seminario ONIF “Orizzonte 2020” — Firenze, 31/05/2019

L’associazione ONIF (Osservatorio Nazionale Informatica Forense) ha pubblicato il programma del convegno Orizzonte 2020 — Informatica Forense a supporto di Autorità Giudiziaria, Studi Legali, Aziende, Forze dell’Ordine e Privati. Il seminario si terrà il 31 maggio a Firenze, presso la Sala Verde di Palazzo Incontri, Via de Pucci 1, 50122 Firenze.

L’agenda è ricca di interventi molto interessanti, sia sul piano tecnico-scientifico che su quello legislativo. Questo è il programma completo:

  • 9:00 — Registrazione
  • 9:15 — Apertura lavori
    Banca Intesa Sanpaolo, Fondazione Forense di Firenze, Dott. Nanni Bassetti, Segretario Nazionale ONIF
  • 9:30 — Le nuove regole e la revisione dell’albo CTU del Tribunale di Firenze
    Ufficio di Presidenza del Tribunale di Firenze
  • 10:00 — Il Netherlands Register of Court Experts (NRGD)
    Dott. Mattia Epifani
  • 10:30 — Legge 48/2008, attesa quanto ignorata: dieci anni di casi reali
    Ing. Paolo Reale, Avv. Elisabetta Guarnieri
  • 11:00 — Break
  • 11:20 — Analisi di dispositivi mobile: stato attuale, integrazione con il cloud e difficoltà future
    Ing. Michele Vitiello, Dott. Paolo Dal Checco
  • 11:40 — Rilevamento e conseguenze delle manomissioni sui messaggi WhatsApp
    Dott. Andrea Lazzarotto
  • 12:00 — Digital Forensics Data Breach: perché gestire la violazione dei dati in maniera forense
    Dott. Alessandro Fiorenzi
  • 12:20 — Immagini e video digitali come fonte di prova
    Dott. Massimo luliani
  • 12:40 — Saluti e chiusura

Per partecipare all’evento è necessario procedere all’iscrizione gratuita sulla piattaforma EventBrite, facendo click sul seguente bottone.

Iscrizione gratuita

Rimuovere il controllo sui permessi di root da una app Android

Lavorando nell’ambito della consulenza mi capita di dover analizzare il funzionamento di app e programmi realizzati da terzi, come avevo già avuto modo di raccontare in un talk sul reverse engineering dei dispositivi IoT. Lo scopo di questo articolo è raccontarvi un esempio pratico di quanto mi è capitato a febbraio, spiegando la metodologia utilizzata e fornendovi alcuni spunti di approfondimento.

In realtà in questo caso non si è trattato di lavoro, ma di una scena quantomeno bizzarra accaduta al bar assieme ad altri membri del GrappaLUG. Un amico mi ha esposto il suo problema:

Andrea guarda, la banca ora non ci manda più gli SMS con comunicazioni e codici, ci hanno detto di installare questa app. Quando l’ho avviata mi ha detto di disattivare il debug USB, ora mi dice che ho il root. Ma io non l’ho mai fatto, né ho cambiato il software di sistema, uso il telefono così come l’ho comprato.

Un’applicazione problematica

L’app bancaria in questione è Notify, la quale ha ricevuto moltissime recensioni da 1 stella per malfunzionamenti vari. Molti dei commenti lamentano lo stesso problema trattato in questo post.

All’avvio l’app tenta di effettuare un paio di controlli di sicurezza, presumibilmente per proteggere gli utenti da potenziali furti di codici. Il problema è che si rifiuta totalmente di funzionare se pensa non siano stati superati. L’utente non viene avvertito, ma totalmente tagliato fuori dall’app.

Mentre il debug USB è molto semplice da disattivare, togliere il root è più complicato… specialmente se il telefono non è sbloccato ma la app si rifiuta lo stesso di funzionare!

Dopo aver ragionato per qualche minuto ho capito che il mio amico non aveva molte opzioni ed era necessario modificare l’app per rimuovere il controllo per poter continuare a usare il conto corrente.

Cosa dice la legge

A questo punto, se siete persone prudenti e magari anche fan dei film di Antonio Albanese, vi sarà sicuramente venuta in mente una citazione:

Sì ma, è legale questa cosa?

Cetto La Qualunque

Si tratta di una giusta osservazione, in quanto il reverse engineering di codice di terze parti potrebbe sembrare una potenziale violazione di copyright. Fortunatamente la “Direttiva 2009/24/CE del Parlamento europeo e del Consiglio, del 23 aprile 2009, relativa alla tutela giuridica dei programmi per elaboratore” è piuttosto esplicita su questo punto:

Possono comunque sussistere circostanze in cui tale riproduzione del codice e la traduzione della sua forma sono indispensabili per ottenere le informazioni necessarie per conseguire l’interoperabilità con altri programmi di un programma creato autonomamente. Si deve pertanto ritenere che, solo in tali limitate circostanze l’esecuzione degli atti di riproduzione e traduzione della forma del codice, da parte o per conto di una persona avente il diritto di usare una copia del programma, è legittima e compatibile con una prassi corretta e pertanto essa non richiede l’autorizzazione del titolare del diritto. Uno degli obiettivi di tale eccezione è di consentire l’interconnessione di tutti gli elementi di un sistema informatico, compresi quelli di fabbricanti differenti, perché possano funzionare insieme.

Problema risolto. Il mio obiettivo era proprio quello di rendere interoperabile l’app della banca con il sistema operativo Android del mio amico, nonostante ci fosse un piccolo bug che ne impediva il corretto caricamento.

Analisi e modifica dell’app

L’ultima volta che ho parlato di analisi di un’app Android, avevo fatto riferimento al fatto che è abbastanza facile decompilare un file APK e ottenere del codice Java che spesso è praticamente perfetto. Questo è estremamente comodo per leggere come funziona un’applicazione, ma si tratta di un problema se si vuole modificarla e creare un nuovo APK.

Infatti se il codice decompilato è “quasi” giusto ma non perfetto, ricompilarlo risulta impossibile. Quello che invece conviene fare è lavorare sul codice smali, che è praticamente l’equivalente di assembly per Dalvik, la macchina virtuale Java di Android.

La procedura per modificare un’app si suddivide quindi nei seguenti passi:

  1. Estrarre il bytecode classes.dex dall’APK
  2. Disassemblarlo in codice smali
  3. Modificare il codice con attenzione
  4. Riassemblare il codice
  5. Rigenerare un APK con il codice modificato
  6. Firmare digitalmente l’APK

Questo procedimento richiede l’uso di vari strumenti, tra cui apktool e dex2jar. Si tratta di passaggi semplici (a parte la modifica del codice), ma sono ripetitivi ed è meglio automatizzarli. A tale scopo sono nati vari progetti per tutte le piattaforme. Per esempio, su Linux si può usare Adus.

Mentre ero lì che cercavo qualche idea su come agire, ho casualmente scoperto APK Easy Tool, un programma per Windows molto pratico che fornisce poche icone a portata di mouse. Siccome volevo sbrigarmela in pochi minuti e avevo una macchina virtuale Windows sul portatile, ho deciso di provarlo.

APK Easy Tool in azione

Dopo aver reperito una copia dell’app da APKMonk, ho provveduto a caricarla e ho premuto il tasto Decompile. In breve tempo ho trovato il risultato nella cartella Decompiled APKs, con un bel po’ di file da analizzare.

Cercando la stringa Errore: ho trovato subito una corrispondenza nel file smali/it/phoenixspa/notify/MainActivity.smali, in particolare nel metodo ALY6W. Lo stesso metodo viene invocato al termine del metodo SKMXK e dal codice notiamo delle parti molto interessanti:

.method public SKMXK()V
.locals 2
new-instance v0, Lit/phoenixspa/notify/check/CheckerService;
invoke-direct {v0}, Lit/phoenixspa/notify/check/CheckerService;->()V
invoke-virtual {v0, p0}, Lit/phoenixspa/notify/check/CheckerService;->ELG2Z(Lit/phoenixspa/notify/MainActivity;)Ljava/lang/String;

move-result-object v1
const-string v0, "phone"
invoke-virtual {p0, v0}, Lit/phoenixspa/notify/MainActivity;->getSystemService(Ljava/lang/String;)Ljava/lang/Object;
move-result-object v0
check-cast v0, Landroid/telephony/TelephonyManager;
invoke-virtual {v0}, Landroid/telephony/TelephonyManager;->getDeviceId()Ljava/lang/String;
move-result-object v0
invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v0
if-nez v0, :cond_0
invoke-virtual {p0, v1}, Lit/phoenixspa/notify/MainActivity;->ALY6W(Ljava/lang/String;)V
:goto_0
return-void
:cond_0
invoke-virtual {p0}, Lit/phoenixspa/notify/MainActivity;->O2SHI()V
goto :goto_0

.end method

Ho tolto le righe bianche per questioni di spazio. Il metodo richiama un CheckerService e il codice presente in smali/it/phoenixspa/notify/check/CheckerService.smali ha chiari riferimenti alla libreria rootbeer. Perciò verifica se lo smartphone ha i permessi di root.

Alla fine del codice c’è un controllo. Se il valore di v0 è uguale a 0, viene invocato ALY6W, dando un messaggio di errore. Altrimenti, l’esecuzione salta all’etichetta :cond_0 che invoca 02SHI e poi salta nuovamente a :goto_0 per restituire void.

Il flusso di esecuzione è abbastanza semplice e si dovrebbe capire leggendo lo smali, ma per renderlo più chiaro ho generato questo diagramma di flusso con androguard:

Flusso di esecuzione del metodo SKMXK originale

Il controllo si può aggirare rimuovendo l’if-nez e i relativi salti, invocando sempre 02SHI senza controllare v0. Ho modificato l’ultima parte in questo modo:

    invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v0
invoke-virtual {p0}, Lit/phoenixspa/notify/MainActivity;->O2SHI()V
return-void

.end method
Flusso di esecuzione del metodo SKMXK con patch

Tramite APK Easy Tool è bastato un click per ottenere un nuovo APK firmato automaticamente e pronto per essere installato. Per l’installazione, il modo più semplice è usare adb (va attivato il debug USB):

adb install it.phoenixspa.notify_2018-10-05.apk 

Ricordatevi che prima la versione originale deve essere rimossa, perché non abbiamo il certificato “vero” dello sviluppatore e perciò la nostra versione modificata è incompatibile con quella scaricata da Google Play.

L’app in esecuzione dopo la modifica

Conclusioni

Tutto il lavoro di analisi e modifica ha richiesto circa 15 minuti, seduti al tavolo di un bar, senza conoscenze troppo approfondite di smali. Volendo si sarebbe potuto rimuovere anche il controllo sul debug USB, ma quello è facile da disattivare e non è un grosso problema.

Sono comunque rimasto perplesso dalla necessità di dover arrivare a tanto per colpa di una scelta di sviluppo poco attenta, che di fatto taglia fuori alcune persone dall’utilizzo del proprio conto corrente. Ho detto al mio amico:

Accidenti, ti rendi conto di cosa è stato necessario fare? Una persona “comune” cosa fa? O cambia smartphone, o cambia banca… è assurdo.

Se non altro ora ho una copia dell’APK che posso usare per aiutare eventuali altri conoscenti che usano la stessa banca. Mi è già capitato con un famigliare!

L’analisi delle applicazioni Android è un argomento molto affascinante, utile anche per testarne la sicurezza o effettuare analisi forensi relative al funzionamento interno dell’app e di come vengono gestiti eventuali dati memorizzati.

In questo post abbiamo visto un semplice esempio di come una piccola modifica possa essere risolutiva, ma l’argomento è molto vasto. Perciò vi vorrei segnalare alcune risorse interessanti per approfondire l’argomento:

Forensics Europe Expo 2019: due giorni di fiera e seminari sulle scienze forensi

Il 5 e 6 marzo a Londra si è svolta la Forensics Europe Expo 2019, un evento focalizzato sulle analisi scientifiche, la scena del crimine, le attrezzature da laboratorio e la digital forensics. La manifestazione ha fatto parte della più ampia cornice della UK Security Week, nella quale erano presenti anche altre expo riguardanti la sicurezza e l’anti-terrorismo.

Entrambe le giornate sono state caratterizzate da un fitto programma di seminari, la maggior parte dei quali riguardanti l’informatica forense. Rimaneva perciò poco tempo per visitare gli stand degli espositori, ma sono comunque soddisfatto perché ho assistito a quasi tutti gli interventi e sono riuscito a dare un’occhiata ai vari padiglioni.

La mattina di martedì è cominciata in grande stile, con dei controlli di sicurezza analoghi a quelli di un aeroporto. Nonostante la puntualità dei partecipanti, la fila per la scansione a raggi X ha fatto perdere a gran parte del pubblico quasi tutto l’intervento di Stuart Hutchinson riguardante l’analisi di partizioni APFS. È stato un vero peccato.

Tanya Pankova ha affrontato una delle applicazioni più “succulente” in ambito forense, con il talk WhatsApp Forensics: evidence hide-and-seek. Tra gli spunti più interessanti spiccano il fatto che i file multimediali nei backup sul cloud non sono criptati, la possibilità di usare il token WhatsApp per decifrare qualsiasi backup associato a uno specifico numero e l’estrazione delle chat sfruttando il QR-code di WhatsApp Web.

I droni stanno aumentando di popolarità, tanto da essere stati oggetto di due interventi diversi, rispettivamente di Harsh Behl e Paul Baxter. Questi apparecchi ricadono nella categoria dei dispositivi mobili e contengono soprattutto file multimediali e tracciati GPS in formato DAT. L’acquisizione molto spesso si rivela la parte più semplice, mentre l’analisi dei dati richiede maggiore impegno.

Un sistema di rilevamento per droni degno di un film di fantascienza

David Spreadborough di Amped ha illustrato le problematiche che gli agenti di polizia si trovano spesso ad affrontare quando devono analizzare i filmati delle telecamere di videosorveglianza. Nella maggior parte dei casi non servono strumenti avanzati, ma l’obiettivo essenziale è decodificare agevolmente i video, effettuare semplici operazioni (ritaglio, zoom, deinterlacciamento) ed esportare dei fotogrammi.

Al pomeriggio Dusan Kozusnik ha presentato un intervento dal titolo Advanced phone forensics – unlocking phones and getting maximum evidence, fornendo una panoramica generale sull’analisi forense degli smartphone. Dopo aver affrontato una carrellata di tecniche avanzate di accesso ai dati, ha concluso con uno spunto davvero interessante: dopo l’acquisizione, la vera sfida è l’interpretazione dei dati racchiusi nelle app, incluse quelle meno comuni.

Le operazioni di acquisizione forense devono comunque essere svolte in modo corretto, per questo Oleg Afonin le ha affrontate nel talk iOS Forensics: from logical acquisition to cloud extraction sottolineando in particolare cosa (non) bisogna fare quando si sequestra un dispositivo iOS.

Alessandro Di Carlo di BIT4LAW ha proposto un breve intervento intitolato Forensic readiness and digital forensics evidence in the Italian court, focalizzandosi in particolare sulle peculiarità del sistema giudiziario italiano. Nello specifico, la riproducibilità scientifica della prova assume un’importanza assoluta mentre non trovano spazio le testimonianze degli expert witness nel modo in cui si svolgono nei sistemi anglosassoni.

David Toy ha proposto una tecnica per la ricerca di specifici elementi di “contrabbando” basata su un hashing statistico dei blocchi, fornendo tempi di risposta molto più veloci rispetto alle classiche ricerche che sfruttano gli hash di interi file. Infine, Paola Pietrobon di SecureCube ha concluso la giornata con un approfondimento relativo al funzionamento delle celle e all’analisi dei tabulati telefonici.

La seconda giornata ha avuto un taglio decisamente più scientifico

La giornata di mercoledì è stata dedicata in gran parte al workshop di DigForAsp (Digital forensics: evidence analysis via intelligent systems and practices), un progetto scientifico finanziato dal programma Horizon 2020 dell’Unione Europea. L’agenda è stata ricca di interventi molto interessanti e a contenuto veramente informatico.

I talk si rivolgevano pertanto a un pubblico con almeno alcune conoscenze matematiche di livello universitario, al fine di presentare il lavoro dei ricercatori presenti. Questo mi ha lasciato perplesso: a mio parere i contenuti scientifici erano molto validi ma il format non si è rivelato ottimale. I minuti disponibili per ogni intervento erano pochi e venivano spesi per presentare frettolosamente la parte teorica e matematica, relegando le applicazioni in ambito di informatica forense a brevi cenni che avrebbero meritato più spazio.

Nel complesso ho apprezzato molto questo evento e c’è stata anche la possibilità di rivedere alcuni amici, nonché scambiare due chiacchiere con gli espositori, compresi alcuni membri delle tre aziende italiane presenti. Se volete saperne di più sul contenuto della manifestazione potete trovare qui la lista completa dei seminari.

Come ti distruggo il sito web con una fattura elettronica

A partire da quest’anno, finalmente, è stata introdotto l’utilizzo della fatturazione elettronica verso tutti. Avendo lavorato allo sviluppo e l’implementazione di tutte le soluzioni software necessarie per un mio cliente (che gestisce uno studio di commercialisti), ho potuto vedere come molte aziende sono andate in panico per quella che è in realtà una novità bella, utile ed ecologica.

Ovviamente il formato delle fatture elettroniche è documentato, aperto e standard, per consentire a tutti quanti di creare software che permetta di generare fatture elettroniche, nonché visualizzare e importare quelle prodotte da altri. Esistono anche diversi siti web che forniscono un servizio di visualizzatore online per fatture elettroniche.

Una caratteristica interessante della fattura elettronica è il fatto che il formato consente l’inserimento di allegati, tramite l’uso di specifici tag XML e la codifica in base64 del documento allegato. Molti gestionali usano questa possibilità per inserire una rappresentazione in PDF dentro alla fattura elettronica XML. Si tratta della vecchia fattura “cartacea” digitale, più semplice da leggere ma senza valore legale.

Questo si traduce, dentro al file XML, in un codice simile a questo:

<Allegati>
    <NomeAttachment>documento.pdf</NomeAttachment>
    <Attachment>
    JVBERi0xLjcKJeLjz9MNCjIgMCBvYmoKPDwvQ291bnQgMSAvS2lkcyBbMSAwIFJdIC9UeXBlIC9QYWdl
    cyA+PgplbmRvYmoKCjUgMCBvYmoKPDwvTGVuZ3RoIDQgL1JlYWRkbGVQYWdlQmFja2dyb3VuZENvbnRl
    bnRTdHJlYW0gPDw+PiA+PnN0cmVhbQpxClEKCmVuZHN0cmVhbQplbmRvYmoKCjQgMCBvYmoKPDwvUHJv
    Y1NldCBbL1BERiAvVGV4dF0gPj4KZW5kb2JqCgoxIDAgb2JqCjw8L0NvbnRlbnRzIFs1IDAgUl0gL0Ny
    b3BCb3ggWzAgMCA2MTIgNzkyXSAvTWVkaWFCb3ggWzAgMCA2MTIgNzkyXSAvUGFyZW50IDIgMCBSIC9S
    ZWFkZGxlUGFwZXJJbmZvIDw8L0NvbG9ySWQgL1doaXRlIC9TdHlsZUlkIC9CbGFuayA+PiAvUmVzb3Vy
    Y2VzIDQgMCBSIC9Sb3RhdGUgMCAvVHlwZSAvUGFnZSA+PgplbmRvYmoKCjMgMCBvYmoKPDwvUGFnZXMg
    MiAwIFIgL1R5cGUgL0NhdGFsb2cgPj4KZW5kb2JqCgo2IDAgb2JqCjw8L0NyZWF0aW9uRGF0ZSAoRDoy
    MDE5MDExOTIzMTIzOCswMScwMCcpIC9Nb2REYXRlIChEOjIwMTkwMTE5MjMxMjM4KzAxJzAwJykgL1By
    b2R1Y2VyIChQREYgRXhwZXJ0IDIuNC4yMSBNYWMpID4+CmVuZG9iagoKNyAwIG9iago8PC9GaWx0ZXIg
    L0ZsYXRlRGVjb2RlIC9JRCBbPGM5NmM5NTBhZGJmZDY1OTE4Y2E0ZTVjNmNhNzVmOGE5PiA8Yzk2Yzk1
    MGFkYmZkNjU5MThjYTRlNWM2Y2E3NWY4YTk+XSAvSW5kZXggWzEgN10gL0luZm8gNiAwIFIgL0xlbmd0
    aCAzNyAvUm9vdCAzIDAgUiAvU2l6ZSA4IC9UeXBlIC9YUmVmIC9XIFsxIDQgNF0gPj5zdHJlYW0KeJxj
    ZGBguAjEDIxALABlME6GiSyDMTxhUkegDCY3EAMAc7sDeQplbmRzdHJlYW0KZW5kb2JqCgoKJSBQREYg
    RXhwZXJ0IDYwOSBNYWMgT1MgRG1nIDhiMTQ2ZWU0NzQyOSsKCnN0YXJ0eHJlZgo1ODIKJSVFT0YK
    </Attachment>
</Allegati>

Questo esempio può sembrare artificiale, ma in realtà la rappresentazione in base64 scritta qui sopra contiene un vero file PDF, con una sola pagina bianca completamente vuota in formato Letter. Naturalmente un documento con del testo occuperebbe più spazio.

Come potete notare, viene anche indicato il nome del file allegato.

I visualizzatori online

Perché vi ho spiegato tutti questi dettagli sugli allegati alle fatture elettroniche? È presto detto: mi era stato chiesto di cercare un visualizzatore che potesse mostrare agevolmente gli allegati. Tra i primi che ho trovato ce n’erano due:

Provando entrambi i servizi con una fattura contenente allegati, ho potuto verificare che tutti e due i siti (scritti in PHP) funzionavano nello stesso modo:

  1. L’utente carica un file XML
  2. Il sito lo riceve e ne crea una copia in una directory temporanea
  3. Il sito controlla la presenza di eventuali allegati, se presenti estrae anch’essi con il nome originale
  4. All’utente viene permesso di visualizzare graficamente il contenuto della fattura, con i link agli eventuali allegati

Nel caso in cui leggere il punto 3 non vi abbia fatti trasalire, sentendo un forte brivido corrervi lungo la schiena, posso dirvi che mi auguro non lavoriate nell’industria dello sviluppo software. Se invece lo fate, vi chiedo di rileggerlo un paio di volte.

La vulnerabilità

Permettere ad un utente di caricare dei file non è di per sé pericoloso, posto che vengano prese le misure di sicurezza necessarie. Tuttavia i siti analizzati effettuavano dei controlli sulla fattura XML ma non sugli allegati. Questo significa che era possibile creare una fattura (vera o finta, non ha importanza) con allegato un file con estensione PHP, il linguaggio più comunemente usato per programmare siti web.

I siti stessi estraevano i file PHP dagli allegati e li copiavano nella rispettiva directory temporanea, fornendone poi l’URL all’utente. Al malintenzionato di turno sarebbe bastato quindi inserire del codice malevolo per poi effettuare vari tipi di operazioni.

Per fare un test rivelatore ma innocuo, ho creato una fattura la cui sezione degli allegati è la seguente:

<Allegati>
    <NomeAttachment>wowowowo.php</NomeAttachment>
    <Attachment>PD9waHAgcGhwaW5mbygpOw==</Attachment>
</Allegati>

Potete visualizzare il documento completo cliccando qui. Il contenuto codificato corrisponde al seguente programma:

<?php phpinfo();

Si tratta di uno script inerte, che non arreca nessun tipo di danno al server sul quale viene eseguito, ma mostra soltanto le informazioni sulla versione del software installato. Perciò consente in modo semplice di verificare se il codice PHP gira correttamente.

Entrambi i siti summenzionati hanno accettato senza problemi la mia fattura emessa da Paperino a Zio Paperone, estraendo l’allegato in PHP e fornendone l’URL. Dagli screenshot potete vedere chiaramente che il codice veniva eseguito:

In realtà, pur avendo eseguito un codice assolutamente innocuo e privo di conseguenze, se io fossi stato un malintenzionato avrei potenzialmente potuto fare molto peggio. Per esempio, un attaccante avrebbe potuto decidere di caricare un file manager in PHP come questo su uno dei siti e usarlo per:

  1. Modificare il visualizzatore di fatture affinché salvasse una copia di ogni file caricato
  2. Alterare la pagina di login, in modo che le credenziali inserite dagli utenti finissero nelle mani sbagliate
  3. Creare pagine in una posizione qualsiasi del sito e usarle per una campagna di phishing
  4. Cancellare completamente tutto il sito web

No, non sto esagerando.

Conclusione

Quando si sviluppa del software, specialmente le applicazioni web esposte all’utilizzo indiscriminato di migliaia di utenti, prestare la massima attenzione alla sicurezza è assolutamente imprescindibile. In questo caso sussisteva un rischio per i dati caricati dagli utenti, nonché per i contenuti stessi del sito web che avrebbero potuto essere alterati o eliminati.

Il rischio dato dalla possibilità di upload di file da parte degli utenti si può eliminare in diversi modi:

  • Inserendo una whitelist di estensioni consentite (ad esempio PDF, JPG)
  • Disattivando l’esecuzione degli script nella directory di destinazione degli upload, in tal caso visitare un file PHP avrebbe mostrato il codice senza eseguirlo
  • Nel caso degli allegati di fatture, optando per non estrarli e ripresentarli all’utente tramite data URL (non tutti i formati sono consentiti, ma quelli ai file PDF sì)

Ovviamente i gestori di entrambi i siti web sono stati preventimente informati del problema ed è stato dato loro modo di correggerlo prima che questo articolo venisse pubblicato. L’autore di AmministrazioniComunali.it ha risposto con estrema prontezza comunicandomi di aver chiuso la falla.

Da quanto ho potuto vedere, tutti e due i siti hanno optato per la whitelist, che è un’ottima soluzione.

Come considerazione finale, aggiungo che prima di scrivere questo post ho verificato che anche Ser.Val. ha risolto la falla segnalata, anche se non avevo ricevuto risposta. Risulta degno di nota il fatto che sul loro server la pagina di informazioni mostrava la presenza di PHP versione 5.6, che è quantomeno bizzarro. Come avevo già avuto modo di commentare su Facebook, PHP 5.6 è una versione fuori supporto dal 31 dicembre 2018 e sarebbe bene migrare prontamente ad una versione più recente, nello specifico PHP 7.2 o 7.3.

Come già scrivevo in questo post di due mesi fa, è bene che chi opera in questo settore prenda sul serio l’importanza della sicurezza informatica. Eventualmente facendo anche analizzare la propria infrastruttura software da un consulente esterno.

Cronologia della responsible disclosure

  • 11 gennaio 2019: scorgo la presenza di una potenziale vulnerabilità
  • 13 gennaio 2019: notifico i gestori dei due siti web coinvolti
  • 14 gennaio 2019: AmministrazioniComunali.it risponde confermando di aver risolto il problema
  • 16 gennaio 2019: mi accorgo che anche Ser.Val. ha modificato il sito, senza però rispondere
  • 20 gennaio 2019: pubblico questo articolo
  • 22 gennaio 2019: Ser.Val. risponde confermando di aver risolto il problema ed effettuato una verifica interna per verificare eventuali data breach, ai sensi del GDPR

Aggiornamento del 22 gennaio 2019: Ser.Val. ha risposto alla mia segnalazione dopo la pubblicazione di questo post, ringraziandomi e descrivendo le contromisure che hanno adottato. Il contenuto del post è stato modificato per tenere conto di questa risposta.

Abel, il sistema di build della nuova CAINE — Video e slide

Il team di ESC ha fatto come sempre uno straordinario lavoro con i video dei talk, che trovate nel canale YouTube ufficiale (alcuni sono ancora in fase di montaggio).

Il mio intervento verteva sul lavoro svolto per una delle principali distribuzioni Linux in ambito di informatica forense:

Abel, il sistema di build della nuova CAINE

CAINE è una delle distribuzioni Linux per l’informatica forense più usate al mondo. Analogamente ad altri progetti simili, l’attuale metodo di sviluppo comporta numerosi step non automatizzati. Molte delle personalizzazioni presenti nella distribuzione sono realizzate a mano, rendendo difficile tenerne traccia e valutare eventuali correzioni di bug o miglioramenti nella procedura. Abel (Automated Build Environment Lab) è un progetto che mira a produrre le nuove versioni di CAINE in modo totalmente automatizzato, tracciabile e peer-reviewed, con un ambiente di build omogeneo basato su Vagrant e numerosi script che applicano tutte le modifiche necessarie.

Lo sviluppo di Abel non è totalmente terminato, in quanto non siamo riusciti a convertire proprio tutti i passaggi di installazione in tempo per la versione 10 di CAINE. Tuttavia la struttura base è completa e infatti al talk ho parlato principalmente di quella. 🙂 Qui potete vedere la slide che descrive com’è fatto Abel:

Struttura di Abel

Questo è il video su YouTube, con un audio di ottima qualità… peccato soltanto per alcuni riferimenti che non sono stati colti da una parte dell’audience. Forse non c’erano abbastanza marshmallow in sala. 😉

Le slide sono disponibili su SlideShare (cliccate qui per il PDF):