Fork me on GitHub
con Valerio Galano

Il podcast dove si ragiona da informatici

Un informatico risolve problemi, a volte anche usando il computer

Riflessioni e idee dal mondo del software

Episodio del podcast

Come creare data breach per errore

12 giugno 2019 Podcast Episodio 10 Stagione 1
Come creare data breach per errore

Descrizione

Dimenticare un database o una lista di password apertamente accessibili sul Web non è mai una buona idea. Nessun’azienda ne trarrebbe vantaggio eppure ultimamente sta accadendo molto spesso. Come mai? Proviamo ad immaginare qualche scenario possibile…

Qualche data breach recente
https://www.ilsoftware.it/articoli.asp?tag=G-Suite-alcune-password-memorizzate-in-chiaro-per-14-anni_19276
https://www.cnet.com/news/amazon-alexa-transcripts-live-on-even-after-you-delete-voice-records/
https://attivissimo.blogspot.com/2019/02/azienda-italiana-lascia-esposto-online.html
https://attivissimo.blogspot.com/2019/03/facebook-ha-tenuto-centinaia-di-milioni.html?m=1
https://attivissimo.blogspot.com/2019/04/facebook-ops-quelle-decine-di-migliaia.html
https://www.wired.it/internet/social-network/2019/05/21/instagram-influencer/?refresh_ce=

Attrezzature:
Microfono Blue Yeti* - https://amzn.to/3kSE35f
Filtro anti-pop* - https://amzn.to/3baPMsh
Filtro anti-pop* - https://amzn.to/2MH0Wf1
Schermo fonoassorbente* - https://amzn.to/3sOZE0P

Sostieni il progetto

Sostieni tramite Satispay
Sostieni tramite Revolut
Sostieni tramite PayPal
Sostieni utilizzando i link affiliati di Pensieri in codice: Amazon, Todoist, Readwise Reader, Satispay

Partner

GrUSP (Codice sconto per tutti gli eventi: community_PIC)
Schrödinger Hat

Crediti

Montaggio - Daniele Galano - https://www.instagram.com/daniele_galano/
Voce intro - Costanza Martina Vitale
Musica - Kubbi - Up In My Jam
Musica - Light-foot - Moldy Lotion
Cover e trascrizione - Francesco Zubani

Mostra testo dell'episodio

Nascondi

Quella che segue è una trascrizione automatica dell'episodio.

Pensieri in codice. Idee dal mondo del software a cura di Valerio Galano. Buongiorno a tutti e ben ritrovati per un nuovo episodio di Pensieri in codice, il podcast in cui parliamo di argomenti presi dal mondo del software, di internet e della programmazione. Puntata numero 10. Ci è voluto un po’, sia per questioni personali che lavorative e per via dell’influenza, però finalmente riusciamo a pubblicare la decima puntata di Pensieri in codice. Per questo motivo vi rubo qualche secondo per ringraziare tutti quelli che ascoltano, condividono e interagiscono con il podcast tramite commenti o tramite il gruppo Telegram, messaggi privati, social eccetera. In particolar modo vorrei ringraziare tutti quelli che in questo periodo di stop forzato mi hanno fatto sentire il loro sostegno inviandomi messaggi e chiedendomi quando avrei ricominciato a pubblicare. Grazie davvero a tutti che mi date la spinta per continuare questo mio piccolo progetto. Ora bando alle ciance e iniziamo a parlare dell’argomento di oggi. Come probabilmente avrete notato, nell’ultimo periodo si sono moltiplicate le notizie di società che hanno ammesso di aver erroneamente lasciato incustodite e accessibile a tutti informazioni riguardanti i propri utenti. Vi lascio in descrizione qualche link a qualcuna di queste news giusto per capire la portata di questo fenomeno. Password, dati personali, informazioni sulle abitudini di comportamento, dettagli dei profili sono solo alcuni dei dati che per errore possono essere archiviati e lasciati su aree non protette e quindi accessibili a chi non ne dovrebbe avere diritto. A poco servono tutte le legislazioni a tutela degli utenti come il GDPR o le privacy policy perché seppure le aziende vengono costrette legalmente o si impegnano a preservare la nostra privacy e i nostri dati, non sono immuni da quelli che sono gli errori o i comportamenti scorretti che possono avere i singoli soggetti al loro interno. Sì perché generalmente un database di informazioni o una lista di password in chiaro non finiscono su internet pubblicamente accessibili intenzionalmente perché qualcuno effettivamente vuole che siano lì ma solitamente ci finiscono a causa di errori disattenzioni o comportamenti maldestri di qualcuno. Nell’episodio di oggi quindi voglio provare ad immaginare, ragionando così come ragiona un programmatore, tutta una serie di scenari nei quali le informazioni vengono trattate senza le dovute attenzioni e quindi finiscono per sbaglio accessibili a chi non dovrebbe poterle vedere. Badate bene non parlerò di attacchi hacker ma semplicemente di dati diffusi per errore e come vedremo disseminare involontariamente informazioni e dati gestiti tramite un software è qualcosa di molto più semplice di quanto sembri. Cominciamo subito col dire che quelli che andrò a fare sono esempi realistici ma pur sempre esempi. Io non sono a conoscenza delle cause che hanno portato alle varie brecce informatiche descritte nelle news che anche vi lascio in descrizione. Tuttavia quello che farò sarà limitarmi ad immaginare delle possibilità sulla base delle mie conoscenze di sviluppatore di software per il web. La prima cosa da tenere a mente quando si parla di dati scambiati su internet è che abbiamo sempre a che fare non con un unico software ma con un sistema che viene detto client server. Cercando di semplificare al massimo ciò vuol dire che chi accede ad un servizio utilizza un software che solitamente è installato sul proprio pc o sul proprio smartphone e che si chiama client. Esso può essere anche un sito un app o un semplice programma specifico e questo software si collega ad un altro software che è solitamente chiamato server ed è in funzione da qualche parte su internet. Dal momento che il client dovrà comunicare al server le informazioni inserite dall’utente e al tempo stesso il server dovrà comunicare al client le informazioni da mostrare all’utente risulta chiaro che tra client e server deve esistere un canale di comunicazione affinché questi possano scambiare le informazioni in entrambe le direzioni. Tuttavia su internet la comunicazione tra due device che siano computer smartphone server o dispositivi IOT o altro non è mai diretta. I pacchetti di dati infatti vengono spediti a dei server intermedi che li smistano nella direzione giusta fino a che essi non raggiungono il destinatario della trasmissione esattamente come può accadere per un pacco o una lettera inviata tramite poste italiane o un corriere che passa attraverso una serie di centri di smistamento fino a raggiungere il destinatario. Questi server intermedi anche detti nodi analizzano parte del pacchetto di dati per poter individuare il nodo successivo a cui spedirli. Ora sia per ragioni funzionali che per ragioni di manutenzione e monitoraggio questi server memorizzano molte delle informazioni contenute nei pacchetti all’interno di registri che vengono chiamati log. Ciò vuol dire che in pratica parte o addirittura tutte le informazioni trasmesse vengono replicate un numero indefinito di volte lungo il percorso fino a raggiungere il destinatario. Ora se la connessione tra client e server è implementata utilizzando dei sistemi di criptografia, dei certificati e altre misure di sicurezza del genere questo non dovrebbe essere un problema perché anche se vengono memorizzate la maggior parte delle informazioni e soprattutto le informazioni sensibili restano criptate e quindi non leggibili da chiunque. Tuttavia se chi ha sviluppato il software non è stato sufficientemente attento a implementare un meccanismo del genere o addirittura per errore ha inserito determinate informazioni in una zona del pacchetto dati che non è soggetta a criptografia allora questi dati verranno involontariamente archiviati lungo il percorso. Per provare a capire cosa intendo facciamo un esempio banale. Immaginiamo di stare modificando la password dell’account del nostro sito di commerce preferito. Accediamo quindi alla pagina di cambio password, inseriamo la vecchia password, di solito si fa così, inseriamo la nuova e clicchiamo salva. A questo punto un pacchetto di dati contenente la nostra nuova password viene spedito verso il server. Ora se il software è implementato nel modo giusto la password nuova sarà contenuta in una zona del pacchetto dati che verrà criptata e quindi non sarà leggibile in chiaro da nessuno lungo il percorso tranne il server di destinazione. Se invece la pagina non è implementata nel modo giusto questa password potrebbe finire in una area del pacchetto che risulta in chiaro e che quindi viene archiviata in modo automatico dai log lungo il percorso. Il risultato sarà che ci saranno sparsi per la rete una serie di file di testo che conterranno la nostra password in chiaro. A tutto ciò va anche aggiunto il fatto che la connessione tra il nostro client e il server non è l’unica del sistema e cioè anche nella più piccola e la più semplice delle realtà il più piccolo dei siti che possiamo immaginare è comunque composto di almeno due elementi e cioè semplificando al massimo un software che è detto server applicativo che elabora i dati ed un altro software che è detto database solitamente che archivia questi dati. Poi più il sito o il software in questione cresce in termini di dati e di utenza più il sistema tende a crescere in numero di server dando vita a ecosistemi sempre più complessi e tutti questi elementi solitamente per ragioni di sicurezza ridondanza ed efficienza sono sparsi per il mondo e quindi sono interconnessi fra loro tramite altri canali di comunicazione che vanno essi stessi adeguatamente protetti. In definitiva basta un errore di programmazione nel flusso dei dati o una sbagliata configurazione della connessione fra due o più server a far sì che le informazioni viaggino in formato leggibile e che siano memorizzate anche non intenzionalmente andando a formare enormi archivi di dati in rete. Un secondo metodo per perdersi informazioni in giro per la rete è quella di farne delle copie e non proteggerle adeguatamente. Quando si parla di database infatti è più che normale avere tutta una serie di copie di backup questo perché in caso di problemi di danneggiamento dei dati o addirittura di cancellazione dell’intero database risulta poi semplice ripartire da una copia di backup che sia il più aggiornata possibile e questo porta a fare tutta una serie di copie con cadenza periodica. Se normalmente ci si preoccupa tanto di mettere in sicurezza i database per evitare attacchi esterni e quindi si utilizzano firewall, meccanismi di restrizione degli accessi e criptografia, non sempre si utilizza la stessa scrupolosità quando questi dati si estrangono e si conservano in aree di backup. Immaginiamo quindi il nostro sito di e-commerce, lo stesso dell’esempio precedente. Esso avrà probabilmente una procedura di backup almeno giornaliera con la quale salverà tutti i dati inerenti gli utenti, gli acquisti e il catalogo. Questo tipo di procedure nel 99,9% dei casi sono automatizzate e si compongono di una serie di operazioni eseguite in sequenza. Ad esempio estrazione dei dati, magari compressione di questi dati, trasmissione verso un sistema di stoccaggio e archiviazione su uno o più apparati di stoccaggio. Ovviamente affinché i dati contenuti nel backup siano al sicuro è necessario che ciascuna delle operazioni svolte per eseguire il backup sia a sua volta sicura. Se così non fosse infatti allora si rischierebbe di lasciare i dati a stazionare magari in aree non protette o di far che essi vengano catturati durante la trasmissione. Quindi quando la procedura di backup del nostro sito e-commerce estrarrà i dati e successivamente li comprimerà si dovrà anche assicurare che non ne rimanga una copia in qualche cartella magari temporanea del server nella quale ha svolto le operazioni. Allo stesso tempo quando li trasmetterà si dovrà assicurare come descritto nel blocco precedente che la trasmissione sia criptata e nessun nodo lungo la rete possa trattenere una copia in chiaro di questi dati. Un’altra causa di creazione di copie di informazioni può essere quella di avere la necessità di manipolare tali informazioni in formati differenti rispetto a quelli con cui sono archiviate. Capita infatti a volte di dover compiere specifiche operazioni magari manualmente, magari una tantum o poche volte nel corso di lunghi periodi di tempo, operazioni per le quali è necessario riorganizzare i dati estraendoli e archiviandoli in una forma differente. Questi casi sono ad esempio il calcolo di una particolare statistica che normalmente il software non calcola automaticamente oppure una procedura di importazione ed esportazione verso un altro software. Ad ogni modo in condizioni del genere vengono solitamente create copie ad uso e consumo di una specifica operazione. Per questo motivo può capitare quindi di avere database o file temporanei che vengono utilizzati per archiviare e rileggere gli stessi dati presenti all’interno del database originale ma in un modo più semplice rispetto alla specifica situazione. Ma anche qui c’è da chiedersi dove saranno archiviati questi file, attraverso quali server transiteranno, quali e quanti operatori, programmatori, sistemisti, tecnici, analisti avranno accesso a questi file e soprattutto una volta terminate le operazioni verranno effettivamente rimosse tutte le copie esistenti? Sì perché basterà che anche una sola copia resti in giro, magari dimenticata su un server o su un’area di stoccaggio non protetta perché non pensata per contenere dati importanti a lungo termine ed ecco che avremo un database di migliaia o milioni di informazioni in bella vista e pronto per essere scaricato da internet. Infine non va trascurato il fatto che la maggior parte dei software al fine di incrementare le proprie performance utilizza un sistema che prende il nome di caching e che consiste fondamentalmente nel mantenere una copia delle informazioni più utilizzate in una sorta di area cuscinetto che viene chiamata appunto cache in modo da limitare il numero di accessi al sistema di archiviazione. Ciò vuol dire che a discrezione del software utilizzato esisteranno copie dei dati contenuti nel database che saranno però archiviate in aree differenti da dove si trova quest’ultimo e per periodi di tempo più o meno lunghi e questo sposta di fatto un numero imprecisato di informazioni in aree differenti dell’architettura del sistema rendendole così vulnerabili nel caso in cui non si proteggano anche questi altri spazi in modo adeguato. Un terzo sistema per condividere involontariamente le informazioni dei propri utenti è quello di comunicare con i soggetti coinvolti attraverso canali non protetti. Esistono infatti software che implementano numerosi sistemi di sicurezza per proteggere i dati ma poi li inviano ai propri utenti attraverso canali come l’email. Le email vengono letteralmente lette da tutti i nodi di smistamento lungo il percorso dal mittente al destinatario e ciò vuol dire che inserire informazioni di qualsiasi genere nelle email inviate ai propri utenti o ai propri operatori significa letteralmente spargerle lungo tutto il percorso. Nonostante ciò sono moltissimi i siti che vi reinviano a volte anche inutilmente le vostre stesse informazioni via email. Ad esempio ci sono siti di e-commerce che ad ogni ordine vi inviano una email con il contenuto dell’ordine e il vostro indirizzo al quale l’ordine verrà spedito. Oppure ci sono siti dai quali subito dopo esservi registrati vi vedrete ricapitare una email contenente il vostro username e la vostra password utilizzata per la registrazione. Ed è proprio questo il motivo per cui quando ci si registra ad un nuovo sito conviene sempre utilizzare una password temporanea e poi successivamente accedere al pannello del profilo e cambiare la propria password con quella definitiva, questo per evitare che il sito spiattelli la vostra email e la vostra password a tutto il mondo. Siamo dunque giunti al termine di questo decimo episodio. Io spero che l’argomento vi sia piaciuto e vi ringrazio per essere arrivati fin qui e come al solito vi invito a condividere l’episodio sui social, a commentare, a unirvi al gruppo telegram e vi ricordo che potete ascoltare il podcast su Spreaker, YouTube, Spotify ed iTunes e da qualche settimana anche su Alexa. Vi basterà dire Alexa apri pensieri in codice. Io intanto vi saluto, vi auguro una buona giornata e vi do appuntamento alla prossima settimana per un nuovo episodio.

Nascondi