1 00:00:00,000 --> 00:00:02,750 [Powered by Google Translate] [Vecka 10] 2 00:00:02,750 --> 00:00:04,750 [David J. Malan] [Harvard University] 3 00:00:04,750 --> 00:00:07,000 [Detta är CS50.] [CS50.TV] 4 00:00:08,520 --> 00:00:13,240 >> Okej! Detta är CS50, men inte mycket längre. 5 00:00:13,240 --> 00:00:14,740 Detta är början av vecka 10. 6 00:00:14,740 --> 00:00:18,780 På onsdag har vi frågesport vår, och sedan nästa måndag har vi några festliga tårta 7 00:00:18,780 --> 00:00:22,030 när vi gått varvet runt hela vägen tillbaka från vecka noll. 8 00:00:22,030 --> 00:00:25,200 Idag talar vi om en av mina favoritämnen, att sanningen berättade - 9 00:00:25,200 --> 00:00:29,000 som säkerhet och integritet och konsekvenserna av all hårdvara och mjukvara 10 00:00:29,000 --> 00:00:31,000 att vi använder alla dessa dagar. 11 00:00:31,000 --> 00:00:33,300 För att vara ärlig, det finns en hel del hot där ute 12 00:00:33,300 --> 00:00:35,430 att om du inte har riktigt paus för att tänka på dem, 13 00:00:35,430 --> 00:00:36,920 de är faktiskt ganska skrämmande. 14 00:00:36,920 --> 00:00:40,070 Ett typexempel - om någon av er har någonsin laddat ner en mjukvara 15 00:00:40,070 --> 00:00:42,660 off av Internet och installerat det på din dator, 16 00:00:42,660 --> 00:00:45,220 du har engagerad i en betydande grad av förtroende, eller hur? 17 00:00:45,220 --> 00:00:50,220 Det finns inget som har hindrat Skype eller Chrome eller någon mjukvara 18 00:00:50,220 --> 00:00:54,770 du har installerat på din dator, från att bara ta bort alla filer på din hårddisk, 19 00:00:54,770 --> 00:00:58,260 från att ladda upp alla filer på hårddisken till några dåliga kille server; 20 00:00:58,260 --> 00:01:01,650 från att läsa alla e-postmeddelande, från avlyssning alla dina snabbmeddelanden. 21 00:01:01,650 --> 00:01:05,040 Eftersom verkligheten är idag med de flesta moderna operativsystem 22 00:01:05,040 --> 00:01:10,040 det är verkligen inte mycket av en mur mellan program som vi installerar, 23 00:01:10,040 --> 00:01:14,220 och du och jag är ganska mycket bara typ av tummarna och ta på tron 24 00:01:14,220 --> 00:01:17,750 att det App vi ner gratis, eller att det som är 99 cent, 25 00:01:17,750 --> 00:01:20,140 är faktiskt helt godartad. 26 00:01:20,140 --> 00:01:23,090 Men som vi har sett till C, och nu PHP och Javascript, 27 00:01:23,090 --> 00:01:25,420 med denna förmåga att uttrycka oss via programmering, 28 00:01:25,420 --> 00:01:30,300 Du kan göra de flesta vad du vill med ett program som en användare själv kan göra. 29 00:01:30,300 --> 00:01:32,390 >> Så vi idag fokusera på detta ämne - 30 00:01:32,390 --> 00:01:35,360 inte bara vissa hot utan även försvar. 31 00:01:35,360 --> 00:01:37,540 Faktum i världen av säkerheten i allmänhet, 32 00:01:37,540 --> 00:01:39,040 Det är typ av denna katt-och-råtta-lek, 33 00:01:39,040 --> 00:01:41,990 och jag förmodar skurkarna nästan alltid ett försprång. 34 00:01:41,990 --> 00:01:45,880 När det gäller att dra nytta av hårdvara och mjukvara på våra egna datorer, 35 00:01:45,880 --> 00:01:51,250 Vi måste inse att en dålig kille helt enkelt måste hitta en enkelt misstag - 36 00:01:51,250 --> 00:01:56,150 en utnyttja, en bugg - i en programvara som vi har skrivit eller kör 37 00:01:56,150 --> 00:01:58,280 för att han eller hon att ta över hela vårt system. 38 00:01:58,280 --> 00:02:02,870 Däremot har vi - de goda - måste lappa och fixa alla dessa buggar 39 00:02:02,870 --> 00:02:04,900 och undvika alla dessa brister. 40 00:02:04,900 --> 00:02:07,870 Och så jag daresay på det hela, skurkarna har fördelen. 41 00:02:07,870 --> 00:02:10,840 Vilka klasser som denna och följande klasser egentligen om 42 00:02:10,840 --> 00:02:14,830 inte om att lära dig hur du föra striderna som dessa skurkar gör, 43 00:02:14,830 --> 00:02:18,220 men handlar om hur du kan skydda dig själv eller åtminstone hur man gör en beräknad beslut 44 00:02:18,220 --> 00:02:22,970 att ja, jag vet det mjukvara faktiskt kunde läsa varenda en av mina e-postmeddelanden, 45 00:02:22,970 --> 00:02:27,040 men jag är okej med att på grund av det värde det ger mig på andra sidan. 46 00:02:27,040 --> 00:02:31,060 >> Jag är mycket glad att få sällskap av 2 av de smartaste människor jag känner - 47 00:02:31,060 --> 00:02:33,060 Rob Bowden och Nate Hardison. 48 00:02:33,060 --> 00:02:36,850 Rob är på väg att ta oss för en tur genom den lägsta nivån av säkerhet taggar - 49 00:02:36,850 --> 00:02:42,470 som kompilatorn som fram till nu har vi alla kommit att älska och lita på. Rob Bowden. 50 00:02:42,470 --> 00:02:47,790 [Applåder] 51 00:02:47,790 --> 00:02:50,280 >> [Rob] Okej. David har ganska mycket tagit hela mitt spiel 52 00:02:50,280 --> 00:02:52,320 att jag skulle presentera med, men - 53 00:02:52,320 --> 00:02:58,070 Flera veckor sedan såg du exempel på en buffert-overflow attack 54 00:02:58,070 --> 00:03:01,900 vilket är ett exempel på en hacker intrång i någon mjukvara 55 00:03:01,900 --> 00:03:06,060 att de inte är tänkta att hacka in. 56 00:03:06,060 --> 00:03:09,690 Den andra sidan av detta 57 00:03:09,690 --> 00:03:14,470 är ibland måste programvara som är skadlig i sig. 58 00:03:14,470 --> 00:03:17,070 Det behöver inte ens vara hackat. 59 00:03:17,070 --> 00:03:20,670 Den person som skrev programvaran vill hacka dig. 60 00:03:20,670 --> 00:03:22,190 >> Låt oss hoppa bara rätt in kod, 61 00:03:22,190 --> 00:03:28,560 ta en titt på "login.c". 62 00:03:28,560 --> 00:03:33,390 Här en dum program som validerar ett användarnamn och lösenord kombination. 63 00:03:33,390 --> 00:03:39,420 Här ska du definitivt att få bekväm med C igen för testet. 64 00:03:39,420 --> 00:03:43,470 Först använder vi få strängar att beskriva användarnamn, 65 00:03:43,470 --> 00:03:46,280 då vi använder Get sträng att ta lösenordet, 66 00:03:46,280 --> 00:03:50,680 och sedan har vi några triviala kontroller av bara, är användarnamnet "Rob"? 67 00:03:50,680 --> 00:03:52,710 Och är lösenordet "thisiscs50"? 68 00:03:52,710 --> 00:03:56,900 Eller är användarnamnet "Tommy" och lösenord "i <3javascript"? 69 00:03:56,900 --> 00:03:58,980 Om någon av dessa är fallet, 70 00:03:58,980 --> 00:04:01,980  då vi ska bara skriva ut "Success", och vi har tillgång till. 71 00:04:01,980 --> 00:04:07,690 Annars kommer vi att skriva ut "ogiltig inloggning" och sedan, naturligtvis, 72 00:04:07,690 --> 00:04:11,120  eftersom skiss strängar malloc minne, vi gratis användarnamn och lösenord. 73 00:04:11,120 --> 00:04:15,560 Detta är en trivial inloggning program 74 00:04:15,560 --> 00:04:18,110 och om du tänker på när du loggar in i apparaten, 75 00:04:18,110 --> 00:04:22,350 det är ganska lika - eller ens logga in på datorn - 76 00:04:22,350 --> 00:04:24,930 Det finns bara några inloggning program som ger dig åtkomst. 77 00:04:24,930 --> 00:04:31,840 Här råkar vi ha hårdkodad "råna", "thisiscs50", "tommy", "i <3javascript" 78 00:04:31,840 --> 00:04:34,950 men förmodligen finns en viss fil någonstans på ditt operativsystem 79 00:04:34,950 --> 00:04:38,690 som har en lista med användarnamn som kan logga in i systemet 80 00:04:38,690 --> 00:04:41,740 och en lista över lösenord som är förknippade med dessa användarnamn. 81 00:04:41,740 --> 00:04:46,090 Vanligtvis lösenorden inte bara lagras i klartext så här. 82 00:04:46,090 --> 00:04:50,360 Det finns någon sorts kryptering, men detta kommer att göra för vårt exempel. 83 00:04:50,360 --> 00:04:57,000 >> Kommer över till vår kompilator - 84 00:04:57,020 --> 00:05:00,780 det kommer att bli mycket enkel. 85 00:05:00,780 --> 00:05:04,800 Vi måste ange åtminstone en del fil som vi vill kompilera, 86 00:05:04,800 --> 00:05:10,200 och sedan här - dessa rader 87 00:05:10,200 --> 00:05:12,520 bara att läsa en fil. 88 00:05:12,520 --> 00:05:16,080 Den läser hela filen till en stor buffert, 89 00:05:16,080 --> 00:05:19,000 och då vi null-avsluta vår buffert som alltid, 90 00:05:19,000 --> 00:05:21,000 och slutligen vi sammanställer bara filen. 91 00:05:21,000 --> 00:05:24,090 Vi kommer inte att titta på hur kompilering faktiskt tillämpas, 92 00:05:24,090 --> 00:05:26,820 men som ett tips, kallar det bara klang. 93 00:05:26,820 --> 00:05:32,370 Vi kommer att använda det här programmet för att sammanställa saker istället för klang. 94 00:05:32,370 --> 00:05:39,260 Ett problem vi börjar med är att vi ser att vi vill kompilera vår kompilator, 95 00:05:39,260 --> 00:05:43,620 men om vi inte tänker använda klang, jag vet inte vad jag ska kompilera med. 96 00:05:43,620 --> 00:05:46,700 Detta är en allmän fråga som kallas bootstrapping. 97 00:05:46,700 --> 00:05:53,080 Så just denna gång, jag kommer att använda klang att kompilera vår kompilator. 98 00:05:53,080 --> 00:05:58,800 >> Om du tänker på GCC och klang - 99 00:05:58,800 --> 00:06:03,200 dessa program, är dessa kompilatorer ständigt uppdateras, 100 00:06:03,200 --> 00:06:10,010 och dessa kompilatorer sammanställs med GCC och klang. 101 00:06:10,010 --> 00:06:14,890 Klang är bara en stor C eller C + +-programmet, 102 00:06:14,890 --> 00:06:19,510 så kompilatorn de använder för att sammanställa det är klang. 103 00:06:19,510 --> 00:06:26,820 Här, nu är vi bara kommer att använda vår kompilator för att kompilera vår kompilator, 104 00:06:26,820 --> 00:06:33,830 och vi kan till och med säga - "/ kompilator. ',' compiler.c", "compile.c", "-o kompilator". 105 00:06:33,830 --> 00:06:37,250 Notera att detta är den exakta kommandot jag körde tidigare - 106 00:06:37,250 --> 00:06:41,330 bara ersätta klang med ". / kompilator". 107 00:06:41,330 --> 00:06:44,990 Och nu har vi en annan kompilator, men det är exakt samma. 108 00:06:44,990 --> 00:06:47,510 Det kallar bara klang. 109 00:06:47,510 --> 00:06:55,050 >> Vi kommer att använda vår kompilator för att kompilera vår inloggningsprogram. 110 00:06:55,050 --> 00:07:03,030 Okej - ". / Kompilator login.c-o inloggning". 111 00:07:03,030 --> 00:07:06,160 Så, odefinierad referens till "GetString". 112 00:07:06,160 --> 00:07:11,250 Fick en "-lcs50". Okej. 113 00:07:11,250 --> 00:07:13,790 Så nu har jag vårt inloggningsprogram. 114 00:07:13,790 --> 00:07:16,790 Kör det - ta emot "Ange ditt användarnamn". 115 00:07:16,790 --> 00:07:22,140 Ett exempel var Rob. Ange ditt lösenord - thisiscs50. 116 00:07:22,140 --> 00:07:24,930 Och framgång! Jag har tillgång till. 117 00:07:24,930 --> 00:07:28,350 Kör det igen och ange några ogiltiga lösenord - 118 00:07:28,350 --> 00:07:30,350 eller ogiltigt användarnamn och lösenord - 119 00:07:30,350 --> 00:07:32,860 Ogiltig inloggning. 120 00:07:32,860 --> 00:07:37,740 Okej. Inget intressant om detta hittills. 121 00:07:37,740 --> 00:07:43,100 Men låt oss ta en titt på inloggning igen - 122 00:07:43,100 --> 00:07:47,850 och detta kommer att bli en ganska trivialt exempel, 123 00:07:47,850 --> 00:07:59,330 men låt oss lägga till en annan i här och säga, annars om ((strcmp (användarnamn, "hacker") == 0 && 124 00:07:59,330 --> 00:08:14,510 strcmp (lösenord, "LOLihackyou") == 0)) 125 00:08:14,510 --> 00:08:26,280 så nu, printf ("Hacked Du har nu tillgång till \ n!."); okej. 126 00:08:26,280 --> 00:08:36,240 Sammanställa detta - kompilator login.c-O login-lcs50 - 127 00:08:36,240 --> 00:08:40,190 nu kör inloggning - och om jag använder mitt användarnamn hacker 128 00:08:40,190 --> 00:08:44,740 och lösenord LOLihackedyou - 129 00:08:44,740 --> 00:08:47,780 Har jag skriver fel där förut? 130 00:08:47,780 --> 00:08:52,990 På login.c--ihack - Jag ska göra hackat eftersom jag tror att jag gör det senare. 131 00:08:52,990 --> 00:08:56,270 Okej. Kompilera. 132 00:08:56,270 --> 00:09:01,500 Köra - hacker - LOLihackedyou - 133 00:09:01,500 --> 00:09:03,650 Hacked! Du har nu tillgång. 134 00:09:03,650 --> 00:09:06,580 >> Det verkar inte vara så stor skillnad 135 00:09:06,580 --> 00:09:10,890 eftersom det är exakt samma kontroll jag gjorde för andra användarnamn och lösenord. 136 00:09:10,890 --> 00:09:17,720 Dessutom är den stora grejen att om andra människor ser på denna login.c-- 137 00:09:17,720 --> 00:09:24,020 säga, om jag klarar det här för att min partner, och de öppnar filen, 138 00:09:24,020 --> 00:09:29,870 och de läser detta, kommer de se - Okej, varför du har dessa kodrader här? 139 00:09:29,870 --> 00:09:33,320 Det är uppenbarligen inte något som bör vara i ditt program. 140 00:09:33,320 --> 00:09:41,590 I vissa program - som alla proprietär programvara som inte är öppen källkod - 141 00:09:41,590 --> 00:09:46,200 du kan aldrig se dessa rader kod. 142 00:09:46,200 --> 00:09:50,440 Något som Skype eller något - för allt du vet, 143 00:09:50,440 --> 00:09:57,600 Skype är på datorn och det finns bara några särskilda användarnamn, lösenord kombination 144 00:09:57,600 --> 00:10:01,580 vilket kommer att logga in på Skype på något speciellt sätt. 145 00:10:01,580 --> 00:10:04,230 Vi vet inte om det, och folk inte vet om det, 146 00:10:04,230 --> 00:10:09,640 eftersom de inte får läsa källkoden för att se att det är det här hålet. 147 00:10:09,640 --> 00:10:11,800 >> Det vi kallar det - 148 00:10:11,800 --> 00:10:16,530 även om detta inte ett mycket smart exempel - 149 00:10:16,530 --> 00:10:18,970 detta kallas en bakdörr. 150 00:10:18,970 --> 00:10:22,320 Om du tänker på den bakre dörren till ditt hus. 151 00:10:22,320 --> 00:10:26,640 Här, om jag bekräfta med användarnamn 'Rob "eller" tommy " 152 00:10:26,640 --> 00:10:28,580 det skulle vara som att använda "dörren". 153 00:10:28,580 --> 00:10:33,700 Det är så jag ska säkert in. 154 00:10:33,700 --> 00:10:37,630 Men om jag skriver den här användarnamn och lösenord - 155 00:10:37,630 --> 00:10:40,630 då är med "bakdörren". 156 00:10:40,630 --> 00:10:42,810 Det var inte avsiktligt sätt att komma in i programmet, 157 00:10:42,810 --> 00:10:45,350 men det fungerar fortfarande. 158 00:10:45,350 --> 00:10:49,160 Och folk i allmänhet inte ska veta om dessa bakdörrar. 159 00:10:49,160 --> 00:10:53,050 Vi kommer att förbättra detta. 160 00:10:53,050 --> 00:10:55,610 Låt oss återgå detta till vår ursprungliga login.c, 161 00:10:55,610 --> 00:11:05,510 och låt oss ta en titt på vår nya kompilatorn. Okej. 162 00:11:05,510 --> 00:11:08,460 Allting här är exakt samma. 163 00:11:08,460 --> 00:11:10,460 Vi läser hela filen till en buffert. 164 00:11:10,460 --> 00:11:14,400 Allting här är densamma. 165 00:11:14,400 --> 00:11:16,180 Vi samlat bara filen. 166 00:11:16,180 --> 00:11:19,770 Men nu har jag det stort om här 167 00:11:19,770 --> 00:11:24,140 som säger, om filen som jag råkar vara sammanställa är login.c, 168 00:11:24,140 --> 00:11:27,390 då jag göra något speciellt. 169 00:11:27,390 --> 00:11:29,900 Vad är det något speciellt? 170 00:11:29,900 --> 00:11:33,820 Jag ser här några sträng kallas "hacka" 171 00:11:33,820 --> 00:11:35,950 och titta på dessa rader kod - 172 00:11:35,950 --> 00:11:41,990 dessa är samma rader kod - Jag antar att jag gjorde användning "ihack" och inte "ihacked" före - 173 00:11:41,990 --> 00:11:44,240 titta på dessa rader kod, 174 00:11:44,240 --> 00:11:47,880 de är exakt samma kodrader som jag hade i login.c innan. 175 00:11:47,880 --> 00:11:51,130 Men nu, i stället för att ha dem i login.c, 176 00:11:51,130 --> 00:11:54,290 Jag ska sätta dem i min kompilator. 177 00:11:54,290 --> 00:12:00,240 >> Dessa är kodrader jag kommer att vilja infoga i login.c. 178 00:12:00,240 --> 00:12:06,350 Dessa rader kod - bufferten som ursprungligen höll min login.c 179 00:12:06,350 --> 00:12:11,080 inte längre kommer att vara tillräckligt stor för nu vill jag också infoga detta hack 180 00:12:11,080 --> 00:12:12,940 i mitten av mitt program. 181 00:12:12,940 --> 00:12:16,350 Allt detta gör är att skapa en ny buffert som är tillräckligt stor - 182 00:12:16,350 --> 00:12:22,020 både för den ursprungliga filen och de extra kodrader - hacka - som jag vill infoga det. 183 00:12:22,020 --> 00:12:24,920 Här är något att notera - 184 00:12:24,920 --> 00:12:29,200 char * mönster = "/ / neka dem tillträde!" 185 00:12:29,200 --> 00:12:33,760 Om vi ​​ser tillbaka på login.c, 186 00:12:33,760 --> 00:12:37,690 Vi ser här nere denna kommentar - förvägra dem tillträde! 187 00:12:37,690 --> 00:12:42,360 I login.c ser denna kommentar är helt ofarliga, 188 00:12:42,360 --> 00:12:48,270 så att du inte skulle misstänka något ont uppsåt med just denna kommentar. 189 00:12:48,270 --> 00:12:55,600 Men i vår kompilator kommer vi speciellt att leta efter den här kodraden, 190 00:12:55,600 --> 00:12:57,600 och sedan när vi tycker att det - 191 00:12:57,600 --> 00:13:03,330 Dessa rader kod sätter vår hacka i den positionen. 192 00:13:03,330 --> 00:13:06,910 Så vi iteration över hela login.c, 193 00:13:06,910 --> 00:13:12,080 Vi sätter den hacka precis där det står förvägra dem tillträde, 194 00:13:12,080 --> 00:13:15,890 och då vi sammanställa - inte den ursprungliga login.c 195 00:13:15,890 --> 00:13:20,340 men den nya login.c med att hacka in höger vid "förnekar dem tillgång." 196 00:13:20,340 --> 00:13:29,190 >> Nu vill jag att sammanställa min nya kompilator med som involverade hacka. 197 00:13:29,190 --> 00:13:36,900 Jag tänker inte använda klang, så låt oss kopiera kompilatorn vi använde innan 198 00:13:36,900 --> 00:13:48,420 och använder det - så kompilator compiler.c compile.c-O evil_compiler. 199 00:13:48,420 --> 00:13:50,870 Nu har vår onda kompilator - 200 00:13:50,870 --> 00:13:54,310 om vi använder vår onda kompilator för att kompilera en annan fil, 201 00:13:54,310 --> 00:13:57,980 filen kommer att sammanställa som det ska. 202 00:13:57,980 --> 00:13:59,980 Det är helt normalt. 203 00:13:59,980 --> 00:14:06,870 Men om vi använder vår onda kompilator för att kompilera inloggning - 204 00:14:06,870 --> 00:14:14,920 så / evil_compiler login.c-O login-lcs50. - 205 00:14:14,920 --> 00:14:21,310 titta på login.c igen, det finns absolut ingenting här. 206 00:14:21,310 --> 00:14:25,770 Det är vår vanliga "om det är antingen Rob eller tommy vi är i, annars är vi ute". 207 00:14:25,770 --> 00:14:31,620 Men när vi kör vår körbara, kommer detta fungera som vanligt. 208 00:14:31,620 --> 00:14:36,640 Igång igen - hacker, LOLihackyou - 209 00:14:36,640 --> 00:14:39,000 Hacked! Du har nu tillgång. 210 00:14:39,000 --> 00:14:43,560 Bara titta på login.c, skulle du tror inte något är fel. 211 00:14:43,560 --> 00:14:46,960 Men kompilator som är används för att sammanställa login.c 212 00:14:46,960 --> 00:14:53,820 är särskilt utformad för att infoga detta hack i programmet. 213 00:14:53,820 --> 00:14:57,320 Vi har bara flyttat vår ursprungliga problemet. 214 00:14:57,320 --> 00:15:02,880 Ursprungligen hade vi dessa kodrader i login.c att om någon annan såg på dem, 215 00:15:02,880 --> 00:15:05,470 de skulle vara, varför är dessa här? 216 00:15:05,470 --> 00:15:09,550 Nu om någon råkar titt på kompilator, 217 00:15:09,550 --> 00:15:12,140 de ska titta på dessa rader kod och säger, 218 00:15:12,140 --> 00:15:15,290 Varför är dessa här? 219 00:15:15,290 --> 00:15:17,210 Så har vi inte helt löst våra problem. 220 00:15:17,210 --> 00:15:22,510 Men vi kan använda denna idé igen. 221 00:15:22,510 --> 00:15:26,260 >> Ta en titt på vår tredje version av kompilatorn, 222 00:15:26,260 --> 00:15:32,500 Det är samma idé. 223 00:15:32,500 --> 00:15:36,240 Vi läser hela filen till en buffert upp här, 224 00:15:36,240 --> 00:15:39,660 Vi sammanställer filen här nere, 225 00:15:39,660 --> 00:15:44,220 och jag har någon form av snöre hacka här, 226 00:15:44,220 --> 00:15:47,710 men märker fil som jag faktiskt hacka nu. 227 00:15:47,710 --> 00:15:52,260 Jag hacka compiler.c 228 00:15:52,260 --> 00:15:54,590 inte login.c. 229 00:15:54,590 --> 00:15:57,780 Men vad jag sätter in compiler.c? 230 00:15:57,780 --> 00:16:04,600 Jag sätter denna kod som är den exakta koden i vår tidigare kompilator, 231 00:16:04,600 --> 00:16:10,540 som var tänkt att infoga kod i login.c. 232 00:16:10,540 --> 00:16:13,360 Här är vår om strcmp fil login.c 233 00:16:13,360 --> 00:16:19,370 och sedan in i login.c vår hacka grejer. 234 00:16:19,370 --> 00:16:26,010 Denna nya kompilatorn syftar till att skapa en kompilator 235 00:16:26,010 --> 00:16:30,390 som är avsedd att sammanställa inloggning uppsåtligt. 236 00:16:30,390 --> 00:16:34,320 Vi får se varför det hjälper oss. 237 00:16:34,320 --> 00:16:40,630 Allt annat är samma, så det fungerar precis som det fungerade med vår tidigare kompilator. 238 00:16:40,630 --> 00:16:45,550 Vi är bara iterera över hela vår compile.c. 239 00:16:45,550 --> 00:16:48,190 Men nu i stället för att leta efter "förnekar dem tillgång" 240 00:16:48,190 --> 00:16:51,490 vi letar efter "kompilera filen." 241 00:16:51,490 --> 00:16:53,750 Var är kompilera filen? 242 00:16:53,750 --> 00:16:57,210 Titta på vår helt oskyldiga compiler.c, 243 00:16:57,210 --> 00:17:01,340 det är rätt här nere på botten. 244 00:17:01,340 --> 00:17:06,500 Denna kommentar - kompilera filen - igen, det ser helt ofarliga. 245 00:17:06,500 --> 00:17:11,599 Men i vår illvillig version av kompilatorn, 246 00:17:11,599 --> 00:17:16,550 vi kommer att - precis innan den kommentaren - sätt den här koden 247 00:17:16,550 --> 00:17:20,690 som syftar till att infoga kod när de sammanställer login.c. 248 00:17:20,690 --> 00:17:25,589 >> Det finns många nivåer av indirekthet här. 249 00:17:25,589 --> 00:17:29,760 Låt oss verkligen köra det. 250 00:17:29,760 --> 00:17:37,360 Återigen, vi kopierar vår ursprungliga kompilatorn. 251 00:17:37,360 --> 00:17:48,260 Nu, kompilera - kompilator compiler.c compile.c-o evilest_compiler - 252 00:17:48,260 --> 00:17:52,640 och nu evilest_compiler. 253 00:17:52,640 --> 00:17:59,200 Evilest kompilator - om vi använder det för att sammanställa vår kompilator, 254 00:17:59,200 --> 00:18:01,550 låt oss faktiskt ser. 255 00:18:01,550 --> 00:18:13,230 Evilest_compiler - föra den över, hela vägen tillbaka till version 1 av vår kompilator - 256 00:18:13,230 --> 00:18:19,640 version 1 av vår kompilator som just lästes i filen och kompilera den. 257 00:18:19,640 --> 00:18:24,780 Här vet vi att evilest_compiler - när det sammanställer den här filen - 258 00:18:24,780 --> 00:18:29,890 kommer att infoga kod här innan kompilera filen, 259 00:18:29,890 --> 00:18:38,510 och att koden kommer att se ut exakt som koden från den andra versionen av vår kompilator 260 00:18:38,510 --> 00:18:42,240 som gjorde det här. 261 00:18:42,240 --> 00:18:46,450 Denna kod, som är avsedd att bryta sig in inloggning 262 00:18:46,450 --> 00:18:56,480 kommer att införas i vår kompilator från evilest kompilatorn. 263 00:18:56,480 --> 00:19:08,600 Låt oss använda evilest_compiler att sammanställa vår kompilator. 264 00:19:08,600 --> 00:19:15,040 Nu ska vi använda kompilator, 265 00:19:15,040 --> 00:19:19,460 komma tillbaka över att logga in, 266 00:19:19,460 --> 00:19:25,280 och kom ihåg detta login.c har absolut ingenting misstänkt i den. 267 00:19:25,280 --> 00:19:35,250 Men att använda vår kompilator för att kompilera login.c, 268 00:19:35,250 --> 00:19:38,430 Rob, thisiscs50, framgång. 269 00:19:38,430 --> 00:19:44,350 Låt oss inloggning hacker, LOLihackyou, hackad! Du har nu tillgång. 270 00:19:44,350 --> 00:19:49,710 >> Inse att det var annorlunda från version 2 av vår kompilator. 271 00:19:49,710 --> 00:20:00,500 Kompilatorn vi använder - låt oss gå tillbaka - kopia från inloggning - 272 00:20:00,500 --> 00:20:01,880 låt oss föra vår kompilator tillbaka hit. 273 00:20:01,880 --> 00:20:06,360 Ta bort evilest kompilator. 274 00:20:06,360 --> 00:20:08,970 Allt vi har kvar nu är kompilatorn. 275 00:20:08,970 --> 00:20:10,950 Om vi ​​tittar på compiler.c, 276 00:20:10,950 --> 00:20:16,840 Det finns absolut ingenting i det som verkar skadligt på något sätt. 277 00:20:16,840 --> 00:20:22,390 Om vi ​​tittar på login.c, 278 00:20:22,390 --> 00:20:28,790 Det finns absolut ingenting här som ser skadliga på något sätt. 279 00:20:28,790 --> 00:20:34,600 Men när vi använder vår kompilator för att kompilera login.c, 280 00:20:34,600 --> 00:20:38,840 vi får hackable versionen av login.c. 281 00:20:38,840 --> 00:20:41,850 När vi använt vår kompilator för att kompilera en ny version av kompilatorn, 282 00:20:41,850 --> 00:20:46,620 vi får hackable versionen av kompilatorn. 283 00:20:46,620 --> 00:20:51,790 Om vi ​​nu går ut och distribuera vårt kompilator körbar, 284 00:20:51,790 --> 00:20:59,280 och ingen kommer att veta att det finns något skadligt om det. 285 00:20:59,280 --> 00:21:04,680 >> Detta är faktiskt så i - jag kommer inte ihåg året - 286 00:21:04,680 --> 00:21:10,350 Ken Thompson, och han vann Turing Award - 287 00:21:10,350 --> 00:21:15,600 om du är obekant med Turing Award, är det nästan alltid definieras som 288 00:21:15,600 --> 00:21:20,160 Nobelpriset i datavetenskap, så det är hur jag ska definiera det. 289 00:21:20,160 --> 00:21:24,100 Ken Thompson höll ett tal när han fick sin Turing Award 290 00:21:24,100 --> 00:21:27,150 kallade "Reflektioner om Tillförlitlig Trust." 291 00:21:27,150 --> 00:21:30,710 I grund och botten var det tanken på hans tal. 292 00:21:30,710 --> 00:21:35,050 Utom i stället för vår kompilator, han talade om GCC - 293 00:21:35,050 --> 00:21:37,250 bara en annan kompilator som klang - 294 00:21:37,250 --> 00:21:45,600 och vad han säger är, som vår login.c verkar vår login.c relativt värdelös 295 00:21:45,600 --> 00:21:50,190 men han talade om den faktiska UNIX login.c. 296 00:21:50,190 --> 00:21:53,050 När du loggar in på din apparat, 297 00:21:53,050 --> 00:21:56,070 det finns en viss inloggning program som körs. 298 00:21:56,070 --> 00:21:58,080 Det var inloggningen att han talade om. 299 00:21:58,080 --> 00:22:02,420 Detta var i princip hans idé. 300 00:22:02,420 --> 00:22:09,080 Han sade att i GCC, han i teorin skulle ha planterat en bugg - 301 00:22:09,080 --> 00:22:12,290 inte en bugg utan en skadlig kod - 302 00:22:12,290 --> 00:22:16,860 att vid sammanställningen inloggningen funktion - inloggning fil - 303 00:22:16,860 --> 00:22:23,700 skulle sätta in en bakdörr så att han kunde gå till absolut alla UNIX-system i världen 304 00:22:23,700 --> 00:22:27,360 och logga in med någon specifik användarnamn och lösenord. 305 00:22:27,360 --> 00:22:33,710 Vid den tiden var GCC ganska mycket kompilatorn som alla används för något. 306 00:22:33,710 --> 00:22:36,460 Om någon råkade uppdatera GCC, 307 00:22:36,460 --> 00:22:40,880 då de skulle kompilera GCC använder GCC, 308 00:22:40,880 --> 00:22:44,500 och du skulle fortfarande få en dålig version av GCC 309 00:22:44,500 --> 00:22:50,140 eftersom det var just sammanställts för att inse att det var kompilera kompilatorn. 310 00:22:50,140 --> 00:22:57,360 Och om du någonsin använda GCC att kompilera en login.c fil, 311 00:22:57,360 --> 00:23:03,550 då skulle infoga denna bakdörr som han kunde använda för att logga in på vilken dator som helst. 312 00:23:03,550 --> 00:23:08,750 >> Detta var allt teoretiskt, men - det särskild omständighet var teoretisk, 313 00:23:08,750 --> 00:23:12,440 men idéerna är mycket påtaglig. 314 00:23:12,440 --> 00:23:18,250 År 2003 fanns det en liknande exempel där - 315 00:23:18,250 --> 00:23:21,290 vi tar en titt på den här filen, 316 00:23:21,290 --> 00:23:25,870 och det har absolut ingenting att faktiskt göra med det, men felet är liknande. 317 00:23:25,870 --> 00:23:29,390 Denna fil definierar bara en funktion som kallas klyftan. 318 00:23:29,390 --> 00:23:31,780 Det tar ett argument a ett argument b, 319 00:23:31,780 --> 00:23:34,270 och avsikten är att göra en dividerat med b.. 320 00:23:34,270 --> 00:23:37,230 Men det gör några fel kontroll, 321 00:23:37,230 --> 00:23:40,070 så vi vet saker är konstiga om B råkar lika med noll. 322 00:23:40,070 --> 00:23:44,900 Om b är noll, så vi dela detta till 2 fall. 323 00:23:44,900 --> 00:23:46,900 Du kan redan se felet. 324 00:23:46,900 --> 00:23:51,840 Det första fallet - om a är noll, så vi gör noll dividerat med noll, 325 00:23:51,840 --> 00:23:54,300 och vi säger bara att det är odefinierat. 326 00:23:54,300 --> 00:23:56,250 Det andra fallet - om en inte är noll, 327 00:23:56,250 --> 00:24:00,580 då är det något som 1 divideras med noll, och vi bara kalla det oändlighet. 328 00:24:00,580 --> 00:24:03,730 Annars vi tillbaka den vanliga a dividerat med b.. 329 00:24:03,730 --> 00:24:06,390 Och så här, vi kör dessa 3 fall, 330 00:24:06,390 --> 00:24:13,740 och vi kör faktiskt klyftan - den skriker på det för mig - 331 00:24:13,740 --> 00:24:21,330 så ignorerar klang varningar - 332 00:24:21,330 --> 00:24:24,500 slutet av icke-tomma funktion - tydligen jag inte sammanställa denna i förväg. 333 00:24:24,500 --> 00:24:26,500 Avkastning 0. 334 00:24:26,500 --> 00:24:28,900 Gör dela - okej. 335 00:24:28,900 --> 00:24:32,470 Med. / Klyftan ser vi 3, Infinity, Infinity. 336 00:24:32,470 --> 00:24:39,150 Noll divideras med noll skulle inte ha tillbaka oändlighet. 337 00:24:39,150 --> 00:24:42,840 Och om du inte har listat ut felet ännu - eller inte se det innan - 338 00:24:42,840 --> 00:24:46,800 Vi ser att vi gör en = 0. 339 00:24:46,800 --> 00:24:52,610 Förmodligen vi menade en == 0. Förmodligen. 340 00:24:52,610 --> 00:24:58,640 >> Men detta var faktiskt något som återigen under 2003, Linuxkärnan - 341 00:24:58,640 --> 00:25:02,260 så vår apparat använder Linuxkärnan - 342 00:25:02,260 --> 00:25:05,550 någon Linux-operativsystem använder Linuxkärnan - 343 00:25:05,550 --> 00:25:11,610 så en bugg mycket liknar detta dök upp. 344 00:25:11,610 --> 00:25:15,180 Tanken bakom detta fel var - 345 00:25:15,180 --> 00:25:18,820 igen, det var bara någon funktion som kallades, och det gjorde lite felkontroll. 346 00:25:18,820 --> 00:25:24,300 Det fanns vissa specifika insatser som denna felkontroll - 347 00:25:24,300 --> 00:25:30,210 det borde ha varit, okej, kan du inte ringa den här funktionen med en divisor av 0. 348 00:25:30,210 --> 00:25:35,070 Så jag ska bara återvända någon fel. 349 00:25:35,070 --> 00:25:38,090 Utom var det inte så oskyldig som bara sätta en lika med 0. 350 00:25:38,090 --> 00:25:46,920 Istället slutade här kodraden upp göra något mer som användaren = administratör. 351 00:25:46,920 --> 00:25:50,500 Eller user = superanvändare. 352 00:25:50,500 --> 00:25:59,170 Det var en oskyldig - vid första anblicken - misstag där det kunde ha bara varit rimlig 353 00:25:59,170 --> 00:26:01,560 att jag ville bara att rapportera något specifikt 354 00:26:01,560 --> 00:26:05,150 om användaren råkade vara superanvändare administratör. 355 00:26:05,150 --> 00:26:11,220 Men sedan åter tänka på det, ville den person som det ser ut som en enkel stavfel, 356 00:26:11,220 --> 00:26:14,330 men om denna kod faktiskt hade släppts, 357 00:26:14,330 --> 00:26:21,580 då du skulle ha kunnat hacka sig in alla system genom att en särskild flagga - 358 00:26:21,580 --> 00:26:25,200 i detta fall b = 0 - 359 00:26:25,200 --> 00:26:28,020 och det skulle automatiskt göra användaren administratören, 360 00:26:28,020 --> 00:26:30,400 och då han har full kontroll. 361 00:26:30,400 --> 00:26:32,540 Detta hände 2003. 362 00:26:32,540 --> 00:26:35,700 >> Det hände bara så att den enda anledningen att det var fångad 363 00:26:35,700 --> 00:26:39,200 var att det råkade vara några automatiska systemet 364 00:26:39,200 --> 00:26:41,540 som märkte förändringen i den här filen 365 00:26:41,540 --> 00:26:44,560 som aldrig borde ha ändrats av en människa. 366 00:26:44,560 --> 00:26:47,580 Filen ska endast ha genereras automatiskt. 367 00:26:47,580 --> 00:26:49,780 Det hände bara så att någon rörde - 368 00:26:49,780 --> 00:26:52,460 ja, den person som ville hacka beröring filen, 369 00:26:52,460 --> 00:26:55,450 och datorn fångats röra. 370 00:26:55,450 --> 00:27:01,750 Så bytte detta och först senare insett vad en katastrof det skulle ha varit 371 00:27:01,750 --> 00:27:04,830 Om detta hade kommit ut i den verkliga världen. 372 00:27:04,830 --> 00:27:08,220 >> Du kanske tänker att - komma tillbaka till vårt kompilator exempel - 373 00:27:08,220 --> 00:27:14,290 även om vi inte kan se - titta på källkoden - 374 00:27:14,290 --> 00:27:17,490 att något särskilt är fel, 375 00:27:17,490 --> 00:27:25,460 Om vi ​​ser faktiskt på den binära koden för kompilator, 376 00:27:25,460 --> 00:27:28,670 Vi skulle se att något är fel. 377 00:27:28,670 --> 00:27:31,260 Som ett exempel, om vi kör strängarna fungerar - 378 00:27:31,260 --> 00:27:34,930 som just kommer att se över en fil och skriva ut alla strängar kan hitta - 379 00:27:34,930 --> 00:27:37,990 Om vi ​​kör strängar på vår kompilator, 380 00:27:37,990 --> 00:27:42,400 Vi ser att en sträng som den finner detta märkligt - 381 00:27:42,400 --> 00:27:45,500 else if (strcmp (användarnamn, "hacker") - bla, bla, bla. 382 00:27:45,500 --> 00:27:52,570 Om någon råkade vara paranoid nog att inte lita på sin kompilator, 383 00:27:52,570 --> 00:27:56,690 de kunde springa strängar och se detta, 384 00:27:56,690 --> 00:28:00,430 och då skulle de veta att det var något fel med själva binär. 385 00:28:00,430 --> 00:28:07,250 Men var strängar oundvikligen något som sammanställdes. 386 00:28:07,250 --> 00:28:11,590 Så, vem att säga att vår kompilator inte bara har mer speciell kod 387 00:28:11,590 --> 00:28:19,240 som säger, om strängarna är någonsin köra på vår kompilator, inte mata allt det skadlig kod. 388 00:28:19,240 --> 00:28:23,980 >> Samma idé med om vi vill dis-montera filen - 389 00:28:23,980 --> 00:28:30,440 fick vi veta att den som satt ihop för oss från assemblerkod till maskinkod - 390 00:28:30,440 --> 00:28:36,010 vi kan gå i motsatt riktning - objdump-d kompilator - 391 00:28:36,010 --> 00:28:38,770 kommer att ge oss monteringen av vår kod. 392 00:28:38,770 --> 00:28:41,730 Titta på detta, 393 00:28:41,730 --> 00:28:47,480 det är ganska kryptiskt, men om vi ville, vi kunde titta igenom detta 394 00:28:47,480 --> 00:28:51,700 och förnuft, vänta, det är något på gång här som inte ska gå på, 395 00:28:51,700 --> 00:28:59,380 och sedan kommer vi inse att kompilatorn gör något skadligt. 396 00:28:59,380 --> 00:29:03,950 Men precis som strängar, vem säga objdump inte speciella kapslade. 397 00:29:03,950 --> 00:29:11,380 I grund och botten handlar det om att du inte kan lita på någonting. 398 00:29:11,380 --> 00:29:14,310 Poängen med det papper som kallas "Tillförlitlig Trust" är 399 00:29:14,310 --> 00:29:17,900 i allmänhet, litar vi vår kompilator. 400 00:29:17,900 --> 00:29:21,700 Du bygger din kod och förväntar sig att göra vad du ber den att göra. 401 00:29:21,700 --> 00:29:26,440 Men varför ska du lita kompilatorn? 402 00:29:26,440 --> 00:29:32,120 Du har inte skrivit kompilatorn. Du vet inte vad kompilatorn nödvändigtvis faktiskt gör. 403 00:29:32,120 --> 00:29:36,870 Vem säger att du kan lita på det? 404 00:29:36,870 --> 00:29:40,050 Men även då, ja, kanske vi kan lita kompilatorn. 405 00:29:40,050 --> 00:29:44,670 Det finns tiotusentals människor som har tittat på detta. 406 00:29:44,670 --> 00:29:51,360 Någon måste ha känt igen något var upp med kompilatorn. 407 00:29:51,360 --> 00:29:55,100 >> Tänk om vi bara gå 1 nivå djupare? 408 00:29:55,100 --> 00:29:59,450 Det kan även vara din processor. 409 00:29:59,450 --> 00:30:01,250 Så löjligt som det skulle kunna vara, 410 00:30:01,250 --> 00:30:06,690 kanske det finns några oseriösa anställd på Intel som skapar dessa processorer 411 00:30:06,690 --> 00:30:12,400 att när denna processor märker att du kör lite kommando 412 00:30:12,400 --> 00:30:14,570 som är tänkt att logga in på datorn, 413 00:30:14,570 --> 00:30:19,230 processorn kommer att acceptera några specifika användarnamn och lösenord kombination. 414 00:30:19,230 --> 00:30:21,530 Det skulle vara komplicerat vilt, 415 00:30:21,530 --> 00:30:24,790 men någon kunde göra det. 416 00:30:24,790 --> 00:30:29,350 På den punkten, du kommer verkligen att öppna upp datorn för att titta på processorn 417 00:30:29,350 --> 00:30:35,970 och använda ett mikroskop för att erkänna att dessa kretsar inte är uppradade som de borde vara? 418 00:30:35,970 --> 00:30:39,730 Ingen är någonsin kommer att fånga detta fel. 419 00:30:39,730 --> 00:30:45,570 Vid något tillfälle, du måste bara ge upp och lita något. 420 00:30:45,570 --> 00:30:48,390 De flesta människor litar kompilatorn vid denna tidpunkt. 421 00:30:48,390 --> 00:30:55,760 Det vill säga inte nödvändigtvis att du borde. 422 00:30:55,760 --> 00:30:59,350 Titta på en något ökända video - 423 00:30:59,350 --> 00:31:09,280 [Dramatisk musik spelar] 424 00:31:09,280 --> 00:31:13,270 [Det är ett UNIX-system. Jag vet detta.] 425 00:31:13,270 --> 00:31:14,470 [Det är alla filer -] 426 00:31:14,470 --> 00:31:18,950 Hon sa, "Det är ett UNIX-system. Jag vet detta." 427 00:31:18,950 --> 00:31:21,760 Byt UNIX med vad din favorit operativsystem är - 428 00:31:21,760 --> 00:31:25,230 Hon kunde ha sagt, "Det är en Windows-system. jag vet detta." 429 00:31:25,230 --> 00:31:29,710 Det är en helt meningslös uttalande, 430 00:31:29,710 --> 00:31:34,450 men allt vi vet, händer hon känna en bakdörr in i UNIX-system. 431 00:31:34,450 --> 00:31:38,840 Hon vet en del användarnamn / lösenord kombination som verkligen kommer att låta henne 432 00:31:38,840 --> 00:31:41,540 göra vad hon vill. 433 00:31:41,540 --> 00:31:49,000 >> Okej. Sensmoralen av idag är i princip att du inte kan lita på någonting. 434 00:31:49,000 --> 00:31:52,620 Även saker som du skriver - du inte skriva kompilatorn. 435 00:31:52,620 --> 00:31:53,870 Kompilatorn kan vara dålig. 436 00:31:53,870 --> 00:31:59,140 Även om du gjorde skriver kompilatorn kunde sak som att köra kompilatorn vara dåligt. 437 00:31:59,140 --> 00:32:05,210 (Skratt) Det finns inte mycket du kan göra. 438 00:32:05,210 --> 00:32:09,050 Världen är dömd. 439 00:32:09,050 --> 00:32:11,570 Tillbaka till David! 440 00:32:11,570 --> 00:32:19,540 [Applåder] 441 00:32:19,540 --> 00:32:21,340 >> [David] Tack. Det var verkligen deprimerande. 442 00:32:21,340 --> 00:32:23,910 Men i själva verket är Rob korrekt. 443 00:32:23,910 --> 00:32:27,150 Vi har egentligen inte en lösning på detta, men du ska få några lösningar 444 00:32:27,150 --> 00:32:29,150 till några mer vanliga försvar. 445 00:32:29,150 --> 00:32:31,170 I väntan på detta, vad Nate och jag har gjort utanför scenen där 446 00:32:31,170 --> 00:32:33,950 är att veta att det finns så många bärbara datorer i det här rummet, 447 00:32:33,950 --> 00:32:37,020 vi har sniffa all trådlös trafik går igenom detta rum under de senaste 20 minuter 448 00:32:37,020 --> 00:32:39,260 Under Rob tal, så vi kommer att ta en 2 minuters paus här. 449 00:32:39,260 --> 00:32:41,740 Nate kommer att ställa upp, och sedan ska vi prata om alla de saker 450 00:32:41,740 --> 00:32:46,380 vi kunde ha funnit. (Skratt) 451 00:32:46,380 --> 00:32:51,990 >> Så kan jag överdrivit lite bara för sakens skull drama, 452 00:32:51,990 --> 00:32:55,990 men vi kunde ha sniffa alla dina trådlösa trafik eftersom ja, 453 00:32:55,990 --> 00:32:57,240 Det är så lätt. 454 00:32:57,240 --> 00:32:59,790 Men det finns också sätt att du kan försvara mot detta, och så med det, 455 00:32:59,790 --> 00:33:03,160 Jag ger er Nate Hardison. >> [Nate] Sweet. 456 00:33:03,160 --> 00:33:06,300 (Applåder) 457 00:33:06,300 --> 00:33:08,650 >> [Nate] Tack. Jag uppskattar shout out. 458 00:33:08,650 --> 00:33:12,790 Okej! Det är spel vecka. Är ni glada? 459 00:33:12,790 --> 00:33:16,670 Förhoppningsvis kommer att bli en stor match på lördag. 460 00:33:16,670 --> 00:33:20,220 Jag antar att ni killar på denna punkt - med tanke på att du har en frågesport på onsdag 461 00:33:20,220 --> 00:33:24,430 Allt om kod, och vi satt bara genom en underbar föreläsning av Rob 462 00:33:24,430 --> 00:33:25,850 med en massa C-kod i det - 463 00:33:25,850 --> 00:33:28,330 är kanske lite trött på kod. 464 00:33:28,330 --> 00:33:32,180 I denna del är vi faktiskt inte kommer att röra någon kod alls. 465 00:33:32,180 --> 00:33:36,960 Vi ska bara prata om en teknik som du använder varje dag, 466 00:33:36,960 --> 00:33:39,790 ofta för många, många timmar per dag, 467 00:33:39,790 --> 00:33:46,220 och vi kommer prata om konsekvenserna med säkerhet att det finns. 468 00:33:46,220 --> 00:33:48,960 >> Vi har talat mycket om säkerhet under loppet av terminen, 469 00:33:48,960 --> 00:33:53,030 och vi började med lite krypto. 470 00:33:53,030 --> 00:33:55,030 [Bdoh lv vwlqng!] 471 00:33:55,030 --> 00:33:57,890 Och medan ni är förmodligen super-spännande att passera anteckningar till varandra 472 00:33:57,890 --> 00:33:59,890 i klassen med en Caesar chiffer som denna, 473 00:33:59,890 --> 00:34:03,870 i verkligheten, det finns lite mer roligt att vara hade när du faktiskt pratar om säkerhet 474 00:34:03,870 --> 00:34:05,870 och sånt. 475 00:34:05,870 --> 00:34:09,090 Idag ska vi täcka några tekniker 476 00:34:09,090 --> 00:34:13,650 att människor faktiskt använder i den verkliga världen att göra alla möjliga saker 477 00:34:13,650 --> 00:34:18,360 från sniffa människors paket att faktiskt gå in och 478 00:34:18,360 --> 00:34:20,409 bryta sig in människors bankkonton och allt detta. 479 00:34:20,409 --> 00:34:23,460 Dessa är legitima verktyg som vi pratar om 480 00:34:23,460 --> 00:34:26,320 med undantag av möjligen ett verktyg. 481 00:34:26,320 --> 00:34:28,889 >> Och jag vill bara göra en snabb ansvarsfriskrivning. 482 00:34:28,889 --> 00:34:34,909 När vi talar om dessa saker, vi pratar om dem så du vet vad som finns därute, 483 00:34:34,909 --> 00:34:39,389 och du är medveten om hur man ska vara säker när du är ute med din dator. 484 00:34:39,389 --> 00:34:44,000 Men vi vill definitivt inte att antyda att du bör använda dessa verktyg 485 00:34:44,000 --> 00:34:48,090 i studentrummet eller ditt hus eftersom du kan stöta på många stora frågor. 486 00:34:48,090 --> 00:34:52,760 Det är en anledning i dag att vi faktiskt inte sniffa dina paket. 487 00:34:52,760 --> 00:35:01,300 >> Okej. I måndags talade vi om cookies och HTTP, och autentisering, 488 00:35:01,300 --> 00:35:05,920 och hur Firesheep öppnar denna stora dörren till ditt Facebook-konto, 489 00:35:05,920 --> 00:35:08,670 till ditt Hotmail-konto - om någon är fortfarande använder Hotmail - 490 00:35:08,670 --> 00:35:12,360 och många andra konton. 491 00:35:12,360 --> 00:35:16,980 Mycket av det här kommer att bygga ut det, 492 00:35:16,980 --> 00:35:22,070 men först vill jag ta en snabb rundtur i hur Internet har utvecklats över tiden. 493 00:35:22,070 --> 00:35:27,490 Tillbaka på 90-talet, kanske ni har ihågkommen faktiskt koppla in 494 00:35:27,490 --> 00:35:29,880 dina datorer med en av dessa. 495 00:35:29,880 --> 00:35:32,640 Nu gör vi inte det så mycket längre. 496 00:35:32,640 --> 00:35:37,230 Det visar faktiskt ut att för att ansluta en Ethernet-kabel till min laptop, 497 00:35:37,230 --> 00:35:41,710 Jag har nu använda en av dessa adaptrar som är slags galen. 498 00:35:41,710 --> 00:35:47,580 >> Istället, 1997 hade vi den nya, roliga teknik 499 00:35:47,580 --> 00:35:54,960 kom ut som kallas IEEE 802,11, så detta är det trådlöst internet standarden 500 00:35:54,960 --> 00:36:00,430 IEEE är styrande organet som ger ut alla typer av - 501 00:36:00,430 --> 00:36:04,770 publicerar alla typer av standarder i förhållande till datorer. 502 00:36:04,770 --> 00:36:08,780 De 802 standarder handlar om Internet-teknik. 503 00:36:08,780 --> 00:36:12,690 Så 802,3, exempelvis, är Ethernet-standarden, 504 00:36:12,690 --> 00:36:17,120 802.15.1 jag tror är Bluetooth-standarden, 505 00:36:17,120 --> 00:36:19,540 och 802,11 handlar om trådlöst internet. 506 00:36:19,540 --> 00:36:24,150 Under 1997 kom ut. Det tog inte riktigt fånga på direkt. 507 00:36:24,150 --> 00:36:30,200 Det var inte förrän 1999 och 802.11b standarden kom ut som bara fick verkligen populär. 508 00:36:30,200 --> 00:36:36,330 >> Hur många av er kommer ihåg när datorerna började komma ut och få wi-fi på dem? 509 00:36:36,330 --> 00:36:38,330 Det var ganska häftigt, va? 510 00:36:38,330 --> 00:36:41,260 Jag minns att få min första bärbara dator i skolan, 511 00:36:41,260 --> 00:36:44,250 och hade ett trådlöst kort i den. 512 00:36:44,250 --> 00:36:49,580 Min pappa gav den till mig och sa att jag skulle använda den till min college apps och allt detta, 513 00:36:49,580 --> 00:36:53,030 och jag hade ingen aning om hur jag skulle slå upp det här på nätet. 514 00:36:53,030 --> 00:36:54,640 Men lyckligtvis hade jag ett trådlöst kort, så det var ganska coolt. 515 00:36:54,640 --> 00:37:04,090 Numera ser du också 802.11g som är en av de andra riktigt populär 516 00:37:04,090 --> 00:37:06,090 trådlösa standarder som finns där ute. 517 00:37:06,090 --> 00:37:08,660 Både B och G är ganska föråldrade vid denna punkt. 518 00:37:08,660 --> 00:37:12,580 Någon som vet vilken version de flesta människor är på just nu 519 00:37:12,580 --> 00:37:15,110 om de ska köpa nya trådlösa routrar och sånt? 520 00:37:15,110 --> 00:37:24,290 N. Exakt. Bingo. Och det visar sig att ac standarden bara kommer ut i ett utkast, 521 00:37:24,290 --> 00:37:28,050 och det finns andra versioner på vägen. 522 00:37:28,050 --> 00:37:31,190 Med var och en av dessa standarder vad vi vinner är mer bandbredd, 523 00:37:31,190 --> 00:37:33,900 mer data vid en högre hastighet. 524 00:37:33,900 --> 00:37:36,260 Dessa saker håller förändras ganska snabbt. 525 00:37:36,260 --> 00:37:39,880 Det gör det också så att vi måste köpa fler routrar och allt det roliga grejer. 526 00:37:39,880 --> 00:37:48,160 >> Låt oss tala om vad trådlös kommunikation egentligen är i centrum. 527 00:37:48,160 --> 00:37:51,790 Med Ethernet och de gamla uppringda modem, 528 00:37:51,790 --> 00:37:55,780 du hade faktiskt det här som du är ansluten till din dator, 529 00:37:55,780 --> 00:37:59,820 och sedan ansluten till ett modem av slag, och sedan kopplat in den i ett jack i väggen. 530 00:37:59,820 --> 00:38:01,820 Du hade det kabelanslutning, eller hur? 531 00:38:01,820 --> 00:38:06,030 Hela poängen med trådlöst är att bli av med det här. 532 00:38:06,030 --> 00:38:10,300 För att kunna göra det, vad vi har är i huvudsak 533 00:38:10,300 --> 00:38:13,960 ett radiokommunikationssystem där vår trådlösa router - 534 00:38:13,960 --> 00:38:16,230 utsetts av vår lilla trådlösa ikonen - 535 00:38:16,230 --> 00:38:21,730 är ansluten till Internet med denna fast pil indikerar någon form av trådbunden anslutning, 536 00:38:21,730 --> 00:38:24,640 men när du ansluter till din trådlösa router 537 00:38:24,640 --> 00:38:29,190 du faktiskt använder nästan som en walkie-talkie mellan 538 00:38:29,190 --> 00:38:31,960 datorn och den trådlösa routern. 539 00:38:31,960 --> 00:38:35,150 Vad är riktigt coolt om det här är att du kan flytta runt. 540 00:38:35,150 --> 00:38:40,900 Du kan bära din dator hela Sanders, gå surfa på webben, vad du vill, 541 00:38:40,900 --> 00:38:43,240 precis som ni alla känner och älskar, 542 00:38:43,240 --> 00:38:46,030 och du behöver inte någonsin behöva ansluten till något. 543 00:38:46,030 --> 00:38:53,880 För att detta ska fungera måste vi både här mottagning och sändning. 544 00:38:53,880 --> 00:38:56,060 Det är verkligen som att walkie-talkie. 545 00:38:56,060 --> 00:39:03,800 >> Denna trådlösa router - som i Sanders sitter under detta skede just här - 546 00:39:03,800 --> 00:39:06,590 alltid sänder och tar emot, sänder och tar emot, 547 00:39:06,590 --> 00:39:09,330 och likaså är din dator gör allt samma sak också. 548 00:39:09,330 --> 00:39:12,840 Vi kan bara inte höra den. 549 00:39:12,840 --> 00:39:17,900 Den andra saken som du kan göra är att du kan ha flera datorer 550 00:39:17,900 --> 00:39:22,200 prata med samma trådlösa routern. 551 00:39:22,200 --> 00:39:25,680 Ju närmare du är till en router - och återigen är detta en radiokommunikation - 552 00:39:25,680 --> 00:39:30,320 ju närmare du är, desto bättre din signal är, desto bättre datorns hör "routern 553 00:39:30,320 --> 00:39:32,460 och kan kommunicera med Internet. 554 00:39:32,460 --> 00:39:39,520 Om ni någonsin på din sovsal, på ditt hus och du undrar varför din signal är dålig, 555 00:39:39,520 --> 00:39:42,230 Det är förmodligen därför a). du är inte mycket nära till routern, eller 556 00:39:42,230 --> 00:39:46,930 b). det är något mellan dig och din router som en cement vägg eller något 557 00:39:46,930 --> 00:39:50,720 som inte låter de radiovågor går igenom. 558 00:39:50,720 --> 00:39:57,850 >> Låt oss tala lite om varför skurkar som wi-fi. 559 00:39:57,850 --> 00:40:02,980 Dåliga killar älskar wi-fi för ett par skäl. 560 00:40:02,980 --> 00:40:06,670 Här är vår otäck skurk där. 561 00:40:06,670 --> 00:40:10,660 En anledning till denna dåliga killen älskar wi-fi 562 00:40:10,660 --> 00:40:18,770 beror som standard, mycket trådlösa routrar kommer och när du ställer upp dem, 563 00:40:18,770 --> 00:40:20,950 de är okrypterad. 564 00:40:20,950 --> 00:40:23,970 Detta har varit ett problem, och det har förekommit fall - 565 00:40:23,970 --> 00:40:28,210 flera instanser, nu - där dålig kille visar upp till någons hus, 566 00:40:28,210 --> 00:40:32,630 märker att det finns en okrypterad wi-fi som de kan ansluta. 567 00:40:32,630 --> 00:40:37,350 De ansluter till Wi-Fi, och sedan börja ladda ner alla typer av roliga saker. 568 00:40:37,350 --> 00:40:40,890 Och de hämtar kattungar, de hämtar inte valpar. 569 00:40:40,890 --> 00:40:44,610 Det är som BitTorrent. Detta är den otäcka av de otäckaste. 570 00:40:44,610 --> 00:40:48,740 Det har förekommit fall där FBI har även blivit inblandade 571 00:40:48,740 --> 00:40:52,390 tänker att den som äger huset är faktiskt ett 572 00:40:52,390 --> 00:40:56,090 gå ut och hämta saker som de egentligen inte borde vara. 573 00:40:56,090 --> 00:41:00,730 Med okrypterat wi-fi är definitivt inte något du vill göra, 574 00:41:00,730 --> 00:41:06,340 om så bara för att inte ha FBI kom knackar på din dörr. 575 00:41:06,340 --> 00:41:09,910 >> En annan orsak till skurkarna älskar wi-fi 576 00:41:09,910 --> 00:41:13,870 är anledningen till att David talade om tidigare under pausen. 577 00:41:13,870 --> 00:41:17,240 Eftersom det är ett radiokommunikationssystem som kärna, 578 00:41:17,240 --> 00:41:22,460 om du känner till kanalen kan du lyssna på den radiostation. 579 00:41:22,460 --> 00:41:31,870 Till exempel, om det finns en dålig rätt det sitter i mitten bredvid åtkomstpunkten, 580 00:41:31,870 --> 00:41:36,830 bredvid den trådlösa routern, kan den onde lyssna på alla de trådlösa trafiken 581 00:41:36,830 --> 00:41:40,240 som är kommer från alla dessa datorer. 582 00:41:40,240 --> 00:41:44,590 Faktum är att dessa killar - dessa lyckliga få som är här i den främre raden - 583 00:41:44,590 --> 00:41:47,610 eftersom de är super-nära till alla dessa trådlösa routrar 584 00:41:47,610 --> 00:41:49,950 som sitter precis under scenen, 585 00:41:49,950 --> 00:41:53,780 de skulle kunna höra allas trafik i denna hela rummet 586 00:41:53,780 --> 00:41:59,480 om du är ansluten till Wi-Fi och börja läsa genom dessa åtkomstpunkter. 587 00:41:59,480 --> 00:42:03,740 Det är inte särskilt svårt att sitta själv i en bra position att sniffa och räkna ut 588 00:42:03,740 --> 00:42:07,030 vad andra människor gör. 589 00:42:07,030 --> 00:42:10,830 Det är något att ha i åtanke, särskilt om du inte är säker på var åtkomstpunkten är, 590 00:42:10,830 --> 00:42:15,010 och du surfar säga vid en Starbucks. 591 00:42:15,010 --> 00:42:17,360 >> Det visar sig att sniffa och allt det 592 00:42:17,360 --> 00:42:19,440 är egentligen inte så svårt att göra. 593 00:42:19,440 --> 00:42:25,430 Det finns ett program som heter tcpdump som dumpar alla sorters TCP-trafik 594 00:42:25,430 --> 00:42:29,910 och du kan köra det ganska enkelt - precis som jag gjorde i morse. 595 00:42:29,910 --> 00:42:32,810 Här är lite av en dumpning, och här är en del av trafiken som var på väg över 596 00:42:32,810 --> 00:42:34,960 mitt nätverk på tiden. 597 00:42:34,960 --> 00:42:41,500 Du kan se - om du kisa riktigt hårt - det finns en liten bit av Spotify där. 598 00:42:41,500 --> 00:42:44,050 Ovanpå tcpdump - eftersom detta är typ av en smärta att använda - 599 00:42:44,050 --> 00:42:48,860 Det finns ett program som heter Wireshark som buntar allt detta i ett trevligt GUI. 600 00:42:48,860 --> 00:42:51,970 Wireshark är super-händig så om du går på att ta nätverk klasser, 601 00:42:51,970 --> 00:42:56,780 Detta är ett verktyg som du kommer att älska eftersom det hjälper dig att dissekera alla paketen 602 00:42:56,780 --> 00:42:59,400 som flyter runt där ute. 603 00:42:59,400 --> 00:43:01,810 Men det kan också användas för dåliga. 604 00:43:01,810 --> 00:43:05,810 Det är väldigt enkelt att bara ladda ner programmet, starta det, 605 00:43:05,810 --> 00:43:09,300 starta ett nätverk fånga och se allt som händer - 606 00:43:09,300 --> 00:43:14,130 och filtrera och göra alla möjliga roliga saker med det. 607 00:43:14,130 --> 00:43:17,930 >> Den andra saken som du kan göra med trådlös kommunikation 608 00:43:17,930 --> 00:43:25,380 inte bara kan du tjuvlyssna, men du kan också lära dig att skruva med nätverket 609 00:43:25,380 --> 00:43:31,020 och injicera din egen information för att styra den erfarenhet som andra människor 610 00:43:31,020 --> 00:43:35,140 på samma trådlösa nätverk får. 611 00:43:35,140 --> 00:43:37,140 Låt oss ta en titt på det. 612 00:43:37,140 --> 00:43:40,700 Här är Firesheep - som vi känner och älskar från förra veckan - 613 00:43:40,700 --> 00:43:43,590 nämligen att avlyssning teknik. 614 00:43:43,590 --> 00:43:50,360 Om till exempel, ville vi aktivt har vår bad guy gå och röra runt med 615 00:43:50,360 --> 00:43:52,690 en av dessa datorer, 616 00:43:52,690 --> 00:43:58,380 i detta scenario har vi en dator försöker gå surfa till harvard.edu. 617 00:43:58,380 --> 00:44:04,690 Vad som händer är, skickar datorn först ett meddelande till den trådlösa routern och säger, 618 00:44:04,690 --> 00:44:07,920 hej, jag vill gå besök www.harvard.edu. 619 00:44:07,920 --> 00:44:10,610 Säg någon anledning de försöker få information om spelet i helgen. 620 00:44:10,610 --> 00:44:14,940 Skurk, eftersom han sitter rätt i mitten, 621 00:44:14,940 --> 00:44:18,730 bredvid den åtkomstpunkt, kan se att kommunikation kommer från datorn 622 00:44:18,730 --> 00:44:26,170 i routern, och han vet, "Aha! Någon kommer att harvard.edu." (Elakt skratt) 623 00:44:26,170 --> 00:44:33,870 Det kommer att bli denna latens, medan kommunikationen går från routern 624 00:44:33,870 --> 00:44:37,780 ut till Internet för att leta webbsidan på harvard.edu-- 625 00:44:37,780 --> 00:44:42,020 precis som ni alla vet efter att ha gjort dina PHP psets - 626 00:44:42,020 --> 00:44:45,680 och så den onde har lite tid, lite fönster, 627 00:44:45,680 --> 00:44:49,410 där han kan svara med lite grejer. 628 00:44:49,410 --> 00:44:53,660 >> Låt oss säga detta onde, naturligtvis, är en Yaley. 629 00:44:53,660 --> 00:44:59,990 Han svarar med harvardsucks.org. Boo! 630 00:44:59,990 --> 00:45:02,300 Dålig, dålig kille! Bad Yaley! 631 00:45:02,300 --> 00:45:06,020 Eller ännu värre, kan han svara med det. [Http://youtu.be/ZSBq8geuJk0]. 632 00:45:06,020 --> 00:45:09,530 Jag ska låta er lista ut vad det är. 633 00:45:09,530 --> 00:45:14,840 Detta är faktiskt en teknik som kallas Airpwn! som debuterade på 634 00:45:14,840 --> 00:45:18,950 en av de säkerhetsåtgärder konferenser ett par år tillbaka. 635 00:45:18,950 --> 00:45:25,190 Med Airpwn! du kan faktiskt injicera trafiken tillbaka till nätverket. 636 00:45:25,190 --> 00:45:30,060 De datorer som försökte gå ut på Internet och försöka få till 637 00:45:30,060 --> 00:45:33,090 Google.com till Facebook.com till harvard.edu 638 00:45:33,090 --> 00:45:39,190 se den skadliga svaret kommer in och omedelbart anta, okej, 639 00:45:39,190 --> 00:45:43,550 Det är det svar som jag väntade på och i slutändan får innehåll från 640 00:45:43,550 --> 00:45:48,860 harvardsucks.org eller nameyourfavoriteshocksite.com, 641 00:45:48,860 --> 00:45:55,270 och du kan se hur snabbt saker och ting kommer att försämras. 642 00:45:55,270 --> 00:46:00,190 >> Alla dessa typer av saker kan inte göras 643 00:46:00,190 --> 00:46:05,870 med dessa trådbundna anslutningar eftersom med en trådbunden anslutning 644 00:46:05,870 --> 00:46:08,710 det är svårt att snoka på trafik. 645 00:46:08,710 --> 00:46:13,020 Om jag är en dålig kille och den ena änden är din dator 646 00:46:13,020 --> 00:46:14,460 och på den andra änden är din router - modemet - 647 00:46:14,460 --> 00:46:20,180 det enda sättet jag kan komma in mellan det sammanhanget är att faktiskt skarva min dator 648 00:46:20,180 --> 00:46:22,180 i någonstans i mitten 649 00:46:22,180 --> 00:46:26,820 eller göra något annat med routern, något nedströms. 650 00:46:26,820 --> 00:46:33,360 Men med trådlös, kan det vara så enkelt som att sitta i den främre raden i ett klassrum, 651 00:46:33,360 --> 00:46:38,200 och du kan göra alla möjliga elaka saker till folket i ryggen. 652 00:46:38,200 --> 00:46:41,570 >> Låt oss tala om hur du kan försvara sig mot några av dessa saker. 653 00:46:41,570 --> 00:46:46,860 De människor som utvecklat den trådlösa standarder - de 802,11 - 654 00:46:46,860 --> 00:46:50,820 de är inte dumma människor ens vildaste fantasi. 655 00:46:50,820 --> 00:46:56,110 Detta är cool teknik och när det debuterade 1999, 656 00:46:56,110 --> 00:47:00,780 de kom ut med denna standard som kallas WEP. 657 00:47:00,780 --> 00:47:03,360 Här kan du se när du försöker och ansluta till ett trådlöst nätverk, 658 00:47:03,360 --> 00:47:07,450 du har alla möjliga olika säkerhetsalternativ. 659 00:47:07,450 --> 00:47:11,800 Det är lite av en smärta eftersom det finns 6 tillsammans 660 00:47:11,800 --> 00:47:14,790 och det aldrig riktigt vettigt som 1 att ansluta sig. 661 00:47:14,790 --> 00:47:19,190 Detta 1 upptill är den första som de kom med kallas WEP. 662 00:47:19,190 --> 00:47:27,960 WEP står för Wired Equivalent Privacy, tror jag, 663 00:47:27,960 --> 00:47:31,730 inte Wireless Encryption Protocol, som är en vanlig missvisande. 664 00:47:31,730 --> 00:47:36,170 Eftersom det försöker ge dig sekretess likvärdigt och säkerhetsskydd 665 00:47:36,170 --> 00:47:40,590 som motsvarar ett trådbundet nätverk 666 00:47:40,590 --> 00:47:46,710 Med WEP vad hamnar händer är, 667 00:47:46,710 --> 00:47:52,300 du har en enkel, liten lösenord som du skriver in och som tjänar till att kryptera 668 00:47:52,300 --> 00:47:56,210 alla dina kommunikationen mellan datorn och routern. 669 00:47:56,210 --> 00:47:58,210 >> Vad är problemet med WEP men? 670 00:47:58,210 --> 00:48:01,470 Lösenordet med WEP är verkligen kort, 671 00:48:01,470 --> 00:48:04,900 och även alla använder samma exakt lösenord, 672 00:48:04,900 --> 00:48:07,610  och det är verkligen lätt att dekryptera. 673 00:48:07,610 --> 00:48:10,580 Så mycket snabbt folk räknat ut att WEP var ett problem, 674 00:48:10,580 --> 00:48:16,100 och den enda anledningen du ser det dyker upp fortfarande på den här lilla killen är - 675 00:48:16,100 --> 00:48:18,890 det finns vissa äldre system som inte använder WEP - 676 00:48:18,890 --> 00:48:25,710 vad du bör i stället leta efter är WPA och även WPA2 standarder 677 00:48:25,710 --> 00:48:29,130 som släpptes senare. 678 00:48:29,130 --> 00:48:35,040 Dessa system är en mycket bättre gå på skydd på trådlöst Internet. 679 00:48:35,040 --> 00:48:41,090 Som sagt, de fortfarande har en viss hackability. 680 00:48:41,090 --> 00:48:44,010 Det finns verktyg där ute som kan gå göra detta. 681 00:48:44,010 --> 00:48:47,490 En sak i synnerhet som kan vara otäcka är att 682 00:48:47,490 --> 00:48:55,370 om du ansluter och autentiserad till en trådlös router och använder någon form av 683 00:48:55,370 --> 00:49:00,940 krypterad kommunikation visar det sig att en hacker lätt kan skicka ett enda paket 684 00:49:00,940 --> 00:49:03,990 att koppla dig från routern, 685 00:49:03,990 --> 00:49:07,220 och när de väl har kopplats du kan sedan lyssna på - 686 00:49:07,220 --> 00:49:11,800 De kan lukta de paket som du försöker återupprätta anslutningen med routern. 687 00:49:11,800 --> 00:49:16,800 Och med den information de kan sedan gå in och dekryptera resten av din kommunikation. 688 00:49:16,800 --> 00:49:24,580 Detta är inte på något sätt någon form av säker bortom alla fantasi. 689 00:49:24,580 --> 00:49:30,060 >> Den andra saken du kan göra när du ställer in trådlösa nätverk 690 00:49:30,060 --> 00:49:35,460 eller om du ansluter dem är - du märker att här när jag ansluter detta nätverk, 691 00:49:35,460 --> 00:49:37,640 den frågar efter namnet på mitt nätverk. 692 00:49:37,640 --> 00:49:41,060 Detta är också känd som SSID. 693 00:49:41,060 --> 00:49:48,610 Och du ser här att till höger har jag en låda som visar mig de tillgängliga SSID. 694 00:49:48,610 --> 00:49:52,690 Det finns en Harvard University, en CS50 och en CS50 Personal nätverk. 695 00:49:52,690 --> 00:49:59,180 Nu, hur många av er visste att det fanns ett CS50 Personal nätverk runt? 696 00:49:59,180 --> 00:50:01,910 Några av er. Inte alla av er. 697 00:50:01,910 --> 00:50:08,800 Problemet med detta är naturligtvis att vi inte hade lagt upp det på vår lista över SSID, 698 00:50:08,800 --> 00:50:10,930 ingen skulle ha känt till det mest sannolika. 699 00:50:10,930 --> 00:50:16,090 Jag hoppas. Såvida ni alla försöker bryta sig in i vårt trådlösa. 700 00:50:16,090 --> 00:50:18,700 Men detta är något du kan göra det är verkligen viktigt när du ställer in 701 00:50:18,700 --> 00:50:20,280 en router hemma. 702 00:50:20,280 --> 00:50:22,820 Detta förmodligen inte kommer att hända för ett par år för många av er, 703 00:50:22,820 --> 00:50:29,010 men tänk på att hålla den SSID därifrån och inte även namnge det 704 00:50:29,010 --> 00:50:34,630 något super-common kommer att hålla dig säkrare i det långa loppet. 705 00:50:34,630 --> 00:50:38,070 >> En slutlig par saker du kan göra. En är HTTPS. 706 00:50:38,070 --> 00:50:44,760 Om du är på en Starbucks, om du är i en Wi-Fi-området 707 00:50:44,760 --> 00:50:52,620 och du bestämmer dig för att komma åt ditt bankkonto, komma åt ditt Gmail, din Facebook, 708 00:50:52,620 --> 00:50:56,140 se till att dessa anslutningar kommer över HTTPS. 709 00:50:56,140 --> 00:50:59,800 Det är en extra lager av säkerhet, ett extra lager av kryptering. 710 00:50:59,800 --> 00:51:01,520 En sak att tänka på här är, 711 00:51:01,520 --> 00:51:04,740 Hur många av er har någonsin klickat igenom den stora, röda skärm som säger, 712 00:51:04,740 --> 00:51:07,480 "Denna webbplats kan vara dålig." 713 00:51:07,480 --> 00:51:09,710 Jag vet att jag har. 714 00:51:09,710 --> 00:51:13,090 Det är nog när ni surfar att gå och se Homeland eller något liknande, eller hur? 715 00:51:13,090 --> 00:51:19,900 Ja. (Publiken skratt) Ja. Där du går. Vi vet vem som tittar Homeland. 716 00:51:19,900 --> 00:51:24,540 Det stora, röda skärm direkt 717 00:51:24,540 --> 00:51:28,600 ofta indikerar att något funky är på gång. 718 00:51:28,600 --> 00:51:32,530 Ibland är det bara hemsidan i sig är osäker, 719 00:51:32,530 --> 00:51:35,520 men samma stora, röda skärm kommer upp när människor försöker 720 00:51:35,520 --> 00:51:37,520 montera nätverksangrepp på dig. 721 00:51:37,520 --> 00:51:40,220 Så om du ser det stora, röda skärm kommer upp på en Starbucks, 722 00:51:40,220 --> 00:51:42,440 inte klicka igenom den. 723 00:51:42,440 --> 00:51:45,350 Dåliga nyheter. Dåliga nyheter bär. 724 00:51:45,350 --> 00:51:51,490 >> Den sista sak som du kan titta på 725 00:51:51,490 --> 00:51:54,120 är någon form av VPN. 726 00:51:54,120 --> 00:52:00,280 Denna VPN är tillgängliga via Harvard - vpn.fas.harvard.edu-- 727 00:52:00,280 --> 00:52:03,260 och vad detta innebär är det faktiskt upprättar en säker anslutning 728 00:52:03,260 --> 00:52:06,460 mellan dig och Harvard, trattar din trafik genom den, 729 00:52:06,460 --> 00:52:12,160 och på så sätt om du sitter på en plats som en Starbucks 730 00:52:12,160 --> 00:52:19,030 kan du ansluta till Harvard, få det säker trafik, och sedan bläddra från Harvard. 731 00:52:19,030 --> 00:52:21,950 Igen, inte idiotsäkert. Människor kan få i mitten. 732 00:52:21,950 --> 00:52:25,850 De kan börja bryta det, men detta är långt säkrare än att förlita sig på säkerheten 733 00:52:25,850 --> 00:52:28,620 av wi-fi ensam. 734 00:52:28,620 --> 00:52:32,570 >> Okej. Sammanfattningsvis 735 00:52:32,570 --> 00:52:34,580 När du sätter upp trådlösa nätverk, 736 00:52:34,580 --> 00:52:37,250 när du går ut för att använda trådlöst offentligt - 737 00:52:37,250 --> 00:52:43,430 oavsett om det är en Starbucks, oavsett om det är fem killar, oavsett om det är B.Good, 738 00:52:43,430 --> 00:52:46,440 något liknande - oavsett var de har wi-fi - 739 00:52:46,440 --> 00:52:48,440 vara medveten om din omgivning. 740 00:52:48,440 --> 00:52:50,440 Var medveten om vad man kan göra. 741 00:52:50,440 --> 00:52:53,890 Och vara säkra. Användare inte bankkonto. 742 00:52:53,890 --> 00:52:58,740 Det kan vara ett brutalt uppvaknande om någon dyker upp med ditt lösenord senare. 743 00:52:58,740 --> 00:53:05,480 Med detta, gå crimson! Och jag kommer att vända saker och ting tillbaka över till David för ett sista ord. 744 00:53:05,480 --> 00:53:11,270 (Applåder) 745 00:53:11,270 --> 00:53:14,360 >> [David] Jag trodde att jag skulle dela en sak av egen erfarenhet. 746 00:53:14,360 --> 00:53:19,940 Ett verktyg som du kanske gillar att leka med - även om Apple har i stort sett utrotat denna fråga 747 00:53:19,940 --> 00:53:22,710 Om du har uppdaterat din mjukvara sedan - 748 00:53:22,710 --> 00:53:26,670 men mot detta av att inte riktigt kunna lita på programvara som vi använder, 749 00:53:26,670 --> 00:53:33,270 och till Nates punkter, att kunna sniffa en hel del vad andra människor gör 750 00:53:33,270 --> 00:53:37,010 ute - det var en mjukvara som kom ut ungefär ett år och ett halvt år sedan nu. 751 00:53:37,010 --> 00:53:39,010 [IPhoneTracker] [http://petewarden.github.com/iPhoneTracker/] 752 00:53:39,010 --> 00:53:41,010 Sedan en tid iTunes - innan iCloud, när du synkroniserar dina iPod eller din iPhone eller 753 00:53:41,010 --> 00:53:45,570 eller dina iPads med iTunes - till förmån för säkerhetskopior, 754 00:53:45,570 --> 00:53:48,340 vad din iPhone och dessa andra enheter har gjort under en längre tid är 755 00:53:48,340 --> 00:53:50,340 utnyttjar GPS-data. 756 00:53:50,340 --> 00:53:52,710 >> Ni vet alla kanske att dina iPhone och Androids och Windows Mobile-telefoner 757 00:53:52,710 --> 00:53:55,410 och liknande dessa dagar kan spåra var du befinner dig i intresse att visa dig kartor 758 00:53:55,410 --> 00:53:59,440 och liknande - väl vad Apple och de andra företagen gör är 759 00:53:59,440 --> 00:54:02,650 De spårar oftast nästan överallt du faktiskt varit av intresse för 760 00:54:02,650 --> 00:54:05,380 förbättra kvaliteten på tjänsterna. 761 00:54:05,380 --> 00:54:07,170 En, kan du få mer riktad annonsering och liknande, 762 00:54:07,170 --> 00:54:10,740 men två kan de räkna även där är det trådlösa hotspots i världen, 763 00:54:10,740 --> 00:54:14,780 och detta kan hjälpa till med geolokalisering - typ av triangulering av människors ställning. 764 00:54:14,780 --> 00:54:18,520 >> Lång historia kort, hade vi alla gått antenner under en tid. 765 00:54:18,520 --> 00:54:22,180 Tyvärr hade Apple gjort designen beslut - eller brist därav - 766 00:54:22,180 --> 00:54:26,590 att inte kryptera denna information när det är backas upp iTunes. 767 00:54:26,590 --> 00:54:30,330 Och vad säkerheten forskare fann var att detta var bara en stor XML-fil - 768 00:54:30,330 --> 00:54:33,810 en stor textfil - sitter i människors iTunes, 769 00:54:33,810 --> 00:54:35,400 och om du var bara lite nyfiken, 770 00:54:35,400 --> 00:54:38,990 du kunde gå peta runt din make historia, din rumskompis historia, 771 00:54:38,990 --> 00:54:41,050 ditt syskon historia och liknande, 772 00:54:41,050 --> 00:54:44,590 och tack vare några gratis programvara kan du rita alla dessa GPS-koordinater - 773 00:54:44,590 --> 00:54:46,590 latitud och longitud. 774 00:54:46,590 --> 00:54:48,590 >> Så jag gjorde faktiskt detta med min egen telefon. 775 00:54:48,590 --> 00:54:51,210 Jag ansluten min telefon, och säker nog, var min version av iTunes krypteras inte på tiden, 776 00:54:51,210 --> 00:54:53,900 och vad jag kunde se var mina egna mönster. 777 00:54:53,900 --> 00:54:56,970 Här är USA och dessa blå cirklar representerar 778 00:54:56,970 --> 00:55:01,670 där jag råkade ha varit över de senaste månaderna med att äga denna telefonmodell. 779 00:55:01,670 --> 00:55:04,940  Jag tillbringar mycket tid, naturligtvis, uppe i nordöst, lite tid i Kalifornien, 780 00:55:04,940 --> 00:55:08,690 en kortlivad resa till Texas, och om du sedan zooma in på detta - 781 00:55:08,690 --> 00:55:11,120 Detta är alla slags fin och intressant, men jag visste detta. 782 00:55:11,120 --> 00:55:13,890 De flesta av mina vänner visste detta, men om du dyka djupare, 783 00:55:13,890 --> 00:55:17,090 du se var jag tillbringar större delen av min tid i nordost. 784 00:55:17,090 --> 00:55:20,330 Om du spärren på några välbekanta utseende städer - 785 00:55:20,330 --> 00:55:24,670 denna stora, blått bläck FLÄCK huvudsak centrerad över Boston, 786 00:55:24,670 --> 00:55:29,510 och då jag spenderar lite tid ute i förorterna strålar ut från Boston. 787 00:55:29,510 --> 00:55:32,780 Men jag var också göra en hel del samråd detta år. 788 00:55:32,780 --> 00:55:36,090 Och i år är den östra kusten, och du kan faktiskt se mig 789 00:55:36,090 --> 00:55:41,920 och min iPhone i fickan reser fram och tillbaka mellan Boston och New York 790 00:55:41,920 --> 00:55:47,510 och Philadelphia längre ner, liksom utgifterna lite semester 791 00:55:47,510 --> 00:55:50,340 på Cape, som är den lilla armen ute. 792 00:55:50,340 --> 00:55:53,030 Så är var och en av dessa punkter någon plats jag hade varit, 793 00:55:53,030 --> 00:55:56,970 och helt okänt för mig, hela denna historia bara sitter där 794 00:55:56,970 --> 00:55:58,410 på min stationära dator. 795 00:55:58,410 --> 00:56:00,470 Om du zoomar ut - det var faktiskt lite oroväckande. 796 00:56:00,470 --> 00:56:04,190 Jag hade inget minne av att någonsin ha varit i Pennsylvania just det året. 797 00:56:04,190 --> 00:56:07,840 Men jag även lite hårdare om det och jag räknat ut, åh, det var i själva verket att resa 798 00:56:07,840 --> 00:56:11,160 och visst hade min telefon fångat mig. 799 00:56:11,160 --> 00:56:14,180 >> Apple har sedan krypterad denna information, 800 00:56:14,180 --> 00:56:17,380 men detta är också bara bevis på hur mycket information som samlas om oss, 801 00:56:17,380 --> 00:56:20,850 och hur lätt - på gott och ont - det är acceptabelt. 802 00:56:20,850 --> 00:56:23,340 En av de take-aways förhoppningsvis från Rob tal, från Nates tal 803 00:56:23,340 --> 00:56:27,370 och lite grafik som denna dag är bara att vara desto mer medvetna om detta 804 00:56:27,370 --> 00:56:31,160 så att även om - som till Rob synpunkt - vi sorts skruvad, eller hur? 805 00:56:31,160 --> 00:56:33,920 Det finns inte mycket vi kan göra när det gäller några av dessa hot, 806 00:56:33,920 --> 00:56:37,130 men i slutet av dagen måste vi lita på något eller någon 807 00:56:37,130 --> 00:56:38,510 om vi vill att faktiskt använda denna teknik. 808 00:56:38,510 --> 00:56:43,150 Åtminstone kan vi vara att fatta väl underbyggda beslut och beräknade beslut om huruvida 809 00:56:43,150 --> 00:56:46,390 vi faktiskt kontrollera detta särskilt känsliga konto 810 00:56:46,390 --> 00:56:49,330 eller vi borde faktiskt skicka att något misstänker snabbmeddelande 811 00:56:49,330 --> 00:56:52,180  i ett Wi-Fi-miljö som denna. 812 00:56:52,180 --> 00:56:54,990 >> Så med det sagt, bara en frågesport kvar, förblir en föreläsning. 813 00:56:54,990 --> 00:56:57,740 Vi ses på onsdag då måndag. 814 00:56:57,740 --> 00:57:02,100 (Applåder och jubel) 815 00:57:02,100 --> 00:57:06,100 [CS50TV]