1 00:00:03,000 --> 00:00:05,040 Benvenuti alla lezione tre. 2 00:00:05,040 --> 00:00:09,120 La memoria non è solo archiviazione, è lo spazio che il tuo sistema usa per eseguire 3 00:00:09,120 --> 00:00:12,120 app, elaborare dati e caricare programmi. 4 00:00:12,920 --> 00:00:16,240 Quando la gestione della memoria va male, gli attaccanti possono sfruttarla (exploit), 5 00:00:16,680 --> 00:00:19,680 a volte prendendo il pieno controllo di un dispositivo. 6 00:00:19,760 --> 00:00:23,000 In questa lezione, copriremo cos'è la memory corruption, 7 00:00:23,400 --> 00:00:26,520 come viene sfruttata, e le difese che i sistemi moderni 8 00:00:26,520 --> 00:00:29,520 usano per fermare questi attacchi. 9 00:00:30,240 --> 00:00:33,800 La memory corruption accade quando un programma scrive fuori dalla sua area di memoria 10 00:00:33,800 --> 00:00:37,920 assegnata, sovrascrivendo accidentalmente altri dati o istruzioni. 11 00:00:38,800 --> 00:00:41,800 Un esempio classico è il buffer overflow. 12 00:00:42,080 --> 00:00:45,040 Immagina un contenitore costruito per contenere dieci oggetti. 13 00:00:45,040 --> 00:00:48,040 Se forzi 20 oggetti dentro di esso, l'extra trabocca fuori, 14 00:00:48,240 --> 00:00:51,240 possibilmente sovrascrivendo informazioni importanti vicine. 15 00:00:51,600 --> 00:00:55,200 Nell'informatica, quella fuoriuscita può essere sfruttata dagli attaccanti per mandare in crash 16 00:00:55,200 --> 00:00:59,040 un programma, dirottare (hijack) il suo comportamento, o iniettare (inject) malicious code. 17 00:01:00,560 --> 00:01:01,640 Gli attaccanti amano 18 00:01:01,640 --> 00:01:04,640 i difetti di memoria perché possono fare molto con un piccolo errore. 19 00:01:04,880 --> 00:01:06,880 Ecco il flusso tipico. 20 00:01:06,880 --> 00:01:10,520 Mandare in crash il programma causando un buffer overflow o un errore simile. 21 00:01:11,120 --> 00:01:14,760 Reindirizzare l'esecuzione sovrascrivendo return addresses o pointers. 22 00:01:15,800 --> 00:01:18,800 Iniettare malicious code nello spazio di memoria compromesso 23 00:01:19,280 --> 00:01:21,440 creando attentamente il loro overflow. 24 00:01:21,440 --> 00:01:24,360 Gli attaccanti possono prendere il pieno controllo dell'operating system 25 00:01:24,360 --> 00:01:27,360 o installare malware invisibilmente. 26 00:01:28,680 --> 00:01:31,320 I moderni operating systems usano Data Execution 27 00:01:31,320 --> 00:01:34,720 Prevention, o DEP per bloccare molti attacchi di memoria. 28 00:01:35,720 --> 00:01:37,880 Normalmente, la memoria contiene o dati 29 00:01:37,880 --> 00:01:40,880 o executable code, ma non entrambi. 30 00:01:41,040 --> 00:01:44,840 DEP assicura che le aree contrassegnate come dati non possano essere eseguite, 31 00:01:45,520 --> 00:01:48,600 anche se un attaccante inietta malicious code nella memoria. 32 00:01:48,800 --> 00:01:50,760 DEP gli impedisce di girare. 33 00:01:50,760 --> 00:01:53,800 È come mettere serrature di sicurezza su porte che non dovrebbero mai aprirsi. 34 00:01:56,080 --> 00:01:57,960 Un'altra potente difesa è Address 35 00:01:57,960 --> 00:02:01,000 Space Layout Randomization, o ASLR 36 00:02:02,040 --> 00:02:03,240 senza ASLR. 37 00:02:03,240 --> 00:02:06,240 Parti della memoria sono situate in posti prevedibili. 38 00:02:06,800 --> 00:02:11,320 Con ASLR, gli indirizzi di memoria sono randomizzati ogni volta che un programma viene eseguito. 39 00:02:11,960 --> 00:02:12,560 Questo rende 40 00:02:12,560 --> 00:02:15,960 incredibilmente difficile per un attaccante indovinare dove deve andare il loro payload. 41 00:02:16,600 --> 00:02:20,480 Anche se trovano un difetto di memoria, non possono colpire in modo affidabile il bersaglio giusto. 42 00:02:22,600 --> 00:02:25,720 I sistemi moderni usano tecniche aggiuntive per fermare gli attacchi di memoria. 43 00:02:26,160 --> 00:02:29,360 Stack canaries valori speciali piazzati sullo stack 44 00:02:29,880 --> 00:02:33,400 se vengono alterati, il programma sa di essere sotto attacco e si chiude 45 00:02:34,200 --> 00:02:36,480 protezioni di compiler e runtime. 46 00:02:36,480 --> 00:02:39,840 Molti compilers aggiungono bounds checking per prevenire gli overflow. 47 00:02:40,800 --> 00:02:43,400 Linguaggi di programmazione memory safe. 48 00:02:43,400 --> 00:02:47,640 Linguaggi come Rust e Go rendono i bug di memory corruption molto più difficili da creare. 49 00:02:48,600 --> 00:02:53,000 Insieme, queste difese formano un forte scudo contro gli attacchi basati sulla memoria. 50 00:02:53,880 --> 00:02:56,040 Pronto per un piccolo quiz di riepilogo? 51 00:02:56,040 --> 00:02:57,400 Domanda uno. 52 00:02:57,400 --> 00:02:59,200 Cos'è un buffer overflow? 53 00:02:59,200 --> 00:03:02,080 A scaricare troppi file in una volta. 54 00:03:02,080 --> 00:03:04,680 B inviare email di spam rapidamente. 55 00:03:04,680 --> 00:03:07,640 C eseguire troppe app contemporaneamente. 56 00:03:07,640 --> 00:03:11,000 D sovrascrivere la memoria scrivendo oltre un limite del buffer (buffer boundary). 57 00:03:11,520 --> 00:03:12,600 Pausa e decidi. 58 00:03:18,160 --> 00:03:20,000 La risposta corretta è D. 59 00:03:20,000 --> 00:03:22,920 Il Buffer overflow si verifica quando un programma scrive oltre lo spazio 60 00:03:22,920 --> 00:03:25,920 allocato per i dati. 61 00:03:26,280 --> 00:03:29,320 Domanda due qual è lo scopo di Data Execution 62 00:03:29,320 --> 00:03:31,920 Prevention. DEP 63 00:03:31,920 --> 00:03:34,400 A cripta tutti i file. 64 00:03:34,400 --> 00:03:37,560 B impedisce alle regioni dati della memoria di eseguire codice. 65 00:03:37,840 --> 00:03:40,680 C aumenta la velocità di download. 66 00:03:40,680 --> 00:03:43,680 D randomizza le password. 67 00:03:43,800 --> 00:03:46,800 Pensaci attentamente. 68 00:03:50,160 --> 00:03:52,200 La risposta corretta è B. 69 00:03:52,200 --> 00:03:56,040 DEP impedisce che il malicious code iniettato venga eseguito. 70 00:03:57,480 --> 00:04:01,960 Domanda finale qual è l'obiettivo principale di Address Space Layout Randomization? 71 00:04:02,480 --> 00:04:04,320 ASLR 72 00:04:04,320 --> 00:04:07,320 A velocizzare la CPU. 73 00:04:07,600 --> 00:04:10,600 B rendere la memoria più difficile da prevedere. 74 00:04:11,040 --> 00:04:14,040 C nascondere file di sistema. 75 00:04:14,240 --> 00:04:17,040 D risparmiare durata della batteria. 76 00:04:17,040 --> 00:04:20,040 Pausa per riflettere. 77 00:04:23,480 --> 00:04:24,560 La risposta corretta è 78 00:04:24,560 --> 00:04:27,560 B ASLR randomizza il layout della memoria, 79 00:04:27,680 --> 00:04:30,720 rendendo difficile per gli attaccanti prevedere gli indirizzi di memoria. 80 00:04:32,000 --> 00:04:33,000 Ben fatto. 81 00:04:33,000 --> 00:04:36,920 Ora capisci cos'è la memory corruption, come viene sfruttata, 82 00:04:37,120 --> 00:04:41,160 e come difese come DEP e ASLR proteggono i sistemi moderni. 83 00:04:41,680 --> 00:04:45,360 Questi livelli di sicurezza fanno una massiccia differenza nella difesa del mondo reale. 84 00:04:45,840 --> 00:04:49,280 Dopo, passeremo a un hands-on lab dove farai pratica 85 00:04:49,280 --> 00:04:53,120 nell'applicare policy di sicurezza e nell'hardening della tua virtual machine. 86 00:04:53,880 --> 00:04:54,800 Mettiamoci al lavoro.