1 00:00:00,000 --> 00:00:05,600 Quindi oggi presenteremo qualcosa di diverso. Di solito presento l'ethical hacking, 2 00:00:05,600 --> 00:00:12,320 il red teaming, i capture the flag, cose tecniche su questo. Ultimamente ho cercato di rivedere alcuni dei miei 3 00:00:12,320 --> 00:00:19,280 corsi per rivolgermi al pubblico dell'informatica, ai comuni operatori IT che non vogliono necessariamente 4 00:00:19,280 --> 00:00:24,320 passare alla cybersecurity, ma vogliono imparare alcune nozioni fondamentali di base sulla 5 00:00:24,320 --> 00:00:30,960 sicurezza. In passato la crittografia e gli schemi di cifratura erano le basi. Ultimamente queste cose 6 00:00:30,960 --> 00:00:38,320 sono cambiate, quindi penso che in questo momento per gli sviluppatori sia importante includere la prospettiva della sicurezza 7 00:00:38,320 --> 00:00:43,760 nel loro sviluppo. Ovviamente non vogliamo sottoporli a molto sforzo, sforzo extra, sforzo 8 00:00:43,760 --> 00:00:50,560 aggiuntivo per fare il loro lavoro, ma è importante perché in seguito sarà molto difficile 9 00:00:51,440 --> 00:00:58,240 coprire le vulnerabilità e così via. In questa prospettiva, chi di voi 10 00:00:58,240 --> 00:01:05,920 ha già un account GitHub? Più della metà. Ok, quanti di voi 11 00:01:05,920 --> 00:01:11,600 hanno visto una scheda segreta, non segreta, si chiama... c'è una scheda, lasciate che vi mostri, 12 00:01:12,560 --> 00:01:22,320 "Security" su GitHub. Ce ne sono alcuni, ok, vi mostro solo velocemente, è questa scheda qui, 13 00:01:23,200 --> 00:01:33,760 vedete, non è nascosta, ma normalmente pochissimi cliccano su quel pulsante della sicurezza. 14 00:01:34,560 --> 00:01:40,240 Quindi, oggi spiegheremo cosa fa effettivamente quel pulsante, questo è il senso, ok. 15 00:01:40,960 --> 00:01:42,480 Quindi, torniamo qui. 16 00:01:47,200 --> 00:01:51,760 Ok, per l'ambiente sanitario, ci sono molti dispositivi critici che vogliamo 17 00:01:51,760 --> 00:01:57,840 proteggere, quindi c'è molto software che gira in background, lato server, 18 00:01:57,840 --> 00:02:04,320 che memorizza immagini DICOM, come immagini radiografiche, risultati di analisi del sangue nel sistema informativo 19 00:02:04,320 --> 00:02:10,240 di laboratorio, ci sono dati medici critici. Tutti questi software hanno del codice all'interno, 20 00:02:10,240 --> 00:02:20,240 e il codice non è sempre ben scritto, non è gestito correttamente e presenta anche 21 00:02:20,240 --> 00:02:27,840 vulnerabilità. Prima, Koutras e Christos Grigorellis hanno presentato i buffer 22 00:02:27,840 --> 00:02:33,920 overflow in C, quindi queste sono alcune debolezze comuni che abbiamo in termini di codifica, 23 00:02:33,920 --> 00:02:40,480 quindi cercheremo di coprire queste cose di base qui. Più specificamente vedremo gli strumenti SAST, 24 00:02:40,480 --> 00:02:48,960 ovvero strumenti di scansione di sicurezza, ci sono diversi modi per farlo, 25 00:02:48,960 --> 00:02:55,040 useremo GitHub per fare una scansione automatizzata del nostro codice. Ovviamente, 26 00:02:55,040 --> 00:03:00,960 ci sono altri strumenti e metodologie che possiamo usare e qui posso presentare il DAST, 27 00:03:00,960 --> 00:03:06,560 che è il dynamic application security testing, che è diverso. Si esegue effettivamente il software 28 00:03:06,560 --> 00:03:11,040 e si cerca di identificare le vulnerabilità, noi ci atterremo principalmente agli strumenti SAST, 29 00:03:11,040 --> 00:03:17,760 all'analisi statica, per così dire. 30 00:03:17,760 --> 00:03:24,080 La questione è questa: abbiamo un workflow che costruiamo, eseguiamo uno strumento SAST, vediamo 31 00:03:24,080 --> 00:03:28,000 i set di regole, quindi è come se creassimo delle firme per vedere se ci sono avvisi, creiamo un report 32 00:03:28,000 --> 00:03:31,760 se ci sono vulnerabilità, prendiamo le metriche e poi mettiamo in sicurezza il nostro codice, cerchiamo di ri-sviluppare, 33 00:03:32,480 --> 00:03:37,840 cerchiamo di definire, ridefinire il codice e così via, ok. Quindi, qui, lasciatemi vedere, 34 00:03:39,680 --> 00:03:46,240 potete vedere che il codice sorgente è quello che abbiamo, poi andiamo al motore dello 35 00:03:46,320 --> 00:03:52,800 strumento che crea gli avvisi, poi facciamo il rilevamento delle vulnerabilità, vediamo che tipo di 36 00:03:52,800 --> 00:04:00,080 vulnerabilità avremo —presenteremo soprattutto un SQL injection più tardi— un report delle vulnerabilità 37 00:04:00,080 --> 00:04:04,800 che contiene tutte queste vulnerabilità e poi gli sviluppatori dovrebbero gestire tutti questi 38 00:04:04,800 --> 00:04:10,400 problemi sul codice e cercare di risolverli, ok. Quindi, questo è il ciclo ed è comune e 39 00:04:10,400 --> 00:04:17,680 potete pensare che lo sviluppo non sia come la maggior parte, me incluso come studente, 40 00:04:17,680 --> 00:04:22,880 pensava, ovvero: ok, svilupperò un software e basta, andrò online e basta, 41 00:04:22,880 --> 00:04:29,760 ma il software ha bisogno di supporto, quindi il software richiederà un anno, 42 00:04:29,760 --> 00:04:36,000 un altro anno e un altro anno e il supporto effettivamente aumenta quando si espande il 43 00:04:36,000 --> 00:04:43,200 software, quindi servono sviluppatori per risolvere in qualche modo i ticket, i bug, cercare di ri-sviluppare, 44 00:04:43,200 --> 00:04:50,000 cercare di ridefinire, cercare di modernizzare il codice, quindi richiede in realtà un'integrazione 45 00:04:50,000 --> 00:04:55,360 continua e uno sviluppo continuo anche dopo che il progetto arriva sul mercato, 46 00:04:55,360 --> 00:05:02,240 ok. Quindi, in questo ciclo, nel ciclo DevOps come lo chiamano molti, 47 00:05:02,240 --> 00:05:09,280 c'è un DevOps sicuro, ovvero come inserire la sicurezza all'interno del DevOps, in questo 48 00:05:09,280 --> 00:05:14,800 ciclo di integrazione continua e sviluppo continuo, ok. Quindi, lasciatemi andare qui. 49 00:05:17,040 --> 00:05:21,120 Ho diverse slide qui, penso che riceverete le slide più tardi, 50 00:05:21,120 --> 00:05:26,800 su come facciamo, come l'integrazione e il reporting, ma passerò alle cose pratiche 51 00:05:26,800 --> 00:05:34,720 proprio ora. Vedrete nuove parole, quanti di voi conoscono Jenkins? Non è Jenkins, 52 00:05:34,720 --> 00:05:45,760 ma ok, ne conoscete molti, non moltissimi, ma parecchi. Quando ero più giovane, nel 2018, 53 00:05:45,760 --> 00:05:51,520 penso di essere stato coinvolto in un progetto in cui volevano in qualche modo includere il GDPR e 54 00:05:51,520 --> 00:05:58,240 problemi di privacy su Jenkins e così via, vidi Jenkins e pensai: cos'è questo? Persino il logo di Jenkins 55 00:05:58,240 --> 00:06:05,680 è molto vecchia scuola, vediamo, è già usato sul mercato? Sì, è usato, ok. Quindi, 56 00:06:05,680 --> 00:06:14,080 Jenkins è come un server, un servizio web utile agli sviluppatori e 57 00:06:14,080 --> 00:06:19,760 ai manager per distribuire il codice. È come un sistema di ticketing, quindi inserite che tipo di 58 00:06:19,760 --> 00:06:25,280 pipeline volete distribuire, se è un docker, un codice, uno script Python, qualunque cosa, 59 00:06:25,280 --> 00:06:31,040 e Jenkins lo gestirà e ogni giorno o ogni mese o con qualunque frequenza definiate, 60 00:06:32,400 --> 00:06:40,400 il manager distribuirà il codice o i docker o distribuirà qualcosa automaticamente, ok. Ed è tutto 61 00:06:40,400 --> 00:06:46,720 usato soprattutto per grandi progetti di grandi aziende, per gestire il codice, il nuovo 62 00:06:46,720 --> 00:06:53,360 codice che viene caricato e così via. GitLab, penso che la maggior parte di voi lo conosca, è la versione open source 63 00:06:54,480 --> 00:06:59,680 di GitHub, quindi quello che succede è questo: quando sviluppate qualcosa, caricate il codice nel 64 00:06:59,680 --> 00:07:05,440 repository GitLab, inserite la nuova versione, nuovi script, nuovi script Python, nuovi docker container, 65 00:07:05,440 --> 00:07:12,480 Jenkins gestisce tutto questo, lo distribuisce sul server di produzione e poi gestite tutto insieme. 66 00:07:12,560 --> 00:07:18,240 Quindi, qui arriva la cosa che spiegherò sul server Git, 67 00:07:18,240 --> 00:07:21,840 come abilitare gli strumenti SAST per fare questo auditing 68 00:07:21,840 --> 00:07:26,560 del codice, ispezione del codice, analisi del codice, come volete chiamarlo, ok. 69 00:07:32,000 --> 00:07:38,480 Quindi, ci sono punti di forza e debolezze; ok, possiamo fare un penetration test e 70 00:07:38,480 --> 00:07:44,560 vedere i difetti e le vulnerabilità. Questo è qualcosa di diverso. Facciamo security by design, 71 00:07:44,560 --> 00:07:49,760 per così dire, mettiamo in sicurezza il nostro codice prima, quindi cerchiamo di risolvere i problemi virali. Ovviamente, 72 00:07:50,560 --> 00:07:56,880 quando lo faccio, cerco di pensare a entrambi i lati, quindi è, nella mia mente per astrazione, 73 00:07:56,880 --> 00:08:02,000 come il white box testing e il black box testing. Quindi, quando faccio penetration testing, 74 00:08:02,000 --> 00:08:06,320 è come una scatola nera, cerco di definire le vulnerabilità. Quando faccio ispezione del codice, 75 00:08:06,400 --> 00:08:10,240 è come una scatola bianca. Ho già il codice e cerco di ispezionarlo e così via. 76 00:08:10,240 --> 00:08:16,400 Quindi tutto è richiesto, diciamo, tutto è possibile. Dipende da qual è la 77 00:08:17,200 --> 00:08:24,080 prospettiva, gli obiettivi, i requisiti dell'audit che volete fare. C'è difficoltà 78 00:08:24,080 --> 00:08:29,600 perché molte aziende vengono e dicono: ok, ho bisogno di mettere in sicurezza i miei servizi. 79 00:08:29,600 --> 00:08:33,040 E dicono: ok, voglio fare un penetration test. E tu dici: 80 00:08:33,840 --> 00:08:38,800 ci sono anche altre cose. Puoi fare una valutazione delle vulnerabilità. Puoi fare una valutazione del rischio. 81 00:08:38,800 --> 00:08:44,560 Puoi fare ispezione del codice. Quindi ci sono molti aspetti diversi su come abilitare la sicurezza. 82 00:08:44,560 --> 00:08:49,200 Ed è difficile per le persone esterne alla cybersecurity capire 83 00:08:49,200 --> 00:08:55,120 queste diverse prospettive, ok? Ma ecco alcune debolezze e punti di forza. Per me, 84 00:08:55,120 --> 00:09:01,440 il principale punto di forza che non riguarda la cybersecurity sul codice sicuro è che imparare l'analisi del codice 85 00:09:01,440 --> 00:09:11,120 sicuro alla fine aiuta gli sviluppatori. Nel mio dottorato, uso la cybersecurity come mezzo 86 00:09:11,120 --> 00:09:18,960 principale per istruire altro personale. Quindi uso la cybersecurity per insegnare alle persone l'amministrazione 87 00:09:18,960 --> 00:09:25,840 Linux, per insegnare il logging, per insegnare lo sviluppo, per vedere aspetti tecnici 88 00:09:25,840 --> 00:09:33,200 delle reti, per esempio. Quindi, alla fine, usando l'analisi del codice sicuro, 89 00:09:34,320 --> 00:09:40,880 uno sviluppatore può imparare a sviluppare meglio perché, oltre ai difetti di sicurezza, vedrà 90 00:09:40,880 --> 00:09:45,680 anche alcuni difetti in termini di progettazione, in termini di funzionalità e così via. 91 00:09:45,680 --> 00:09:50,560 Quindi è un buon modo per rivolgersi agli studenti universitari e cercare di insegnare loro anche 92 00:09:51,120 --> 00:09:58,320 alcune basi della codifica sicura, ok? Ci sono anche differenze e benefici del SAST 93 00:09:58,320 --> 01:10:05,760 rispetto al DAST, all'analisi dinamica, ma non mi soffermerò su questo. 94 00:05:05,760 --> 00:05:10,960 Alcune cose di base che ho già esplorato: DevOps, DevSecOps, qualcosa di simile relativo 95 00:05:10,960 --> 01:10:18,240 a questo modulo, strumenti che useremo per l'integrazione continua e lo sviluppo continuo. 96 00:10:18,880 --> 01:10:25,120 C'è l'analisi dei componenti software, l'analisi SCA. A volte si vuole persino fare 97 00:10:26,000 --> 01:10:31,760 l'analisi dei componenti a livello di sistema operativo. Quindi si fa una valutazione della configurazione SCA. 98 00:10:31,760 --> 01:10:36,960 SCA è una valutazione della configurazione sicura. Quindi si può andare sul server Windows, 99 00:10:36,960 --> 01:10:41,840 sul server Linux e dire: ok, hai abilitato l'obbligo della password? 100 00:10:41,840 --> 01:10:47,200 Hai il firewall abilitato? Hai il DNS, qualunque cosa? Quindi è come una 101 00:10:47,200 --> 01:10:51,360 valutazione della configurazione, ok? E questo può essere fatto sia sul sistema operativo, 102 00:10:51,360 --> 01:10:56,400 sia sul codice. E altre cose come la gestione delle vulnerabilità e altro. 103 00:10:56,400 --> 01:11:00,800 Quindi fornisco solo, sapete, un po' di terminologia, alcune parole chiave che usiamo 104 00:11:01,360 --> 01:11:07,120 per capire il contesto di quello che stiamo facendo qui, ok? Sono tutte collegate. 105 00:11:07,120 --> 01:11:12,720 Anche queste cose sono collegate: GitHub, GitLab, Docker, ok? Qualcuno può dire: ok, sono 106 00:11:12,720 --> 01:11:18,800 Jails, non è Docker, sono Jails di Linux. Possono essere container Linux, LXC, qualunque cosa, 107 00:11:18,800 --> 01:11:26,000 diciamo Docker. Script Ansible, Jenkins e le altre cose che non ho usato fino ad ora. 108 00:11:26,000 --> 01:11:31,360 E ci sono anche cose pratiche come Vagrant. Quanti di voi conoscono Vagrant? 109 00:11:32,800 --> 01:11:41,040 Ok, Vagrant è come, sapete, come VirtualBox serve a distribuire una VM. Vagrant serve a 110 00:11:41,040 --> 01:11:48,720 creare più VM con un clic. Quindi è come un docker, ma per le VM. Create la topologia, 111 00:11:48,720 --> 01:11:54,400 la topologia di rete, definite gli indirizzi IP, quanto spazio su disco serve, quante 112 00:11:54,400 --> 01:12:00,240 CPU usare. E con un clic, potete avviare e distribuire cinque diverse macchine virtuali 113 00:12:00,960 --> 01:12:05,280 con un clic. E tutte saranno legate insieme, collegate e così via. 114 00:12:05,280 --> 01:12:12,400 Quindi, questi sono script Vagrant. Ultimamente, questo è stato rivisto nella tecnologia chiamata Terraform. 115 00:12:12,400 --> 01:12:18,320 Quindi Terraform è come un'estensione di docker e Kubernetes e dicono: ok, faremo 116 00:12:18,320 --> 01:12:25,600 quello che facciamo per docker e Kubernetes, ma per le VM e hanno creato Terraform. Ok, ma questi 117 00:12:25,600 --> 01:12:32,880 sono usati soprattutto sui servizi cloud. Quindi, persino io, non ho fatto deployment su Terraform. Principalmente, 118 00:12:32,880 --> 01:12:41,280 Terraform è usato su AWS, su Amazon o su Azure, diciamo, su Microsoft Azure su grandi, diciamo, 119 00:12:41,280 --> 01:12:47,680 topologie che possiamo usare. E poi ci sono anche Jenkins e così via, il che è particolare. Ho cercato di 120 00:12:47,680 --> 01:12:52,960 trovare materiale, materiale educativo su Jenkins ed è difficile trovare qualcosa di molto concreto. 121 00:12:52,960 --> 01:12:59,280 Quindi è una buona opzione. È come una ricerca o come una tesi, diciamo, per gli studenti creare, 122 00:12:59,280 --> 01:13:04,960 diciamo, del materiale educativo e alcune esercitazioni come Jenkins con la sicurezza 123 00:13:04,960 --> 01:13:10,400 e cercare di avere dei DevOps sicuri come esercitazione, come laboratorio pratico, 124 00:13:10,400 --> 01:13:16,880 per imparare Jenkins e imparare la sicurezza usandola all'interno dell'integrazione continua 125 00:13:16,880 --> 01:13:21,280 e dello sviluppo continuo. È una cosa bella che si può fare. Ho cercato in giro, ma 126 00:13:22,000 --> 01:13:27,680 non mi è stato possibile trovare nulla del genere. Quindi, cose che vedremo anche, 127 00:13:27,680 --> 01:13:34,240 CVE e CWE, ci sono alcune differenze. Qualcuno di voi sa qual è la differenza? 128 00:13:34,240 --> 01:13:41,600 Per me è stato difficile. Ma sapete dirmi, tornerò indietro, solo per vedere la risposta. 129 00:13:41,600 --> 01:13:46,960 Qual è la differenza tra vulnerabilità comune e debolezza comune? E c'è anche CAPEC, 130 00:13:48,000 --> 01:13:52,880 ovvero gli script di attacco, gli strumenti di attacco, gli scenari di attacco, diciamo. 131 00:13:52,880 --> 00:14:06,080 Sapete la differenza? È difficile, lo so. Sì. 132 00:14:23,840 --> 00:14:33,440 CWE, esatto. Avete ragione in un certo senso. È come se il CWE fosse un'astrazione, 133 00:14:33,440 --> 00:14:38,960 cosa può andare storto, come un SQL injection? Mentre il CVE, la vulnerabilità comune, 134 00:14:38,960 --> 00:14:45,840 è l'esatta vulnerabilità per cui quel server Apache insieme a questo script PHP 135 00:14:45,840 --> 00:14:51,360 crea questa vulnerabilità che ha un'istanza specifica. Quindi, i CVE sono come le istanze specifiche 136 00:14:51,360 --> 00:14:58,080 del CWE. Il CWE è più simile al difetto generico, al bug generico, 137 00:14:58,080 --> 00:15:04,880 al generico SQL injection. Quindi, i CVE sono collegati al CPE per la piattaforma, l'enumerazione della piattaforma. 138 00:15:04,880 --> 00:15:11,280 Su questa specifica versione di Apache, su questo specifico codice, c'è il CVE. Mentre il CWE è 139 00:15:11,280 --> 00:15:17,200 più simile all'entità generica. E c'è il CAPEC, che è l'enumerazione dei modelli di attacco comuni, 140 00:15:17,200 --> 00:15:20,720 che è in realtà il modo in cui si sfrutta. Quindi è l'exploitation. Quindi è tipo, 141 00:15:20,720 --> 00:15:26,640 cosa fai? Cosa applichi come attacco per fare le cose? A volte c'è una sovrapposizione tra 142 00:15:26,640 --> 00:15:32,720 CWE e le informazioni che avete imparato nel CAPEC, ma questa è la differenza. Ci serve solo 143 00:15:32,720 --> 00:15:39,120 per vedere i diversi risultati. Quindi il workflow è questo: sviluppate il codice, 144 00:15:39,120 --> 00:15:47,840 lo caricate su GitHub, usate il linguaggio QL che crea i difetti comuni che abbiamo nel 145 00:15:47,840 --> 00:15:53,120 codice. Questo crea dei report e noi riceviamo un report che dice: ok, questo codice ha questa vulnerabilità, 146 00:15:53,120 --> 00:15:59,040 ha questo problema all'interno del codice. Ok. E facciamo la pratica. Quindi clicchiamo su security, lo 147 00:15:59,040 --> 00:16:05,600 presenterò brevemente qui e poi andrò passo dopo passo a presentarlo. E potete fare questo esercizio 148 00:16:05,600 --> 00:16:15,120 anche dal vostro lato. Ho caricato un codice. Il repository GitHub funziona con tali strumenti se 149 00:16:15,120 --> 00:16:21,760 avete il repository pubblico. Quindi, se lo avete privato, dovreste abilitarlo come repository 150 00:16:21,760 --> 00:16:26,960 pubblico per poter fare l'analisi. Poi andate in security e andate in code 151 00:16:26,960 --> 00:16:33,520 scanning in fondo. Dov'è il code scanning? Poi selezionate che tipo di codice 152 00:16:34,480 --> 00:16:40,800 volete usare. CodeQL è il repository più usato su GitHub. 153 00:16:41,440 --> 00:16:47,040 Poi questo crea un workflow come questo. Se siete esperti, potete in qualche modo modificarlo o creare 154 00:16:47,040 --> 00:16:54,880 un workflow personale. È come uno script automatizzato che definisce quando avverrà l'avviso. 155 00:16:54,880 --> 00:17:00,400 Cosa apparirà esattamente nell'avviso? L'automazione della risposta, qualunque cosa. Quindi è come un 156 00:17:00,480 --> 00:17:06,720 workflow, penso sia un file YAML. È un file YAML che definisce cosa farà l'automazione 157 00:17:07,440 --> 00:17:12,320 quando fate l'analisi del codice. Di default, abilitate il file predefinito del 158 00:17:12,320 --> 00:17:18,720 workflow e questo funzionerà bene. E poi il code scanning apparirà con questi avvisi 159 00:17:18,720 --> 00:17:24,240 e dirà che: ok, hai un carattere di escape inutile in una regular expression in quella riga, 160 00:17:24,240 --> 00:17:29,520 numero di riga. Hai un escaping incompleto delle stringhe in questa riga. 161 00:17:29,520 --> 00:17:33,520 E questo fornirà anche il livello di rischio se è alto, medio, basso, 162 00:17:33,520 --> 00:17:41,600 e fornirà anche la specifica vulnerabilità come questa. Quindi, escaping incompleto della stringa, 163 00:17:41,600 --> 00:17:50,240 potete vedere. Non è la presentazione migliore, ma sì, lì dice: 164 00:17:50,240 --> 00:17:55,840 questo sostituisce solo la prima occorrenza di un punto. E potete vedere qui, scusate se mi sono allontanato 165 00:17:55,840 --> 00:18:03,600 dal microfono, CWE, CWE, CWE. Quindi, se cliccate qui sui CWE, potete vedere effettivamente 166 00:18:03,600 --> 00:18:10,880 le informazioni di questa configurazione di questi flussi di codice. E lo stesso succede qui, per esempio. 167 00:18:10,880 --> 00:18:18,720 E specifica esattamente dove il vostro codice ha un difetto come qui, potete vedere. Quindi presenta anche 168 00:18:18,720 --> 00:18:27,360 qui le informazioni, di cosa si tratta. E il più delle volte fornisce anche alcune azioni di mitigazione, 169 00:18:27,360 --> 00:18:32,160 proposte, cosa dovete fare, cosa dovete cambiare nel codice per essere sicuri. 170 00:18:33,680 --> 00:18:39,840 E ne potete vedere molti così. Ho molte vulnerabilità che spiego 171 00:18:39,840 --> 00:18:45,440 qui, ma possiamo vederlo dal vivo. Quindi questo è l'esercizio e lasciatemi controllare l'ora 172 00:18:46,400 --> 00:18:54,320 giusto per vedere quanto tempo abbiamo. Ho un repository o, ovviamente, lo rubo, 173 00:18:54,880 --> 00:19:00,080 come fanno la maggior parte degli sviluppatori, da un altro repository, ma potete vedere il branch, il fork 174 00:19:00,080 --> 00:19:07,840 che ho clonato. Questo è un corso, un esercizio che ho trovato su GitHub, ed è molto buono. 175 00:18:07,840 --> 00:18:12,480 E potete andare passo dopo passo, vi spiegherà che: ok, iniziate il corso, 176 00:18:13,040 --> 00:18:17,840 e poi iniziate il corso, cliccate sui punti d'azione che ci sono lì. È tipo un 177 00:19:17,840 --> 00:19:24,480 esercizio passo dopo passo. E poi, diciamo, la cosa magica che succede, e non lo sapevo, 178 00:19:24,480 --> 00:19:32,240 è che, quando fate i passi e poi aggiornate il repository GitHub, il file readme 179 00:19:32,240 --> 00:19:38,080 cambierà dopo 20 secondi e avrà i passi successivi da seguire. Quindi è 180 00:19:38,080 --> 00:19:45,840 bello che succeda, che possiate fare anche questo. Quindi, questi valori, e andate passo dopo passo e potete 181 00:19:45,840 --> 00:19:54,320 provare a iniziare il corso, l'inizio del corso vi permetterà di clonare il repository GitHub e poi 182 00:19:54,320 --> 00:20:04,480 andate clic dopo clic e andate a cliccare sull'opzione security e così via. Sì. Errore 404 sul 183 00:20:04,480 --> 00:20:14,880 codice QR. Sul link, sì, forse è diverso. Sul codice QR, forse no. Forse, sì, forse, 184 00:20:14,880 --> 00:20:23,760 sì, scusate, forse potete, sì, lasciatemi mostrare. Potete seguire solo il repository, 185 00:20:23,760 --> 00:20:33,280 il menu, Ionian CTF, e basta. È strano. È il mio repository, dovrebbe essere attivo. 186 00:20:34,720 --> 00:20:41,040 Forse avete cliccato male su qualcosa. È in maiuscolo. CTF è in maiuscolo. Quindi è uppercase. 187 00:20:42,640 --> 00:20:45,040 L'altro potrebbe essere sbagliato, ma sì, è così. 188 00:20:47,040 --> 00:20:50,800 Ma se cliccate qui, va bene. E se cercate anche su Google, 189 00:20:50,800 --> 00:20:56,240 Ionian CTF Google, troverete il repository. Sì, codice QR, scusate per quello. Pensavo che, 190 00:20:56,800 --> 00:21:01,520 con un cellulare, poteste prendere il link e poi scriverlo. Ok. 191 00:21:04,160 --> 00:21:10,160 Comunque, lo lascio solo un secondo per farvelo vedere. Quindi, faremo questo esercizio, magari, 192 00:21:10,160 --> 00:21:15,280 insieme per vedere qual è il flusso e come tutto questo si unisce. E poi avrò degli altri 193 00:21:15,280 --> 00:21:23,680 esempi da farvi vedere. Qualcuno di voi è entrato nel repository? Va bene? Sì? Va bene per 194 00:21:23,760 --> 00:21:32,000 voi? No, va bene. Ok, grazie. Bene. Allora, lasciatemi andare. Normalmente non uso slide, quindi 195 00:21:33,440 --> 00:21:41,680 andrò direttamente qui. L'ho già fatto come esercizio, ma cercherò di farlo 196 00:21:42,560 --> 00:21:49,440 di nuovo per voi. Quindi andrò nel branch, nel main, diciamo, 197 00:21:50,320 --> 00:21:57,440 repository, e cliccherò su "start the course". Ok, crea un nuovo repository. Questo permetterà 198 00:21:57,440 --> 00:22:05,200 a me di creare, di clonare il repository come mio. Quindi lo avrò così, come numero due, 199 00:22:06,160 --> 00:22:13,680 voi date che tipo di nomi di repository volete. Lo lascio pubblico per fare la 200 00:22:13,680 --> 00:22:18,240 scansione più tardi, e creo il repository. Richiederà un po' di tempo. Sì? 201 00:22:20,560 --> 00:22:24,160 No, non sta clonando sul laptop. Sta clonando sull'account GitHub. 202 00:22:25,200 --> 00:22:30,880 Avete già un account GitHub? Sì. Clonerà sull'account GitHub, un nuovo repository 203 00:22:30,880 --> 00:22:36,560 sarà creato sull'account GitHub con i nomi che fornite. Sì? 204 00:22:37,040 --> 00:22:44,800 Sì. Se cliccate su start, vi reindirizza automaticamente al fork. Ok. 205 00:22:47,360 --> 00:22:52,880 Potete farlo manualmente. Potete clonare manualmente, ma comunque è lo stesso. Cloneremo solo il 206 00:22:52,880 --> 00:23:02,080 repository. Grazie. Sì, penso che per me ora sia fatto. Quindi potete vedere skills introduction 207 00:23:02,080 --> 00:23:11,840 to CodeQL 2. Quindi è come un nuovo repository clonato dal repository principale. È un fork dal repository 208 00:23:11,840 --> 00:23:19,840 principale. Ed ecco il codice. Quindi, qui dentro, potete vedere server. Sul server c'è un codice 209 00:23:19,840 --> 00:23:25,840 in Python e una web app. Ecco il codice che forniscono. È molto semplice. Il codice è 210 00:23:25,840 --> 00:23:31,520 solo per esempio. E la web app, non so se hanno una web application e uno 211 00:23:31,520 --> 00:23:38,000 sqlite che si connette e così via. Quindi questo è il codice, ok. Qui, ok. Va bene. Ora, 212 00:23:38,000 --> 00:23:43,120 non lo abbiamo, ma iniziamo. Abilitate CodeQL. CodeQL è come... ci sono molti 213 00:23:43,120 --> 00:23:49,600 software. Sceglieremo uno strumento di scansione del codice che ha librerie per supportare JavaScript, Python, Ruby. 214 00:23:49,600 --> 00:23:56,480 Non ricordo quali sono le compatibilità di CodeQL. Spiega tutto qui. 215 00:23:57,440 --> 00:24:03,280 Spiega come andare lì e abilitarlo. E dice bla bla bla, fate questo e quello e abilitate 216 00:24:03,280 --> 00:24:14,080 CodeQL. Andiamo su security. Ok. E poi andiamo su code scanning, come ho mostrato prima. 217 00:24:15,040 --> 00:24:25,440 E poi clicco su configure scanning tool. Ok. Ed ecco una scansione del codice. Ovviamente, 218 00:24:25,440 --> 00:24:31,440 ci sono altre cose molto utili o carine. Mi piace sempre cercare le cose in giro. 219 00:24:31,440 --> 00:24:36,960 È un buon modo per un esperto di cybersecurity cercare le cose. Quindi potete vedere qui, 220 00:24:36,960 --> 00:24:42,720 grafico delle dipendenze. Hanno anche gli avvisi di Dependabot. E hanno anche 221 00:24:43,680 --> 00:24:49,440 avvisi sulle dipendenze, diciamo. Quindi si tratta anche di dipendenze. Immaginate di chiamare una 222 00:24:45,160 --> 00:24:56,000 specifica libreria Python che è obsoleta e presenta vulnerabilità. Quindi questo Dependabot 223 00:24:56,000 --> 00:25:02,080 potrebbe creare quel tipo di avviso, ma non è questo lo scopo ora. Analisi CodeQL. 224 00:25:02,080 --> 00:25:08,160 Quindi andremo qui e potrete abilitare l'analisi CodeQL in modalità predefinita o avanzata. Quindi, 225 00:25:08,160 --> 00:25:14,880 definite il workflow. Definite il file yaml che definirà le firme, il tempo, 226 00:25:14,880 --> 00:25:21,920 il timestamp, quando inizierà la scansione del codice e così via. Clicchiamo su default 227 00:25:22,560 --> 00:25:28,080 perché non sappiamo come fare le personalizzazioni, gli avanzamenti. 228 00:25:28,080 --> 00:25:33,120 E questo spiega che ok, è stato identificato Python sull'account GitHub 229 00:25:33,680 --> 00:25:43,520 e abilitate Python, le librerie Python di CodeQL. Abilitate QL, CodeQL. E poi vedrete 230 00:25:43,520 --> 00:25:52,640 questo setup di CodeQL. Richiederà un minuto. Dipende dal repository, 231 00:25:52,640 --> 00:25:59,920 da quanto è grande il repository. Ma alla fine, dopo circa un minuto, si fermerà 232 00:25:59,920 --> 00:26:05,040 e dirà "finito". Ovviamente potete chiudere la scheda. Questo gira in background. Quindi, 233 00:26:05,040 --> 00:26:10,640 potete tornare indietro e cliccare secure e questo girerà in background. Quindi, quando questo 234 00:26:10,640 --> 00:26:17,200 finisce, potete vedere qui, non avrà risultati proprio ora. Se configuro qui, 235 00:26:17,200 --> 00:26:22,400 vedrò anche che sta ancora lavorando in background. Quindi bisogna aspettare un po'. Sì? 236 00:26:22,800 --> 00:26:32,480 Inizia dal passo quattro. Siete andati nel main branch? 237 00:26:35,280 --> 00:26:42,160 Dovete andare nel main? Sì, forse avete cliccato su start course? Forse è meglio 238 00:26:42,160 --> 00:26:48,160 cliccare su start course. Forse tornerà anche al repository principale di nuovo 239 00:26:48,720 --> 00:26:54,880 e cliccate su start course sul pulsante verde. Forse questo crea anche altre cose. 240 00:26:56,880 --> 00:26:59,760 Sì. Avete cliccato su start course sul pulsante verde? 241 00:27:03,280 --> 00:27:06,160 Sì, dovete andare nel main, lasciate che vi mostri. 242 00:27:08,960 --> 00:27:15,120 Sì, sì. Sì. Sì, dovete. 243 00:27:15,280 --> 00:27:19,680 Quindi c'è un numero uno e un numero due qui. 244 00:27:23,760 --> 00:27:31,840 Qui. Lasciate che vi mostri. Andate qui o dove volete. Questo è il mio repository principale, 245 00:27:31,840 --> 00:27:36,960 del mio repository principale, e quello è generato da skills, qualunque cosa. Quindi dovete tornare indietro 246 00:27:36,960 --> 00:27:44,880 e indietro e indietro e arrivare al repository principale. Lo avete trovato. È un buon esercizio anche questo 247 00:27:44,880 --> 00:27:49,600 perché capiamo la differenza tra i fork e il main branch. Quindi questo è il main branch. 248 00:27:50,400 --> 00:27:57,360 Il mio inizia dal quattro perché l'ho già iniziato. Quindi va dal quattro. Dovete andare nel main 249 00:27:58,320 --> 00:28:02,240 fork, nel main branch, nel repository principale, indietro e indietro e indietro qui. 250 00:28:03,920 --> 00:28:10,960 Andate e vedete. Magari posso zoomare un po' anche io. Quindi cliccate qui e andate qui e 251 00:28:11,040 --> 00:28:20,720 inizia. Ok. Allora, lasciatemi andare qui. Vedete code analysis last scan un minuto fa. Quindi, 252 00:28:20,720 --> 00:28:26,720 questo è stato fatto con successo. Quanti di voi hanno già fatto CodeQL in passato? 253 00:28:26,720 --> 00:28:36,400 Siete voi? Ok. Altri? Ok. Allora è un bene. Se lo sapeste già tutti, 254 00:28:36,960 --> 00:28:46,400 sarebbe un casino, ok. Fortunatamente non lo sapete. Ok. Quindi CodeQL last scan un minuto fa 255 00:28:46,400 --> 00:28:52,080 e ci sono anche i workflow qui. Magari possiamo fare un piccolo giro veloce su questo. 256 00:28:53,120 --> 00:28:59,920 Potete vedere CodeScanning, CodeQL e hanno altri strumenti di analisi come 257 00:29:00,640 --> 00:29:08,480 FortifyScan o quelli commerciali, ma è codice, come sapete, molto popolare. 258 00:29:09,120 --> 00:29:14,160 E ci sono diverse cose che potete controllare, in realtà. 259 00:29:14,880 --> 00:29:22,640 Snyk security. Anche Snyk è molto popolare. Synopsys è popolare, ma comunque, alcuni di questi 260 00:29:22,640 --> 00:29:29,360 supportano il C, altri supportano JavaScript. Dipende dal produttore. Alcuni 261 00:29:29,360 --> 00:29:34,080 sono migliori su un linguaggio specifico, altri su altri linguaggi e così via. 262 00:29:35,920 --> 00:29:42,400 Sì. E ci sono anche alcuni strumenti di scansione come KubeScan, che fanno l'analisi del rischio e per 263 00:29:42,400 --> 00:29:48,560 errori di configurazione per Kubernetes o per container Docker. Questa è un'altra cosa, 264 00:29:48,560 --> 00:29:54,800 fare l'analisi del codice sul Docker. Chiamate un Docker, definite una specifica versione di Ubuntu 265 00:29:54,800 --> 00:30:01,840 o una versione di Alpine. Questa versione di Alpine è obsoleta? C'è un difetto? Quindi questo aiuta alla fine 266 00:30:01,840 --> 00:30:08,480 molto le persone a distribuire dockers o dati Kubernetes che non abbiano vulnerabilità. 267 00:30:08,480 --> 00:30:14,080 Ok? Quindi è come un metodo di prevenzione per distribuire qualcosa che sia già in qualche modo 268 00:30:14,080 --> 00:30:22,080 sicuro. Quindi si diminuisce la superficie di attacco il più possibile. Ed è molto 269 00:30:22,080 --> 00:30:29,440 interessante. Mobsf, che è per la versione Android, ho avuto in passato delle tesi che si sono concluse con un 270 00:30:29,440 --> 00:30:36,480 paper di ricerca di uno studente che ha testato Mobsf in un'applicazione Android per controllare 271 00:30:36,480 --> 00:30:42,000 le vulnerabilità e vedere che vulnerabilità avesse l'applicazione Android e cercare di fare le 272 00:30:42,000 --> 00:30:48,960 azioni di mitigazione. E ha creato uno scenario educativo su come qualcuno possa imparare lo sviluppo Android 273 00:30:49,920 --> 00:30:56,720 e vedere i problemi di sicurezza dello sviluppo Android. Ok? E questo si estende anche alla 274 00:30:56,720 --> 01:31:04,800 mobile security, potete vedere su Android o iOS, il che è molto bello da imparare per gli studenti. 275 01:31:05,600 --> 01:31:12,720 E le altre cose, ok, non andrò oltre. SonarQube è anche molto popolare e ce ne sono altri 276 01:31:12,720 --> 01:31:18,080 e altri ne arriveranno in futuro. Ok. Quindi questi sono supportati da GitHub. 277 01:31:18,080 --> 01:31:23,440 Ovviamente ce ne sono altri se volete trovarli che non potete effettivamente distribuire da soli in un sistema di 278 01:31:23,440 --> 01:31:29,520 apprendimento e fate l'analisi di scansione da riga di comando e così via. Ok. Ma questo fornisce un modo facile 279 01:31:29,520 --> 01:31:34,800 per uno sviluppatore, per uno studente, per le persone dopo gli studi 280 01:31:34,800 --> 01:31:39,440 per fare dell'analisi di sicurezza sul codice. Ok. Ed è molto semplice. Sono solo due 281 01:31:39,440 --> 01:31:44,640 o tre pulsanti. Ok. Ma fornisce molte informazioni ed è molto bello. Ok. 282 01:31:44,640 --> 01:31:51,360 Andiamo su security. Security code scanning. Potete vedere l'indicazione numero due 283 01:31:51,360 --> 01:31:56,480 che dice che sono state trovate due vulnerabilità di sicurezza. Funziona per voi? Va bene? 284 01:31:56,480 --> 01:32:03,280 Ok. Quindi, code scanning. SQL query built from user-controlled sources. Potete vedere il 285 01:32:03,280 --> 01:32:10,000 livello di gravità: alto, medio o basso. E spiega anche che è su server route, 286 01:32:10,000 --> 01:32:17,120 server route. Quindi lo script Python ha alcuni flussi di sicurezza. Ok. E se vado qui, 287 01:32:17,120 --> 01:32:26,720 dice specificamente che alla riga numero 22, c'è select star, seleziona tutto da books 288 01:32:26,720 --> 01:32:34,160 dove author è come qualunque carattere e di seguito il nome dell'autore. Quindi, 289 01:32:34,160 --> 01:32:41,520 se cliccate JRR Tolkien, so che è uno dei miei preferiti, e poi fornisce il risultato. 290 01:32:42,160 --> 01:32:49,200 E c'è un problema qui. Un problema. Chi sa qual è il problema qui? Sì? Forse tu. Beh, 291 01:32:49,200 --> 01:32:54,080 eri il primo con la maglia verde. No, eri tu quello in verde. Vuoi bypassare la... 292 01:32:54,800 --> 01:32:56,000 Passalo a quello in arancione. 293 01:33:03,760 --> 01:33:08,800 Corretto. Quindi è come se non aveste un input sanitizzato. Non avete un filtraggio. 294 01:33:08,800 --> 01:33:16,240 È come se l'utente potesse effettivamente cliccare qualunque cosa voglia lì. Punto, trattino, meno, 295 01:33:16,240 --> 01:33:21,280 qualunque carattere speciale. Ed è possibile per lui inserire il valore lì. Sì. 296 01:33:24,640 --> 01:33:34,720 Sì. Sì. Password. Utenti amministratori, utenti WP da WordPress, per esempio, o qualunque cosa. 297 01:33:34,720 --> 01:33:43,680 Otterrà alla fine dei risultati da tabelle che non gli è permesso avere. Ok. Quindi, ok. Qui, 298 01:33:43,680 --> 01:33:48,640 è focalizzato soprattutto su questo. La raccomandazione riguarda la blind SQL injection. 299 01:33:48,640 --> 01:33:55,360 Quindi ha una soluzione, credo. Sì, ha un esempio qui. E fornisce molti dettagli, 300 01:33:55,360 --> 01:34:02,720 che potrebbero non essere molto correlati al nostro caso, ma è bene leggerli perché in qualche modo 301 01:34:02,720 --> 01:34:09,360 riflettono ciò che accade qui. Ok. E ha anche drop tables e ha altre query SQL qui, 302 01:34:09,360 --> 01:34:14,480 che è importante per me. E fornisco questo perché è il mio dottorato, il dottorato che ho fatto, e 303 01:34:14,560 --> 01:34:20,880 anche il mio post-doc: come la cybersecurity aiuti altre persone che non si occupano di cybersecurity. 304 01:34:20,880 --> 01:34:25,440 A loro non interessa la cybersecurity. Non gli piace, diciamo. Ho incontrato molte persone che dicono: 305 01:34:25,440 --> 01:34:30,080 non mi piace la cybersecurity, è noiosa. Ok. Mi occupo di AI o di sviluppo. 306 01:34:30,800 --> 01:34:35,840 Quindi, quello che uno studente può imparare da questo è che, ok, ho incontrato studenti bravi in alcuni 307 01:34:35,840 --> 01:34:41,200 linguaggi di programmazione. Non sono molto bravi in SQL o altro. Vedranno questo esempio e diranno: 308 01:34:41,200 --> 01:34:47,520 ok, questa è una query SQL e in realtà una query SQL che ho trovato come esempio. Ok. E hanno delle 309 01:34:47,520 --> 01:34:53,120 altre drop tables e altre cose. Trovate informazioni. Trovate informazioni perché 310 01:34:53,120 --> 01:34:59,040 avete un obiettivo. L'obiettivo è mettere in sicurezza il nostro codice o avere il codice a posto. E andando verso quell'obiettivo, 311 01:34:59,040 --> 01:35:05,360 imparate nel frattempo altre cose che non sono nella cybersecurity, Jenkins per esempio. Ho imparato 312 01:35:05,360 --> 01:35:11,040 Jenkins a causa della cybersecurity e non come sviluppatore. E ho visto 313 01:35:11,120 --> 01:35:16,880 workflow e pipeline di Jenkins a causa della cybersecurity. Ok. E questa è una bella prospettiva della cybersecurity. 314 01:35:17,600 --> 01:35:23,600 Perché connette, connette molti domini insieme, il cyber. È così che dicono. 315 01:35:24,160 --> 01:35:30,000 Ok. Quindi ecco l'esempio. Ed ecco la regola. E se potete cliccare sulla regola, 316 01:35:30,000 --> 01:35:35,120 potete vedere i dettagli e così via. Ed ecco anche la debolezza (weakness). Ricordate, 317 01:35:35,120 --> 01:35:39,360 debolezza è come un'astrazione. Non è la vulnerabilità, l'esatta vulnerabilità, 318 01:35:39,360 --> 01:35:45,760 ma è come un'astrazione della debolezza. E qui vedete molte informazioni, il che è 319 01:35:45,760 --> 01:35:52,640 molto bello. E fortunatamente la comunità le fornisce. E potete vedere qui, persino uno schema, 320 01:35:52,640 --> 01:35:58,080 una topologia, come il database è collegato alla query SQL. E c'è una vulnerabilità nel 321 01:35:58,080 --> 01:36:04,960 componente con cui il codice lavora. Quindi questo aiuta a capire meglio i codici, sia dal punto di vista della cybersecurity, 322 01:36:04,960 --> 01:36:09,520 della prospettiva della sicurezza, ma anche per un generico sviluppatore: capite 323 01:36:09,520 --> 01:36:17,040 di più come funzionano le cose. Ok. E cosa può andare storto in realtà, ok. E non è solo sicurezza, 324 01:36:17,040 --> 01:36:22,560 può essere un difetto anche in altre cose. Quindi qui si tratta di riservatezza, integrità, 325 01:36:22,560 --> 01:36:28,080 disponibilità, hanno questo pilastro della sicurezza. E dicono cosa può andare storto in termini di 326 01:36:28,080 --> 01:36:34,080 riservatezza, di autenticazione, di controllo dell'accesso, dell'integrità e così via. 327 01:36:34,080 --> 01:36:39,440 Quindi questo fornisce indicazioni su cosa di brutto può succedere in realtà. Ok. 328 01:36:40,480 --> 01:36:46,320 E qui ci sono le potenziali mitigazioni. Cosa potete fare per mitigare quelle azioni. 329 01:36:46,320 --> 01:36:53,760 E propone non solo pratiche di codice sicuro, ma anche aspetti progettuali o gestionali. 330 01:36:53,760 --> 01:36:58,560 Anche questo è importante. Immaginate di essere uno sviluppatore junior o uno sviluppatore senior, 331 01:36:58,560 --> 01:37:03,840 imparate queste cose e poi andate ad alto livello. Passate al livello di manager. 332 01:37:03,840 --> 01:37:10,160 Vedete il quadro generale. E questo è bene per voi per il SAP, perché se siete un buon sviluppatore, 333 01:37:10,160 --> 01:37:17,360 vedrete anche il quadro generale. E questo è qualcosa su cui 334 01:37:17,360 --> 01:37:24,320 le aziende insistono: abbiamo bisogno di sviluppatori, ma abbiamo bisogno che abbiano una visione d'insieme, 335 01:37:24,320 --> 01:37:30,240 il quadro generale di quello che stiamo facendo qui. Quindi questo aiuta molto a costruire quella prospettiva. 336 01:37:30,240 --> 01:37:35,760 E aiuta anche la cybersecurity con la sua stessa crescita. È come un hype. AI e cybersecurity 337 01:37:35,760 --> 01:37:42,400 sono cresciute molto ultimamente come posizioni lavorative. Ok. E potete vedere l'implementazione delle fasi, 338 01:37:42,400 --> 01:37:47,920 altre cose, Oracle, potete vedere un sacco di cose qui in realtà. Un sacco, un sacco di cose. 339 01:37:47,920 --> 01:37:53,760 Hanno sempre delle ontologie dietro. Potete anche vedere le ontologie e come funzionano. 340 01:37:54,400 --> 01:38:00,800 E la probabilità (likelihood), che è l'enumerazione, la quantificazione della sicurezza, la sua probabilità e il 341 01:38:00,800 --> 01:38:09,440 suo impatto. Quindi è alto. E ci sono degli esempi qui, altri esempi che forniscono anche comandi di SQL injection. 342 01:38:09,440 --> 01:38:16,240 Ad esempio qualcuno può scrivere questo e quello, A uguale ad A. Sì, certo, A è sempre uguale 343 01:38:16,240 --> 01:38:22,320 ad A. Quindi otterrà il risultato e così via. Forniscono quindi molti dettagli su cosa può andare storto. 344 01:38:22,320 --> 01:38:28,880 Esempi e bla bla e tutto il resto. È davvero molto, molto bello da leggere in realtà. 345 01:38:29,680 --> 01:38:34,800 E qui ci sono anche esempi osservati dei CVE, delle vulnerabilità comuni. 346 01:38:34,800 --> 01:38:40,480 Ci sono quindi vulnerabilità specifiche su software attuali. Non so se riesco a trovare qualcosa 347 01:38:40,480 --> 01:38:48,720 di molto popolare qui. Vediamo. Alcuni sono datati. Sapete, 348 01:38:49,680 --> 01:38:57,440 ultimamente l'SQL injection non è così popolare perché usiamo WordPress, usiamo Joomla, 349 01:38:58,000 --> 01:39:03,760 Drupal, i CMS che forniscono questo filtraggio di default. Ma si può ancora vedere un sacco di software, 350 01:39:03,760 --> 01:39:13,760 non molti, ma qui siamo nel 2023. C'è ancora l'SQL injection nel 2023. So che è buffo, 351 01:39:14,640 --> 01:39:22,160 ma le persone commettono errori. Quindi qui è tipo: Trend Micro Apex Central SQL injection permetteva l'SQL 352 01:39:22,160 --> 01:39:31,680 injection su Trend Micro. È un'azienda popolare. Ma comunque, qui hanno i dettagli. 353 01:39:32,800 --> 01:39:37,680 Potete andare e se volete saperne di più su questo, andate sulla vulnerabilità, 354 01:39:37,680 --> 01:39:42,800 trovate le informazioni sulla vulnerabilità, potreste trovare il servizio effettivo o il codice 355 01:39:42,800 --> 01:39:49,440 reale, distribuirlo sul campo, provare a fare l'ethical hacking, l'SQL injection, e cercare di avere un proof 356 01:39:49,440 --> 01:39:54,480 of concept come analista ricercatore. Potete effettivamente, se avete il codice, caricarlo 357 01:39:54,480 --> 01:40:00,400 su GitHub e fare l'analisi del codice e trovare il codice specifico e cercare di identificare le cose. Quindi 358 01:40:00,400 --> 01:40:07,360 c'è un sacco di materiale da cui imparare in base alla vostra prospettiva e a quello che volete sapere e 359 01:40:07,440 --> 01:40:15,520 acquisite più esperienza su quello che state facendo. Questo è importante. Ovviamente, dal punto di vista dell'industria, 360 01:40:15,520 --> 01:40:22,000 se avete questi dispositivi, uno di questi software in esecuzione, dovete effettivamente 361 01:40:22,000 --> 01:40:28,000 prendere misure e mitigare. Ma è buono anche per scopi educativi o di ricerca 362 01:40:28,000 --> 01:40:32,720 fare delle prove. Create degli scenari. Questo è il mio dottorato, in realtà. Creare scenari. Questo è 363 01:40:32,720 --> 01:40:37,040 importante. Avete una storia da raccontare. Quando avete una storia da raccontare, le persone impareranno. 364 01:40:37,600 --> 01:40:45,040 Ok. Perché ci piacciono le storie. E qui ci sono altri dettagli come il SOAR, potete vedere un sacco di 365 01:40:45,040 --> 01:40:52,000 dettagli che sono molto... potremmo non conoscere molta terminologia come questa, ma potete cercare in giro 366 01:40:52,000 --> 01:40:57,600 cos'è il SOAR e imparate. Imparate di più. E questo è molto, molto buono, in realtà. 367 01:40:58,400 --> 01:41:04,000 Fast tester, analisi dinamica. Quindi fornisce anche che analisi dinamica possiamo fare. 368 01:41:04,000 --> 01:41:08,960 Vedete quindi un sacco di cose ad alto livello. È come, sapete, molto, 369 01:41:10,720 --> 01:41:17,680 come passare da un semplice studente a uno più avanzato, solo cercando la 370 01:41:17,680 --> 01:41:23,840 terminologia e cercando le cose in giro e così via. Ok. E ci sono altre terminologie 371 01:41:23,840 --> 01:41:29,200 come la membership di OWASP e così via. Ok. E la mappatura qui e altre cose che non 372 01:41:29,200 --> 01:41:35,280 conosco neanche io. E ci sono i CAPEC, i modelli di attacco che sono legati a queste debolezze. 373 01:41:35,280 --> 01:41:41,040 Quindi questo combina le cose insieme. E questo è il mio scopo. Prendiamo un esempio, una storia, abbiamo 374 01:41:41,600 --> 01:41:48,320 un codice da analizzare. E attraverso queste analisi, impariamo cos'è il CVE, cosa sono i CWE. 375 01:41:48,320 --> 01:41:53,920 Impariamo la codifica sicura. Impariamo SQL. Cerchiamo di trovare i CAPEC. Vediamo come tutto questo si connette. 376 01:41:53,920 --> 01:41:59,840 Così abbiamo il quadro, il collegamento del quadro insieme, perché abbiamo la vulnerabilità, 377 01:41:59,840 --> 01:42:05,920 abbiamo il codice, abbiamo gli attacchi che possono avvenire. Abbiamo i CAPEC. Quindi questo si combina 378 01:42:05,920 --> 01:42:11,840 come un tutt'uno e possiamo vedere i quadri generali. E ci sono anche riferimenti qui che potete 379 01:42:11,840 --> 01:42:17,120 identificare e così via. E c'è la data di invio e altre cose come i metadati che sono 380 01:42:17,120 --> 01:42:23,440 coinvolti. Ok. Potete quindi vedere questo flusso, un esempio molto semplice, solo un SQL injection. 381 01:42:23,440 --> 01:42:29,520 E cosa potete imparare da questo semplice esempio, quante cose potete effettivamente imparare ed 382 01:42:29,520 --> 01:42:35,920 esperimentare. E non si tratta solo di leggere, si seleziona effettivamente la pratica. Cliccate, vedete, 383 01:42:35,920 --> 01:42:43,280 cliccate, vedete, e andate avanti e avanti. Ok. Torniamo indietro e vediamo le raccomandazioni, 384 01:42:43,280 --> 01:42:50,240 bla bla bla. Dice: ok, torniamo di nuovo su security. Abbiamo un quadro generale. Ok, 385 01:42:50,240 --> 01:42:56,400 abbiamo queste query SQL che stanno girando, che non sono molto buone. E torniamo 386 01:42:56,960 --> 01:43:04,560 qui e il readme in realtà si è aggiornato e passa al passo due, revisione e triage 387 01:43:05,280 --> 01:43:10,800 degli avvisi di CodeQL. Quindi dice: legate le cose insieme, combinate le cose, sono cose che 388 01:43:10,800 --> 01:43:16,800 stiamo facendo proprio ora per combinare la conoscenza e vedere qual è il risultato, bla bla bla. 389 01:43:16,800 --> 01:43:23,120 Ok, lo stato di CodeQL, se è in esecuzione, bla bla bla. Abbiamo visto quella revisione. Abbiamo 390 01:43:23,120 --> 01:43:27,840 rivisto il risultato. Rivediamo cosa succede. Ecco la regola. Ecco lo strumento. 391 01:43:29,040 --> 01:43:35,600 Audit scanning qui. E qui c'è qualcosa di importante. Dov'è? Scanning. 392 01:43:36,560 --> 01:43:41,680 Oh, non è qui. È... dov'è? Qui. 393 01:43:44,960 --> 01:43:52,640 Code scanning. Sì, qui. Questo è importante in termini di sicurezza. So che è un po' 394 01:43:52,640 --> 01:43:59,600 pieno di lunghi dettagli, ma qui: rilevato per la prima volta nei commit e aggiornamento uno e readme su server, 395 01:43:59,600 --> 01:45:05,040 qualunque cosa. Questo rintraccia quindi i commit e qualunque cosa accada. Sono come dati forensi. 396 01:44:05,600 --> 01:44:11,120 Stato import. Questo è molto importante. Ok. Immaginate di andare in un team di sviluppo e di 397 01:44:11,120 --> 01:44:16,320 dover vedere cosa è andato storto. Quale commit era quello sbagliato? Quale commit ha rotto? 398 01:44:17,360 --> 01:44:22,560 Chi ha creato questo commit? Perché volete contattare e trovare facilmente che: ok, è stato 400 01:44:22,560 --> 01:44:31,520 John che ha fatto quel commit. Vediamo cosa è andato storto. Quindi questo è importante. E sì, 400 01:44:31,520 --> 01:44:36,160 i dati forensi sono sempre molto utili. Immaginate voi stessi a volte che cercate in giro e dite: 401 01:44:36,160 --> 01:44:42,080 oh, quando l'ho fatto, ho mandato questo messaggio? Oppure andate indietro nella cronologia della chat e dite: 402 01:44:42,080 --> 01:44:47,680 oh, andiamo a vedere il dettaglio. Oh, ecco la password. Tre mesi prima qualcuno mi ha mandato 403 01:44:47,680 --> 01:44:52,640 la password. Ok. Forense. Andate indietro e così via. Avere informazioni e andare nel passato. 404 01:44:52,640 --> 01:45:03,520 È bello, sapete, e potrebbe salvarvi la vita. Diciamo. Ok. Allora lasciatemi andare qui. 405 01:45:04,720 --> 01:45:11,520 Qui. Ok. Ha tutti questi dettagli che ho spiegato sul CWE chiamato scansione degli 406 01:45:11,520 --> 01:45:17,760 earth's five e così via. Quindi ecco la cosa che non abbiamo fatto fino ad ora. Dobbiamo quindi 407 01:45:17,760 --> 01:45:23,440 creare un problema (issue). Ok. Dobbiamo dire che: ok, questo è qualcosa che deve essere risolto. 408 01:45:24,080 --> 01:45:29,920 Quindi ecco questo per creare l'issue. E potete vedere... questo significa "non è un falso positivo?" "Viene 409 01:45:29,920 --> 01:45:37,040 usato in questo fix?" Questo è come un ticketing. Create un tag e aiutate gli altri a risolvere 410 01:45:37,040 --> 01:45:42,080 le cose. Dite: oh, questo è un falso positivo o non è correlato. Ok, lasciate perdere. 411 01:45:42,800 --> 01:45:50,800 Questo è molto importante. Ok, sapete, creare un ticket o qualunque sia l'issue. Voi 412 01:45:50,800 --> 01:45:56,400 potete anche scrivere qualcosa come descrizione. Potete aiutare gli sviluppatori a risolvere questo problema. 413 01:45:56,400 --> 01:46:01,840 Quindi questo è più un lavoro di squadra. Ok, potete aiutare l'altro sviluppatore, lo sviluppatore junior. 414 01:46:01,840 --> 01:46:08,000 Potete aiutarlo a costruire meglio il codice. Create, premete "submit a new issue". 415 01:46:08,720 --> 01:46:14,000 E questo crea l'issue che funziona per me e così via. Ha anche il sistema di ticketing, 416 01:46:14,000 --> 01:46:20,320 le assegnazioni, nessuno. Potete quindi effettivamente assegnare, se volete, chi deve risolvere questo problema. 417 01:46:20,320 --> 01:46:26,320 Avete dei membri nel team, potete effettivamente allegare l'issue ad altre persone. 418 01:46:26,320 --> 01:46:31,680 Se pensate che siano in grado di risolvere il problema o pensate che sia di loro competenza. 419 01:46:31,680 --> 01:46:35,680 Hanno anche dei progetti, come potete vedere. Quindi se avete più progetti, potete risolvere il problema. 420 01:46:35,680 --> 01:46:54,960 Quindi, sì, cliccate sul code scanning e cliccate sulla specifica issue sullo specifico flusso. 421 01:46:55,520 --> 01:47:02,400 Quindi ecco, siete qui. Cliccate su uno di questi e poi su uno di questi c'è un pulsante qui 422 01:47:03,040 --> 01:47:14,480 sulla sinistra. In questo momento non c'è perché ho cliccato, ma c'è. Ok. Ok, torniamo indietro. 423 01:47:17,040 --> 01:47:23,840 Passo tre, sì. E poi continua. Ok. Quindi questo era un compito per un utente specifico. L'issue 424 01:47:23,840 --> 01:47:28,720 è stata creata. C'è un timestamp di quando questa issue è stata creata. Potete quindi rintracciarla e dire: 425 01:47:29,280 --> 01:47:36,960 questo è di un mese fa, nessuno l'ha vista. È un casino. Ok. Allora andiamo. Ok, le persone vanno 426 01:47:36,960 --> 01:47:43,360 in vacanza. Non sono lì per risolvere i problemi. Bene. Allora, andate, andate, andate. E poi 427 01:47:44,160 --> 01:47:50,480 ci sono i dettagli su questo file readme proprio ora sul code scanning. Potete riaprire l'avviso 428 01:47:50,480 --> 01:47:56,480 e quant'altro. E poi spiega che dovete andare sul pulsante di modifica (edit). Quindi è meglio andare 429 01:47:56,480 --> 01:48:03,760 sul codice principale. Torniamo indietro. Cliccate e aprite una nuova scheda. Ok. E in una nuova scheda, tenetela pure se 430 01:48:03,760 --> 01:48:13,840 volete così. Se vado nella nuova scheda, potete effettivamente andare su server e routes. E poi 431 01:48:13,840 --> 01:48:19,680 cliccate su "edit file" per modificare online. Ok. So che molti di voi usano la riga di comando e 432 01:48:19,680 --> 01:48:25,120 usano git da riga di comando, ma comunque, potete farlo dai browser. Modificate questo 433 01:48:25,120 --> 01:48:31,120 file e questo vi permette di modificare il file. Hanno questo come riferimento qui, oppure posso avere 434 01:48:31,120 --> 01:48:39,040 come riferimento i risultati di CodeQL per vedere le cose che stanno succedendo. Lasciatemi andare di nuovo. 435 01:48:41,280 --> 01:48:48,880 Quindi il numero 22 e il numero 16 erano rossi. Non ricordo comunque. Andiamo. 436 01:48:49,200 --> 01:48:59,440 Quindi vogliamo correggere questa vulnerabilità. Quindi la aggiungerò alla riga 16 e avrò questo nome query, 437 01:49:00,400 --> 01:49:07,280 modifica della query. Potete vedere che la differenza è che questo comando, invece di avere tipo 438 01:49:08,000 --> 01:49:15,760 percent s, ha percent s s. Quindi è come un filtraggio fittizio tipo: ok, almeno fornisci 439 01:49:15,760 --> 01:49:20,560 la stringa lì, non qualcosa che non sia una stringa. Ok. Ovviamente, ci sono altri 440 01:49:21,520 --> 01:49:28,000 esempi che posso mostrarvi, ma questo è qualcosa di molto veloce che potete fare. Ok. 441 01:49:28,000 --> 01:49:35,680 Copiate e incollate o scrivete. Andate sulla modifica. È quindi la riga 16. E vedete qui. 442 01:49:36,720 --> 01:49:42,880 Questo è il comando. E dice bla bla bla, qualunque cosa. Dice che: ok, dobbiamo 443 01:49:42,880 --> 01:49:49,440 copiare e incollare e vedere così. Attenti alle virgolette. Quindi è select all from books where name is 444 01:49:49,440 --> 01:49:57,680 like percent that string quotes closing comma and then name. Ok. Non mettete il punto dopo, 445 01:49:57,680 --> 01:50:04,000 perché c'è un punto nella frase, ma non mettete alcun punto. Questo è uno. E l'altro è quello che 446 01:50:04,000 --> 01:50:11,680 ho fatto alla riga 22. Quindi se vado alla riga 22, copio e incollo. È sempre utile vedere il passato, ok, 447 01:50:11,680 --> 01:50:19,680 per vedere cosa state revisionando nel 22. Torniamo al 22. Magari posso metterlo in fondo. 448 01:50:20,960 --> 01:50:28,240 Ok. È tipo... è simile. Ok. Hanno messo il simbolo di percentuale sulla stringa. 449 01:50:28,240 --> 01:50:35,680 Quindi è solo una S qui, credo. E rimuovono anche l'altra percentuale. 450 01:50:35,680 --> 01:50:43,360 È solo per essere sicuri. Ok, qui. Ok. Penso vada bene. Fate il commit delle modifiche. 451 01:50:44,400 --> 01:50:51,360 Mettete una descrizione estesa, se volete. Revisiono il codice, cambio la sanitizzazione. 452 01:50:51,360 --> 01:50:56,640 Aggiungo la sanitizzazione delle query SQL. Per favore revisionate o altro. Controllate di nuovo. 453 01:50:57,520 --> 01:51:04,400 Ok. Quindi mettete qui la descrizione che volete. Fate il commit o create un nuovo branch. 454 01:51:04,400 --> 01:51:10,000 Farò il commit sul main branch del mio progetto. Ok. 455 01:51:13,840 --> 01:51:20,400 Quindi issues. Se vado sulle issues, ci sono issues aperte e issues chiuse. Ok. 456 01:51:20,400 --> 01:51:29,680 Quindi una aperta, zero chiuse o altro. Torniamo su security. Qui potete vedere l'indicazione, 457 01:51:29,680 --> 01:51:37,440 il numero uno. Quindi c'è ancora un problema qui. E si aggiornerà dopo il refresh, 458 01:51:38,560 --> 01:51:48,000 dopo 20 secondi qui. Passerà molto probabilmente al passo quattro. Sì, passo quattro. E se vado al 459 01:51:48,000 --> 01:51:58,160 code scanning, potete vedere... magari richiede un po' di tempo. Forse ho sbagliato io. Non sono sicuro. 460 01:51:58,160 --> 01:52:03,120 Ma questo chiuderà le... sapete, le vulnerabilità spariranno da questa 461 01:52:05,440 --> 01:52:17,280 dashboard qui. Ha anche un sacco di filtri. Sentitevi liberi di cliccare su tools. Se clicco su tools, 462 01:52:17,920 --> 01:52:25,040 c'è anche Python che è stato scansionato in sei file. Quindi il 100% del repository principale contiene 463 01:52:25,040 --> 01:52:32,160 file Python. E c'è anche un filtraggio qui. Quindi è per linguaggio. Se è Python, HTML... 464 01:52:32,960 --> 01:52:39,920 potreste avere più strumenti per scansionare il codice. Quindi è per strumento, branch, regola, 465 01:52:41,200 --> 01:52:46,480 livello di gravità. Quindi potete effettivamente fare l'ordinamento o il filtraggio in base, sapete, 466 01:52:46,880 --> 01:52:53,040 ai problemi che vengono creati. Comunque, per me non è qui. Non so per voi. Ha funzionato? 467 01:52:55,200 --> 01:52:58,880 Dov'è l'action sulla security? 468 01:53:05,360 --> 01:53:08,480 Accanto ai progetti, actions su actions. Sì. 469 01:53:09,600 --> 01:53:15,680 Sta ancora girando. Sì, entrambi sono ancora in corso. Nel frattempo, posso andare nel repository principale 470 01:53:15,680 --> 01:53:21,680 solo per mostrarvi. Potete vedere la cartella .github. Quindi in .github, se andate, 471 01:53:22,320 --> 01:53:30,240 ci sono i workflow. Quindi qui ci sono i workflow di CodeQL. Quindi "enable CodeQL", 472 01:53:30,240 --> 01:53:36,080 in qualche modo qui ci saranno i workflow. Questi sono i workflow. 473 01:53:37,040 --> 01:53:42,160 Se volete vedere, ci sono anche i workflow per aggiornare il readme e ci saranno anche i workflow 474 01:53:42,160 --> 01:53:48,320 di CodeQL, credo. Ma qui è un casino perché abbiamo un sacco di passaggi e così via. 475 01:53:49,120 --> 01:53:56,640 Ma i workflow saranno anche qui, come i file YAML di qualunque cosa succeda nell'automazione. 476 01:53:58,400 --> 01:54:05,200 Ok, vediamo se l'action sta ancora lavorando. Sì, è fatta. Due minuti fa, quindi ha richiesto 477 01:54:05,200 --> 01:54:13,280 un minuto e 60 secondi per finire. E andate su security, code scanning, potete vedere 478 01:54:14,240 --> 01:54:18,160 due sono chiuse. Le cose sono quindi risolte. Ok, 479 01:54:18,880 --> 01:54:26,000 zero aperte, due chiuse. Quindi questo ha chiuso le issues. Ok, andiamo qui. 480 01:54:34,240 --> 01:54:36,880 Ok, e questo è il prossimo passo che possiamo fare. 481 01:54:36,880 --> 01:54:44,720 Review pull request. Ok, ha un review pull request. Potete vedere qui con la pull request, 482 01:54:44,720 --> 01:54:49,200 quindi parte di questo è un altro passo che possiamo fare. Non lo completerò ora qui. 483 01:54:49,200 --> 01:54:55,120 Quindi sentitevi liberi di completarlo più tardi, magari richiede ancora dei passaggi da fare. 484 01:54:55,120 --> 01:55:01,920 E potete vedere la differenza. C'è un punto d'azione, posso andare direttamente a risolvere il 485 01:55:01,920 --> 01:55:08,800 problema, ma posso fare una pull request e poi lo sviluppatore vedrà la pull request e dirà: 486 01:55:08,800 --> 01:55:16,320 ok, è una buona modifica? Devo caricarla nel mio main branch o no? Quindi un revisore (reviewer) dovrebbe 487 01:55:16,320 --> 01:55:23,520 effettivamente vedere e controllare la modifica e decidere se va bene includerla nel main branch 488 01:55:23,520 --> 01:55:30,080 e così via. In passato, nei passaggi precedenti, abbiamo modificato direttamente e abbiamo accettato e lo 489 01:55:30,080 --> 01:55:34,720 abbiamo fatto, ma qui spiega cosa dovete fare per vedere la differenza. 490 01:55:34,720 --> 01:55:39,120 Ed ecco la differenza. Potete vedere che: ok, questo c'era prima e questo è stato aggiunto. 491 01:55:39,120 --> 01:55:45,600 Quindi questo è il cambiamento e così via. Quindi questa è una cosa importante in termini di versioning. 492 01:55:45,600 --> 01:55:52,640 Ok, e GitHub ha questo vantaggio di avere il versioning. Potete vedere il versioning che va 493 01:55:52,640 --> 01:55:58,080 indietro e indietro e indietro. E se qualcosa si rompe dopo un mese di progetto e dite: 494 01:55:58,080 --> 01:56:05,680 ok, cosa è successo? Nulla funziona. Potete andare a ritroso, rintracciare e vedere cosa è andato storto 495 01:56:05,680 --> 01:56:11,440 e cercare di risolverlo e così via. Questo vale anche per la sicurezza. Vale anche per la funzionalità, 496 01:56:11,440 --> 01:56:18,000 il troubleshooting e così via. E ci sono dei casi. Stavo pensando a una ricerca, tipo un piccolo compito, 497 01:56:18,000 --> 01:56:24,000 diciamo, con il versioning di GitHub per controllare se c'è del codice malevolo all'interno del progetto. 498 01:56:24,000 --> 01:56:30,880 Quindi potete caricare i file su GitHub, ad esempio le cartelle di WordPress. 499 01:56:30,880 --> 01:56:36,560 E se c'è un JavaScript in esecuzione come un JavaScript malevolo, allora potete vedere che: 500 01:56:36,560 --> 01:56:42,720 ok, questo JavaScript o questa riga è stata cambiata. E potete effettivamente rintracciare azioni malevole 501 01:56:42,720 --> 01:56:49,760 o se c'è uno script malevolo che gira su WordPress, potete farlo confrontando la vecchia 502 01:56:49,760 --> 01:56:55,360 versione dei vostri progetti, per esempio. Quindi questo è un modo carino per farlo. L'ho fatto in passato. 503 01:56:56,240 --> 01:57:01,200 Per esempio, abbiamo avuto il caso di un sito WordPress che era rotto. 504 01:57:02,240 --> 01:57:08,560 C'erano script malevoli che giravano lì. Non sapevamo esattamente quale fosse il problema. Siamo dovuti andare 505 01:57:09,360 --> 01:57:17,200 file per file per vedere se c'era del codice codificato all'interno che facesse qualcosa di particolare. 506 01:57:17,280 --> 01:57:24,240 E allora ho solo caricato il progetto che avevamo in passato. Poi ho aggiunto i nuovi file, 507 01:57:24,240 --> 01:57:32,240 i file aggiornati, e poi ho confrontato i cambiamenti. E allora ho visto quali file, quali file PHP 508 01:57:32,880 --> 01:57:38,320 erano cambiati. E ho scoperto che c'erano cinque diversi file che erano stati cambiati. 509 01:57:38,320 --> 01:57:43,520 Uno di questi andava bene, era dovuto agli aggiornamenti. Ma è stato più facile per me trovare 510 01:57:43,520 --> 01:57:49,760 quei cinque file che avevano questo specifico codice JavaScript in esecuzione in 511 01:57:49,760 --> 01:57:55,120 background sul file PHP. Quindi questo aiuta molto. So che è un po' complicato. Ecco perché 512 01:57:55,120 --> 01:58:01,920 fondamentalmente è come l'hacking. Diciamo hacking perché, sapete, cercate di improvvisare. Voi 513 01:58:01,920 --> 01:58:10,640 cercate di creare nuovi modi per fare il vostro lavoro. Modi non ortodossi, diciamo, modi particolari 514 01:58:10,640 --> 01:58:18,480 per risolvere le cose. Quindi questo è un buon modo di usare GitHub o GitLab. GitLab è il loro repository privato. 515 01:58:19,680 --> 01:58:27,200 Quindi questo mi piace. Domande finora? Commenti? Va bene? Funziona? 516 01:58:28,800 --> 01:58:34,720 Ok. E lasciatemi andare. Non so quanto tempo avete. È il programma. È fino alle cinque? 517 01:58:35,680 --> 01:58:41,600 Oh, sono circa le cinque. Sono le tre. Controllerò il programma giusto per essere sicuro. 518 01:58:45,440 --> 01:58:52,480 È fino alle quattro. Che ora è? Le tre. Ok. Abbiamo ancora tempo. Ok. 519 01:58:52,480 --> 01:59:00,640 E lasciatemi vedere. Scusate, a volte mi perdo nel tempo. A volte parlo molto. Allora torniamo indietro. 520 01:59:00,720 --> 01:59:07,600 Ionian CTF. Penso di avere altre cose come un repository per queste cose. Quindi se vado, 521 01:59:08,960 --> 01:59:10,800 dov'è, dov'è? È il test? 522 01:59:15,040 --> 01:59:22,080 Sì, penso sia questo. Vediamo. Security. È risolto. 523 01:59:24,880 --> 01:59:29,520 Magari posso mostrarvi il caso d'uso sanitario. Penso sia questo. 524 01:59:30,800 --> 01:59:38,240 Sì. Questo repository era di una mia studentessa. 525 01:59:41,200 --> 01:59:46,800 Ha creato qualcosa tipo un Python script. Non ricordo bene cosa faccia questo script. 526 01:59:48,000 --> 01:59:55,440 E sì, andiamo. Le ho solo detto, ed è una buona opzione per gli studenti o per i vostri colleghi 527 01:59:55,440 --> 02:00:00,480 o per i vostri compagni di corso da proporre. Se avete un account GitHub, create un bel progetto 528 02:00:00,560 --> 02:00:08,480 in C o in Python o in Ruby, cliccate e abilitate la sicurezza per vedere in qualche modo cosa c'è di bello, 529 02:00:08,480 --> 02:00:13,760 cosa c'è di buono, cosa c'è di sbagliato. Ok. E le ho detto: ok, dammi solo il tuo repository e 530 02:00:13,760 --> 02:00:18,880 vediamo il code scanning. Vediamo. Il code scanning è già fatto. Potete sempre 531 02:00:18,880 --> 02:00:25,680 clonarlo se volete. È sec dev. Se andate nel repository principale, Ionian CTF qui, 532 02:00:25,680 --> 02:00:31,200 cliccate repository, tutti i repository. C'è questo sec dev. Quindi è sicurezza 533 02:00:31,200 --> 02:00:38,240 sviluppo, sec dev, security development. Questo repository diventerà popolare, 534 02:00:38,240 --> 02:00:44,800 la maggior parte di essi diventerà popolare comunque. Security qui. E potete vedere l'uso di un algoritmo crittografico 535 02:00:44,960 --> 01:00:57,040 rotto o debole su dati sensibili. Vediamo. Ok. Eccolo qui. Magari posso... scusate, 536 02:00:57,040 --> 01:01:04,320 alcuni testi sono in greco perché lei è una studentessa greca. E qui potete vedere laggiù, 537 01:01:04,320 --> 01:01:11,520 hashed password, hashed, bla bla bla, password. Quindi questo dice: uso di un hash 538 01:01:11,680 --> 01:01:20,160 crittografico rotto o debole nella galleria. Qualcuno sa spiegare cosa non va? Qualcuno? Qual è il problema? 539 01:01:21,680 --> 01:01:22,800 So che lo dice, ma cosa? 540 01:01:28,320 --> 01:01:39,360 Buona idea, ma non sono Md5. Md5 è debole, molto debole, peggio di quello che dico è di nuovo lo SH 256. 541 01:01:40,320 --> 01:01:45,600 Qualcuno sviluppa in WordPress? No. Sviluppo WordPress, qualcuno? Lì. 542 01:01:50,400 --> 01:01:58,640 Oh, no, è lo SH256, che è un buon algoritmo. È anche un salt. Forse è anche un salt. 543 01:01:59,360 --> 01:02:04,000 Sì, ma lo ha messo. Lo ha già messo perché è una brava studentessa. 544 01:02:04,800 --> 01:02:13,440 Mi ha detto: sì, è tipo, userò uno SH256. Sa anche dello sviluppo WordPress. 545 01:02:13,440 --> 01:02:20,880 Quindi WordPress usa l'hashing Md5. Qual è il trucco per cui hanno questo salt? Sapete, 546 01:02:20,880 --> 01:02:27,280 il salt, mettete il livello. È come un testo prefisso che, in combinazione con la password, 547 01:02:27,840 --> 01:02:33,680 crea il binario hashed. Poi avete una rainbow table. Una rainbow table è tipo 548 01:02:34,480 --> 01:02:42,400 un file tabella con password: angel, Stelios-133, qualunque cosa. E poi il valore hash, Md5 hash, 549 01:02:42,400 --> 01:02:49,920 SH256 hash, qualunque cosa. Questa è una rainbow table. E usate questa rainbow table come dizionario 550 01:02:49,920 --> 01:02:54,560 per fare l'attacco brute force. Dite: ok, se questo valore hash è uguale a quello, 551 01:02:54,560 --> 01:03:00,320 allora la password è questa. Ok. Ma se avete il salt, allora è Stelios-123 552 01:03:00,400 --> 01:03:07,600 più il mio salt o qualunque testo complesso, e questo crea un altro valore hash. 553 01:03:07,600 --> 01:03:12,240 Quindi è impossibile, quasi impossibile per gli altri farlo. Ma il trucco è questo: 554 01:03:12,240 --> 01:03:19,920 se qualcuno rompe WordPress, entra nel salt, fa l'inverso e crea una rainbow table 555 01:03:19,920 --> 01:03:27,520 con angel-123, Stelios-123, eccetera, più il salt che trova nel file wp-config, 556 01:03:27,520 --> 01:03:34,400 creeranno una rainbow table. Ottengono l'accesso all'SQL, my SQL, e poi hanno le password 557 01:03:34,400 --> 01:03:52,080 in chiaro. Domanda? A volte, se mettete un plugin di sicurezza su WordPress, 558 01:03:52,800 --> 01:03:59,360 di default, a meno che non l'abbiano cambiato nelle versioni più recenti, di default non cambia. 559 01:04:00,080 --> 01:04:06,240 Questa è una buona prospettiva su WordPress. Avete il plugin, un plugin di sicurezza, 560 01:04:06,240 --> 01:04:12,320 che cambierà i salt ogni mese o quant'altro. Di default non lo fa. 561 01:04:12,320 --> 01:04:16,320 Forse nelle versioni più recenti di WordPress lo fanno. Non ne sono sicuro. Ok. 562 01:04:17,040 --> 01:04:22,640 Allora, ok, questo è il trucco. Ma non è questo il problema ora. È tipo l'algoritmo 563 01:04:22,640 --> 01:04:26,960 crittografico. È la scelta dell'algoritmo per cui dicono: ok, questo è un 564 01:04:26,960 --> 01:04:34,880 buon algoritmo, ma per le password o i dati sensibili, e questo deriva da un controllo di sicurezza, 565 01:04:34,880 --> 01:04:41,360 diciamo del NIST, dovete usare algoritmi specifici approvati come buoni anche per 566 01:04:41,360 --> 01:04:51,040 i dati sensibili e così via. E questi sono algoritmi come Scrypt, o come si chiama l'altro, 567 01:04:51,840 --> 01:05:02,640 Bcrypt, PBKDF2, e così via. Quindi direte: perché WordPress non lo usa? 568 01:05:02,720 --> 01:05:08,560 E usano solo l'Md5. Sono scemi? Sono stupidi? Perché? Qualcuno? 569 01:05:12,800 --> 01:05:19,920 È più veloce. È lo svantaggio della sicurezza. Dovete spendere qualcosa. Dovete dare 570 01:05:19,920 --> 01:05:28,000 qualcosa per ottenere il beneficio. Quindi ottenete un algoritmo di password migliore, ma potrebbe essere più lento. 571 01:05:28,000 --> 01:05:33,520 E se avete un sito WordPress, dicono: ok, usate WordPress. Forse molti utenti entreranno 572 01:05:33,520 --> 01:05:38,880 nel vostro blog, nel vostro e-shop. Avranno più account. Quindi ogni account deve fare questa 573 01:05:39,600 --> 01:05:46,400 connessione. E quando vi connettete, il server deve generare il valore hash e poi confrontarlo 574 01:05:46,400 --> 01:05:50,960 con quello di base e poi loggarvi e così via. Quindi sarà lento. Quindi è tipo una 575 01:05:50,960 --> 01:05:56,160 decisione strategica per cui dicono: ok, useremo Md5 perché è un 576 01:05:56,160 --> 01:06:03,600 algoritmo veloce perché vogliamo che i client siano più veloci. Quindi è strategia. Non è 577 01:06:03,600 --> 01:06:10,080 che si possa effettivamente incolparli. È una strategia che scelgono: abbiamo bisogno di performance rispetto 578 01:06:10,080 --> 01:06:15,440 alla sicurezza e abbiamo il salt o quant'altro. E questa è la parte difficile della cybersecurity, 579 01:06:15,440 --> 01:06:22,320 la decisione. Qual è la decisione? E questo è difficile. Dalla vostra vita: chiudete la porta a chiave 580 01:06:22,320 --> 01:06:28,800 e dite: ok, dovrei mettere una telecamera, una telecamera IP? Dovrei chiudere con più serrature? 581 01:06:28,800 --> 01:06:33,920 Quindi si tratta di rischio, in realtà. Dovete scegliere. Dovete decidere. E questa è la 582 01:06:33,920 --> 01:06:43,120 parte più difficile. Ok. Quindi questi sono gli algoritmi che abbiamo, Argon, qualunque cosa. Li 583 01:06:43,120 --> 01:06:49,920 hanno anche in altri casi. Hanno anche qui altri dettagli, esempi su come usarli e così 584 01:06:50,000 --> 02:07:00,240 via. Lasciatemi tornare indietro. Ok. Ok. Quindi il trucco qui sarà questo: cambiare questo algoritmo, 585 01:07:00,240 --> 01:07:06,480 quindi da SH 256 a Scrypt o quant'altro, e questo risolverà tutto. Farà le cose per bene. 586 01:07:06,480 --> 01:07:12,800 Ok. Lasciatemi andare dove si trova. Scusate. Qui sulle debolezza (weaknesses). 587 01:07:15,120 --> 01:07:19,040 Quindi vogliamo... possiamo solo risolvere il problema se siamo di fretta o quant'altro, 588 01:07:19,040 --> 01:07:24,320 se vogliamo saperne di più, potete vedere qui l'uso di un algoritmo crittografico rotto o rischioso, 589 01:07:24,320 --> 01:07:32,480 un sacco di dettagli ed esempi e così via. Potete vedere qui questo. Ok. Questo è un hack molto, 590 01:07:34,000 --> 01:07:42,960 molto semplice. E tutto il resto. Ok. Hanno un sacco di cose come codice PHP e così via. 591 01:07:42,960 --> 01:07:48,240 Uso di un hash debole. Se avete un hash che è debole anche qui, esempi e così via. 592 01:07:49,760 --> 01:07:57,200 Potete vedere anche il C o altro. Non mi occupo di C. Conosco il C, programmo in C. Ok. Ma se 593 01:07:57,200 --> 01:08:03,280 volessi saperne di più sul C, andrei qui e direi: oh, cos'è questo? È interessante. Quindi 594 01:08:04,000 --> 01:08:08,240 di nuovo, potete imparare delle cose. Potete imparare cose che volete sapere. Io non so 595 01:08:08,960 --> 01:08:14,320 imparare il C. Ok. Andate avanti e imparate il PHP. E dite: ok, farò solo il 596 01:08:14,320 --> 01:08:19,040 trucco con il PHP o il Python, seleziono la password e così via. E questo è tutto. Ma se 597 01:08:19,040 --> 01:08:24,400 volete saperne di più, potete andare qui e vedere più dettagli. Questa è la cosa che molte persone, 598 01:08:24,400 --> 01:08:29,680 anche i vostri compagni qui, mi hanno detto: non voglio imparare ad essere un maestro in C. 599 01:08:30,640 --> 01:08:35,680 Voglio occuparmi di cybersecurity, ma non voglio imparare ad essere un esperto in C. Ok. 600 01:08:35,680 --> 01:08:40,960 Non è che dobbiate imparare tutto. Ok. Non conosco così bene l'assembly, 601 01:08:40,960 --> 01:08:47,440 ma non sono coinvolto in progetti che sono a un livello molto basso come i sistemi embedded e così via. Magari 602 01:08:47,440 --> 01:08:54,000 in futuro sarò più bravo in questo. Ma se vengo pagato, ok. Quindi è tipo, potete imparare 603 01:08:54,000 --> 01:08:58,480 qualcosa perché vi piace, ma dovete anche vedere quali sono le opportunità, se venite 604 01:08:58,480 --> 01:09:04,560 pagati, quali sono i vostri compiti e così via. Quindi alla fine trovate un equilibrio e imparate di più le cose 605 01:09:04,560 --> 01:09:10,480 che vi piacciono... di sicuro dovrebbe piacervi quello che fate nel vostro lavoro e poi venite pagati. 606 01:09:10,480 --> 01:09:20,560 Quindi non sono uno sviluppatore di giochi. Ok. Perché i soldi non ne valevano la pena. Ricevo ancora questo 607 01:09:20,560 --> 01:09:24,960 feedback dai colleghi che non è una buona idea essere uno sviluppatore di giochi proprio ora. 608 01:09:25,920 --> 01:09:32,560 Non vale la pena, diciamo, lo sforzo. Ma no, è un bel lavoro, lo sviluppo di giochi. Mi piacciono i giochi. 609 01:09:32,560 --> 01:09:39,440 Quindi qui ci sono un sacco di cose in realtà, ed è tipo... anche per me che sono da cinque anni ormai o sette 610 01:09:39,440 --> 01:09:46,240 anni ormai nella ricerca sulla cybersecurity. Ci sono cose che mi piace ancora imparare da questo dettaglio. 611 01:09:46,240 --> 01:09:53,840 Quindi menziona persino gli FPGA. È stato l'ultimo mese che ho ordinato dell'attrezzatura nella mia università 612 01:09:53,840 --> 01:10:00,800 per avere degli FPGA per iniziare la ricerca sulla crittografia quantistica e così via. Quindi queste 613 01:10:00,800 --> 01:10:06,560 sono informazioni utili per me. Vedrò come l'FPGA è correlato a questo, 614 01:10:06,560 --> 01:10:13,040 all'algoritmo di hashing e così via. E questo mi darà familiarità. Acquisirò più familiarità. 615 01:10:14,000 --> 01:10:21,600 Quindi ok, se l'avessi visto un anno prima, non mi sarebbe importato. Ma ora che ho ordinato l'attrezzatura 616 01:10:21,600 --> 01:10:28,480 per FPGA e inizio una nuova ricerca, andrò a vedere come l'FPGA si relaziona ai valori di hashing 617 01:10:28,480 --> 01:10:35,840 e questo farà nascere più idee, più ricerca da imparare, più soldi perché più 618 01:10:35,840 --> 01:10:44,000 progetti di ricerca e così via. Ok, quindi qui ci sono anche dettagli e riferimenti e così via. Non 619 01:10:44,000 --> 01:10:49,840 andrò oltre. Potete anche vedere i CVE ma sono molto vecchi. Non so se ci sono altri CVE 620 01:10:49,840 --> 01:11:00,160 molto seri, ma succede. Perché? Perché non ci sono, diciamo... avete visto l'SQL injection. 621 01:11:00,160 --> 01:11:09,200 Era del 2023. Qui sono tutti CVE molto vecchi. Non c'è software nuovo che abbia questi problemi. Perché? 622 01:11:10,320 --> 01:11:16,400 Perché succede questo? È perché è semplice da risolvere? Anche l'altro era semplice. Ma perché? 623 01:11:17,120 --> 01:11:25,040 Perché succede questo? È semplice. Questo è persino più semplice dell'SQL injection. Perché quasi... 624 01:11:25,040 --> 01:11:29,840 perché? Perché non ci sono nuovi CVE su questo? Cosa succede? 625 01:11:37,360 --> 01:11:42,800 Il risultato non risolve il problema. Il problema è risolto grazie alla scelta dell'algoritmo. 626 01:11:43,760 --> 01:11:50,560 Quindi non è questo. Ma metà della vostra risposta è giusta. Tutti lo usano. Perché? 627 01:11:51,840 --> 01:11:57,840 Perché tutti lo usano? Tutti dovrebbero usare anche il filtraggio SQL. Perché non lo usano? È semplice. 628 01:11:58,960 --> 01:12:06,880 Perché tutte le persone, tutte le software house hanno usato schemi di cifratura migliori? Sì? 629 01:12:07,200 --> 01:12:12,960 Sì, corretto. Regolamentazioni e standard, ok. 630 01:12:15,200 --> 01:12:20,400 L'eredità potrebbe anche essere il GDPR. Ma era già prima che avevano scelto che: 631 01:12:20,400 --> 01:12:29,280 ok, memorizzate una password. Deve essere così. Con WordPress, non deve essere... sì, sì, mi state dicendo. 632 01:12:29,680 --> 01:12:39,760 Sì, potete. Ma lo standard non dice che dovete usare uno specifico hash guard. La regola è 633 01:12:39,760 --> 01:12:46,320 quella. La regola non è che non debbano rubare le password. Sapete, regolamentazioni e standard. 634 01:12:47,520 --> 01:12:53,600 Checkboxes. L'ho lanciato questo? Checkboxes. E questo è lo svantaggio della regolamentazione 635 01:12:53,760 --> 01:13:01,280 e degli standard. Seguite uno standard. Siete al sicuro? No, non lo siete. Ma legalmente, lo siete. 636 01:13:04,000 --> 01:13:09,040 E lo dico perché è una buona opportunità, sapete, perché ho visto un sacco di presentazioni 637 01:13:09,040 --> 01:13:16,800 su regolamentazioni, standard, NIST, ISO, qualunque cosa. E per me è il contrario. Dobbiamo 638 01:13:16,800 --> 01:13:23,680 capire la strategia, le regolamentazioni da quella prospettiva, dalla prospettiva tecnica, 639 01:13:23,680 --> 01:13:30,720 perché allora capiamo il problema che abbiamo con le regolamentazioni. E ok, non possiamo risolvere 640 01:13:30,720 --> 01:13:36,160 questo. Compliance, avrete comunque bisogno solo della compliance, dei checkbox da spuntare, ma dovremmo 641 01:13:36,160 --> 01:13:48,960 sapere questo. Si tratta della metodologia e della prospettiva. Dovete vedere le regolamentazioni 642 01:13:48,960 --> 01:13:50,720 dalla prospettiva tecnica. Questo è il mio... 643 01:13:54,880 --> 01:14:00,160 le regolamentazioni sono buone e gli standard pure. Guardo la lista, l'enorme lista e 644 01:14:00,160 --> 01:14:06,000 vedo queste cose come raccomandazioni, ma dovete capire il problema. Questo è il mio punto. 645 01:14:06,640 --> 01:14:11,440 E, sapete, se andate solo a spuntare il checkbox, potete comunque farlo. E lo faccio anch'io 646 01:14:11,440 --> 01:14:16,880 anch'io. Clicco solo sul checkbox che è stato fatto. Ma conosco il problema. Almeno lo conosco. 647 01:14:16,880 --> 01:14:23,200 Dovrei conoscerlo. Non dovrei essere fiducioso che, sì, siccome ho questa regolamentazione, va tutto bene. 648 01:14:23,200 --> 01:14:33,760 Ma comunque, il beneficio c'è. Il beneficio c'è perché questo succede. Almeno usano 649 01:14:33,760 --> 01:14:40,400 una crittografia forte nel Calgon. E questo è buono. Alla fine è buono. Lo stesso potrebbe accadere con l' 650 01:14:40,400 --> 01:14:47,120 SQL injection presto. Sì, magari, ma comunque. Ma questa è, sapete, una conclusione che ho tratto qui 651 01:14:47,120 --> 01:14:52,160 da quel lato. Ed è nuova. È la prima volta che lo dico. Non è che avessi preparato 652 01:14:53,280 --> 01:15:00,080 queste conclusioni. Sono venute fuori proprio ora. Ok. Dalla ricerca che abbiamo fatto proprio ora 653 01:15:00,080 --> 01:15:07,040 su questi temi. Ok. Quindi potete vedere che la cybersecurity va bene perché create delle cose. 654 01:15:07,840 --> 01:15:12,640 In questo momento, non avevo già questa presentazione pronta. Non avevo queste conclusioni. Ma 655 01:15:13,280 --> 01:15:19,200 qui posso vedere. Posso vedere la conclusione di ciò. Naturalmente, potrebbero esserci ricerche per dire che, 656 01:15:19,200 --> 01:15:24,160 sapete, ci sono un paio di vulnerabilità che possono andare nei repository di vulnerabilità comuni e 657 01:15:24,160 --> 01:15:30,560 dire: vediamo se ci sono altri repository lì con vulnerabilità come questa. Forse ci sono, 658 01:15:30,560 --> 01:15:38,640 e questo è sbagliato. Questo può essere un paper di ricerca. Ok. Cercate in giro e dite perché e perché e perché. 659 01:15:38,640 --> 01:15:46,160 E perché WordPress non è legalmente, sapete, obbligato a rispettare questo e hanno ancora 660 01:15:46,160 --> 01:15:52,560 l'MD5 sulle password. Perché? È una domanda di ricerca. Ok. Forse qualcuno di voi lo sa, 661 01:15:52,560 --> 01:15:57,280 ma io no. Se qualcuno vuole fare un paper di ricerca con me, va benissimo. 662 01:15:57,600 --> 02:06:09,200 Ok. Quindi qui ce n'è uno, quindi MD5 SH 256. Posso andare a risolverlo, ma posso provare a non farlo, 663 02:06:09,200 --> 02:06:16,000 ma forse posso provare. È Scrypt, diciamo, Scrypt, Scrypt. Non c'è documentazione qui. 664 02:06:16,000 --> 02:06:20,480 Potete vedere più informazioni qui. Cosa sono gli algoritmi di Hashing e così via. La matematica è bella. 665 02:06:21,440 --> 02:06:29,680 Ok. Forse posso coprire un esempio qui. Quindi dice 256. C'è Scrypt da qualche parte? 666 02:06:33,040 --> 02:06:40,320 Anche se non c'è una raccomandazione, potete cercare Scrypt, 667 02:06:40,880 --> 02:06:44,720 PHP, come fare su Google, stack overflow o altro. Ok. 668 02:06:45,040 --> 02:06:53,040 Ok. Posso usare lo Scrypt? Era un PHP o un Python? Era un Python. Ok. Torniamo indietro. 669 02:06:54,320 --> 02:07:01,360 Scrypt, Python, how to, ok. Ha qualcosa qui, qualcosa lì. Andate a cercare. 670 02:07:02,880 --> 02:07:07,360 Hanno pip install Scrypt. Hanno questo, bla bla bla. 671 02:07:07,840 --> 02:07:12,640 Sì. E forse hanno anche un esempio qui, su come usarlo. 672 02:07:14,080 --> 02:07:20,000 Sì. Hanno, tipo py script, come questa libreria, forse posso andare a vedere cosa succede. 673 02:07:20,720 --> 02:07:26,880 Ecco questo qui. Posso andare e, ok. È sul file application py, 674 02:07:27,760 --> 02:07:40,720 application py. E poi, dov'era? La riga. Penso sia questa. Dove sono le righe? 675 02:07:41,360 --> 02:07:53,440 Ah, era un'altra riga. Quattro? 489. Sì. È multiplo. È in due posti. È due volte. 676 02:07:54,400 --> 02:08:00,160 È due volte. Sì. Tornerò qui. Importerò. Oh, andiamo. Edit. 677 02:08:02,720 --> 02:08:08,240 Sì. Non posso modificare perché entro direttamente. Quindi tornerò indietro, check depth, 678 02:08:09,040 --> 02:08:16,560 application py. Andiamo. Application py. E poi, perché succede? 679 02:08:16,640 --> 02:08:25,680 Sì. È sul repository principale. Hai ragione. È tipo, sì. È come se dovessi farne un fork. 680 02:08:25,680 --> 02:08:30,320 Comunque, peccato. Comunque, non lo risolverò proprio ora, ma sentitevi liberi. Potete clonarlo. 681 02:08:30,880 --> 02:08:35,280 Penso fosse stato clonato, ma comunque, potete farlo o potete proporlo allo studente, 682 02:08:35,280 --> 02:08:40,720 ma penso che l'abbia già risolto. Non sono sicuro. Comunque, qui potete vedere come funziona 683 02:08:40,720 --> 02:08:45,200 e inserite questo codice nel vostro codice e risolvete le cose. Andate sullo schermo, 684 02:08:45,200 --> 02:08:50,640 e vedete che è risolto e basta. Ok. Facile. Modo facile. Modo facile. 685 02:08:50,640 --> 02:08:54,880 Ed è il mio scopo. Chiedo a un sacco di persone, sviluppatori: sviluppate? Sì. 686 02:08:55,920 --> 02:08:59,920 Che tipo di linguaggi? Python, Ruby, qualunque cosa. Conoscete questo pulsante? 687 02:09:00,800 --> 02:09:06,080 Lo avete mai cliccato? No. Cos'è? Non lo so. E dicono a volte: ok, 688 02:09:06,080 --> 02:09:11,600 voglio avere più sicurezza e quant'altro. E questa è la mia prospettiva. Agli studenti 689 02:09:11,600 --> 02:09:18,160 universitari, insegnerò questo. Andate su security, cliccate, guardate. Diventerete alla fine degli sviluppatori migliori 690 02:09:18,160 --> 02:09:23,360 perché imparerete più cose e così via. E questo è forte perché il vostro codice sarà 691 02:09:23,360 --> 02:09:29,120 sicuro e potrete promuovervi e dire: oh, conosco un po' di sviluppo sicuro e le sue pratiche. 692 02:09:29,120 --> 02:09:35,120 È importante. Ok. Ed è bello da avere. Ok. Torniamo indietro e vediamo quali altri problemi 693 02:09:35,120 --> 02:09:49,360 abbiamo. Security. Security. Sì. Vediamo. Sì. È simile agli altri che abbiamo visto. 694 02:09:50,080 --> 02:09:54,320 Ok. È facile scrivere un intervallo di regular expression che corrisponda a un intervallo più ampio. Vediamo il 695 02:09:55,360 --> 02:10:03,520 problema comune, un intervallo più ampio. Qualcuno sa cos'è? Quale dovrebbe essere il problema? Dice che 696 02:10:03,520 --> 02:10:11,520 potete avere un intervallo molto più ampio. Qualcosa di meglio di così. Ma perché? Cosa può andare storto? 697 02:10:11,520 --> 02:10:23,360 Lasciatemi zoomare un po' qui. Oh, cos'è questo? Oh, scusate. Dove sei? Qui. Scusate. Questa riga. 698 02:10:23,360 --> 02:10:32,560 476 qui. Potete vedere simboli strani, search, bla bla bla. E spiega qui che 699 02:10:32,640 --> 02:10:36,480 è facile scrivere un intervallo di regular expression che corrisponda a un intervallo più ampio come quello. 700 02:10:38,160 --> 02:10:42,320 Vi ricorda qualcosa degli esempi precedenti che vi ho mostrato? 701 02:10:44,160 --> 02:10:49,840 Qual è la differenza tra questo e qual è la differenza tra quello? Lo studente non 702 02:10:49,840 --> 02:10:55,040 sapeva della sicurezza. Quando ha visto il suo codice, ha detto: ah, questo lo conosco. Gli altri studenti erano tipo: 703 02:10:55,680 --> 02:11:01,600 cos'è quello? Lo studente che ha scritto il codice era tipo: io questo lo conosco. Conosco quella roba. 704 02:11:01,600 --> 02:11:07,440 Ci arriva, sapete, immediatamente in due secondi, dice: ah, sì. Ecco il problema. 705 02:11:08,320 --> 02:11:15,200 Qual è il problema? Lo sapeva perché aveva scritto lui il codice. Quindi qualcosa è diverso lì. Un intervallo (range). 706 02:11:18,080 --> 02:11:23,520 Qualcuno conosce questa espressione? No. Regular expressions. Regular expressions. Qualcosa di 707 02:11:23,520 --> 02:11:29,920 complicato. Molto, molto complicato. Molto complicato perché io, sapete, ho studiato molto. Ho completato gli 708 02:11:29,920 --> 02:11:34,880 studi, scusate. E non sapevo come scrivere una regular expression, il che è strano. 709 02:11:35,520 --> 02:11:42,080 E poi ho visto un mondo intero con le regular expression. Cos'è questo? Mi servono altri quattro anni 710 02:11:42,080 --> 02:11:47,280 di studio solo per imparare le regular expression. Dimmi. Sì? 711 02:11:47,600 --> 02:11:54,160 Corretto. È come un intervallo. 712 02:12:00,880 --> 02:12:03,760 Corretto. Corretto. 713 02:12:07,360 --> 02:12:07,760 Sì. 714 02:12:08,320 --> 02:12:19,920 Corretto. Avete perfettamente ragione. Sì. 715 02:12:20,080 --> 02:12:22,080 Sì. 716 02:12:34,160 --> 02:12:41,680 Altri caratteri speciali. Sì. Il caso è questo: si definiscono staticamente alcuni 717 02:12:42,640 --> 02:12:49,200 caratteri speciali extra aggiuntivi. Magari potete andare qui. Tutti i caratteri speciali. 718 02:12:50,880 --> 02:12:56,160 Sapete, un ragazzino moderno non andrà su Google. Andrà su ChatGPT e scriverà: 719 02:12:57,840 --> 02:13:01,440 dimmi tutti i caratteri speciali che ci sono in giro. Io cliccherò su Google. 720 02:13:03,040 --> 02:13:11,040 Vediamo. Sì, potete vedere. Pensiamo che i caratteri speciali siano il punto interrogativo, 721 02:13:11,040 --> 02:13:16,320 il punto esclamativo, o altro. Ce ne sono un sacco, ma potete vedere qui questo, 722 02:13:17,040 --> 02:13:19,920 sì, i caratteri speciali sono molti, molti, molti, molti di più. 723 02:13:23,520 --> 02:13:28,080 Sì, forse ci sono dei caratteri speciali. Non so se... oh, penso sia uniforme. 724 02:13:28,080 --> 02:13:36,800 Penso che... ah, forse ci sono. Sì, sì. Qui. Siamo speciali. 725 02:13:39,600 --> 02:13:44,880 In Portogallo, i portoghesi mi dicono che: ok, cos'è questo? Scrivete in matematica, 726 02:13:44,880 --> 02:13:51,760 come se parlaste con le equazioni in Grecia, perché la maggior parte delle lettere sono in matematica. 727 02:13:57,120 --> 02:14:02,720 Ok, quindi questi sono i simboli speciali, e noi non li coinvolgiamo. Beh, quando facciamo così, 728 02:14:03,280 --> 02:14:11,680 tipo questo, possiamo coinvolgere tutti i caratteri speciali eccetto da A a Z, o A maiuscola a 729 02:14:11,680 --> 02:14:17,920 Z maiuscola, o altro. Non ricordo la vostra espressione. Quindi è come se definiste lo scopo. 730 02:14:17,920 --> 02:14:24,640 Vi servono solo lettere, lettere e numeri, e non qualunque altra cosa. Quindi escludete tutto il resto. 731 02:14:24,640 --> 02:14:32,800 Ok, e questa è la proposta qui. Quindi questo è come un modulo di ricerca. È come un SQL injection, 732 02:14:32,800 --> 02:14:39,360 perché non ricordo cosa stia facendo, ma è come se poteste avere un modulo di ricerca per fare 733 02:14:39,360 --> 02:14:45,200 qualcosa, per cercare qualcosa, e poi potreste inserire simboli speciali ed eseguire comandi, 734 02:14:45,200 --> 02:14:51,280 comandi arbitrari all'interno della piattaforma, all'interno del server o quant'altro. Questo è male, ok. Non è 735 02:14:51,280 --> 02:14:58,320 solo per l'SQL injection. E se andate al CWE improper input validation, non è 736 02:14:58,320 --> 02:15:03,360 SQL injection perché non è un comando SQL. È come uno script Python. E questo è molto 737 02:15:03,360 --> 02:15:11,280 serio, ok, perché qualcuno può eseguire comandi all'interno della query di ricerca che è dentro Python. 738 02:15:11,280 --> 02:15:19,840 Può prendere il controllo del server, in realtà, ok. Quindi validazione impropria degli input, potete vedere 739 02:15:19,840 --> 02:15:26,800 esempi qui e quant'altro, implementazione, architettura e design, qualunque cosa. E ci 740 02:15:26,880 --> 02:15:34,000 sono anche alcuni dettagli qui, esempi di cosa può andare storto. E potete vedere anche del C, diciamo, 741 02:15:35,600 --> 02:15:43,520 esempi qui nella programmazione C, e altri esempi con metodi get o post su un PHP, 742 02:15:44,240 --> 02:15:53,040 e così via. Ci sono molteplici CVE. Potete vedere persino un CVE su modelli linguistici di grandi dimensioni che hanno 743 02:15:53,120 --> 02:16:01,200 input, diciamo, validazione impropria dell'input. Non conosco gli standard. Non sono un esperto di 744 02:16:01,200 --> 02:16:08,640 standard. La mia ipotesi di prima era che, ok, si trattasse di standard. Sfortunatamente possiamo vedere qui 745 02:16:08,640 --> 02:16:16,160 che ci sono CVE al giorno d'oggi da quel lato. Quindi forse gli standard non sono molto seri o no. Non ne sono 746 02:16:16,160 --> 02:16:22,880 sicuro. Di sicuro tutti gli standard riguardano le password, persino io. Quando ho trovato una studentessa, 747 02:16:22,880 --> 02:16:31,920 PhD, che sta facendo una piattaforma per l'educazione per imparare Arduino e ha un modulo di login. 748 02:16:31,920 --> 02:16:38,320 E lei dice: ok, ho un Arduino e so che la cybersecurity è molto importante e 749 02:16:38,320 --> 02:16:44,800 cerco di abilitare questo e così via. Lei non sa nulla di cybersecurity, anche se è una PhD, 750 02:16:44,800 --> 02:16:51,360 comunque. Ma poi mi ha detto che: no, non ho dati personali. Memorizzi password 751 02:16:51,360 --> 02:16:56,560 per i moduli di login? Sì, lo faccio. Allora hai delle password. Devi mettere in sicurezza le tue password. 752 02:16:56,560 --> 02:17:04,320 Questo è il minimo che puoi fare. Anche senza standard, la mia proposta era che come minimo, 753 02:17:04,320 --> 02:17:11,440 ok, potrebbero esserci altri problemi. Ma una violazione dei dati che scoprisse una password del vostro 754 02:17:11,520 --> 02:17:17,680 studente sarebbe un problema. La prima domanda in realtà è stata, ok, perché è bene chiedere: 755 02:17:18,480 --> 02:17:25,280 le password che memorizzi sono in chiaro o sono hash? Lei mi ha chiesto cos'è l'hash. 756 02:17:29,920 --> 02:17:35,760 E allora le ho chiesto: ok, che tipo di database hai usato? Lei mi ha detto "uso Firebase". 757 02:17:36,720 --> 02:17:42,480 Ok, ho pensato che, ok, Firebase, potrebbero averlo di default, perché è tipo Firebase, 758 02:17:42,480 --> 02:17:49,040 se non lo fate... qualcuno usa Firebase? Ok. È tipo un database molto facile di Google 759 02:17:49,040 --> 02:17:53,360 che potete effettivamente esporre la porta ed esporre il database. Non esponete i database 760 02:17:53,360 --> 02:18:00,240 su internet, per favore, ma comunque. Quindi esponete il vostro prezioso database su internet, 761 02:18:00,240 --> 02:18:04,320 ma hanno tutti i controlli di sicurezza di Google, autenticazione, secondo fattore, 762 02:18:04,400 --> 02:18:08,880 autenticazione, qualunque cosa. E di default, ho pensato: ok, avranno anche 763 02:18:08,880 --> 02:18:13,760 le password con l'hash. E in effetti, sì, avevano le password con l'hash. Ho controllato che avessero il 764 02:18:13,760 --> 02:18:19,040 pulsante che di default le hashano e così via. Ok, le ho detto: va bene, hai le 765 02:18:19,040 --> 02:18:28,960 password hashate lì. Poi non ho avuto la voglia o il mood di chiederle se stesse facendo 766 02:18:28,960 --> 02:18:37,520 filtraggio del modulo di caricamento e così via. Quindi la mia prima domanda è stata quella: hai 767 02:18:38,160 --> 02:18:44,080 le password hashate? Non ho chiesto che tipo di schema di cifratura usino, è di Google, 768 02:18:44,080 --> 02:18:49,680 va bene così. E quella è stata la mia prima e ultima domanda, perché lei non sapeva come stava... 769 02:18:52,560 --> 02:18:57,840 non ho avuto il tempo di spiegarle qui che, ok, devi anche controllare che il 770 02:18:57,840 --> 02:19:07,840 modulo del login abbia un filtraggio PHP. Ma posso mostrarle, se stesse studiando ancora, 771 02:19:08,640 --> 02:19:14,400 GitHub. E potrei dirle: ok, vai su GitHub, vedi i risultati, vedi... forse è 772 02:19:14,400 --> 02:19:20,720 una buona idea dirle questo. Guarda tu stessa, carica il codice, controlla tu stessa, 773 02:19:20,720 --> 02:19:26,720 ci sono molteplici problemi di sicurezza lì, sei una PhD, troverai un modo. E lei cercherà di 774 02:19:26,720 --> 02:19:36,320 sistemare i suoi problemi perché sono sicuro che ha sviluppato il PHP di sua mano, quindi penso che non avrà 775 02:19:36,320 --> 02:19:44,320 alcun filtraggio in merito. Ok, non è un software di produzione, ma dai, almeno fai delle 776 02:19:44,320 --> 02:19:50,640 cose di base, non lo so. Ma sarebbe un punto a favore, sia per lei che per me, perché il suo supervisore 777 02:19:50,640 --> 02:19:57,680 si congratulerà con me. Ok, scusate per questa discussione, ma è tipo, sapete, 778 02:19:57,680 --> 02:20:03,600 è un risultato derivante dall'esperienza. Ed è importante per voi capire il flusso, 779 02:20:03,600 --> 02:20:11,920 come succede. Quindi qui è così, cambiamenti e altre cose, un sacco di problemi software e 780 02:20:11,920 --> 02:20:17,680 vulnerabilità in passato sulla validazione impropria dell'input. Ok, quindi potete eseguire 781 02:20:17,680 --> 02:20:23,120 comandi qui, comandi Python, prendere privilegi, quindi l'escalation dei privilegi può essere qui, 782 02:20:23,120 --> 02:20:29,680 non so se sia menzionato qui, lasciatemi vedere, privilege escalation, no? No, non è 783 02:20:29,680 --> 02:20:36,480 relato alla privilege escalation, ma comunque, ok. Ma possono succedere cose sullo script Python 784 02:20:36,480 --> 02:20:43,280 per cui qualcuno può eseguire qualunque cosa gli piaccia all'interno di questa ricerca. Ok, torniamo indietro, security. 785 02:20:43,840 --> 02:20:50,720 Ok, e penso che questo sia tutto, quindi due problemi qui e due problemi qui. Ovviamente è un codice semplice, 786 02:20:52,320 --> 02:20:58,080 lo studente è bravo, almeno ha usato i salt, il che è stato impressionante, ok, di sicuro, 787 02:20:58,640 --> 02:21:05,680 per uno studente universitario. Ma comunque, questo era un esempio, qualche domanda su questo? 788 02:21:05,680 --> 02:21:11,360 Potete vedere che ci sono un sacco di file Python, non è stato fornito nient'altro come missione. 789 02:21:11,440 --> 02:21:17,920 Ovviamente, fornisce una sicurezza che: ok, siamo a posto, ma comunque, ok, andando manualmente e vedendo 790 02:21:17,920 --> 02:21:23,760 se ci sono difetti, facendo il penetration testing, facendo la valutazione delle vulnerabilità in una scatola nera, 791 02:21:23,760 --> 02:21:30,880 questo dirà sicuramente che: ok, siamo a posto in termini di sicurezza. È solo un modo facile per 792 02:21:30,880 --> 02:21:37,840 noi di fornire l'analisi del codice e vedere se c'è un problema molto grande nel nostro codice, 793 02:21:37,840 --> 02:21:43,920 alla fine non fornirà tutto, altrimenti sarebbe facile: basta lanciare un'analisi del codice, 794 02:21:43,920 --> 02:21:50,160 tutto è sistemato e così via, perché succede anche per gli attacchi zero day, ok, 795 02:21:50,160 --> 02:21:54,800 c'è una nuova vulnerabilità che non era stata scoperta prima e così via. Quindi non si sa mai, 796 02:21:54,800 --> 02:22:02,160 ma questo fornisce almeno una base di codice sicuro nello sviluppo e capite meglio 797 02:22:02,160 --> 02:22:06,640 il vostro codice. Questa è la cosa importante: ok, spendete un sacco di tempo 798 02:22:08,480 --> 02:22:15,200 preparando il codice per fare la sicurezza. Il feedback, il vantaggio è che acquisite esperienza 799 02:22:15,200 --> 02:22:22,160 in termini di sviluppo. Cerco quindi di spronare gli studenti: ok, non volete imparare 800 02:22:22,160 --> 02:22:29,040 un po' di sicurezza, ma sarete degli sviluppatori migliori. Otterrete questo bel beneficio, ok. Ma 801 02:22:29,040 --> 02:22:34,320 penso che alla maggior parte degli sviluppatori piacerà vedere il proprio codice e vedere se ci sono dei flussi, non hanno 802 02:22:34,320 --> 02:22:39,120 alcun problema, gli piace, gli piace penso questa prospettiva. Potrebbero non piacere altre cose 803 02:22:39,120 --> 02:22:46,400 come la forensics o l'analisi dei log o quant'altro, ma penso che siccome sono sviluppatori, amano il codice, 804 02:22:46,400 --> 02:22:52,240 amano anche aggiornare il loro codice e avere un codice migliore. Ok, questo era un esempio, 805 02:22:52,240 --> 02:23:00,800 lasciatemi tornare indietro. Mi piace fornire degli esempi. Ed ecco un altro esempio. È tipo, 806 02:23:01,680 --> 02:23:08,240 non... non ho usato questo server DICOM. Un server DICOM in ambito sanitario è un server che ha 807 02:23:08,240 --> 02:23:18,400 sia un database che un archivio dati. E memorizzano immagini radiografiche o immagini tomografiche. Quindi tutte 808 02:23:18,400 --> 02:23:29,920 queste immagini sono tipo... lasciate che vi mostri, esempio di immagine DICOM. Naturalmente, sono dati molto sensibili 809 02:23:29,920 --> 02:23:36,400 perché hanno la storia medica. E in realtà, potete vedere tutti i dettagli del cervello, per 810 02:23:36,400 --> 02:23:41,360 esempio, dell'essere umano, del paziente. È fatta così l'immagine DICOM. E non è tipo 811 02:23:41,360 --> 02:23:47,920 solo un'immagine, hanno anche dei metadati all'interno. Quindi il medico andrà qui ed evidenzierà questa 812 02:23:47,920 --> 02:23:54,640 parte del cervello e dirà che: ok, questa ha dei problemi qui. Oppure posso vedere qualcosa di specifico 813 02:23:54,640 --> 02:24:00,400 che succede qui. E annotano l'immagine. E questa è tipo un'immagine forense perché un altro 814 02:24:00,400 --> 02:24:04,720 medico andrà a evidenziare e poi un altro medico andrà a evidenziare. Faranno l' 815 02:24:04,720 --> 02:24:10,400 intervento chirurgico e poi evidenzieranno di nuovo la parte su cui hanno fatto l'intervento. E questo va avanti nel 816 02:24:10,400 --> 02:24:14,880 passato. Sono tipo metadati. È quindi come una pila di immagini che sono collegate all'interno di una 817 02:24:14,880 --> 02:24:20,720 immagine. E questo è un protocollo DICOM. Si chiama protocollo DICOM. E sono memorizzate in server 818 02:24:20,720 --> 02:24:30,240 chiamati server PACS. Quindi i server PACS memorizzano queste immagini. Hanno un software 819 02:24:30,240 --> 02:24:38,400 come frontend per inserire le immagini. Hanno il database per fare l'indicizzazione. E hanno l' 820 02:24:38,400 --> 02:24:44,480 archiviazione dati per memorizzare le immagini DICOM. Quindi gli infermieri, i medici andranno su una UI web 821 02:24:44,880 --> 02:24:50,160 e vedranno chi sono i pazienti. Apriranno e vedranno le immagini DICOM e tutto 822 02:24:50,160 --> 02:24:56,400 il passato delle immagini DICOM. Questo è un server che ho trovato di Microsoft. Non l'ho usato. 823 02:24:56,400 --> 02:25:03,680 Principalmente uso un'altra piattaforma open source per i test bed. Cerco quindi di creare dei test bed sanitari 824 02:25:03,680 --> 02:25:10,720 in alcuni progetti per fare il red teaming e fare gli attacchi ai 825 02:25:10,800 --> 02:25:17,440 servizi web per vedere cosa sta succedendo. È come un cyber range in ambito sanitario. 826 02:25:17,440 --> 02:25:23,120 Quindi non ho usato questo, ma volevo solo farne un fork per darvi un esempio. Potete vedere qui 827 02:25:23,120 --> 02:25:31,040 JavaScript, 43% di C-Sharp, 38, ovviamente è Microsoft. TSQL, che non conosco, 828 02:25:31,040 --> 02:25:38,320 ma è TSQL. Lo so, ma è TSQL comunque. PowerShell. Hanno anche PowerShell. Magari 829 02:25:38,320 --> 02:25:43,360 PowerShell lo hanno usato solo per l'automazione. Dockerfile. Forniscono il Dockerfile HTML. 830 02:25:43,920 --> 02:25:48,640 Quindi si tratta soprattutto di JavaScript. Se vado in security, e questo non ricordo 831 02:25:49,280 --> 02:25:55,200 quando è stato fatto. È un clone, quindi non è un fork, ma è uno nuovo. Se vado in code 832 02:25:55,200 --> 02:26:01,520 scanning, potete vedere qui diversi problemi, diciamo. E questo è di Microsoft. Ok. 833 02:26:01,520 --> 02:26:08,160 Non è un software commerciale, diciamo, ma comunque, vediamo. Log entry created from 834 02:26:08,160 --> 02:26:16,080 user input. Non ricordo tutto dei CVE, dei difetti che presento, ma qui, 835 02:26:16,080 --> 02:26:21,760 se un input utente non sanitizzato viene scritto in una voce di log, un utente malintenzionato potrebbe essere in grado di forgiare 836 02:26:21,760 --> 02:26:27,440 voci di log. Qualcuno di voi sviluppa in Android? Sviluppo Android, qualcuno? 837 02:26:29,040 --> 02:26:37,520 Beh, uno. Ok. Due. Avete mai visto la sicurezza su Android, qualche sfida, capture the flag, 838 02:26:37,520 --> 02:26:48,080 o altro? No? Tu sì? No. Ma allora... ok, forse. 839 02:36:50,160 --> 02:36:57,440 Sviluppo Android. Ok, parliamo di questa domanda. Logcat. Conoscete Logcat? No? 840 02:36:58,320 --> 02:37:13,200 Non rete. È il sistema di logging di Android. Logcat. Conoscete Logcat? Sì, sì, sì, corretto. 841 02:37:13,200 --> 02:37:17,920 Cliccate ADB, vi connettete al telefono Android, cliccate Logcat e vedete tutto quello che 842 02:37:17,920 --> 02:37:24,000 succede sul cellulare. È come se toccaste lo schermo e questo venisse registrato nel 843 02:37:24,000 --> 02:37:29,280 log. Tutto viene registrato nel log. È forte. È molto bello. Aprite la fotocamera, 844 02:37:29,280 --> 02:37:33,760 vedete il log che apre la fotocamera, tutto. Tutto è su Logcat. E Logcat è stato 845 02:37:33,760 --> 02:37:41,440 disabilitato nei telefoni Android successivi sul dispositivo. Potete farlo solo se vi collegate a un computer, 846 02:37:41,440 --> 02:37:46,720 abilitate il debugging USB e permettete a Logcat di girare per ragioni di sicurezza. Ok. 847 02:37:46,720 --> 02:37:54,960 Nell'Android 6, non succedevano cose così, nel senso che cliccavate login su un'applicazione, 848 02:37:54,960 --> 02:38:01,840 su un'app Android, che richiedeva login e password. Inserivate la password, i log 849 02:38:02,640 --> 02:38:10,880 dicevano: ok, la password A, B, C, Stelios è stata data alla piattaforma, e questo log veniva memorizzato. 850 02:38:10,880 --> 02:38:17,920 Quindi qualcuno prende il vostro cellulare, usa un ADB, entra nei log che sono memorizzati dall' 851 02:38:17,920 --> 02:38:25,120 applicazione, non Logcat. Logcat è tipo un'app di streaming live. Ma il servizio stesso, 852 02:38:25,120 --> 02:38:31,680 così, memorizza alcuni degli input all'interno dei log. Quindi qualcuno può vedere i log e vedere 853 02:38:31,680 --> 02:38:39,840 dati personali all'interno dei log. Quindi questa è una cosa importante. Non memorizzate nei log del 854 02:38:39,840 --> 02:38:46,800 software, nomi utente, password e così via. Anche questo è un problema serio lato sviluppo. 855 02:38:46,800 --> 02:38:52,560 Siete nel ciclo di sviluppo, avete il debugger aperto perché volete debuggare tutto. 856 02:38:52,560 --> 02:38:58,000 E poi pubblicate per il client o su internet, e vi dimenticate 857 02:38:59,120 --> 02:39:05,520 di chiudere il debugger. E i log sono ancora tenuti lì. Quindi qualcuno può andare nei log e 858 02:39:05,520 --> 02:39:12,160 trovare i dati e così via. Quindi il debugging... dovete stare attenti. Sono problemi seri. 859 02:39:12,160 --> 02:39:17,600 Ok. Quindi questo è il problema qui. Voci di log create dall'input utente. Quindi hanno delle 860 02:39:17,600 --> 02:39:25,600 voci di log create che hanno degli input. In particolare qui, dice che se l'input utente non sanitizzato 861 02:39:25,600 --> 02:39:29,920 viene scritto nella voce di log, un utente malintenzionato potrebbe essere in grado di forgiare nuove voci di 862 02:39:29,920 --> 02:39:34,880 log. Quindi potrebbe essere in grado di creare nuove voci di log, ma è diverso. Ok, è diverso 863 02:39:34,880 --> 02:39:39,760 da quello che ho spiegato prima, ma è in un contesto simile, diciamo. 864 02:39:39,760 --> 02:39:46,400 Esempio, hanno un esempio di sanitizzazione e così via. Quindi cosa impariamo di nuovo da questo? Il logging. 865 02:39:48,160 --> 01:39:54,160 Quanti di voi hanno visto i log? Uno, due, tre. Quanti di voi hanno visto 866 01:39:54,160 --> 01:40:02,480 i log di un debugger, diciamo? Ok, quanti di voi hanno visto i log del sistema operativo? 867 01:40:03,440 --> 01:40:08,000 Parecchi. Quanti di voi hanno visto i log da Android? 868 01:40:10,640 --> 01:40:11,520 Ancora lo stesso utente. 869 01:40:19,120 --> 01:40:31,120 Oh, ok. È forte. È forte. Non è di default su Flutter, i log, ok. 870 01:40:32,000 --> 01:40:39,760 Bene. Per chi non ha mai visto un log, lo mostro molto agli studenti universitari. 871 01:40:40,640 --> 01:40:48,400 Vado qui e vedete i log, i log di Windows. Se vado qui, sono tipo i log del sistema operativo. 872 01:40:49,440 --> 01:40:55,200 Caricheranno. Ok. Qui c'è tutto sui log di sicurezza di Windows, 873 01:40:55,760 --> 01:41:04,000 log delle applicazioni. Se quindi ho il server Apache in funzione o MariaDB in funzione sul mio sistema operativo, 874 01:41:04,000 --> 01:41:09,200 i log saranno qui. Comunque, caricheranno in qualche modo. E se tornate indietro, indietro, vedrete 875 01:41:09,200 --> 01:41:14,560 alla fine anche lato kernel, quando il computer è stato aperto per la prima volta dopo la formattazione. 876 01:41:15,440 --> 01:41:18,960 Tracciano tutto sul sistema operativo. Questo passa da Android. 877 01:41:19,040 --> 01:41:26,800 Android è forte. È persino meglio di questo perché Android è un sistema molto complesso. 878 01:41:26,800 --> 01:41:33,040 Tutto viene registrato perché avete un GPS, avete un touchscreen, avete un microfono, 879 01:41:33,040 --> 01:41:40,160 avete tutte le metriche e i sensori che può avere. Ha un sacco di... batteria, qualunque cosa, 880 01:41:40,160 --> 01:41:44,800 ma hanno un sacco di sensori su Android. Se potete vederlo in tempo reale, è molto forte. 881 01:41:44,800 --> 01:41:48,640 E potete imparare molto e potete prendere un sacco di dati per l'analisi successiva. 882 01:41:48,960 --> 01:41:52,160 Quindi potete immaginare di arrivare ad avere uno smartphone e poterlo effettivamente 883 01:41:52,160 --> 01:41:56,400 usare come un sensore per fare quello che volete, come un esperimento. 884 01:41:57,520 --> 01:42:04,000 Quindi qui i log si presenteranno effettivamente. Per la cybersecurity, i log sono molto importanti perché 885 01:42:04,000 --> 01:42:08,160 è lì che avvengono gli avvisi. Prendete le informazioni dai log e create 886 01:42:08,160 --> 01:42:14,880 gli avvisi e così via se sta succedendo qualcosa di brutto. Hanno altri dettagli come questo, 887 01:42:14,880 --> 01:42:19,200 affected buds ed alto livello. Torniamo indietro e vediamo quali altri dettagli possiamo avere. 888 01:42:21,760 --> 01:42:25,280 Lo stesso vale per il controller, view controller, quindi è lo stesso. 889 01:42:26,240 --> 01:42:28,240 Penso che la maggior parte siano uguali. Andiamo. 890 01:42:30,160 --> 01:42:36,960 Client side URL, il redirect. Hanno un redirect URL. Quando chiamano, magari... 891 01:42:37,840 --> 01:42:44,560 qualcuno sa dire cosa può succedere. Non voglio che pensiate... non 892 01:42:44,640 --> 01:42:50,480 voglio dire la risposta corretta. Solo un'ipotesi. Cosa può significare? Cosa può andare storto? 893 01:42:51,600 --> 01:42:56,480 Su un URL redirect lato client. Qualcuno? Sì, sì. 894 01:43:00,080 --> 01:43:04,400 Ok. Potrebbe succedere. È tipo un modulo di login e quando vi loggate, 895 01:43:04,400 --> 01:43:12,400 questo andrà su una pagina diretta ad un altro sito web e cliccate qualcosa lì e 896 01:43:12,400 --> 01:43:16,640 ricevete dei dettagli sul sito che non dovrebbero esserci. Ovviamente, 897 01:43:16,640 --> 01:43:21,280 potete vedere che è reindirizzato a un altro sito, ma l'altro sito sarebbe un altro ancora. 898 01:43:21,280 --> 01:43:27,840 Oh, no. Può essere un clone di Facebook. Qualcuno può clonare la pagina di login principale di Facebook e 899 01:43:27,840 --> 01:43:33,440 voi pensate: ok, devo loggarmi nella schermata di login di Facebook. Inserite i dettagli e 900 01:43:33,440 --> 01:43:49,360 loro ottengono i dettagli. È una buona risposta. Un'altra? Sì. 901 01:43:49,360 --> 01:44:01,280 Corretto. 902 01:44:01,280 --> 01:44:04,160 Non c'è nulla nella pagina? Corretto. 903 01:44:05,680 --> 01:44:13,040 In un iFrame? No. Sì. Corretto. Sono due approcci diversi. Uno è l'output. 904 01:44:13,040 --> 01:44:17,840 Cliccate qualcosa e reindirizza ad un'altra pagina. Quindi è l'output. L'altro è l'input. 905 01:44:17,840 --> 01:44:24,720 Potete usare il reindirizzamento per l'input per avere qualcosa sulla pagina che cercate di infettare. 906 01:44:24,720 --> 01:44:29,040 Mettete qualcosa nell'header e questo chiama qualcosa di brutto. Quindi potete vedere qui, 907 01:44:30,080 --> 01:44:36,080 qui, ha questo URL. Chiama JavaScript dal mondo esterno, da internet. 908 01:44:36,080 --> 01:44:40,560 Quindi potete mettere qui un altro JavaScript o il vostro JavaScript malevolo. 909 01:44:40,560 --> 01:44:45,280 E questo sarà incluso qui. E farà l'azione, 910 01:44:45,280 --> 01:44:50,640 un JavaScript diverso che farà qualcos'altro. Quindi questo è qualcosa che possiamo ipotizzare. 911 01:44:52,160 --> 01:44:57,040 Andiamo a "reindirizzare a un URL che è costruito per parti del DOM che possono essere controllate dall' 912 01:44:57,040 --> 01:45:02,880 attaccante può facilitare attacchi di phishing". Molto bene. La cosa che il vostro collega ha menzionato. 913 01:45:02,880 --> 01:45:06,960 In questi attacchi, utenti ignari possono essere reindirizzati ad un sito malevolo 914 01:45:06,960 --> 01:45:11,600 che sembra molto familiare a quello reale e così via. In altre parole, può essere controllato 915 01:45:11,600 --> 01:45:18,880 dall'attaccante. Raccomandazione: URL non affidabile. Si consiglia di evitare di inserire l'input dell'utente direttamente 916 01:45:18,880 --> 01:45:23,120 in un redirect. Invece, mantenere una lista di redirect autorizzati dal server, 917 01:45:23,760 --> 01:45:29,520 quindi scegliere dalla lista in base all'input utente fornito. E hanno alcune opzioni qui. 918 01:45:29,520 --> 01:45:34,080 Non sono un esperto per risolvere questo, ma potete vedere qui la proposta. 919 01:45:34,080 --> 01:45:39,360 Potete leggere la raccomandazione. Poi il mio approccio è sempre andare sul CWE, 920 01:45:39,360 --> 01:45:44,800 vedere cosa succede sul cross-site scripting e così via. E magari qui e magari là. 921 01:45:44,800 --> 01:45:50,080 E poi cercare di trovare la soluzione, cercare di riscrivere il codice e così via. Quindi questo è un approccio comune. 922 01:45:50,800 --> 01:45:57,200 Se facessimo... chi ha fatto penetration testing in passato? Tu l'hai fatto? Oh, l'hai fatto. 923 01:45:57,920 --> 01:46:05,200 Ok. Se fate una scansione NMAP... no, non scansione NMAP. Non conosco gli strumenti. Una scansione XSS 924 01:46:05,200 --> 01:46:12,000 per vedere se c'è un cross-site scripting. Ok. Quale? Zap. Sì. Potete fare... 925 01:46:13,120 --> 01:46:18,480 magari usando Zap o qualunque altra cosa. Potete trovare la vulnerabilità. Quindi la vulnerabilità di ciò 926 01:46:18,480 --> 01:46:26,080 sarà lo sfruttamento XSS, molto probabilmente. Ok. Perché questo è il codice. Questo è il problema. 927 01:46:26,080 --> 01:46:32,400 Se fate il black box testing, molto probabilmente recupererà, risponderà con... 928 01:46:32,400 --> 01:46:38,960 questo molto probabilmente dovrebbe avere uno sfruttamento XSS, una vulnerabilità XSS lì. Ok. 929 01:46:41,280 --> 01:46:46,800 Sì. Quindi è bello. Ed è un approccio. Ho provato a farlo con un mio studente. 930 01:46:47,360 --> 01:46:54,720 Ha creato il codice. Ha distribuito il componente, il software. Poi ha fatto quell'analisi e poi 931 01:46:55,280 --> 01:47:01,200 è andato alla scansione delle vulnerabilità e ha convalidato quello che abbiamo detto. È un exploit XSS? Sì, 932 01:47:01,200 --> 01:47:08,000 lo è. Quindi questo era il problema. E ha fatto questo ciclo di vita per coprire complessivamente tutti questi, 933 01:47:08,000 --> 01:47:13,280 diciamo, argomenti, tutto questo. Ed è un bel progetto. Potete vedere un progetto molto semplice. 934 01:47:13,280 --> 01:47:18,800 Molto, molto semplice. Cercate di fare l'analisi di sicurezza del codice. Poi fate l'exploitation 935 01:47:18,800 --> 01:47:23,280 dall'altro lato, dal black box testing. Lo impacchettate come un report e dite: 936 01:47:23,280 --> 01:47:29,120 ok, ho un report. Poi andate sul mercato per un'assunzione e dicono: 937 01:47:29,120 --> 01:47:34,320 ok, cosa sai della cybersecurity? Ho fatto questo. Faccio analisi del codice di sicurezza. 938 01:47:34,320 --> 01:47:41,840 Ho fatto l'exploitation. Ho visto che avevano l'XSS su questo servizio. E questo è il mio report. 939 01:47:41,840 --> 01:47:48,080 E potete vedere: ok, sai un po' di cose. È bello. Vieni a lavorare con noi. E questo 940 01:47:48,080 --> 01:47:53,600 è successo in passato a un mio studente, ok, con quegli esercizi. Ed è entrato in un 941 01:47:54,160 --> 01:47:59,440 lavoro in ambito cybersecurity molto facilmente. Ed è in realtà, sapete, non è che 942 01:48:00,400 --> 01:48:06,000 abbia capito effettivamente un sacco di cose grazie a tutti questi esercizi. Era solo una tesi. 943 01:48:06,000 --> 01:48:12,400 Ma durante la tesi, ha fatto tutto questo. E in realtà, ne ha tratto un grande beneficio. 944 01:48:13,600 --> 01:48:20,000 Ok, vediamo altri due esempi e poi abbiamo finito. Qui, prototype pollution function. 945 01:48:20,000 --> 01:48:27,040 Non so cosa sia. Non lo so nemmeno io. È un... sì, molto probabilmente. È una classe qui, 946 01:48:27,040 --> 01:48:34,480 quindi può essere un problema orientato agli oggetti. Inclusione di funzionalità da fonte non affidabile di nuovo, 947 01:48:34,480 --> 01:48:40,560 cloud for... ok, usano così. Quindi potete vedere un complessivo, diciamo torniamo indietro, 948 01:48:40,560 --> 01:48:46,080 incidenti di sicurezza qui. E sì, dobbiamo chiudere tutte queste voci o quant'altro. 949 01:48:46,080 --> 01:48:51,600 La maggior parte sono uguali, ma qui fornisce un complessivo, sapete, problema di cosa può andare storto 950 01:48:51,600 --> 01:48:58,720 su un server DICOM che contiene radiografie e così via. Ok. Domande o commenti? 951 01:49:01,760 --> 01:49:12,080 No, ok. Va bene. Allora ho... vediamo dove siamo, ho finito. Ecco la mia email. Se volete 952 01:49:12,080 --> 01:49:20,080 trovarmi, ovviamente, potete scrivere su LinkedIn, potete sempre chiedermi. Cerco di essere il più 953 01:49:20,080 --> 01:49:25,200 reattivo possibile verso gli studenti o chiunque voglia imparare o discutere. 954 01:49:26,240 --> 01:49:31,920 Mi piace condividere informazioni e la mia esperienza. Quindi sentitevi liberi di contattarmi per qualunque cosa vi serva. 955 01:49:31,920 --> 01:49:34,720 E grazie mille per la vostra attenzione. Grazie.