La cybersecurity è probabilmente uno degli argomenti più caldi del 2020/21. La pandemia e lo smart working hanno aumentato drasticamente l'uso di quella cosa magica chiamata "Personal Computer": migliaia di persone da tutto il mondo con conoscenze informatiche praticamente pari a zero, hanno riscoperto i loro vecchi Personal Computer inutilizzati con le foto di fine anni '90 e il malware sotto la polvere, insieme a quel vecchio giornale conservato perché aveva qualche articolo divertente che non leggevano da più di 10 anni.
Negli ultimi due anni ho ricevuto molte email che dicevano
"Ehi, ci hanno hackerato, la tua email e alcuni dei tuoi dati sono ora in un data breach pubblico scaricabile da internet e non puoi letteralmente farci nulla".
E io del tipo
"Oh, bello saperlo... o forse no."
Una volta che i tuoi dati finiscono in un data breach, lo spam si intensifica. Nell'ultimo anno il numero di email di phishing, SMS e persino telefonate che ho ricevuto è quasi raddoppiato.
Data breach?
Un data breach è l'atto di rilasciare dati privati o/e riservati in un ambiente non affidabile.
Di solito accade a causa di un cyberattacco, e quel "di solito" non è messo lì a caso. Pensa a un sito su cui sei registrato dove le credenziali dell'amministratore sono "admin" con password "admin" e immagina un attaccante che le scopre a caso. Una volta entrato nel sito, l'attaccante può accedere a tutti i dati che ci sono dentro (comprese le tue credenziali di login e tutti i dati a te collegati), scaricarli in un file e venderli o, ancora peggio, rilasciarli liberamente su internet. Potresti pensare che "admin" come password sia una mossa stupida e che gli amministratori di sistema non siano stupidi... potresti restare sorpreso.
Se sei curioso di sapere se i tuoi dati sono trapelati da qualche parte, c'è un buon servizio che puoi usare chiamato "Have I Been Pwned" ("pwned" significa letteralmente "aver posseduto qualcun altro").
Homepage di Have I Been Pwned
È semplice: apri il sito, compili il campo con la tua email o il tuo numero di telefono (con il prefisso del tuo paese) e clicchi su "pwned?".
Nessuna fuga trovata
Se sei abbastanza fortunato, vedrai qualcosa come "no pwnage found". Sei al sicuro, ma non cantare ancora vittoria: resta all'erta, cambia le password e tieni d'occhio i data breach!
Fuga trovata
Ma se hai molti account, anche inutilizzati che non hai cancellato o che hai lasciato a prendere polvere, volente o nolente, potresti vedere il messaggio rosso che urla "Oh no — pwned!”.
Se continui a scorrere la pagina dei risultati, puoi vedere i breach in cui sei stato coinvolto e quali dati erano presenti in quella fuga di informazioni.
Il data breach in cui si trovano i tuoi dati
Per esempio, una delle mie email è in un data breach di un servizio chiamato "000webhost" dal 2015. Quel servizio offriva web hosting gratuito con PHP e MySQL e l'ho usato molto per i miei esperimenti, ma ho letteralmente pagato quegli "esperimenti gratuiti" con i miei dati. Puoi vedere che i dati trapelati erano: il mio indirizzo email, gli indirizzi IP dei miei login, nome e password.
Se hai scoperto che i tuoi dati sono in un data breach, la prima cosa da fare è cambiare le password che usi sugli indirizzi email trapelati o le password che usi per più di un sito. La best practice è usare una password diversa per ogni sito che usi: la cosa è un po' difficile, perché se vuoi usare password complesse probabilmente le dimenticherai dopo pochi minuti (se hai una memoria da pesce rosso come me), quindi il mio consiglio migliore è usare un password manager dove memorizzi tutte le tue password e devi ricordare solo una password principale per sbloccarle tutte!
La scelta di un password manager non è facile: ce ne sono molti e ognuno si concentra su aspetti diversi, ma lo scopo di questo articolo non è confrontarli, quindi ti suggerisco solo quello che uso io: BitWarden! È open source, puoi averlo gratis, puoi pagare per un piano famiglia, puoi persino avere una versione self-hosted. Sta a te, fai quello che vuoi e mantieni le tue password al sicuro e aggiornate periodicamente!
Hacking... Ethical Hacking... parliamone.
Ho sempre avuto una cotta per la cybersecurity e la verità è che su questo argomento ne so persino più di quanto pensassi (non abbastanza da essere considerato un pentester, ma magari… un giorno). Sviluppo software da otto anni e una delle prime cose che impari (se il tuo insegnante è abbastanza bravo, spoiler: il mio lo era) è "non fidarti degli utenti, MAI fidarti degli utenti".
In questi anni ho visto tanti ambienti: dalla blockchain e dalle strutture dati applicate ai plugin WordPress, passando per lo sviluppo Android e le REST API. Quello che ho davvero imparato da questi cambiamenti è stata l'architettura, i pattern e, in generale, che "pensare", progettare e strutturare un'applicazione è sempre molto più importante che scriverla e basta. Scrivere codice aiuta senza dubbio, perché conoscere i trucchi di un linguaggio può rendere più facile la parte di progettazione, tuttavia avere una visione ampia di come vuoi il tuo software è la parte più importante.
Ed ecco che entra in gioco la Cybersecurity. Molte volte, quando non hai una panoramica chiara di cosa stai programmando o devi costruirlo più in fretta perché deve essere pronto per ieri, inizi a fare schifezze. L'ho visto succedere un sacco di volte.
Qualche anno fa ho ricevuto una chiamata da uno dei miei colleghi (cambierò i nomi delle persone per privacy) che diceva "ho assegnato un lavoro a Jonathan ma ha combinato un casino ed è sparito. Mi serve qualcuno che sistemi quel lavoro in fretta perché deve andare online la settimana prossima e sei l'unico che conosco in grado di fare il colpo, mi aiuti?" Non ho detto di no, quindi mi hanno condiviso il repository git del progetto e le specifiche, ho iniziato a guardare il codice e la prima cosa che ho notato era che non c'era validazione dei dati. Tutti gli input venivano letteralmente presi dalla request e buttati nel database senza alcuna elaborazione. Il progetto aveva un budget basso, sono stato pagato quasi nulla per alcuni fix. Ho parlato una volta con i clienti avvertendoli che stavano usando una versione non sicura, ma non volevano pagare di più ed erano contenti di quello che avevano. Chissà se sono sopravvissuti agli attacchi della pandemia.
Comunque, situazioni come questa si possono evitare se la sicurezza, e in particolare la cybersecurity, viene presa sul serio. E il modo migliore per capire come mettere in sicurezza un'applicazione... è imparare come violarla.
“If you know the enemy and know yourself, you need not fear the result of a hundred battles. If you know yourself but not the enemy, for every victory gained you will also suffer a defeat. If you know neither the enemy nor yourself, you will succumb in every battle.” ― Sun Tzu, The Art of War
Come iniziare?
Come diceva Linus Torvald: "Talking is cheap, show me the code". Ho deciso di iniziare a imparare l'ethical hacking grazie all'algoritmo di YouTube (aspetta, cosa?). Un giorno mi ha suggerito di guardare un video del canale di John Hammond. Sono rimasto stupito da come riusciva a parlare di attacchi e da come sapeva spiegare le cose ed esplorare i tool con facilità. Sapevo che dietro quella disinvoltura c'erano tante ore passate a studiare, provare ed esplorare, ma la cosa mi ha entusiasmato per un bel po'. Ero davvero affascinato da lui e dalle sue capacità, continuo a guardare i suoi video e mi stupisce ogni volta.
Più tardi mi sono imbattuto in un altro video di un'intervista a John Hammond fatta da David Bombal. È lì che tutto è iniziato, è lì che sono stato davvero folgorato. David Bombal è un insegnante fantastico. Non lo conosco personalmente ma con i suoi video, i suoi contenuti e il modo in cui ti spinge a fare cose per migliorarti invece di restare passivo, mi ha dato la scintilla per iniziare a fare.
Amo la pratica. Ho studiato teoria per la maggior parte della mia vita e continuo a farlo all'università: la prima volta che un cliente mi ha pagato per sporcarmi le mani a scrivere codice ne sono stato estremamente felice. La filosofia di John è di sporcarti le mani nell'Ethical Hacking per iniziare, ed è quello che volevo.
Sono una persona estremamente curiosa, un solo modo non bastava quindi li ho presi entrambi:
- il modo di David: seguire il suo corso di Ethical Hacking che è totalmente per principianti. Mentre scrivo ho già guardato le prime sette sezioni del corso, che ho considerato come un ripasso perché uso Fedora Linux quotidianamente sul mio PC desktop e ho già buone basi di programmazione e networking, ma tutto quello che ho guardato era fatto davvero bene, chiunque può capire ogni concetto.
- il modo di John: giocare con PicoCTF. Non avevo mai giocato ai CTF (Capture The Flag) prima. Per chi non sa cos'è un CTF: è una sfida in cui c'è una flag nascosta che devi trovare usando l'ingegno e aggirando la sfida con le tue conoscenze. Mentre scrivo il mio punteggio su PicoCTF è 2810.
Come iniziare con PicoCTF
PicoCTF è estremamente facile da usare: ti registri, poi accedi, apri la sezione practice e sei pronto per partire.
Pagina practice di PicoCTF
Una volta scelta una sfida, mostrerà un nome, una descrizione, alcuni tag come la sua categoria, la sezione hint (non avrai sempre degli hint), la percentuale di utenti che "hanno preso la flag" e ovviamente i punti della sfida.
Obedient Cat
La prima sfida si chiama "Obedient Cat" e ti darà 5 punti. Se hai mai usato una bash su linux, probabilmente ti ricorderai di quel comando cat. La descrizione recita:
This file has a flag in plain sight (aka “in-the-clear”). Download flag.
e la parte "Download flag" ha un link. Puoi ottenere la tua flag nel modo che preferisci. Te ne mostro due davvero facili usando la bash. Il primo usa il comando curl:
$ curl https://mercury.picoctf.net/static/33996e32dce022205a6a36f69aba56f0/flag
Il secondo include il comando cat:
$ wget https://mercury.picoctf.net/static/33996e32dce022205a6a36f69aba56f0/flag
$ cat flag
In ogni caso, l'output sarà:
picoCTF{s4n1ty_v3r1f13d_2aa22101}
Questa è la flag. Dopo averla trovata, devi solo inviarla nella pagina della sfida precedente su picoCTF. Ogni flag sarà picoCTF{flag_here}. Ora, tutto quello che devi fare è fare pratica.
Ho letto una volta su un libro O'Reilly (Building Microservices) che quando inizi un progetto non esiste "il linguaggio di programmazione" per quel tipo di progetto, dovrai scegliere il linguaggio con cui ti trovi a tuo agio.
Alcuni linguaggi di programmazione si adattano ai "task di Cybersecurity" più di altri per via della loro diffusione, Python per esempio è uno di questi. Ci sono un sacco di tool scritti in Python, e puoi persino trovarne molti su distro di Pentesting come Kali Linux, ma questo non significa che se sei bravo in Java non puoi usare Java per fare pratica: probabilmente spenderai più righe di codice per alcuni task, ma ehi, resta tranquillo e fai pratica, l'obiettivo è quello!
Mantienilo etico
Photo by JESHOOTS.COM on Unsplash
C'è una linea sottile tra l'hacker buono e quello cattivo, sta a te scegliere un cappello. Perché un cappello? Perché gli hacker si distinguono in white hat e black hat: i white hat sono quelli che lo fanno per buone ragioni, per aiutare o per lavoro, vengono pagati per penetration testing e reporting di vulnerabilità, mentre i black hat sono quelli di cui leggi le notizie e che fanno i data breach. Se vuoi iniziare a imparare a fare hacking, fallo per il bene e mantienilo etico.
Se sei arrivato fin qui leggendo e ti è piaciuto, fammelo sapere e scrivi qui sotto se hai iniziato a imparare a fare hacking e ricorda di restare sempre tranquillo 🥂