1 00:00:00,000 --> 00:00:02,750 [Powered by Google Translate] [Settimana 10] 2 00:00:02,750 --> 00:00:04,750 [David J. Malan] [Harvard University] 3 00:00:04,750 --> 00:00:07,000 [Questo è CS50.] [CS50.TV] 4 00:00:08,520 --> 00:00:13,240 >> Va bene! Questo è CS50, ma non per molto. 5 00:00:13,240 --> 00:00:14,740 Questo è l'inizio della settimana 10. 6 00:00:14,740 --> 00:00:18,780 Mercoledì scorso abbiamo il nostro quiz, e poi Lunedi prossimo abbiamo un po 'di torta celebrativa 7 00:00:18,780 --> 00:00:22,030 come abbiamo chiuso il cerchio per tutto il tragitto da zero settimana. 8 00:00:22,030 --> 00:00:25,200 Oggi, si parla di uno dei miei argomenti preferiti, a dire il vero - 9 00:00:25,200 --> 00:00:29,000 quello della sicurezza e della privacy e le implicazioni di tutto l'hardware e il software 10 00:00:29,000 --> 00:00:31,000 che tutti noi usiamo in questi giorni. 11 00:00:31,000 --> 00:00:33,300 A dire il vero, ci sono un sacco di minacce là fuori 12 00:00:33,300 --> 00:00:35,430 che se non hanno davvero soffermati a pensare a loro, 13 00:00:35,430 --> 00:00:36,920 sono in realtà piuttosto scoraggiante. 14 00:00:36,920 --> 00:00:40,070 Caso in questione - se qualcuno di voi ha mai scaricato un pezzo di software 15 00:00:40,070 --> 00:00:42,660 da Internet e installato sul vostro computer, 16 00:00:42,660 --> 00:00:45,220 sei impegnato in un notevole grado di fiducia, no? 17 00:00:45,220 --> 00:00:50,220 Non c'è nulla di aver impedito Skype, o Chrome, o qualsiasi altro pezzo di software 18 00:00:50,220 --> 00:00:54,770 avete installato sul vostro computer, dalla semplice eliminazione di tutti i file sul disco rigido; 19 00:00:54,770 --> 00:00:58,260 di caricare tutti i file sul disco rigido al server un tizio bad; 20 00:00:58,260 --> 00:01:01,650 dalla lettura di tutte le tue e-mail, di intercettare tutti i messaggi istantanei. 21 00:01:01,650 --> 00:01:05,040 Perché la realtà è oggi con sistemi operativi più moderni 22 00:01:05,040 --> 00:01:10,040 in realtà non è molto più di un muro tra programmi software che installiamo, 23 00:01:10,040 --> 00:01:14,220 e tu e io sono praticamente solo tipo di incrociamo le dita e tenendo sulla fede 24 00:01:14,220 --> 00:01:17,750 che tale applicazione abbiamo scaricato gratuitamente, o quella cosa che è 99 centesimi, 25 00:01:17,750 --> 00:01:20,140 è in realtà del tutto benigna. 26 00:01:20,140 --> 00:01:23,090 Ma, come abbiamo visto a C, e ora PHP e JavaScript, 27 00:01:23,090 --> 00:01:25,420 con questa capacità di esprimere noi stessi programatically, 28 00:01:25,420 --> 00:01:30,300 si può fare di più tutto quello che vuoi con un programma che un utente stesso o se stessa potrebbe fare. 29 00:01:30,300 --> 00:01:32,390 >> Così, oggi ci concentriamo su questo argomento - 30 00:01:32,390 --> 00:01:35,360 non solo alcune minacce, ma anche difese. 31 00:01:35,360 --> 00:01:37,540 Infatti, nel mondo della sicurezza in generale, 32 00:01:37,540 --> 00:01:39,040 c'è una specie di questo gatto e al topo, 33 00:01:39,040 --> 00:01:41,990 e oserei dire i cattivi hanno quasi sempre una gamba. 34 00:01:41,990 --> 00:01:45,880 Quando si tratta di prendere vantaggio di hardware e software sui nostri computer personali, 35 00:01:45,880 --> 00:01:51,250 dobbiamo renderci conto che un cattivo ragazzo ha bisogno semplicemente di trovare un semplice errore - 36 00:01:51,250 --> 00:01:56,150 uno sfruttare, un bug - in un pezzo di software che abbiamo scritto o sono in esecuzione 37 00:01:56,150 --> 00:01:58,280 in modo che lui o lei a prendere in consegna il nostro intero sistema. 38 00:01:58,280 --> 00:02:02,870 Al contrario, noi - i buoni - necessario applicare la patch e risolvere tutti questi bug 39 00:02:02,870 --> 00:02:04,900 e di evitare tutte quelle debolezze. 40 00:02:04,900 --> 00:02:07,870 E così, oserei dire nel complesso, i cattivi hanno il vantaggio. 41 00:02:07,870 --> 00:02:10,840 Quali classi di questo tipo e le classi successive sono veramente 42 00:02:10,840 --> 00:02:14,830 non sono su di te insegna a condurre le battaglie che questi ragazzi cattivi fanno, 43 00:02:14,830 --> 00:02:18,220 ma su come proteggere se stessi o almeno come per prendere una decisione calcolata 44 00:02:18,220 --> 00:02:22,970 che sì, lo so che questo software potrebbe infatti leggere tutte le mie e-mail, 45 00:02:22,970 --> 00:02:27,040 ma sono d'accordo con questo a causa del valore che mi porta dall'altro. 46 00:02:27,040 --> 00:02:31,060 >> Sono molto contento di essere affiancato da due delle persone più intelligenti che conosco - 47 00:02:31,060 --> 00:02:33,060 Rob Bowden e Nate Hardison. 48 00:02:33,060 --> 00:02:36,850 Rob è in procinto di prendere noi per un tour attraverso il più basso livello di etichette di sicurezza - 49 00:02:36,850 --> 00:02:42,470 quella del compilatore che, fino ad oggi, tutti abbiamo imparato ad amare e fidarsi. Rob Bowden. 50 00:02:42,470 --> 00:02:47,790 [Applausi] 51 00:02:47,790 --> 00:02:50,280 >> [Rob] Va bene. David ha praticamente preso il mio spiel tutto 52 00:02:50,280 --> 00:02:52,320 che stavo per introdurre con, ma - 53 00:02:52,320 --> 00:02:58,070 Alcune settimane fa, hai visto l'esempio di un buffer-overflow attacco 54 00:02:58,070 --> 00:03:01,900 che è un esempio di un hacking hacker in alcuni software 55 00:03:01,900 --> 00:03:06,060 che non dovrebbero essere l'hacking in. 56 00:03:06,060 --> 00:03:09,690 L'altro lato di questa 57 00:03:09,690 --> 00:03:14,470 a volte si dispone di software che è dannoso in sé e per sé. 58 00:03:14,470 --> 00:03:17,070 Non ha nemmeno bisogno di essere violato. 59 00:03:17,070 --> 00:03:20,670 La persona che ha scritto il software vuole incidere voi. 60 00:03:20,670 --> 00:03:22,190 >> Diciamo solo saltare in codice, 61 00:03:22,190 --> 00:03:28,560 dare un'occhiata a "login.c". 62 00:03:28,560 --> 00:03:33,390 Qui, un programma stupido che convalida una combinazione di username e password. 63 00:03:33,390 --> 00:03:39,420 Qui si dovrebbe assolutamente essere prendere confidenza con il nuovo C per il quiz. 64 00:03:39,420 --> 00:03:43,470 In primo luogo, stiamo usando stringhe di arrivare a descrivere il nome utente, 65 00:03:43,470 --> 00:03:46,280 allora stiamo usando stringa get per afferrare la password, 66 00:03:46,280 --> 00:03:50,680 e poi ci sono alcuni controlli banali di soli, è il nome utente "rob"? 67 00:03:50,680 --> 00:03:52,710 Ed è la password "thisiscs50"? 68 00:03:52,710 --> 00:03:56,900 In alternativa, è il nome utente "tommy" e la password "i <3javascript"? 69 00:03:56,900 --> 00:03:58,980 Se uno di questi è il caso, 70 00:03:58,980 --> 00:04:01,980  allora stiamo solo andando a stampare "successo", e poi abbiamo accesso. 71 00:04:01,980 --> 00:04:07,690 In caso contrario, andremo a stampare "non valido login" e poi, naturalmente, 72 00:04:07,690 --> 00:04:11,120  Dato che la memoria schizzo malloc stringhe, abbiamo nome utente e la password di libero. 73 00:04:11,120 --> 00:04:15,560 Si tratta di un programma di accesso banale, 74 00:04:15,560 --> 00:04:18,110 e se si pensa a quando si accede al dispositivo, 75 00:04:18,110 --> 00:04:22,350 è abbastanza simile - o addirittura l'accesso al vostro computer - 76 00:04:22,350 --> 00:04:24,930 c'è solo un po 'di programma di login che ti dà l'accesso. 77 00:04:24,930 --> 00:04:31,840 Qui, ci capita di avere a livello di codice 'rubare', 'thisiscs50', 'Tommy', 'i <3javascript', 78 00:04:31,840 --> 00:04:34,950 ma probabilmente c'è qualche file da qualche parte sul vostro sistema operativo 79 00:04:34,950 --> 00:04:38,690 che ha una lista di nomi utente che possono accedere al sistema 80 00:04:38,690 --> 00:04:41,740 e un elenco delle password associate a questi nomi utente. 81 00:04:41,740 --> 00:04:46,090 Di solito le password non sono solo memorizzate in formato testo come questo. 82 00:04:46,090 --> 00:04:50,360 Vi è una sorta di crittografia, ma questo farà per il nostro esempio. 83 00:04:50,360 --> 00:04:57,000 >> Venendo più al nostro compilatore - 84 00:04:57,020 --> 00:05:00,780 che sta per essere molto semplice. 85 00:05:00,780 --> 00:05:04,800 Abbiamo bisogno di specificare almeno un po 'di file che vogliamo compilare, 86 00:05:04,800 --> 00:05:10,200 e poi qui - queste linee 87 00:05:10,200 --> 00:05:12,520 sono solo la lettura di un un file. 88 00:05:12,520 --> 00:05:16,080 Legge l'intero file in un buffer grande, 89 00:05:16,080 --> 00:05:19,000 e poi ci Null-terminare il nostro tampone come sempre, 90 00:05:19,000 --> 00:05:21,000 e, infine, abbiamo appena compilare il file. 91 00:05:21,000 --> 00:05:24,090 Non stiamo andando a guardare il modo in cui compilazione viene messo in atto, 92 00:05:24,090 --> 00:05:26,820 ma come un suggerimento, chiama solo Clang. 93 00:05:26,820 --> 00:05:32,370 Stiamo andando a utilizzare questo programma per compilare le cose invece di Clang. 94 00:05:32,370 --> 00:05:39,260 Un problema che iniziare è che vediamo vogliamo compilare il nostro compilatore, 95 00:05:39,260 --> 00:05:43,620 ma se non avete intenzione di utilizzare Clang, non so che cosa ho intenzione di compilare con. 96 00:05:43,620 --> 00:05:46,700 Questo è un problema, nota come bootstrap. 97 00:05:46,700 --> 00:05:53,080 Quindi, solo per questa volta, ho intenzione di usare Clang per compilare il nostro compilatore. 98 00:05:53,080 --> 00:05:58,800 >> Se si pensa di GCC e Clang - 99 00:05:58,800 --> 00:06:03,200 tali programmi, i compilatori vengono costantemente aggiornati, 100 00:06:03,200 --> 00:06:10,010 e quei compilatori sono compilato con GCC e Clang. 101 00:06:10,010 --> 00:06:14,890 Clang è solo una grande C o C + + del programma, 102 00:06:14,890 --> 00:06:19,510 in modo che il compilatore che utilizzano per compilare che è Clang. 103 00:06:19,510 --> 00:06:26,820 Qui, ora, ci sono solo intenzione di utilizzare il nostro compilatore per compilare il nostro compilatore, 104 00:06:26,820 --> 00:06:33,830 e possiamo anche dire - '/ compilatore.', 'compiler.c', 'compile.c', '-o compilatore'. 105 00:06:33,830 --> 00:06:37,250 Si noti che questo è il comando esatto mi sono imbattuto prima - 106 00:06:37,250 --> 00:06:41,330 basta sostituire Clang con '. / compilatore'. 107 00:06:41,330 --> 00:06:44,990 E ora abbiamo un altro compilatore, ma è esattamente la stessa. 108 00:06:44,990 --> 00:06:47,510 Chiede solo Clang. 109 00:06:47,510 --> 00:06:55,050 >> Abbiamo intenzione di utilizzare il nostro compilatore per compilare il nostro programma di login. 110 00:06:55,050 --> 00:07:03,030 Va bene - ". / Compilatore login.c-o login". 111 00:07:03,030 --> 00:07:06,160 Quindi, undefined reference to "GetString". 112 00:07:06,160 --> 00:07:11,250 Hai un "-lcs50". Va bene. 113 00:07:11,250 --> 00:07:13,790 Così ora ho il nostro programma di login. 114 00:07:13,790 --> 00:07:16,790 L'esecuzione - ricevere "Inserisci il tuo nome utente". 115 00:07:16,790 --> 00:07:22,140 Un esempio è rob. Si prega di inserire la password - thisiscs50. 116 00:07:22,140 --> 00:07:24,930 E il successo! Ho accesso. 117 00:07:24,930 --> 00:07:28,350 Esecuzione di nuovo e inserendo alcune password non valida - 118 00:07:28,350 --> 00:07:30,350 o nome utente non valido e la password - 119 00:07:30,350 --> 00:07:32,860 Accesso non valido. 120 00:07:32,860 --> 00:07:37,740 Va bene. Nulla di interessante finora. 121 00:07:37,740 --> 00:07:43,100 Ma diamo uno sguardo al login di nuovo - 122 00:07:43,100 --> 00:07:47,850 e questo sarà un esempio un po 'banale, 123 00:07:47,850 --> 00:07:59,330 ma cerchiamo di aggiungere un altro qui e dire, else if ((strcmp (nome utente, "hacker") == 0 && 124 00:07:59,330 --> 00:08:14,510 strcmp (password, "LOLihackyou") == 0)) 125 00:08:14,510 --> 00:08:26,280 così ora, printf ("Hacked Ora avete accesso \ n!."); bene. 126 00:08:26,280 --> 00:08:36,240 La compilazione di questo - compilatore login.c-o login-lcs50 - 127 00:08:36,240 --> 00:08:40,190 ora in esecuzione login - e se uso il mio hacker di nome utente 128 00:08:40,190 --> 00:08:44,740 e password LOLihackedyou - 129 00:08:44,740 --> 00:08:47,780 Ho sbagliato a digitare lì prima? 130 00:08:47,780 --> 00:08:52,990 A login.c--ihack - I'Ll si hacked perché penso di farlo in seguito. 131 00:08:52,990 --> 00:08:56,270 Va bene. Ricompilare. 132 00:08:56,270 --> 00:09:01,500 Re-running - hacker - LOLihackedyou - 133 00:09:01,500 --> 00:09:03,650 Hacked! Ora è possibile accedere. 134 00:09:03,650 --> 00:09:06,580 >> Non sembra essere un grande differenza 135 00:09:06,580 --> 00:09:10,890 perché è lo stesso controllo esatto stavo facendo per altri nomi utente e password. 136 00:09:10,890 --> 00:09:17,720 Inoltre, la cosa più importante è che se gli altri guardano questo login.c-- 137 00:09:17,720 --> 00:09:24,020 dire, se mi passare questo al mio compagno, e si apre anche questo file, 138 00:09:24,020 --> 00:09:29,870 e leggono questo, si vedrà - va bene, perché ci sono queste righe di codice qui? 139 00:09:29,870 --> 00:09:33,320 Questo non è, ovviamente, qualcosa che dovrebbe essere nel vostro programma. 140 00:09:33,320 --> 00:09:41,590 In alcuni programmi - come ogni software proprietario che non è open-source - 141 00:09:41,590 --> 00:09:46,200 non può mai vedere queste righe di codice. 142 00:09:46,200 --> 00:09:50,440 Qualcosa di simile a Skype o qualcosa del genere - per tutto quello che sai, 143 00:09:50,440 --> 00:09:57,600 Skype è sul vostro computer e non vi è solo una specifica combinazione di nome utente-password 144 00:09:57,600 --> 00:10:01,580 che il login a Skype in qualche modo speciale. 145 00:10:01,580 --> 00:10:04,230 Non sappiamo su di esso, e la gente non sa su di esso, 146 00:10:04,230 --> 00:10:09,640 perché non si arriva a leggere il codice sorgente per vedere che c'è questo buco. 147 00:10:09,640 --> 00:10:11,800 >> Ciò che noi chiamiamo questo - 148 00:10:11,800 --> 00:10:16,530 anche se questo non è un esempio molto intelligente - 149 00:10:16,530 --> 00:10:18,970 questo si chiama una porta sul retro. 150 00:10:18,970 --> 00:10:22,320 Se si pensa alla porta sul retro della vostra casa. 151 00:10:22,320 --> 00:10:26,640 Qui, se mi confermate con 'Rob' i nomi utente o 'tommy,' 152 00:10:26,640 --> 00:10:28,580 che sarebbe come usare la "porta d'ingresso". 153 00:10:28,580 --> 00:10:33,700 Questo è il modo in cui dovrei accedere in modo sicuro. 154 00:10:33,700 --> 00:10:37,630 Ma se entrare con nome utente e password - 155 00:10:37,630 --> 00:10:40,630 allora che sta usando la "porta sul retro." 156 00:10:40,630 --> 00:10:42,810 Non era il modo intenzionale per entrare nel programma, 157 00:10:42,810 --> 00:10:45,350 ma funziona ancora. 158 00:10:45,350 --> 00:10:49,160 E la gente, in generale, non sono tenuti a sapere di queste porte posteriori. 159 00:10:49,160 --> 00:10:53,050 Stiamo andando a migliorare la situazione. 160 00:10:53,050 --> 00:10:55,610 Facciamo tornare questo al nostro login.c originale, 161 00:10:55,610 --> 00:11:05,510 e diamo un'occhiata al nostro nuovo compilatore. Va bene. 162 00:11:05,510 --> 00:11:08,460 Tutto qui è esattamente la stessa. 163 00:11:08,460 --> 00:11:10,460 Stiamo leggendo l'intero file in un buffer. 164 00:11:10,460 --> 00:11:14,400 Tutto qui è lo stesso. 165 00:11:14,400 --> 00:11:16,180 Abbiamo appena compilato il file. 166 00:11:16,180 --> 00:11:19,770 Ma ora ho questa grande se qui 167 00:11:19,770 --> 00:11:24,140 che dice, se il file che mi capita di compilazione è login.c, 168 00:11:24,140 --> 00:11:27,390 poi faccio qualcosa di speciale. 169 00:11:27,390 --> 00:11:29,900 Che cosa è che qualcosa di speciale? 170 00:11:29,900 --> 00:11:33,820 Vedo qui una stringa chiamata 'hack', 171 00:11:33,820 --> 00:11:35,950 e guardando queste righe di codice - 172 00:11:35,950 --> 00:11:41,990 queste sono le stesse linee di codice - Credo che ho fatto uso 'ihack' e non 'ihacked' prima - 173 00:11:41,990 --> 00:11:44,240 guardando queste righe di codice, 174 00:11:44,240 --> 00:11:47,880 sono esattamente le stesse linee di codice che ho avuto in login.c prima. 175 00:11:47,880 --> 00:11:51,130 Ma ora, invece di avere in login.c, 176 00:11:51,130 --> 00:11:54,290 Ho intenzione di metterli nel mio compilatore. 177 00:11:54,290 --> 00:12:00,240 >> Queste sono le righe di codice che sto andando a voler inserire nel login.c. 178 00:12:00,240 --> 00:12:06,350 Queste righe di codice - il buffer che originariamente tenuto la mia login.c 179 00:12:06,350 --> 00:12:11,080 non è più intenzione di essere abbastanza grande, perché ora voglio inserire anche questo hack 180 00:12:11,080 --> 00:12:12,940 al centro del mio programma. 181 00:12:12,940 --> 00:12:16,350 Tutto questo sta facendo è la creazione di un nuovo buffer che è abbastanza grande - 182 00:12:16,350 --> 00:12:22,020 sia per il file originale e le righe di codice - l'hack - che voglio inserire lì. 183 00:12:22,020 --> 00:12:24,920 Qui c'è qualcosa da notare - 184 00:12:24,920 --> 00:12:29,200 char * pattern = "/ / vietare loro di accedervi!" 185 00:12:29,200 --> 00:12:33,760 Se guardiamo indietro a login.c, 186 00:12:33,760 --> 00:12:37,690 vediamo qui questo commento - vietare loro di accedervi! 187 00:12:37,690 --> 00:12:42,360 In login.c, questo commento appare del tutto innocuo, 188 00:12:42,360 --> 00:12:48,270 in modo da non sospettare alcun intento malevolo solo con questo commento. 189 00:12:48,270 --> 00:12:55,600 Ma nel nostro compilatore, ci sono specificamente andando a cercare questa riga di codice, 190 00:12:55,600 --> 00:12:57,600 e poi quando lo troviamo - 191 00:12:57,600 --> 00:13:03,330 queste righe di codice si inserisce il nostro trucco in quella posizione. 192 00:13:03,330 --> 00:13:06,910 Quindi, stiamo scorrere il login.c intero, 193 00:13:06,910 --> 00:13:12,080 stiamo inserendo che trucco esattamente dove si dice negare loro l'accesso, 194 00:13:12,080 --> 00:13:15,890 e poi ci sta compilando - non il login.c originale 195 00:13:15,890 --> 00:13:20,340 ma il login.c nuovo con quel trucco inserito a destra al 'negare loro l'accesso.' 196 00:13:20,340 --> 00:13:29,190 >> Ora voglio compilare il mio nuovo compilatore con quel trucco coinvolti. 197 00:13:29,190 --> 00:13:36,900 Non ho intenzione di usare Clang, quindi cerchiamo di copiare il compilatore che abbiamo usato prima 198 00:13:36,900 --> 00:13:48,420 e l'uso che - così, compilatore compiler.c compile.c-o evil_compiler. 199 00:13:48,420 --> 00:13:50,870 Ora il nostro compilatore male - 200 00:13:50,870 --> 00:13:54,310 se usiamo il nostro compilatore male per compilare qualsiasi altro file, 201 00:13:54,310 --> 00:13:57,980 il file verrà compilato come dovrebbe. 202 00:13:57,980 --> 00:13:59,980 E 'del tutto normale. 203 00:13:59,980 --> 00:14:06,870 Ma se usiamo il nostro compilatore male per compilare login - 204 00:14:06,870 --> 00:14:14,920 così, / evil_compiler login.c-o-lcs50 login. - 205 00:14:14,920 --> 00:14:21,310 guardando login.c ancora una volta, non c'è assolutamente niente qui dentro. 206 00:14:21,310 --> 00:14:25,770 E 'il nostro solito' se e 'o rob o tommy siamo in, altrimenti siamo fuori'. 207 00:14:25,770 --> 00:14:31,620 Ma quando si corre il nostro eseguibile, questo funzionerà come di consueto. 208 00:14:31,620 --> 00:14:36,640 Esecuzione di nuovo - hacker, LOLihackyou - 209 00:14:36,640 --> 00:14:39,000 Hacked! Ora è possibile accedere. 210 00:14:39,000 --> 00:14:43,560 Basta guardare login.c, non si direbbe che qualcosa è sbagliato. 211 00:14:43,560 --> 00:14:46,960 Ma il compilatore che viene usato per compilare login.c 212 00:14:46,960 --> 00:14:53,820 è specificamente progettato per inserire questo hack nel programma. 213 00:14:53,820 --> 00:14:57,320 Abbiamo solo spostato il nostro problema originale. 214 00:14:57,320 --> 00:15:02,880 In origine, abbiamo avuto queste righe di codice in login.c che se qualcun altro li guardò, 215 00:15:02,880 --> 00:15:05,470 sarebbero come, perché sono questi qui? 216 00:15:05,470 --> 00:15:09,550 Ora, se qualcuno capita di guardare il nostro compilatore, 217 00:15:09,550 --> 00:15:12,140 faranno guardare a queste righe di codice e dire, 218 00:15:12,140 --> 00:15:15,290 perché sono questi qui? 219 00:15:15,290 --> 00:15:17,210 Quindi, non abbiamo completamente risolto il nostro problema. 220 00:15:17,210 --> 00:15:22,510 Ma possiamo usare questa idea di nuovo. 221 00:15:22,510 --> 00:15:26,260 >> Dando uno sguardo alla nostra terza versione del compilatore, 222 00:15:26,260 --> 00:15:32,500 è la stessa idea. 223 00:15:32,500 --> 00:15:36,240 Abbiamo letto l'intero file in un buffer di qui, 224 00:15:36,240 --> 00:15:39,660 si compila il file qui, 225 00:15:39,660 --> 00:15:44,220 e ho una specie di hack stringa qui dentro, 226 00:15:44,220 --> 00:15:47,710 a meno di notare il file che sto effettivamente l'hacking ora. 227 00:15:47,710 --> 00:15:52,260 Sono compiler.c pirateria 228 00:15:52,260 --> 00:15:54,590 non login.c. 229 00:15:54,590 --> 00:15:57,780 Ma cosa sto inserendo nel compiler.c? 230 00:15:57,780 --> 00:16:04,600 Sto inserendo questo codice, che è il codice esatto del nostro compilatore precedente, 231 00:16:04,600 --> 00:16:10,540 che aveva lo scopo di inserire il codice in login.c. 232 00:16:10,540 --> 00:16:13,360 Ecco la nostra se login.c file di strcmp 233 00:16:13,360 --> 00:16:19,370 e quindi inserire nella login.c nostra roba hack. 234 00:16:19,370 --> 00:16:26,010 Questo nuovo compilatore ha lo scopo di creare un compilatore 235 00:16:26,010 --> 00:16:30,390 che è destinato a compilare login maliziosamente. 236 00:16:30,390 --> 00:16:34,320 Vedremo perché questo ci aiuta. 237 00:16:34,320 --> 00:16:40,630 Tutto il resto è lo stesso, in modo che funziona esattamente come ha funzionato con il nostro compilatore precedente. 238 00:16:40,630 --> 00:16:45,550 Ci sono solo l'iterazione di nostra compile.c intero. 239 00:16:45,550 --> 00:16:48,190 Ma ora invece di cercare 'negare loro l'accesso,' 240 00:16:48,190 --> 00:16:51,490 stiamo cercando 'compilare il file.' 241 00:16:51,490 --> 00:16:53,750 Dove si compila il file? 242 00:16:53,750 --> 00:16:57,210 Guardando alla nostra compiler.c del tutto innocente, 243 00:16:57,210 --> 00:17:01,340 è proprio qui in basso. 244 00:17:01,340 --> 00:17:06,500 Questo commento - compilare il file - di nuovo, che sembra del tutto innocuo. 245 00:17:06,500 --> 00:17:11,599 Ma, nella nostra versione e malizioso del compilatore, 246 00:17:11,599 --> 00:17:16,550 ci accingiamo a - a destra prima di quel commento - inserire questo codice 247 00:17:16,550 --> 00:17:20,690 che ha lo scopo di inserire il codice durante la compilazione login.c. 248 00:17:20,690 --> 00:17:25,589 >> Ci sono un sacco di livelli di riferimento indiretto qui. 249 00:17:25,589 --> 00:17:29,760 Facciamo non giochi. 250 00:17:29,760 --> 00:17:37,360 Anche in questo caso, si copierà il nostro compilatore originale. 251 00:17:37,360 --> 00:17:48,260 Ora, di compilazione - compilatore compiler.c compile.c-o evilest_compiler - 252 00:17:48,260 --> 00:17:52,640 e ora evilest_compiler. 253 00:17:52,640 --> 00:17:59,200 Evilest compilatore - se usiamo che per compilare il nostro compilatore, 254 00:17:59,200 --> 00:18:01,550 diamo effettivamente guardare. 255 00:18:01,550 --> 00:18:13,230 Evilest_compiler - portando sopra, tutta la strada fino alla versione 1 del nostro compilatore - 256 00:18:13,230 --> 00:18:19,640 versione 1 del nostro compilatore che è stato appena letto nel file e compilarlo. 257 00:18:19,640 --> 00:18:24,780 Qui, sappiamo che evilest_compiler - quando compila il file - 258 00:18:24,780 --> 00:18:29,890 sta per inserire il codice proprio qui prima di compilare il file, 259 00:18:29,890 --> 00:18:38,510 e che il codice sta per apparire esattamente come il codice della seconda versione del nostro compilatore 260 00:18:38,510 --> 00:18:42,240 che ha fatto questo. 261 00:18:42,240 --> 00:18:46,450 Questo codice, che è destinato a entrare nel login, 262 00:18:46,450 --> 00:18:56,480 sta per essere inserita nel nostro compilatore compilatore evilest. 263 00:18:56,480 --> 00:19:08,600 Usiamo evilest_compiler per compilare il nostro compilatore. 264 00:19:08,600 --> 00:19:15,040 Ora useremo compilatore, 265 00:19:15,040 --> 00:19:19,460 tornare verso il login, 266 00:19:19,460 --> 00:19:25,280 e ricordare questo login.c non ha assolutamente nulla di sospetto in esso. 267 00:19:25,280 --> 00:19:35,250 Ma usando il nostro compilatore per compilare login.c, 268 00:19:35,250 --> 00:19:38,430 rob, thisiscs50, il successo. 269 00:19:38,430 --> 00:19:44,350 Dell'hacker login Andiamo, LOLihackyou, Hacked! Ora è possibile accedere. 270 00:19:44,350 --> 00:19:49,710 >> Riconoscere che questo era diverso dalla versione 2 del nostro compilatore. 271 00:19:49,710 --> 00:20:00,500 Il compilatore che usiamo - andiamo avanti indietro - copia di login - 272 00:20:00,500 --> 00:20:01,880 cerchiamo di portare il nostro compilatore tornare qui. 273 00:20:01,880 --> 00:20:06,360 Rimozione compilatore evilest. 274 00:20:06,360 --> 00:20:08,970 Tutto quello che abbiamo lasciato ora è compilatore. 275 00:20:08,970 --> 00:20:10,950 Se guardiamo compiler.c, 276 00:20:10,950 --> 00:20:16,840 non c'è assolutamente nulla in là che sembra dannoso in alcun modo. 277 00:20:16,840 --> 00:20:22,390 Se guardiamo login.c, 278 00:20:22,390 --> 00:20:28,790 non c'è assolutamente nulla qui dentro che sembra dannoso in alcun modo. 279 00:20:28,790 --> 00:20:34,600 Ma, quando usiamo il nostro compilatore per compilare login.c, 280 00:20:34,600 --> 00:20:38,840 si ottiene la versione hackabile di login.c. 281 00:20:38,840 --> 00:20:41,850 Quando abbiamo usato il nostro compilatore per compilare una nuova versione del compilatore, 282 00:20:41,850 --> 00:20:46,620 si ottiene la versione hackable del compilatore. 283 00:20:46,620 --> 00:20:51,790 Ora, se usciamo e distribuire la nostra eseguibile del compilatore, 284 00:20:51,790 --> 00:20:59,280 e nessuno saprà che ci sia qualcosa di dannoso su di esso. 285 00:20:59,280 --> 00:21:04,680 >> Questo è in realtà così in - non riesco a ricordare l'anno - 286 00:21:04,680 --> 00:21:10,350 Ken Thompson, e ha vinto il Premio Turing - 287 00:21:10,350 --> 00:21:15,600 se non si ha familiarità con il Premio Turing, è quasi sempre definito come la 288 00:21:15,600 --> 00:21:20,160 Premio Nobel di informatica, è così che io lo definiscono. 289 00:21:20,160 --> 00:21:24,100 Ken Thompson ha tenuto un discorso in cui ha ricevuto il suo premio Turing 290 00:21:24,100 --> 00:21:27,150 chiamato "Riflessioni sulla fiducia fiducioso." 291 00:21:27,150 --> 00:21:30,710 In sostanza, questa era l'idea del suo discorso. 292 00:21:30,710 --> 00:21:35,050 Solo che invece di nostro compilatore, stava parlando GCC - 293 00:21:35,050 --> 00:21:37,250 solo un altro compilatore Clang come - 294 00:21:37,250 --> 00:21:45,600 e quello che stava dicendo è, come il nostro login.c, la nostra login.c sembra relativamente inutile 295 00:21:45,600 --> 00:21:50,190 ma parlava l'attuale UNIX login.c. 296 00:21:50,190 --> 00:21:53,050 Quando si effettua il login al vostro apparecchio, 297 00:21:53,050 --> 00:21:56,070 c'è qualche programma di login che è in esecuzione. 298 00:21:56,070 --> 00:21:58,080 Questo è stato l'account di accesso di cui stava parlando. 299 00:21:58,080 --> 00:22:02,420 Questo era fondamentalmente una sua idea. 300 00:22:02,420 --> 00:22:09,080 Ha detto che in GCC, che in teoria avrebbe piantato un bug - 301 00:22:09,080 --> 00:22:12,290 non è un bug, ma un codice maligno - 302 00:22:12,290 --> 00:22:16,860 che quando si compila la funzione di accesso - il file di accesso - 303 00:22:16,860 --> 00:22:23,700 sarebbe inserire una porta sul retro in modo che potesse andare assolutamente a qualsiasi sistema UNIX nel mondo 304 00:22:23,700 --> 00:22:27,360 ed accedete con un po 'di nome utente e password specifici. 305 00:22:27,360 --> 00:22:33,710 A quel tempo, GCC era più o meno il compilatore che ognuno utilizzato per nulla. 306 00:22:33,710 --> 00:22:36,460 Se qualcuno è successo di aggiornare GCC, 307 00:22:36,460 --> 00:22:40,880 poi avrebbero ricompilare GCC con il GCC, 308 00:22:40,880 --> 00:22:44,500 e si dovrebbe ancora ottenere una versione cattiva di GCC 309 00:22:44,500 --> 00:22:50,140 perché è stato specificamente compilato per riconoscere che si è ricompilare il compilatore. 310 00:22:50,140 --> 00:22:57,360 E se mai usare GCC per ricompilare un file login.c, 311 00:22:57,360 --> 00:23:03,550 allora sarebbe inserire questo porta sul retro che avrebbe potuto usare per accedere a qualsiasi computer. 312 00:23:03,550 --> 00:23:08,750 >> Questo era tutto teorico, ma - quella particolare circostanza era teorico, 313 00:23:08,750 --> 00:23:12,440 ma le idee sono molto reali. 314 00:23:12,440 --> 00:23:18,250 Nel 2003, c'è stato un esempio simile in cui - 315 00:23:18,250 --> 00:23:21,290 daremo uno sguardo a questo file, 316 00:23:21,290 --> 00:23:25,870 e non ha assolutamente nulla a che fare realmente con esso, ma il bug è simile. 317 00:23:25,870 --> 00:23:29,390 Questo file definisce solo una funzione chiamata divisione. 318 00:23:29,390 --> 00:23:31,780 Ci vuole un argomento a, b un argomento, 319 00:23:31,780 --> 00:23:34,270 e l'intento è quello di fare a diviso b. 320 00:23:34,270 --> 00:23:37,230 Ma lo fa un po 'il controllo degli errori, 321 00:23:37,230 --> 00:23:40,070 così sappiamo le cose sono strano se b succede uguale a zero. 322 00:23:40,070 --> 00:23:44,900 Se b è zero, allora abbiamo diviso questo in 2 casi. 323 00:23:44,900 --> 00:23:46,900 Si potrebbe già vedere il bug. 324 00:23:46,900 --> 00:23:51,840 Il primo caso - se a è zero, allora stiamo facendo a zero diviso per zero, 325 00:23:51,840 --> 00:23:54,300 e ci limitiamo a dire che è indefinito. 326 00:23:54,300 --> 00:23:56,250 Il secondo caso - se è diverso da zero, 327 00:23:56,250 --> 00:24:00,580 allora si tratta di qualcosa di simile a 1 diviso per zero, e ci basta chiamare che l'infinito. 328 00:24:00,580 --> 00:24:03,730 Altrimenti torniamo al solito a diviso b. 329 00:24:03,730 --> 00:24:06,390 Ed ecco, stiamo avviando questi 3 casi, 330 00:24:06,390 --> 00:24:13,740 e noi effettivamente eseguito divide - lo sgrida per me - 331 00:24:13,740 --> 00:24:21,330 così, ignorando gli avvertimenti di clang - 332 00:24:21,330 --> 00:24:24,500 fine di non void funzione - a quanto pare non è stato compilato in anticipo. 333 00:24:24,500 --> 00:24:26,500 Ritorno 0. 334 00:24:26,500 --> 00:24:28,900 Fai dividono - tutto bene. 335 00:24:28,900 --> 00:24:32,470 Con. / Divisione, vediamo 3, Infinity, Infinity. 336 00:24:32,470 --> 00:24:39,150 Zero diviso per zero non hanno fatto ritorno infinito. 337 00:24:39,150 --> 00:24:42,840 E se non avete capito il bug ancora - o non lo videro prima - 338 00:24:42,840 --> 00:24:46,800 si vede che stiamo facendo a = 0. 339 00:24:46,800 --> 00:24:52,610 Probabilmente si voleva dire a == 0. Probabilmente. 340 00:24:52,610 --> 00:24:58,640 >> Ma, questo era in realtà qualcosa che, ancora una volta, nel 2003, il kernel di Linux - 341 00:24:58,640 --> 00:25:02,260 così la nostra appliance utilizza il kernel Linux - 342 00:25:02,260 --> 00:25:05,550 qualsiasi sistema operativo Linux utilizza il kernel Linux - 343 00:25:05,550 --> 00:25:11,610 quindi un errore molto simile a questa si presentò. 344 00:25:11,610 --> 00:25:15,180 L'idea alla base di questo bug è stato - 345 00:25:15,180 --> 00:25:18,820 ancora una volta, c'era solo qualche funzione che è stato chiamato, e lo ha fatto un po 'di controllo degli errori. 346 00:25:18,820 --> 00:25:24,300 Ci sono stati alcuni fattori specifici che questo errore di controllo - 347 00:25:24,300 --> 00:25:30,210 avrebbe dovuto essere, come, va bene, non è possibile chiamare questa funzione con un divisore di 0. 348 00:25:30,210 --> 00:25:35,070 Così, ho intenzione di tornare solo qualche errore. 349 00:25:35,070 --> 00:25:38,090 Tranne, non era così innocente come solo la fissazione di un pari a 0. 350 00:25:38,090 --> 00:25:46,920 Invece, questa riga di codice finito per fare qualcosa di più come utente amministratore =. 351 00:25:46,920 --> 00:25:50,500 Oppure user = superuser. 352 00:25:50,500 --> 00:25:59,170 E 'stato un innocente - a prima vista - errore in cui avrebbe potuto appena stato ragionevole 353 00:25:59,170 --> 00:26:01,560 che ho solo voluto raccontare qualcosa di specifico 354 00:26:01,560 --> 00:26:05,150 se l'utente è capitato di essere l'amministratore del superutente. 355 00:26:05,150 --> 00:26:11,220 Ma poi ri-pensarci, la persona che voleva che l'aspetto di un semplice errore di battitura, 356 00:26:11,220 --> 00:26:14,330 ma se il codice fosse stato effettivamente rilasciato, 357 00:26:14,330 --> 00:26:21,580 allora si sarebbe stati in grado di incidere in qualsiasi sistema passando un flag specifico - 358 00:26:21,580 --> 00:26:25,200 in questo caso b = 0 - 359 00:26:25,200 --> 00:26:28,020 e sarebbe automaticamente rendere l'utente l'amministratore, 360 00:26:28,020 --> 00:26:30,400 e poi si ha il pieno controllo. 361 00:26:30,400 --> 00:26:32,540 Questo è accaduto nel 2003. 362 00:26:32,540 --> 00:26:35,700 >> E così è accaduto che l'unico motivo che è stato catturato 363 00:26:35,700 --> 00:26:39,200 era perché ci è capitato di essere un qualche sistema automatizzato 364 00:26:39,200 --> 00:26:41,540 che notato il cambiamento in questo file 365 00:26:41,540 --> 00:26:44,560 che non dovrebbe mai sono stati modificati da un essere umano. 366 00:26:44,560 --> 00:26:47,580 Il file deve essere stato generato automaticamente. 367 00:26:47,580 --> 00:26:49,780 E così è accaduto che qualcuno ha toccato - 368 00:26:49,780 --> 00:26:52,460 bene, la persona che ha voluto incidere toccato quel file, 369 00:26:52,460 --> 00:26:55,450 e il computer preso che toccare. 370 00:26:55,450 --> 00:27:01,750 Quindi, hanno cambiato questo e solo in seguito resi conto di quale disastro sarebbe stato 371 00:27:01,750 --> 00:27:04,830 se questo era uscita nel mondo reale. 372 00:27:04,830 --> 00:27:08,220 >> Si può pensare che - tornando al nostro esempio compilatore - 373 00:27:08,220 --> 00:27:14,290 anche se non possiamo vedere - guardando il codice sorgente - 374 00:27:14,290 --> 00:27:17,490 che qualcosa in particolare è sbagliato, 375 00:27:17,490 --> 00:27:25,460 se effettivamente guardare il codice binario del compilatore, 376 00:27:25,460 --> 00:27:28,670 vedremmo che qualcosa non va. 377 00:27:28,670 --> 00:27:31,260 Ad esempio, se si esegue le corde funzionamento - 378 00:27:31,260 --> 00:27:34,930 che è solo andando a guardare su un file e stampare tutte le stringhe che riesce a trovare - 379 00:27:34,930 --> 00:27:37,990 se corriamo stringhe sul nostro compilatore, 380 00:27:37,990 --> 00:27:42,400 vediamo che una stringa che si trova è questo strano - 381 00:27:42,400 --> 00:27:45,500 else if (strcmp (username, "hacker") - bla, bla, bla. 382 00:27:45,500 --> 00:27:52,570 Se qualcuno è successo a essere paranoici sufficiente per non fidarsi loro compilatore, 383 00:27:52,570 --> 00:27:56,690 potevano correre stringhe e vedere questo, 384 00:27:56,690 --> 00:28:00,430 e poi si sa che c'era qualcosa di sbagliato con il binario vero e proprio. 385 00:28:00,430 --> 00:28:07,250 Ma, stringhe era inevitabilmente qualcosa che è stato compilato. 386 00:28:07,250 --> 00:28:11,590 Quindi, chi può dire che il nostro compilatore non solo dispone di codice più speciale 387 00:28:11,590 --> 00:28:19,240 che dice, se le stringhe viene mai eseguito sul nostro compilatore, non emettono tutti che il codice maligno. 388 00:28:19,240 --> 00:28:23,980 >> La stessa idea con se vogliamo smontare il file - 389 00:28:23,980 --> 00:28:30,440 abbiamo appreso che l'assemblatore ci porta da codice assembly in un codice macchina - 390 00:28:30,440 --> 00:28:36,010 possiamo andare nella direzione opposta - objdump-d compilatore - 391 00:28:36,010 --> 00:28:38,770 ci darà il montaggio del nostro codice. 392 00:28:38,770 --> 00:28:41,730 Guardando a questo, 393 00:28:41,730 --> 00:28:47,480 è piuttosto criptico, ma se volessimo, potremmo guardare attraverso questa 394 00:28:47,480 --> 00:28:51,700 e la ragione, aspetta, c'è qualcosa da fare qui dentro che non dovrebbero essere in corso, 395 00:28:51,700 --> 00:28:59,380 e poi ci riconosciamo che il compilatore sta facendo qualcosa di dannoso. 396 00:28:59,380 --> 00:29:03,950 Ma, proprio come le stringhe, chi ci dice che non era speciale objdump-carter. 397 00:29:03,950 --> 00:29:11,380 In sostanza, si tratta di non ti puoi fidare nulla. 398 00:29:11,380 --> 00:29:14,310 Il punto della carta chiamata "Fiducia Trusting" è 399 00:29:14,310 --> 00:29:17,900 in generale, abbiamo fiducia nella nostra compilatore. 400 00:29:17,900 --> 00:29:21,700 Si compila il codice e si aspettano di fare ciò che si chiede di fare. 401 00:29:21,700 --> 00:29:26,440 Ma, perché si dovrebbe fidarsi il compilatore? 402 00:29:26,440 --> 00:29:32,120 Lei non ha scritto il compilatore. Tu non sai quello che il compilatore è necessariamente effettivamente facendo. 403 00:29:32,120 --> 00:29:36,870 Chi può dire ci si può fidare? 404 00:29:36,870 --> 00:29:40,050 Ma anche allora, beh, forse possiamo fidarci il compilatore. 405 00:29:40,050 --> 00:29:44,670 Ci sono decine di migliaia di persone che hanno guardato questo. 406 00:29:44,670 --> 00:29:51,360 Qualcuno deve aver riconosciuto che stava succedendo qualcosa con il compilatore. 407 00:29:51,360 --> 00:29:55,100 >> Che cosa succede se andiamo 1 livello più profondo? 408 00:29:55,100 --> 00:29:59,450 Potrebbe anche essere il processore. 409 00:29:59,450 --> 00:30:01,250 Ridicolo come potrebbe essere, 410 00:30:01,250 --> 00:30:06,690 forse c'è qualche dipendente canaglia di Intel che crea questi processori 411 00:30:06,690 --> 00:30:12,400 che ogni volta che il processore si accorge che si sta eseguendo un comando 412 00:30:12,400 --> 00:30:14,570 che è lo scopo di accedere al computer, 413 00:30:14,570 --> 00:30:19,230 il processore accettare qualche specifico nome utente e una password. 414 00:30:19,230 --> 00:30:21,530 Sarebbe selvaggiamente complicato, 415 00:30:21,530 --> 00:30:24,790 ma qualcuno potrebbe farlo. 416 00:30:24,790 --> 00:30:29,350 A quel punto, sono davvero intenzione di aprire il computer per guardare il processore 417 00:30:29,350 --> 00:30:35,970 e utilizzare un microscopio a riconoscere che questi circuiti non sono allineati come dovrebbero essere? 418 00:30:35,970 --> 00:30:39,730 Nessuno è mai andare a prendere quel errore. 419 00:30:39,730 --> 00:30:45,570 Ad un certo punto, non resta che rinunciare a qualcosa e la fiducia. 420 00:30:45,570 --> 00:30:48,390 La maggior parte delle persone si fida il compilatore a questo punto. 421 00:30:48,390 --> 00:30:55,760 Vale a dire non necessariamente che si dovrebbe. 422 00:30:55,760 --> 00:30:59,350 Guardando un video un po 'infame - 423 00:30:59,350 --> 00:31:09,280 [Musica drammatica gioco] 424 00:31:09,280 --> 00:31:13,270 [Si tratta di un sistema UNIX. So che questo.] 425 00:31:13,270 --> 00:31:14,470 [Si tratta di tutti i file -] 426 00:31:14,470 --> 00:31:18,950 Ha detto: "E 'un sistema UNIX. Lo so." 427 00:31:18,950 --> 00:31:21,760 Sostituire UNIX con qualunque sia il vostro sistema operativo preferito è - 428 00:31:21,760 --> 00:31:25,230 lei avrebbe potuto dire: "E 'un sistema Windows. lo so." 429 00:31:25,230 --> 00:31:29,710 E 'una dichiarazione del tutto priva di senso, 430 00:31:29,710 --> 00:31:34,450 ma per quanto ne sappiamo, le capita di conoscere una backdoor nel sistema UNIX. 431 00:31:34,450 --> 00:31:38,840 Sa un po 'di combinazione username / password che effettivamente lasciarla 432 00:31:38,840 --> 00:31:41,540 fare quello che vuole. 433 00:31:41,540 --> 00:31:49,000 >> Bene. La morale di oggi è fondamentalmente non ti puoi fidare nulla. 434 00:31:49,000 --> 00:31:52,620 Anche le cose si scrive - che non ha scritto il compilatore. 435 00:31:52,620 --> 00:31:53,870 Il compilatore potrebbe essere un male. 436 00:31:53,870 --> 00:31:59,140 Anche se avete fatto scrivere il compilatore, la cosa che è in esecuzione il compilatore potrebbe essere un male. 437 00:31:59,140 --> 00:32:05,210 (Ride) Non c'è molto che si può fare. 438 00:32:05,210 --> 00:32:09,050 Il mondo è condannato. 439 00:32:09,050 --> 00:32:11,570 Torna a David! 440 00:32:11,570 --> 00:32:19,540 [Applausi] 441 00:32:19,540 --> 00:32:21,340 >> [David] Grazie. E 'stato davvero deprimente. 442 00:32:21,340 --> 00:32:23,910 Ma in effetti, Rob è corretto. 443 00:32:23,910 --> 00:32:27,150 Noi in realtà non hanno una soluzione a questo, ma siete in procinto di ottenere alcune soluzioni 444 00:32:27,150 --> 00:32:29,150 ad alcune difese più comuni. 445 00:32:29,150 --> 00:32:31,170 In previsione di questo, ciò che Nate e ho fatto dietro le quinte c'è 446 00:32:31,170 --> 00:32:33,950 è sapere che ci sono così tanti portatili in questa stanza, 447 00:32:33,950 --> 00:32:37,020 abbiamo sniffing tutto il traffico wireless passa attraverso questa stanza per gli ultimi 20 minuti 448 00:32:37,020 --> 00:32:39,260 durante il discorso di Rob, quindi stiamo andando a prendere una pausa di due minuti qui. 449 00:32:39,260 --> 00:32:41,740 Nate sta per creare, e poi andremo a parlare di tutte le cose 450 00:32:41,740 --> 00:32:46,380 abbiamo potuto trovare. (Risate) 451 00:32:46,380 --> 00:32:51,990 >> Allora, forse ho esagerato un po 'solo per il gusto del dramma, 452 00:32:51,990 --> 00:32:55,990 ma avremmo potuto essere sniffing tutto il traffico wireless perché in effetti, 453 00:32:55,990 --> 00:32:57,240 è così facile. 454 00:32:57,240 --> 00:32:59,790 Ma ci sono anche modi che si possono difendere contro questo, e così con questo, 455 00:32:59,790 --> 00:33:03,160 Ti do Nate Hardison. >> [Nate] Sweet. 456 00:33:03,160 --> 00:33:06,300 (Applausi) 457 00:33:06,300 --> 00:33:08,650 >> [Nate] Grazie, amico. Apprezzo il grido fuori. 458 00:33:08,650 --> 00:33:12,790 Va bene! E 'settimana di gioco. Siete voi ragazzi eccitati? 459 00:33:12,790 --> 00:33:16,670 Speriamo che sarà un grande gioco il Sabato. 460 00:33:16,670 --> 00:33:20,220 Vi immaginate ragazzi a questo punto - dato che si dispone di un quiz il Mercoledì 461 00:33:20,220 --> 00:33:24,430 tutto sul codice, e ci siamo seduti in una lezione meravigliosa da Rob 462 00:33:24,430 --> 00:33:25,850 con un sacco di codice C in esso - 463 00:33:25,850 --> 00:33:28,330 sono forse un po 'stanco di codice. 464 00:33:28,330 --> 00:33:32,180 In questa parte, non stiamo effettivamente andando a toccare alcun codice di sorta. 465 00:33:32,180 --> 00:33:36,960 Stiamo solo andando a parlare di una tecnologia che si usa ogni giorno, 466 00:33:36,960 --> 00:33:39,790 spesso per molte, molte ore al giorno, 467 00:33:39,790 --> 00:33:46,220 e parleremo delle implicazioni con la sicurezza che ci sono. 468 00:33:46,220 --> 00:33:48,960 >> Abbiamo parlato molto di sicurezza nel corso del semestre, 469 00:33:48,960 --> 00:33:53,030 e abbiamo iniziato con un po 'di crittografia. 470 00:33:53,030 --> 00:33:55,030 [Lv Bdoh vwlqng!] 471 00:33:55,030 --> 00:33:57,890 E mentre voi siete probabilmente super eccitato da note di passaggio tra di loro 472 00:33:57,890 --> 00:33:59,890 in classe con un cifrario di Cesare come questo, 473 00:33:59,890 --> 00:34:03,870 in realtà, ci sono un po 'più divertente da avere quando si sta in realtà parlando di sicurezza 474 00:34:03,870 --> 00:34:05,870 e questo genere di cose. 475 00:34:05,870 --> 00:34:09,090 Oggi, stiamo andando a coprire alcune tecnologie 476 00:34:09,090 --> 00:34:13,650 che le persone utilizzano effettivamente nel mondo reale di fare ogni sorta di cose 477 00:34:13,650 --> 00:34:18,360 da sniffing dei pacchetti delle persone realmente in corso e 478 00:34:18,360 --> 00:34:20,409 irruzione in conti bancari delle persone e tutto il resto. 479 00:34:20,409 --> 00:34:23,460 Si tratta di strumenti legittimi che stiamo parlando 480 00:34:23,460 --> 00:34:26,320 con l'eccezione di uno strumento eventualmente. 481 00:34:26,320 --> 00:34:28,889 >> E voglio solo fare una dichiarazione di non responsabilità veloce. 482 00:34:28,889 --> 00:34:34,909 Quando si parla di queste cose, stiamo parlando di loro in modo da sapere cosa c'è là fuori, 483 00:34:34,909 --> 00:34:39,389 e tu sei a conoscenza di come essere sicuri quando si sta utilizzando il computer. 484 00:34:39,389 --> 00:34:44,000 Ma sicuramente non si vuole implicare che si dovrebbe usare questi strumenti 485 00:34:44,000 --> 00:34:48,090 nel dormitorio o la tua casa, perché si può incorrere in un sacco di problemi grandi. 486 00:34:48,090 --> 00:34:52,760 Questa è una ragione oggi che in realtà non sono stati annusare i pacchetti. 487 00:34:52,760 --> 00:35:01,300 >> Bene. Lunedi scorso, abbiamo parlato di biscotti, e HTTP e autenticazione, 488 00:35:01,300 --> 00:35:05,920 e come Firesheep apre questa grande porta al tuo account Facebook, 489 00:35:05,920 --> 00:35:08,670 al tuo account Hotmail - se qualcuno sta ancora utilizzando Hotmail - 490 00:35:08,670 --> 00:35:12,360 e molti altri account. 491 00:35:12,360 --> 00:35:16,980 Un sacco di questa roba sta per costruire al largo di che, 492 00:35:16,980 --> 00:35:22,070 ma prima, voglio fare un giro veloce di come Internet è evoluto nel tempo. 493 00:35:22,070 --> 00:35:27,490 Già negli anni '90, voi ragazzi potrebbe essere ricordato effettivamente collegare 494 00:35:27,490 --> 00:35:29,880 il tuo computer con uno di questi. 495 00:35:29,880 --> 00:35:32,640 Ora, noi non lo facciamo così tanto più. 496 00:35:32,640 --> 00:35:37,230 Si scopre che, in realtà, al fine di collegare un cavo Ethernet nel mio computer portatile, 497 00:35:37,230 --> 00:35:41,710 Ora ho di usare una di queste schede, che è pazzesco. 498 00:35:41,710 --> 00:35:47,580 >> Invece, nel 1997, abbiamo avuto questa nuova tecnologia divertimento 499 00:35:47,580 --> 00:35:54,960 è venuto fuori che è noto come IEEE 802.11, quindi questo è lo standard internet wireless 500 00:35:54,960 --> 00:36:00,430 L'IEEE è questo organo di governo che dà su tutti i tipi di - 501 00:36:00,430 --> 00:36:04,770 pubblica tutti i tipi di norme in relazione ai computer. 502 00:36:04,770 --> 00:36:08,780 I 802 standard sono tutti di tecnologie Internet. 503 00:36:08,780 --> 00:36:12,690 802,3 così, per esempio, è lo standard Ethernet, 504 00:36:12,690 --> 00:36:17,120 802.15.1 credo sia lo standard Bluetooth, 505 00:36:17,120 --> 00:36:19,540 e 802.11 è tutto su Internet senza fili. 506 00:36:19,540 --> 00:36:24,150 Nel 1997 questo è venuto fuori. Non riusciva a prendere piede subito. 507 00:36:24,150 --> 00:36:30,200 Non è stato fino al 1999 e lo standard 802.11b è venuto fuori che ha regalato veramente popolare. 508 00:36:30,200 --> 00:36:36,330 >> Quanti di voi ricordano quando i computer ha iniziato a venire fuori e wi-fi su di loro? 509 00:36:36,330 --> 00:36:38,330 Questo era un po 'freddo, eh? 510 00:36:38,330 --> 00:36:41,260 Mi ricordo di ottenere il mio primo laptop al liceo, 511 00:36:41,260 --> 00:36:44,250 e aveva una scheda wireless in esso. 512 00:36:44,250 --> 00:36:49,580 Mio padre ha dato a me e diceva che avrei dovuto usare per le mie applicazioni di college e tutto il resto, 513 00:36:49,580 --> 00:36:53,030 e non avevo idea di come avrei fatto a guardare questa roba online. 514 00:36:53,030 --> 00:36:54,640 Ma per fortuna, ho avuto una scheda wireless, così che era piuttosto fresco. 515 00:36:54,640 --> 00:37:04,090 Al giorno d'oggi, vedrete anche 802.11g, che è uno degli altri molto popolare 516 00:37:04,090 --> 00:37:06,090 standard wireless che c'è là fuori. 517 00:37:06,090 --> 00:37:08,660 Sia b e g sono abbastanza obsolete, a questo punto. 518 00:37:08,660 --> 00:37:12,580 Qualcuno sa quale versione la maggior parte delle persone sono in questo momento 519 00:37:12,580 --> 00:37:15,110 se stanno comprando nuovi router wireless e cose del genere? 520 00:37:15,110 --> 00:37:24,290 N. Esattamente. Bingo. E si scopre che la norma CA è appena uscito in forma di progetto, 521 00:37:24,290 --> 00:37:28,050 e ci sono altre versioni sulla strada. 522 00:37:28,050 --> 00:37:31,190 Con ciascuno di questi standard quello che stiamo guadagnando più larghezza di banda, 523 00:37:31,190 --> 00:37:33,900 Altri dati a una velocità maggiore. 524 00:37:33,900 --> 00:37:36,260 Queste cose continuano a cambiare abbastanza rapidamente. 525 00:37:36,260 --> 00:37:39,880 E 'anche così che dobbiamo comprare più router e tutta quella roba divertente. 526 00:37:39,880 --> 00:37:48,160 >> Parliamo di ciò che la comunicazione senza fili è in realtà al suo interno. 527 00:37:48,160 --> 00:37:51,790 Con Ethernet e quei vecchi modem dial-up, 528 00:37:51,790 --> 00:37:55,780 effettivamente avuto questa roba che si collegato al computer, 529 00:37:55,780 --> 00:37:59,820 e poi inserito in una sorta di modem, e poi collegato ad una presa a muro. 530 00:37:59,820 --> 00:38:01,820 Hai avuto questa connessione via cavo, giusto? 531 00:38:01,820 --> 00:38:06,030 Il punto di wireless è sbarazzarsi di questa roba. 532 00:38:06,030 --> 00:38:10,300 Per fare questo, quello che abbiamo è essenzialmente 533 00:38:10,300 --> 00:38:13,960 una comunicazione radio in cui il nostro router wireless - 534 00:38:13,960 --> 00:38:16,230 designati dalla nostra piccola icona wireless - 535 00:38:16,230 --> 00:38:21,730 è connesso a Internet con questo freccia piena indica un qualche tipo di connessione cablata, 536 00:38:21,730 --> 00:38:24,640 ma quando ci si connette al router wireless 537 00:38:24,640 --> 00:38:29,190 si sta usando quasi come un walkie-talkie tra 538 00:38:29,190 --> 00:38:31,960 il computer e il router senza fili. 539 00:38:31,960 --> 00:38:35,150 La cosa veramente interessante di questo è che si può muoversi. 540 00:38:35,150 --> 00:38:40,900 Si può portare il computer in tutto Sanders, andare navigare in rete, quello che vuoi, 541 00:38:40,900 --> 00:38:43,240 proprio come voi tutti conosciamo ed amiamo, 542 00:38:43,240 --> 00:38:46,030 e non si devono mai essere collegato a nulla. 543 00:38:46,030 --> 00:38:53,880 Per questo lavoro, abbiamo sia la ricezione e la trasmissione. 544 00:38:53,880 --> 00:38:56,060 E 'davvero così walkie-talkie. 545 00:38:56,060 --> 00:39:03,800 >> Questo router wireless - che in Sanders è seduto sotto di questa fase, proprio qui - 546 00:39:03,800 --> 00:39:06,590 è sempre trasmissione e la ricezione, trasmissione e la ricezione, 547 00:39:06,590 --> 00:39:09,330 e allo stesso modo, i computer sono tutti facendo quello stesso genere di cose, anche. 548 00:39:09,330 --> 00:39:12,840 Solo che non può sentire. 549 00:39:12,840 --> 00:39:17,900 L'altra cosa che si può fare è che si può avere più computer 550 00:39:17,900 --> 00:39:22,200 parlando con lo stesso router wireless. 551 00:39:22,200 --> 00:39:25,680 Più si è vicini ad un router - e di nuovo, si tratta di una comunicazione radio - 552 00:39:25,680 --> 00:39:30,320 quanto più si è, meglio il segnale è, meglio il computer 'sente' il router 553 00:39:30,320 --> 00:39:32,460 e può comunicare con Internet. 554 00:39:32,460 --> 00:39:39,520 Se voi siete sempre al vostro dormitorio, a casa tua e ti stai chiedendo perché il segnale è male, 555 00:39:39,520 --> 00:39:42,230 probabilmente è perché a). non sei molto vicino al router, o 556 00:39:42,230 --> 00:39:46,930 b). c'è qualcosa tra te e il router come un muro di cemento o qualcosa del genere 557 00:39:46,930 --> 00:39:50,720 che non lascia quelle onde radio attraversano. 558 00:39:50,720 --> 00:39:57,850 >> Parliamo un po 'di cattivi perché come wi-fi. 559 00:39:57,850 --> 00:40:02,980 I cattivi ragazzi amano wi-fi per alcuni motivi. 560 00:40:02,980 --> 00:40:06,670 Ecco il nostro uomo brutto male proprio lì. 561 00:40:06,670 --> 00:40:10,660 Una ragione per cui questo ragazzo cattivo ama wi-fi 562 00:40:10,660 --> 00:40:18,770 è perché, per impostazione predefinita, un sacco di router wireless arriva e quando si impostare, 563 00:40:18,770 --> 00:40:20,950 stanno in chiaro. 564 00:40:20,950 --> 00:40:23,970 Questo è stato un problema, e ci sono stati casi - 565 00:40:23,970 --> 00:40:28,210 più istanze, ora - in cui il cattivo si presenta a casa di qualcuno, 566 00:40:28,210 --> 00:40:32,630 si accorge che c'è un chiaro wi-fi a cui si può collegare. 567 00:40:32,630 --> 00:40:37,350 Si collegano al wi-fi, e poi iniziare a scaricare tutti i tipi di cose divertenti. 568 00:40:37,350 --> 00:40:40,890 E non stai scaricando gattini, non stanno scaricando cuccioli. 569 00:40:40,890 --> 00:40:44,610 Questo è come BitTorrent. Questo è il brutto del più cattivo. 570 00:40:44,610 --> 00:40:48,740 Ci sono stati casi in cui l'FBI ha anche ottenuto coinvolti 571 00:40:48,740 --> 00:40:52,390 pensando che la persona che possiede la casa è in realtà quello 572 00:40:52,390 --> 00:40:56,090 andare là fuori e il download di cose che in realtà non dovrebbe essere. 573 00:40:56,090 --> 00:41:00,730 Avendo chiaro wi-fi non è sicuramente qualcosa che si vuole fare, 574 00:41:00,730 --> 00:41:06,340 se non altro per non avere l'FBI bussare alla tua porta. 575 00:41:06,340 --> 00:41:09,910 >> Un'altra ragione per cui i cattivi amano wi-fi 576 00:41:09,910 --> 00:41:13,870 è la ragione per cui David parlato in precedenza durante la pausa. 577 00:41:13,870 --> 00:41:17,240 Perché è una comunicazione radio al suo interno, 578 00:41:17,240 --> 00:41:22,460 se si conosce il canale, è possibile ascoltare la stazione radio. 579 00:41:22,460 --> 00:41:31,870 Per esempio, se c'è un diritto brutta seduto in mezzo a destra vicino al punto di accesso, 580 00:41:31,870 --> 00:41:36,830 proprio accanto a questo router wireless, il cattivo può inserirsi in tutto il traffico wireless 581 00:41:36,830 --> 00:41:40,240 che proviene da tutti i computer. 582 00:41:40,240 --> 00:41:44,590 In effetti, questi ragazzi - questi pochi fortunati che sono qui in prima fila - 583 00:41:44,590 --> 00:41:47,610 perché sono super-vicino a tutti questi router wireless 584 00:41:47,610 --> 00:41:49,950 che siedono proprio sotto il palco, 585 00:41:49,950 --> 00:41:53,780 sarebbero in grado di sentire il traffico di tutti in questa stanza tutta 586 00:41:53,780 --> 00:41:59,480 se si è connessi al wi-fi e iniziare la navigazione attraverso questi punti di accesso. 587 00:41:59,480 --> 00:42:03,740 Non è molto difficile sedersi se stessi in una buona posizione per annusare e capire 588 00:42:03,740 --> 00:42:07,030 quello che gli altri stanno facendo. 589 00:42:07,030 --> 00:42:10,830 E 'una cosa da tenere a mente, soprattutto se non siete sicuri di dove il punto di accesso è, 590 00:42:10,830 --> 00:42:15,010 e si sta navigando dire, in uno Starbucks. 591 00:42:15,010 --> 00:42:17,360 >> Si scopre che sniffing e tutto il resto 592 00:42:17,360 --> 00:42:19,440 non è poi così difficile da fare. 593 00:42:19,440 --> 00:42:25,430 C'è un programma chiamato tcpdump che scarica tutti i tipi di traffico TCP 594 00:42:25,430 --> 00:42:29,910 ed è possibile eseguirlo abbastanza semplice - proprio come ho fatto questa mattina. 595 00:42:29,910 --> 00:42:32,810 Ecco un po 'di una discarica, ed ecco una parte del traffico che stava arrivando 596 00:42:32,810 --> 00:42:34,960 la mia rete in quel momento. 597 00:42:34,960 --> 00:42:41,500 Potete vedere - se si strabismo davvero difficile - c'è un po 'di Spotify in là. 598 00:42:41,500 --> 00:42:44,050 In cima a tcpdump - perché questo è una specie di dolore da usare - 599 00:42:44,050 --> 00:42:48,860 c'è un programma chiamato Wireshark che fasci il tutto in una bella interfaccia grafica. 600 00:42:48,860 --> 00:42:51,970 Wireshark è super-comodo, quindi se si va a prendere lezioni di rete, 601 00:42:51,970 --> 00:42:56,780 questo è uno strumento che si arriva ad amare in quanto aiuta a sezionare tutti i pacchetti 602 00:42:56,780 --> 00:42:59,400 che sono galleggianti intorno là fuori. 603 00:42:59,400 --> 00:43:01,810 Ma può essere utilizzato anche per cattiva. 604 00:43:01,810 --> 00:43:05,810 E 'molto semplice basta scaricare il programma, avviare in su, 605 00:43:05,810 --> 00:43:09,300 avviare un'acquisizione di rete, e vedere tutto quello che sta succedendo - 606 00:43:09,300 --> 00:43:14,130 e filtrare e fare ogni sorta di cose divertenti con esso. 607 00:43:14,130 --> 00:43:17,930 >> L'altra cosa che si può fare con la comunicazione wireless 608 00:43:17,930 --> 00:43:25,380 non solo è possibile intercettare, ma si può anche imparare a vite con la rete 609 00:43:25,380 --> 00:43:31,020 e iniettare le proprie informazioni di controllare l'esperienza che gli altri 610 00:43:31,020 --> 00:43:35,140 sulla stessa rete senza fili sono sempre. 611 00:43:35,140 --> 00:43:37,140 Diamo uno sguardo a questo. 612 00:43:37,140 --> 00:43:40,700 Ecco Firesheep - che abbiamo conosciuto e amato dalla settimana scorsa - 613 00:43:40,700 --> 00:43:43,590 che è che la tecnologia intercettazioni. 614 00:43:43,590 --> 00:43:50,360 Se, per esempio, abbiamo voluto avere attivamente il nostro andare cattivo ragazzo e pasticciare con 615 00:43:50,360 --> 00:43:52,690 uno di questi computer, 616 00:43:52,690 --> 00:43:58,380 in questo scenario abbiamo un computer cercando di andare surf per harvard.edu. 617 00:43:58,380 --> 00:44:04,690 Quello che succede è, il computer invia prima un messaggio al router wireless e dice: 618 00:44:04,690 --> 00:44:07,920 hey, voglio andare www.harvard.edu visita. 619 00:44:07,920 --> 00:44:10,610 Dire per qualche motivo stanno cercando di ottenere informazioni sul gioco questo fine settimana. 620 00:44:10,610 --> 00:44:14,940 Cattivo, dato che lui è seduto al centro, 621 00:44:14,940 --> 00:44:18,730 proprio accanto a quel punto di accesso, è possibile vedere che la comunicazione proveniente dal computer 622 00:44:18,730 --> 00:44:26,170 al router, e lui lo sa, "Aha! Qualcuno sta per harvard.edu." (Ride malignamente) 623 00:44:26,170 --> 00:44:33,870 Ci sarà questa latenza mentre la comunicazione va dal router 624 00:44:33,870 --> 00:44:37,780 fuori a Internet per andare a trovare la pagina web a harvard.edu-- 625 00:44:37,780 --> 00:44:42,020 proprio come voi tutti che dopo aver fatto il tuo pset PHP - 626 00:44:42,020 --> 00:44:45,680 e così il cattivo ha un po 'di tempo, un po' di finestra, 627 00:44:45,680 --> 00:44:49,410 in cui può rispondere con un po 'di roba. 628 00:44:49,410 --> 00:44:53,660 >> Diciamo che questo cattivo ragazzo, naturalmente, è un Yaley. 629 00:44:53,660 --> 00:44:59,990 Lui risponde con harvardsucks.org. Boo! 630 00:44:59,990 --> 00:45:02,300 Bad, cattivo! Bad Yaley! 631 00:45:02,300 --> 00:45:06,020 O, peggio ancora, si potrebbe rispondere con quello. [Http://youtu.be/ZSBq8geuJk0]. 632 00:45:06,020 --> 00:45:09,530 Lascio voi ragazzi a capire di cosa si tratta. 633 00:45:09,530 --> 00:45:14,840 Questo è in realtà una tecnologia chiamata Airpwn! che ha debuttato a 634 00:45:14,840 --> 00:45:18,950 una delle conferenze di sicurezza qualche anno fa. 635 00:45:18,950 --> 00:45:25,190 Con Airpwn! siete in grado di iniettare in realtà il traffico di nuovo in rete. 636 00:45:25,190 --> 00:45:30,060 I computer che cercavano di uscire a Internet e cercare di arrivare a 637 00:45:30,060 --> 00:45:33,090 Google.com, a Facebook.com, a harvard.edu 638 00:45:33,090 --> 00:45:39,190 vedere la risposta dannoso entrare e assumere immediatamente, va bene, 639 00:45:39,190 --> 00:45:43,550 questa è la risposta che stavo aspettando e finiscono per ottenere i contenuti da 640 00:45:43,550 --> 00:45:48,860 harvardsucks.org o nameyourfavoriteshocksite.com, 641 00:45:48,860 --> 00:45:55,270 e si può vedere quanto velocemente le cose si deteriorano. 642 00:45:55,270 --> 00:46:00,190 >> Tutte queste genere di cose non si può fare 643 00:46:00,190 --> 00:46:05,870 con queste connessioni via cavo, perché con una connessione cablata 644 00:46:05,870 --> 00:46:08,710 è difficile spiare al traffico. 645 00:46:08,710 --> 00:46:13,020 Se io sono un cattivo ragazzo e su una fine è il tuo computer 646 00:46:13,020 --> 00:46:14,460 e l'altra estremità è il vostro router - modem - 647 00:46:14,460 --> 00:46:20,180 l'unico modo per entrare in connessione tra quello è quello di unire in realtà il mio computer 648 00:46:20,180 --> 00:46:22,180 in qualche parte nel mezzo 649 00:46:22,180 --> 00:46:26,820 o fare qualcosa di diverso con il router, a valle qualcosa. 650 00:46:26,820 --> 00:46:33,360 Ma con il wireless, può essere facile come seduto in prima fila di una classe, 651 00:46:33,360 --> 00:46:38,200 e si può fare ogni sorta di cose brutte alla gente nella parte posteriore. 652 00:46:38,200 --> 00:46:41,570 >> Parliamo di come si potrebbe difendere contro alcune di queste cose. 653 00:46:41,570 --> 00:46:46,860 Le persone che hanno sviluppato gli standard wireless - 802.11 - 654 00:46:46,860 --> 00:46:50,820 non sono persone stupide da qualsiasi tratto di immaginazione. 655 00:46:50,820 --> 00:46:56,110 Questa è una tecnologia fredda e quando ha debuttato nel 1999, 656 00:46:56,110 --> 00:47:00,780 sono venuti fuori con questo standard chiamata WEP. 657 00:47:00,780 --> 00:47:03,360 Potete vedere qui quando si tenta di partecipare a una rete wireless, 658 00:47:03,360 --> 00:47:07,450 si dispone di tutta una serie di diverse opzioni di protezione. 659 00:47:07,450 --> 00:47:11,800 E 'una specie di dolore, perché ci sono 6 tutti insieme 660 00:47:11,800 --> 00:47:14,790 e non fa davvero senso che da 1 a unirsi. 661 00:47:14,790 --> 00:47:19,190 Questo 1 in alto è il primo che si avvicinò con chiamata WEP. 662 00:47:19,190 --> 00:47:27,960 WEP è l'acronimo di Wired Equivalent Privacy, credo, 663 00:47:27,960 --> 00:47:31,730 Non Wireless Encryption Protocol, che è un termine improprio comune. 664 00:47:31,730 --> 00:47:36,170 Perché cerca di dare equivalente privacy e la protezione di sicurezza 665 00:47:36,170 --> 00:47:40,590 equivalente a quella di una rete cablata 666 00:47:40,590 --> 00:47:46,710 Con WEP finisce sempre lì è, 667 00:47:46,710 --> 00:47:52,300 si dispone di una semplice password di poco che si digita e che serve per crittografare 668 00:47:52,300 --> 00:47:56,210 tutte le comunicazioni tra il computer e il router. 669 00:47:56,210 --> 00:47:58,210 >> Qual è il problema con WEP però? 670 00:47:58,210 --> 00:48:01,470 La password con WEP è molto breve, 671 00:48:01,470 --> 00:48:04,900 e anche tutti usano la stessa password esatta, 672 00:48:04,900 --> 00:48:07,610  e quindi è veramente facile da decifrare. 673 00:48:07,610 --> 00:48:10,580 Quindi molto rapidamente la gente a capire che il WEP era un problema, 674 00:48:10,580 --> 00:48:16,100 e l'unico motivo che vedete si vede ancora in questo piccolo uomo è - 675 00:48:16,100 --> 00:48:18,890 ci sono alcuni vecchi sistemi che fanno uso di WEP - 676 00:48:18,890 --> 00:48:25,710 ciò che si dovrebbe invece cercare sono la WPA e WPA2 anche norme 677 00:48:25,710 --> 00:48:29,130 che sono stati rilasciati in seguito. 678 00:48:29,130 --> 00:48:35,040 Questi sistemi sono un andare molto meglio a protezione su Internet senza fili. 679 00:48:35,040 --> 00:48:41,090 Detto questo, che ancora hanno un po 'di hackability. 680 00:48:41,090 --> 00:48:44,010 Ci sono strumenti di là fuori che può fare questo andare. 681 00:48:44,010 --> 00:48:47,490 Una cosa, in particolare, che può essere brutto è che 682 00:48:47,490 --> 00:48:55,370 se ci si connette e autenticata a un router wireless e si utilizza una sorta di 683 00:48:55,370 --> 00:49:00,940 comunicazione criptata, si scopre che un hacker può facilmente inviare un singolo pacchetto 684 00:49:00,940 --> 00:49:03,990 di staccare dal router, 685 00:49:03,990 --> 00:49:07,220 e una volta che l'ho scollegato possono poi ascoltare - 686 00:49:07,220 --> 00:49:11,800 possono intercettare i pacchetti, come si tenta di ristabilire la connessione con il router. 687 00:49:11,800 --> 00:49:16,800 E con queste informazioni possono poi andare a decifrare il resto della vostra comunicazione. 688 00:49:16,800 --> 00:49:24,580 Questo non è affatto alcun tipo di sicurezza al di là di ogni immaginazione. 689 00:49:24,580 --> 00:49:30,060 >> L'altra cosa che si può fare quando si è la creazione di reti wireless 690 00:49:30,060 --> 00:49:35,460 o sei li unisce è - si nota che qui quando Sto entrando in questa rete, 691 00:49:35,460 --> 00:49:37,640 chiede per il nome della mia rete. 692 00:49:37,640 --> 00:49:41,060 Questo è anche conosciuto come il SSID. 693 00:49:41,060 --> 00:49:48,610 E vedete qui che a destra ho una casella che mi mostra i nomi SSID disponibili. 694 00:49:48,610 --> 00:49:52,690 C'è una Università di Harvard, un CS50 e CS50 una rete personale. 695 00:49:52,690 --> 00:49:59,180 Ora, quanti di voi sapevano che c'era un CS50 rete personale in giro? 696 00:49:59,180 --> 00:50:01,910 Alcuni di voi. Non tutti voi. 697 00:50:01,910 --> 00:50:08,800 Il problema con questo, naturalmente, è che se non avessimo messo questo sulla nostra lista di SSID, 698 00:50:08,800 --> 00:50:10,930 nessuno avrebbe saputo su di esso più probabile. 699 00:50:10,930 --> 00:50:16,090 Spero. A meno che voi ragazzi stanno tutti cercando di rompere nel nostro wireless. 700 00:50:16,090 --> 00:50:18,700 Ma questo è qualcosa che si può fare questo è davvero importante quando si sta impostando 701 00:50:18,700 --> 00:50:20,280 un router a casa. 702 00:50:20,280 --> 00:50:22,820 Questo probabilmente non accadrà per alcuni anni per molti di voi, 703 00:50:22,820 --> 00:50:29,010 ma di tenere presente che il mantenimento di tale SSID fuori di lì e non anche di denominazione 704 00:50:29,010 --> 00:50:34,630 qualcosa di super-comune vi aiuterà a mantenere più sicuro nel lungo periodo. 705 00:50:34,630 --> 00:50:38,070 >> Un paio finale di cose che puoi fare. Uno è HTTPS. 706 00:50:38,070 --> 00:50:44,760 Se siete in uno Starbucks, se siete in un pubblico wi-fi area 707 00:50:44,760 --> 00:50:52,620 e si decide di accedere al tuo conto in banca, accedere a Gmail, Facebook, 708 00:50:52,620 --> 00:50:56,140 fare in modo che questi collegamenti sono in corso su HTTPS. 709 00:50:56,140 --> 00:50:59,800 Si tratta di un ulteriore livello di sicurezza, un ulteriore livello di crittografia. 710 00:50:59,800 --> 00:51:01,520 L'unica cosa da tenere a mente è qui, 711 00:51:01,520 --> 00:51:04,740 quanti di voi hanno mai cliccato attraverso quella grande, schermo rosso che dice: 712 00:51:04,740 --> 00:51:07,480 "Questo sito web potrebbe essere un male." 713 00:51:07,480 --> 00:51:09,710 So di avere. 714 00:51:09,710 --> 00:51:13,090 E 'probabilmente quando siete tutti navigando per andare a vedere Patria o qualcosa del genere, vero? 715 00:51:13,090 --> 00:51:19,900 Gia '. (Risate del pubblico) Si '. Ci si va. Sappiamo chi sta guardando Patria. 716 00:51:19,900 --> 00:51:24,540 Che grande, schermo rosso proprio lì 717 00:51:24,540 --> 00:51:28,600 spesso indica che qualcosa di strano sta accadendo. 718 00:51:28,600 --> 00:51:32,530 A volte è solo il sito stesso non è sicuro, 719 00:51:32,530 --> 00:51:35,520 ma lo stesso grande, schermo esce il rosso quando le persone stanno cercando di 720 00:51:35,520 --> 00:51:37,520 supporto di rete attacchi su di voi. 721 00:51:37,520 --> 00:51:40,220 Quindi, se si vede che grande, schermo rosso venire a Starbucks, 722 00:51:40,220 --> 00:51:42,440 non fare clic attraverso di essa. 723 00:51:42,440 --> 00:51:45,350 Cattive notizie. Cattive notizie porta. 724 00:51:45,350 --> 00:51:51,490 >> L'ultima cosa che si può guardare 725 00:51:51,490 --> 00:51:54,120 è una sorta di VPN. 726 00:51:54,120 --> 00:52:00,280 Questo VPN è disponibile attraverso Harvard - vpn.fas.harvard.edu-- 727 00:52:00,280 --> 00:52:03,260 e ciò che fa è in realtà stabilisce una connessione sicura 728 00:52:03,260 --> 00:52:06,460 tra te e Harvard, imbuti il ​​traffico attraverso di essa, 729 00:52:06,460 --> 00:52:12,160 e in questo modo se si sta seduti in un posto come uno Starbucks 730 00:52:12,160 --> 00:52:19,030 è possibile connettersi a Harvard, ottenere che il traffico sicuro, e quindi passare ad Harvard. 731 00:52:19,030 --> 00:52:21,950 Anche in questo caso, non infallibile. Le persone possono mettersi in mezzo. 732 00:52:21,950 --> 00:52:25,850 Possono iniziare a rompere, ma questo è molto più sicuro che fare affidamento sulla sicurezza 733 00:52:25,850 --> 00:52:28,620 del wi-fi da solo. 734 00:52:28,620 --> 00:52:32,570 >> Bene. In sintesi, 735 00:52:32,570 --> 00:52:34,580 quando si è la creazione di reti wireless, 736 00:52:34,580 --> 00:52:37,250 quando si sta andando fuori di usare wireless in pubblico - 737 00:52:37,250 --> 00:52:43,430 che si tratti di uno Starbucks, che si tratti di Five Guys, che si tratti di b.good, 738 00:52:43,430 --> 00:52:46,440 una cosa del genere - ovunque si hanno wi-fi - 739 00:52:46,440 --> 00:52:48,440 essere consapevoli dei vostri dintorni. 740 00:52:48,440 --> 00:52:50,440 Essere consapevoli di ciò che la gente può fare. 741 00:52:50,440 --> 00:52:53,890 Ed essere al sicuro. Non accedere al tuo conto in banca. 742 00:52:53,890 --> 00:52:58,740 Potrebbe essere un brusco risveglio se qualcuno si presenta con la propria password in seguito. 743 00:52:58,740 --> 00:53:05,480 Con questo, andare cremisi! E ho intenzione di cambiare le cose ripercorrere a David una parola definitiva. 744 00:53:05,480 --> 00:53:11,270 (Applausi) 745 00:53:11,270 --> 00:53:14,360 >> [David] Ho pensato di condividere una cosa per esperienza personale. 746 00:53:14,360 --> 00:53:19,940 Uno strumento come si potrebbe giocare con - anche se Apple ha in gran parte cancellata la questione 747 00:53:19,940 --> 00:53:22,710 se hai aggiornato il software dal - 748 00:53:22,710 --> 00:53:26,670 ma verso la fine di non essere veramente in grado di fiducia del software che usiamo, 749 00:53:26,670 --> 00:53:33,270 e ai punti di Nate, essendo in grado di annusare un po 'di quello che fanno gli altri 750 00:53:33,270 --> 00:53:37,010 là fuori - questo era un pezzo di software che è uscito circa un anno e mezzo fa. 751 00:53:37,010 --> 00:53:39,010 [IPhoneTracker] [http://petewarden.github.com/iPhoneTracker/] 752 00:53:39,010 --> 00:53:41,010 Da qualche tempo, iTunes - prima di iCloud, quando eri la sincronizzazione dei vostri iPod o iPhone o 753 00:53:41,010 --> 00:53:45,570 oi vostri iPad con iTunes - nell'interesse dei backup, 754 00:53:45,570 --> 00:53:48,340 che cosa il vostro iPhone e questi altri dispositivi hanno fatto per un po 'di tempo è 755 00:53:48,340 --> 00:53:50,340 facendo uso di dati GPS. 756 00:53:50,340 --> 00:53:52,710 >> Voi tutti sapete forse che i vostri iPhone e androidi e Windows Mobile 757 00:53:52,710 --> 00:53:55,410 e che in questi giorni è possibile tenere traccia di dove ci si trova l'interesse di mostrare mappe 758 00:53:55,410 --> 00:53:59,440 e simili - bene ciò che Apple e queste aziende fanno gli altri è 759 00:53:59,440 --> 00:54:02,650 in genere traccia un po 'ovunque sei effettivamente nell'interesse della 760 00:54:02,650 --> 00:54:05,380 miglioramento della qualità del servizio. 761 00:54:05,380 --> 00:54:07,170 Si, è possibile ottenere più pubblicità mirata e simili, 762 00:54:07,170 --> 00:54:10,740 ma due, possono anche capire dove ci sono hotspot wireless in tutto il mondo, 763 00:54:10,740 --> 00:54:14,780 e questo può aiutare con geo-localizzazione - una sorta di triangolazione della posizione delle persone. 764 00:54:14,780 --> 00:54:18,520 >> Per farla breve, tutti noi era stato a piedi antenne per una certa quantità di tempo. 765 00:54:18,520 --> 00:54:22,180 Purtroppo, Apple aveva preso la decisione di progettazione - o la sua assenza - 766 00:54:22,180 --> 00:54:26,590 per crittografare non queste informazioni quando veniva eseguito il backup in iTunes. 767 00:54:26,590 --> 00:54:30,330 E ciò che il ricercatore di sicurezza trovato era che questo era solo un file XML enorme - 768 00:54:30,330 --> 00:54:33,810 un enorme file di testo - seduto in software iTunes della gente, 769 00:54:33,810 --> 00:54:35,400 e se tu fossi solo un po 'curioso, 770 00:54:35,400 --> 00:54:38,990 si potrebbe andare a frugare la storia del vostro coniuge, la storia del vostro compagno di stanza, 771 00:54:38,990 --> 00:54:41,050 tuo fratello storia e simili, 772 00:54:41,050 --> 00:54:44,590 e grazie ad alcuni software libero, è possibile tracciare tutte queste coordinate GPS - 773 00:54:44,590 --> 00:54:46,590 latitudine e longitudine. 774 00:54:46,590 --> 00:54:48,590 >> Quindi, in realtà ho fatto con il mio telefono. 775 00:54:48,590 --> 00:54:51,210 Ho collegato il mio telefono, e abbastanza sicuro, la mia versione di iTunes non è crittografato, al momento, 776 00:54:51,210 --> 00:54:53,900 e quello che ho potuto vedere erano i miei propri modelli. 777 00:54:53,900 --> 00:54:56,970 Ecco gli Stati Uniti e ognuno di questi cerchi blu rappresenta 778 00:54:56,970 --> 00:55:01,670 dove mi è capitato di essere stato più di quei mesi precedenti di possedere questo telefono particolare. 779 00:55:01,670 --> 00:55:04,940  Ho passato un sacco di tempo, ovviamente, nel nord-est, un po 'di tempo in California, 780 00:55:04,940 --> 00:55:08,690 una breve viaggio in Texas, e se poi ingrandire questa - 781 00:55:08,690 --> 00:55:11,120 tutto questo è una sorta di raffinato ed interessante, ma sapevo questo. 782 00:55:11,120 --> 00:55:13,890 La maggior parte dei miei amici lo sapeva, ma se ci si immerge in profondità, 783 00:55:13,890 --> 00:55:17,090 vedere dove trascorro la maggior parte del mio tempo nel Nord-Est. 784 00:55:17,090 --> 00:55:20,330 Se attaccarsi alcuni dall'aspetto familiare città - 785 00:55:20,330 --> 00:55:24,670 questo grande, macchia d'inchiostro blu è essenzialmente centrato sul Boston, 786 00:55:24,670 --> 00:55:29,510 e poi spendere un po 'di tempo in periferia si irradiano da Boston. 787 00:55:29,510 --> 00:55:32,780 Ma stavo anche facendo un po 'di consultare tale anno. 788 00:55:32,780 --> 00:55:36,090 E quest'anno è la costa orientale, e si può effettivamente vedermi 789 00:55:36,090 --> 00:55:41,920 e il mio iPhone in tasca viaggiando avanti e indietro tra Boston e New York 790 00:55:41,920 --> 00:55:47,510 Philadelphia e più in basso, oltre a spendere un po 'di tempo di vacanza 791 00:55:47,510 --> 00:55:50,340 sul capo, che è il braccio poco fuori. 792 00:55:50,340 --> 00:55:53,030 Quindi, ognuno di questi punti rappresenta circa il posto che era stato, 793 00:55:53,030 --> 00:55:56,970 e completamente a mia insaputa, tutta questa storia è stato seduto lì 794 00:55:56,970 --> 00:55:58,410 sul mio computer desktop. 795 00:55:58,410 --> 00:56:00,470 Se lo zoom indietro - questo in realtà era un po 'preoccupante. 796 00:56:00,470 --> 00:56:04,190 Ho avuto alcun ricordo di essere mai stato in Pennsylvania quel particolare anno. 797 00:56:04,190 --> 00:56:07,840 Ma anche se un po 'più difficile su di esso e ho capito, oh, era in realtà quel viaggio 798 00:56:07,840 --> 00:56:11,160 e abbastanza sicuro, il mio telefono mi aveva preso. 799 00:56:11,160 --> 00:56:14,180 >> Apple ha dato crittografato queste informazioni, 800 00:56:14,180 --> 00:56:17,380 ma anche questo è solo testimonianza di quante informazioni vengono raccolte su di noi, 801 00:56:17,380 --> 00:56:20,850 e con quanta facilità - nel bene e nel male - è accettabile. 802 00:56:20,850 --> 00:56:23,340 Uno dei take-away si spera di parlare di Rob, dal discorso di Nate 803 00:56:23,340 --> 00:56:27,370 e le immagini piccole come quella di oggi è solo quello di essere ancora più consapevole di questo 804 00:56:27,370 --> 00:56:31,160 in modo che, anche se - come al punto di Rob - we're sorta di vite, giusto? 805 00:56:31,160 --> 00:56:33,920 Non c'è molto che possiamo fare quando si tratta di alcune di queste minacce, 806 00:56:33,920 --> 00:56:37,130 ma alla fine della giornata dobbiamo fidarci qualcosa o qualcuno 807 00:56:37,130 --> 00:56:38,510 se vogliamo utilizzare effettivamente queste tecnologie. 808 00:56:38,510 --> 00:56:43,150 Almeno possiamo essere prendere decisioni informate e decisioni calcolati o meno 809 00:56:43,150 --> 00:56:46,390 in realtà dovremmo essere la selezione di questa considerazione particolarmente sensibile 810 00:56:46,390 --> 00:56:49,330 o in realtà dovremmo essere un po 'il sospetto che l'invio di messaggi istantanei 811 00:56:49,330 --> 00:56:52,180  in un ambiente Wi-Fi come questo. 812 00:56:52,180 --> 00:56:54,990 >> Così, con quello detto, rimane solo un quiz, una lezione rimane. 813 00:56:54,990 --> 00:56:57,740 Ci vediamo il Mercoledì poi Lunedi. 814 00:56:57,740 --> 00:57:02,100 (Applausi ed esclamazioni) 815 00:57:02,100 --> 00:57:06,100 [CS50TV]