[Powered by Google Translate] [Vecka 10] [David J. Malan] [Harvard University] [Detta är CS50.] [CS50.TV] Okej! Detta är CS50, men inte mycket längre. Detta är början av vecka 10. På onsdag har vi frågesport vår, och sedan nästa måndag har vi några festliga tårta när vi gått varvet runt hela vägen tillbaka från vecka noll. Idag talar vi om en av mina favoritämnen, att sanningen berättade - som säkerhet och integritet och konsekvenserna av all hårdvara och mjukvara att vi använder alla dessa dagar. För att vara ärlig, det finns en hel del hot där ute att om du inte har riktigt paus för att tänka på dem, de är faktiskt ganska skrämmande. Ett typexempel - om någon av er har någonsin laddat ner en mjukvara off av Internet och installerat det på din dator, du har engagerad i en betydande grad av förtroende, eller hur? Det finns inget som har hindrat Skype eller Chrome eller någon mjukvara du har installerat på din dator, från att bara ta bort alla filer på din hårddisk, från att ladda upp alla filer på hårddisken till några dåliga kille server; från att läsa alla e-postmeddelande, från avlyssning alla dina snabbmeddelanden. Eftersom verkligheten är idag med de flesta moderna operativsystem det är verkligen inte mycket av en mur mellan program som vi installerar, och du och jag är ganska mycket bara typ av tummarna och ta på tron att det App vi ner gratis, eller att det som är 99 cent, är faktiskt helt godartad. Men som vi har sett till C, och nu PHP och Javascript, med denna förmåga att uttrycka oss via programmering, Du kan göra de flesta vad du vill med ett program som en användare själv kan göra. Så vi idag fokusera på detta ämne - inte bara vissa hot utan även försvar. Faktum i världen av säkerheten i allmänhet, Det är typ av denna katt-och-råtta-lek, och jag förmodar skurkarna nästan alltid ett försprång. När det gäller att dra nytta av hårdvara och mjukvara på våra egna datorer, Vi måste inse att en dålig kille helt enkelt måste hitta en enkelt misstag - en utnyttja, en bugg - i en programvara som vi har skrivit eller kör för att han eller hon att ta över hela vårt system. Däremot har vi - de goda - måste lappa och fixa alla dessa buggar och undvika alla dessa brister. Och så jag daresay på det hela, skurkarna har fördelen. Vilka klasser som denna och följande klasser egentligen om inte om att lära dig hur du föra striderna som dessa skurkar gör, men handlar om hur du kan skydda dig själv eller åtminstone hur man gör en beräknad beslut att ja, jag vet det mjukvara faktiskt kunde läsa varenda en av mina e-postmeddelanden, men jag är okej med att på grund av det värde det ger mig på andra sidan. Jag är mycket glad att få sällskap av 2 av de smartaste människor jag känner - Rob Bowden och Nate Hardison. Rob är på väg att ta oss för en tur genom den lägsta nivån av säkerhet taggar - som kompilatorn som fram till nu har vi alla kommit att älska och lita på. Rob Bowden. [Applåder] [Rob] Okej. David har ganska mycket tagit hela mitt spiel att jag skulle presentera med, men - Flera veckor sedan såg du exempel på en buffert-overflow attack vilket är ett exempel på en hacker intrång i någon mjukvara att de inte är tänkta att hacka in. Den andra sidan av detta är ibland måste programvara som är skadlig i sig. Det behöver inte ens vara hackat. Den person som skrev programvaran vill hacka dig. Låt oss hoppa bara rätt in kod, ta en titt på "login.c". Här en dum program som validerar ett användarnamn och lösenord kombination. Här ska du definitivt att få bekväm med C igen för testet. Först använder vi få strängar att beskriva användarnamn, då vi använder Get sträng att ta lösenordet, och sedan har vi några triviala kontroller av bara, är användarnamnet "Rob"? Och är lösenordet "thisiscs50"? Eller är användarnamnet "Tommy" och lösenord "i <3javascript"? Om någon av dessa är fallet,  då vi ska bara skriva ut "Success", och vi har tillgång till. Annars kommer vi att skriva ut "ogiltig inloggning" och sedan, naturligtvis,  eftersom skiss strängar malloc minne, vi gratis användarnamn och lösenord. Detta är en trivial inloggning program och om du tänker på när du loggar in i apparaten, det är ganska lika - eller ens logga in på datorn - Det finns bara några inloggning program som ger dig åtkomst. Här råkar vi ha hårdkodad "råna", "thisiscs50", "tommy", "i <3javascript" men förmodligen finns en viss fil någonstans på ditt operativsystem som har en lista med användarnamn som kan logga in i systemet och en lista över lösenord som är förknippade med dessa användarnamn. Vanligtvis lösenorden inte bara lagras i klartext så här. Det finns någon sorts kryptering, men detta kommer att göra för vårt exempel. Kommer över till vår kompilator - det kommer att bli mycket enkel. Vi måste ange åtminstone en del fil som vi vill kompilera, och sedan här - dessa rader bara att läsa en fil. Den läser hela filen till en stor buffert, och då vi null-avsluta vår buffert som alltid, och slutligen vi sammanställer bara filen. Vi kommer inte att titta på hur kompilering faktiskt tillämpas, men som ett tips, kallar det bara klang. Vi kommer att använda det här programmet för att sammanställa saker istället för klang. Ett problem vi börjar med är att vi ser att vi vill kompilera vår kompilator, men om vi inte tänker använda klang, jag vet inte vad jag ska kompilera med. Detta är en allmän fråga som kallas bootstrapping. Så just denna gång, jag kommer att använda klang att kompilera vår kompilator. Om du tänker på GCC och klang - dessa program, är dessa kompilatorer ständigt uppdateras, och dessa kompilatorer sammanställs med GCC och klang. Klang är bara en stor C eller C + +-programmet, så kompilatorn de använder för att sammanställa det är klang. Här, nu är vi bara kommer att använda vår kompilator för att kompilera vår kompilator, och vi kan till och med säga - "/ kompilator. ',' compiler.c", "compile.c", "-o kompilator". Notera att detta är den exakta kommandot jag körde tidigare - bara ersätta klang med ". / kompilator". Och nu har vi en annan kompilator, men det är exakt samma. Det kallar bara klang. Vi kommer att använda vår kompilator för att kompilera vår inloggningsprogram. Okej - ". / Kompilator login.c-o inloggning". Så, odefinierad referens till "GetString". Fick en "-lcs50". Okej. Så nu har jag vårt inloggningsprogram. Kör det - ta emot "Ange ditt användarnamn". Ett exempel var Rob. Ange ditt lösenord - thisiscs50. Och framgång! Jag har tillgång till. Kör det igen och ange några ogiltiga lösenord - eller ogiltigt användarnamn och lösenord - Ogiltig inloggning. Okej. Inget intressant om detta hittills. Men låt oss ta en titt på inloggning igen - och detta kommer att bli en ganska trivialt exempel, men låt oss lägga till en annan i här och säga, annars om ((strcmp (användarnamn, "hacker") == 0 && strcmp (lösenord, "LOLihackyou") == 0)) så nu, printf ("Hacked Du har nu tillgång till \ n!."); okej. Sammanställa detta - kompilator login.c-O login-lcs50 - nu kör inloggning - och om jag använder mitt användarnamn hacker och lösenord LOLihackedyou - Har jag skriver fel där förut? På login.c--ihack - Jag ska göra hackat eftersom jag tror att jag gör det senare. Okej. Kompilera. Köra - hacker - LOLihackedyou - Hacked! Du har nu tillgång. Det verkar inte vara så stor skillnad eftersom det är exakt samma kontroll jag gjorde för andra användarnamn och lösenord. Dessutom är den stora grejen att om andra människor ser på denna login.c-- säga, om jag klarar det här för att min partner, och de öppnar filen, och de läser detta, kommer de se - Okej, varför du har dessa kodrader här? Det är uppenbarligen inte något som bör vara i ditt program. I vissa program - som alla proprietär programvara som inte är öppen källkod - du kan aldrig se dessa rader kod. Något som Skype eller något - för allt du vet, Skype är på datorn och det finns bara några särskilda användarnamn, lösenord kombination vilket kommer att logga in på Skype på något speciellt sätt. Vi vet inte om det, och folk inte vet om det, eftersom de inte får läsa källkoden för att se att det är det här hålet. Det vi kallar det - även om detta inte ett mycket smart exempel - detta kallas en bakdörr. Om du tänker på den bakre dörren till ditt hus. Här, om jag bekräfta med användarnamn 'Rob "eller" tommy " det skulle vara som att använda "dörren". Det är så jag ska säkert in. Men om jag skriver den här användarnamn och lösenord - då är med "bakdörren". Det var inte avsiktligt sätt att komma in i programmet, men det fungerar fortfarande. Och folk i allmänhet inte ska veta om dessa bakdörrar. Vi kommer att förbättra detta. Låt oss återgå detta till vår ursprungliga login.c, och låt oss ta en titt på vår nya kompilatorn. Okej. Allting här är exakt samma. Vi läser hela filen till en buffert. Allting här är densamma. Vi samlat bara filen. Men nu har jag det stort om här som säger, om filen som jag råkar vara sammanställa är login.c, då jag göra något speciellt. Vad är det något speciellt? Jag ser här några sträng kallas "hacka" och titta på dessa rader kod - dessa är samma rader kod - Jag antar att jag gjorde användning "ihack" och inte "ihacked" före - titta på dessa rader kod, de är exakt samma kodrader som jag hade i login.c innan. Men nu, i stället för att ha dem i login.c, Jag ska sätta dem i min kompilator. Dessa är kodrader jag kommer att vilja infoga i login.c. Dessa rader kod - bufferten som ursprungligen höll min login.c inte längre kommer att vara tillräckligt stor för nu vill jag också infoga detta hack i mitten av mitt program. Allt detta gör är att skapa en ny buffert som är tillräckligt stor - både för den ursprungliga filen och de extra kodrader - hacka - som jag vill infoga det. Här är något att notera - char * mönster = "/ / neka dem tillträde!" Om vi ​​ser tillbaka på login.c, Vi ser här nere denna kommentar - förvägra dem tillträde! I login.c ser denna kommentar är helt ofarliga, så att du inte skulle misstänka något ont uppsåt med just denna kommentar. Men i vår kompilator kommer vi speciellt att leta efter den här kodraden, och sedan när vi tycker att det - Dessa rader kod sätter vår hacka i den positionen. Så vi iteration över hela login.c, Vi sätter den hacka precis där det står förvägra dem tillträde, och då vi sammanställa - inte den ursprungliga login.c men den nya login.c med att hacka in höger vid "förnekar dem tillgång." Nu vill jag att sammanställa min nya kompilator med som involverade hacka. Jag tänker inte använda klang, så låt oss kopiera kompilatorn vi använde innan och använder det - så kompilator compiler.c compile.c-O evil_compiler. Nu har vår onda kompilator - om vi använder vår onda kompilator för att kompilera en annan fil, filen kommer att sammanställa som det ska. Det är helt normalt. Men om vi använder vår onda kompilator för att kompilera inloggning - så / evil_compiler login.c-O login-lcs50. - titta på login.c igen, det finns absolut ingenting här. Det är vår vanliga "om det är antingen Rob eller tommy vi är i, annars är vi ute". Men när vi kör vår körbara, kommer detta fungera som vanligt. Igång igen - hacker, LOLihackyou - Hacked! Du har nu tillgång. Bara titta på login.c, skulle du tror inte något är fel. Men kompilator som är används för att sammanställa login.c är särskilt utformad för att infoga detta hack i programmet. Vi har bara flyttat vår ursprungliga problemet. Ursprungligen hade vi dessa kodrader i login.c att om någon annan såg på dem, de skulle vara, varför är dessa här? Nu om någon råkar titt på kompilator, de ska titta på dessa rader kod och säger, Varför är dessa här? Så har vi inte helt löst våra problem. Men vi kan använda denna idé igen. Ta en titt på vår tredje version av kompilatorn, Det är samma idé. Vi läser hela filen till en buffert upp här, Vi sammanställer filen här nere, och jag har någon form av snöre hacka här, men märker fil som jag faktiskt hacka nu. Jag hacka compiler.c inte login.c. Men vad jag sätter in compiler.c? Jag sätter denna kod som är den exakta koden i vår tidigare kompilator, som var tänkt att infoga kod i login.c. Här är vår om strcmp fil login.c och sedan in i login.c vår hacka grejer. Denna nya kompilatorn syftar till att skapa en kompilator som är avsedd att sammanställa inloggning uppsåtligt. Vi får se varför det hjälper oss. Allt annat är samma, så det fungerar precis som det fungerade med vår tidigare kompilator. Vi är bara iterera över hela vår compile.c. Men nu i stället för att leta efter "förnekar dem tillgång" vi letar efter "kompilera filen." Var är kompilera filen? Titta på vår helt oskyldiga compiler.c, det är rätt här nere på botten. Denna kommentar - kompilera filen - igen, det ser helt ofarliga. Men i vår illvillig version av kompilatorn, vi kommer att - precis innan den kommentaren - sätt den här koden som syftar till att infoga kod när de sammanställer login.c. Det finns många nivåer av indirekthet här. Låt oss verkligen köra det. Återigen, vi kopierar vår ursprungliga kompilatorn. Nu, kompilera - kompilator compiler.c compile.c-o evilest_compiler - och nu evilest_compiler. Evilest kompilator - om vi använder det för att sammanställa vår kompilator, låt oss faktiskt ser. Evilest_compiler - föra den över, hela vägen tillbaka till version 1 av vår kompilator - version 1 av vår kompilator som just lästes i filen och kompilera den. Här vet vi att evilest_compiler - när det sammanställer den här filen - kommer att infoga kod här innan kompilera filen, och att koden kommer att se ut exakt som koden från den andra versionen av vår kompilator som gjorde det här. Denna kod, som är avsedd att bryta sig in inloggning kommer att införas i vår kompilator från evilest kompilatorn. Låt oss använda evilest_compiler att sammanställa vår kompilator. Nu ska vi använda kompilator, komma tillbaka över att logga in, och kom ihåg detta login.c har absolut ingenting misstänkt i den. Men att använda vår kompilator för att kompilera login.c, Rob, thisiscs50, framgång. Låt oss inloggning hacker, LOLihackyou, hackad! Du har nu tillgång. Inse att det var annorlunda från version 2 av vår kompilator. Kompilatorn vi använder - låt oss gå tillbaka - kopia från inloggning - låt oss föra vår kompilator tillbaka hit. Ta bort evilest kompilator. Allt vi har kvar nu är kompilatorn. Om vi ​​tittar på compiler.c, Det finns absolut ingenting i det som verkar skadligt på något sätt. Om vi ​​tittar på login.c, Det finns absolut ingenting här som ser skadliga på något sätt. Men när vi använder vår kompilator för att kompilera login.c, vi får hackable versionen av login.c. När vi använt vår kompilator för att kompilera en ny version av kompilatorn, vi får hackable versionen av kompilatorn. Om vi ​​nu går ut och distribuera vårt kompilator körbar, och ingen kommer att veta att det finns något skadligt om det. Detta är faktiskt så i - jag kommer inte ihåg året - Ken Thompson, och han vann Turing Award - om du är obekant med Turing Award, är det nästan alltid definieras som Nobelpriset i datavetenskap, så det är hur jag ska definiera det. Ken Thompson höll ett tal när han fick sin Turing Award kallade "Reflektioner om Tillförlitlig Trust." I grund och botten var det tanken på hans tal. Utom i stället för vår kompilator, han talade om GCC - bara en annan kompilator som klang - och vad han säger är, som vår login.c verkar vår login.c relativt värdelös men han talade om den faktiska UNIX login.c. När du loggar in på din apparat, det finns en viss inloggning program som körs. Det var inloggningen att han talade om. Detta var i princip hans idé. Han sade att i GCC, han i teorin skulle ha planterat en bugg - inte en bugg utan en skadlig kod - att vid sammanställningen inloggningen funktion - inloggning fil - skulle sätta in en bakdörr så att han kunde gå till absolut alla UNIX-system i världen och logga in med någon specifik användarnamn och lösenord. Vid den tiden var GCC ganska mycket kompilatorn som alla används för något. Om någon råkade uppdatera GCC, då de skulle kompilera GCC använder GCC, och du skulle fortfarande få en dålig version av GCC eftersom det var just sammanställts för att inse att det var kompilera kompilatorn. Och om du någonsin använda GCC att kompilera en login.c fil, då skulle infoga denna bakdörr som han kunde använda för att logga in på vilken dator som helst. Detta var allt teoretiskt, men - det särskild omständighet var teoretisk, men idéerna är mycket påtaglig. År 2003 fanns det en liknande exempel där - vi tar en titt på den här filen, och det har absolut ingenting att faktiskt göra med det, men felet är liknande. Denna fil definierar bara en funktion som kallas klyftan. Det tar ett argument a ett argument b, och avsikten är att göra en dividerat med b.. Men det gör några fel kontroll, så vi vet saker är konstiga om B råkar lika med noll. Om b är noll, så vi dela detta till 2 fall. Du kan redan se felet. Det första fallet - om a är noll, så vi gör noll dividerat med noll, och vi säger bara att det är odefinierat. Det andra fallet - om en inte är noll, då är det något som 1 divideras med noll, och vi bara kalla det oändlighet. Annars vi tillbaka den vanliga a dividerat med b.. Och så här, vi kör dessa 3 fall, och vi kör faktiskt klyftan - den skriker på det för mig - så ignorerar klang varningar - slutet av icke-tomma funktion - tydligen jag inte sammanställa denna i förväg. Avkastning 0. Gör dela - okej. Med. / Klyftan ser vi 3, Infinity, Infinity. Noll divideras med noll skulle inte ha tillbaka oändlighet. Och om du inte har listat ut felet ännu - eller inte se det innan - Vi ser att vi gör en = 0. Förmodligen vi menade en == 0. Förmodligen. Men detta var faktiskt något som återigen under 2003, Linuxkärnan - så vår apparat använder Linuxkärnan - någon Linux-operativsystem använder Linuxkärnan - så en bugg mycket liknar detta dök upp. Tanken bakom detta fel var - igen, det var bara någon funktion som kallades, och det gjorde lite felkontroll. Det fanns vissa specifika insatser som denna felkontroll - det borde ha varit, okej, kan du inte ringa den här funktionen med en divisor av 0. Så jag ska bara återvända någon fel. Utom var det inte så oskyldig som bara sätta en lika med 0. Istället slutade här kodraden upp göra något mer som användaren = administratör. Eller user = superanvändare. Det var en oskyldig - vid första anblicken - misstag där det kunde ha bara varit rimlig att jag ville bara att rapportera något specifikt om användaren råkade vara superanvändare administratör. Men sedan åter tänka på det, ville den person som det ser ut som en enkel stavfel, men om denna kod faktiskt hade släppts, då du skulle ha kunnat hacka sig in alla system genom att en särskild flagga - i detta fall b = 0 - och det skulle automatiskt göra användaren administratören, och då han har full kontroll. Detta hände 2003. Det hände bara så att den enda anledningen att det var fångad var att det råkade vara några automatiska systemet som märkte förändringen i den här filen som aldrig borde ha ändrats av en människa. Filen ska endast ha genereras automatiskt. Det hände bara så att någon rörde - ja, den person som ville hacka beröring filen, och datorn fångats röra. Så bytte detta och först senare insett vad en katastrof det skulle ha varit Om detta hade kommit ut i den verkliga världen. Du kanske tänker att - komma tillbaka till vårt kompilator exempel - även om vi inte kan se - titta på källkoden - att något särskilt är fel, Om vi ​​ser faktiskt på den binära koden för kompilator, Vi skulle se att något är fel. Som ett exempel, om vi kör strängarna fungerar - som just kommer att se över en fil och skriva ut alla strängar kan hitta - Om vi ​​kör strängar på vår kompilator, Vi ser att en sträng som den finner detta märkligt - else if (strcmp (användarnamn, "hacker") - bla, bla, bla. Om någon råkade vara paranoid nog att inte lita på sin kompilator, de kunde springa strängar och se detta, och då skulle de veta att det var något fel med själva binär. Men var strängar oundvikligen något som sammanställdes. Så, vem att säga att vår kompilator inte bara har mer speciell kod som säger, om strängarna är någonsin köra på vår kompilator, inte mata allt det skadlig kod. Samma idé med om vi vill dis-montera filen - fick vi veta att den som satt ihop för oss från assemblerkod till maskinkod - vi kan gå i motsatt riktning - objdump-d kompilator - kommer att ge oss monteringen av vår kod. Titta på detta, det är ganska kryptiskt, men om vi ville, vi kunde titta igenom detta och förnuft, vänta, det är något på gång här som inte ska gå på, och sedan kommer vi inse att kompilatorn gör något skadligt. Men precis som strängar, vem säga objdump inte speciella kapslade. I grund och botten handlar det om att du inte kan lita på någonting. Poängen med det papper som kallas "Tillförlitlig Trust" är i allmänhet, litar vi vår kompilator. Du bygger din kod och förväntar sig att göra vad du ber den att göra. Men varför ska du lita kompilatorn? Du har inte skrivit kompilatorn. Du vet inte vad kompilatorn nödvändigtvis faktiskt gör. Vem säger att du kan lita på det? Men även då, ja, kanske vi kan lita kompilatorn. Det finns tiotusentals människor som har tittat på detta. Någon måste ha känt igen något var upp med kompilatorn. Tänk om vi bara gå 1 nivå djupare? Det kan även vara din processor. Så löjligt som det skulle kunna vara, kanske det finns några oseriösa anställd på Intel som skapar dessa processorer att när denna processor märker att du kör lite kommando som är tänkt att logga in på datorn, processorn kommer att acceptera några specifika användarnamn och lösenord kombination. Det skulle vara komplicerat vilt, men någon kunde göra det. På den punkten, du kommer verkligen att öppna upp datorn för att titta på processorn och använda ett mikroskop för att erkänna att dessa kretsar inte är uppradade som de borde vara? Ingen är någonsin kommer att fånga detta fel. Vid något tillfälle, du måste bara ge upp och lita något. De flesta människor litar kompilatorn vid denna tidpunkt. Det vill säga inte nödvändigtvis att du borde. Titta på en något ökända video - [Dramatisk musik spelar] [Det är ett UNIX-system. Jag vet detta.] [Det är alla filer -] Hon sa, "Det är ett UNIX-system. Jag vet detta." Byt UNIX med vad din favorit operativsystem är - Hon kunde ha sagt, "Det är en Windows-system. jag vet detta." Det är en helt meningslös uttalande, men allt vi vet, händer hon känna en bakdörr in i UNIX-system. Hon vet en del användarnamn / lösenord kombination som verkligen kommer att låta henne göra vad hon vill. Okej. Sensmoralen av idag är i princip att du inte kan lita på någonting. Även saker som du skriver - du inte skriva kompilatorn. Kompilatorn kan vara dålig. Även om du gjorde skriver kompilatorn kunde sak som att köra kompilatorn vara dåligt. (Skratt) Det finns inte mycket du kan göra. Världen är dömd. Tillbaka till David! [Applåder] [David] Tack. Det var verkligen deprimerande. Men i själva verket är Rob korrekt. Vi har egentligen inte en lösning på detta, men du ska få några lösningar till några mer vanliga försvar. I väntan på detta, vad Nate och jag har gjort utanför scenen där är att veta att det finns så många bärbara datorer i det här rummet, vi har sniffa all trådlös trafik går igenom detta rum under de senaste 20 minuter Under Rob tal, så vi kommer att ta en 2 minuters paus här. Nate kommer att ställa upp, och sedan ska vi prata om alla de saker vi kunde ha funnit. (Skratt) Så kan jag överdrivit lite bara för sakens skull drama, men vi kunde ha sniffa alla dina trådlösa trafik eftersom ja, Det är så lätt. Men det finns också sätt att du kan försvara mot detta, och så med det, Jag ger er Nate Hardison. >> [Nate] Sweet. (Applåder) [Nate] Tack. Jag uppskattar shout out. Okej! Det är spel vecka. Är ni glada? Förhoppningsvis kommer att bli en stor match på lördag. Jag antar att ni killar på denna punkt - med tanke på att du har en frågesport på onsdag Allt om kod, och vi satt bara genom en underbar föreläsning av Rob med en massa C-kod i det - är kanske lite trött på kod. I denna del är vi faktiskt inte kommer att röra någon kod alls. Vi ska bara prata om en teknik som du använder varje dag, ofta för många, många timmar per dag, och vi kommer prata om konsekvenserna med säkerhet att det finns. Vi har talat mycket om säkerhet under loppet av terminen, och vi började med lite krypto. [Bdoh lv vwlqng!] Och medan ni är förmodligen super-spännande att passera anteckningar till varandra i klassen med en Caesar chiffer som denna, i verkligheten, det finns lite mer roligt att vara hade när du faktiskt pratar om säkerhet och sånt. Idag ska vi täcka några tekniker att människor faktiskt använder i den verkliga världen att göra alla möjliga saker från sniffa människors paket att faktiskt gå in och bryta sig in människors bankkonton och allt detta. Dessa är legitima verktyg som vi pratar om med undantag av möjligen ett verktyg. Och jag vill bara göra en snabb ansvarsfriskrivning. När vi talar om dessa saker, vi pratar om dem så du vet vad som finns därute, och du är medveten om hur man ska vara säker när du är ute med din dator. Men vi vill definitivt inte att antyda att du bör använda dessa verktyg i studentrummet eller ditt hus eftersom du kan stöta på många stora frågor. Det är en anledning i dag att vi faktiskt inte sniffa dina paket. Okej. I måndags talade vi om cookies och HTTP, och autentisering, och hur Firesheep öppnar denna stora dörren till ditt Facebook-konto, till ditt Hotmail-konto - om någon är fortfarande använder Hotmail - och många andra konton. Mycket av det här kommer att bygga ut det, men först vill jag ta en snabb rundtur i hur Internet har utvecklats över tiden. Tillbaka på 90-talet, kanske ni har ihågkommen faktiskt koppla in dina datorer med en av dessa. Nu gör vi inte det så mycket längre. Det visar faktiskt ut att för att ansluta en Ethernet-kabel till min laptop, Jag har nu använda en av dessa adaptrar som är slags galen. Istället, 1997 hade vi den nya, roliga teknik kom ut som kallas IEEE 802,11, så detta är det trådlöst internet standarden IEEE är styrande organet som ger ut alla typer av - publicerar alla typer av standarder i förhållande till datorer. De 802 standarder handlar om Internet-teknik. Så 802,3, exempelvis, är Ethernet-standarden, 802.15.1 jag tror är Bluetooth-standarden, och 802,11 handlar om trådlöst internet. Under 1997 kom ut. Det tog inte riktigt fånga på direkt. Det var inte förrän 1999 och 802.11b standarden kom ut som bara fick verkligen populär. Hur många av er kommer ihåg när datorerna började komma ut och få wi-fi på dem? Det var ganska häftigt, va? Jag minns att få min första bärbara dator i skolan, och hade ett trådlöst kort i den. Min pappa gav den till mig och sa att jag skulle använda den till min college apps och allt detta, och jag hade ingen aning om hur jag skulle slå upp det här på nätet. Men lyckligtvis hade jag ett trådlöst kort, så det var ganska coolt. Numera ser du också 802.11g som är en av de andra riktigt populär trådlösa standarder som finns där ute. Både B och G är ganska föråldrade vid denna punkt. Någon som vet vilken version de flesta människor är på just nu om de ska köpa nya trådlösa routrar och sånt? N. Exakt. Bingo. Och det visar sig att ac standarden bara kommer ut i ett utkast, och det finns andra versioner på vägen. Med var och en av dessa standarder vad vi vinner är mer bandbredd, mer data vid en högre hastighet. Dessa saker håller förändras ganska snabbt. Det gör det också så att vi måste köpa fler routrar och allt det roliga grejer. Låt oss tala om vad trådlös kommunikation egentligen är i centrum. Med Ethernet och de gamla uppringda modem, du hade faktiskt det här som du är ansluten till din dator, och sedan ansluten till ett modem av slag, och sedan kopplat in den i ett jack i väggen. Du hade det kabelanslutning, eller hur? Hela poängen med trådlöst är att bli av med det här. För att kunna göra det, vad vi har är i huvudsak ett radiokommunikationssystem där vår trådlösa router - utsetts av vår lilla trådlösa ikonen - är ansluten till Internet med denna fast pil indikerar någon form av trådbunden anslutning, men när du ansluter till din trådlösa router du faktiskt använder nästan som en walkie-talkie mellan datorn och den trådlösa routern. Vad är riktigt coolt om det här är att du kan flytta runt. Du kan bära din dator hela Sanders, gå surfa på webben, vad du vill, precis som ni alla känner och älskar, och du behöver inte någonsin behöva ansluten till något. För att detta ska fungera måste vi både här mottagning och sändning. Det är verkligen som att walkie-talkie. Denna trådlösa router - som i Sanders sitter under detta skede just här - alltid sänder och tar emot, sänder och tar emot, och likaså är din dator gör allt samma sak också. Vi kan bara inte höra den. Den andra saken som du kan göra är att du kan ha flera datorer prata med samma trådlösa routern. Ju närmare du är till en router - och återigen är detta en radiokommunikation - ju närmare du är, desto bättre din signal är, desto bättre datorns hör "routern och kan kommunicera med Internet. Om ni någonsin på din sovsal, på ditt hus och du undrar varför din signal är dålig, Det är förmodligen därför a). du är inte mycket nära till routern, eller b). det är något mellan dig och din router som en cement vägg eller något som inte låter de radiovågor går igenom. Låt oss tala lite om varför skurkar som wi-fi. Dåliga killar älskar wi-fi för ett par skäl. Här är vår otäck skurk där. En anledning till denna dåliga killen älskar wi-fi beror som standard, mycket trådlösa routrar kommer och när du ställer upp dem, de är okrypterad. Detta har varit ett problem, och det har förekommit fall - flera instanser, nu - där dålig kille visar upp till någons hus, märker att det finns en okrypterad wi-fi som de kan ansluta. De ansluter till Wi-Fi, och sedan börja ladda ner alla typer av roliga saker. Och de hämtar kattungar, de hämtar inte valpar. Det är som BitTorrent. Detta är den otäcka av de otäckaste. Det har förekommit fall där FBI har även blivit inblandade tänker att den som äger huset är faktiskt ett gå ut och hämta saker som de egentligen inte borde vara. Med okrypterat wi-fi är definitivt inte något du vill göra, om så bara för att inte ha FBI kom knackar på din dörr. En annan orsak till skurkarna älskar wi-fi är anledningen till att David talade om tidigare under pausen. Eftersom det är ett radiokommunikationssystem som kärna, om du känner till kanalen kan du lyssna på den radiostation. Till exempel, om det finns en dålig rätt det sitter i mitten bredvid åtkomstpunkten, bredvid den trådlösa routern, kan den onde lyssna på alla de trådlösa trafiken som är kommer från alla dessa datorer. Faktum är att dessa killar - dessa lyckliga få som är här i den främre raden - eftersom de är super-nära till alla dessa trådlösa routrar som sitter precis under scenen, de skulle kunna höra allas trafik i denna hela rummet om du är ansluten till Wi-Fi och börja läsa genom dessa åtkomstpunkter. Det är inte särskilt svårt att sitta själv i en bra position att sniffa och räkna ut vad andra människor gör. Det är något att ha i åtanke, särskilt om du inte är säker på var åtkomstpunkten är, och du surfar säga vid en Starbucks. Det visar sig att sniffa och allt det är egentligen inte så svårt att göra. Det finns ett program som heter tcpdump som dumpar alla sorters TCP-trafik och du kan köra det ganska enkelt - precis som jag gjorde i morse. Här är lite av en dumpning, och här är en del av trafiken som var på väg över mitt nätverk på tiden. Du kan se - om du kisa riktigt hårt - det finns en liten bit av Spotify där. Ovanpå tcpdump - eftersom detta är typ av en smärta att använda - Det finns ett program som heter Wireshark som buntar allt detta i ett trevligt GUI. Wireshark är super-händig så om du går på att ta nätverk klasser, Detta är ett verktyg som du kommer att älska eftersom det hjälper dig att dissekera alla paketen som flyter runt där ute. Men det kan också användas för dåliga. Det är väldigt enkelt att bara ladda ner programmet, starta det, starta ett nätverk fånga och se allt som händer - och filtrera och göra alla möjliga roliga saker med det. Den andra saken som du kan göra med trådlös kommunikation inte bara kan du tjuvlyssna, men du kan också lära dig att skruva med nätverket och injicera din egen information för att styra den erfarenhet som andra människor på samma trådlösa nätverk får. Låt oss ta en titt på det. Här är Firesheep - som vi känner och älskar från förra veckan - nämligen att avlyssning teknik. Om till exempel, ville vi aktivt har vår bad guy gå och röra runt med en av dessa datorer, i detta scenario har vi en dator försöker gå surfa till harvard.edu. Vad som händer är, skickar datorn först ett meddelande till den trådlösa routern och säger, hej, jag vill gå besök www.harvard.edu. Säg någon anledning de försöker få information om spelet i helgen. Skurk, eftersom han sitter rätt i mitten, bredvid den åtkomstpunkt, kan se att kommunikation kommer från datorn i routern, och han vet, "Aha! Någon kommer att harvard.edu." (Elakt skratt) Det kommer att bli denna latens, medan kommunikationen går från routern ut till Internet för att leta webbsidan på harvard.edu-- precis som ni alla vet efter att ha gjort dina PHP psets - och så den onde har lite tid, lite fönster, där han kan svara med lite grejer. Låt oss säga detta onde, naturligtvis, är en Yaley. Han svarar med harvardsucks.org. Boo! Dålig, dålig kille! Bad Yaley! Eller ännu värre, kan han svara med det. [Http://youtu.be/ZSBq8geuJk0]. Jag ska låta er lista ut vad det är. Detta är faktiskt en teknik som kallas Airpwn! som debuterade på en av de säkerhetsåtgärder konferenser ett par år tillbaka. Med Airpwn! du kan faktiskt injicera trafiken tillbaka till nätverket. De datorer som försökte gå ut på Internet och försöka få till Google.com till Facebook.com till harvard.edu se den skadliga svaret kommer in och omedelbart anta, okej, Det är det svar som jag väntade på och i slutändan får innehåll från harvardsucks.org eller nameyourfavoriteshocksite.com, och du kan se hur snabbt saker och ting kommer att försämras. Alla dessa typer av saker kan inte göras med dessa trådbundna anslutningar eftersom med en trådbunden anslutning det är svårt att snoka på trafik. Om jag är en dålig kille och den ena änden är din dator och på den andra änden är din router - modemet - det enda sättet jag kan komma in mellan det sammanhanget är att faktiskt skarva min dator i någonstans i mitten eller göra något annat med routern, något nedströms. Men med trådlös, kan det vara så enkelt som att sitta i den främre raden i ett klassrum, och du kan göra alla möjliga elaka saker till folket i ryggen. Låt oss tala om hur du kan försvara sig mot några av dessa saker. De människor som utvecklat den trådlösa standarder - de 802,11 - de är inte dumma människor ens vildaste fantasi. Detta är cool teknik och när det debuterade 1999, de kom ut med denna standard som kallas WEP. Här kan du se när du försöker och ansluta till ett trådlöst nätverk, du har alla möjliga olika säkerhetsalternativ. Det är lite av en smärta eftersom det finns 6 tillsammans och det aldrig riktigt vettigt som 1 att ansluta sig. Detta 1 upptill är den första som de kom med kallas WEP. WEP står för Wired Equivalent Privacy, tror jag, inte Wireless Encryption Protocol, som är en vanlig missvisande. Eftersom det försöker ge dig sekretess likvärdigt och säkerhetsskydd som motsvarar ett trådbundet nätverk Med WEP vad hamnar händer är, du har en enkel, liten lösenord som du skriver in och som tjänar till att kryptera alla dina kommunikationen mellan datorn och routern. Vad är problemet med WEP men? Lösenordet med WEP är verkligen kort, och även alla använder samma exakt lösenord,  och det är verkligen lätt att dekryptera. Så mycket snabbt folk räknat ut att WEP var ett problem, och den enda anledningen du ser det dyker upp fortfarande på den här lilla killen är - det finns vissa äldre system som inte använder WEP - vad du bör i stället leta efter är WPA och även WPA2 standarder som släpptes senare. Dessa system är en mycket bättre gå på skydd på trådlöst Internet. Som sagt, de fortfarande har en viss hackability. Det finns verktyg där ute som kan gå göra detta. En sak i synnerhet som kan vara otäcka är att om du ansluter och autentiserad till en trådlös router och använder någon form av krypterad kommunikation visar det sig att en hacker lätt kan skicka ett enda paket att koppla dig från routern, och när de väl har kopplats du kan sedan lyssna på - De kan lukta de paket som du försöker återupprätta anslutningen med routern. Och med den information de kan sedan gå in och dekryptera resten av din kommunikation. Detta är inte på något sätt någon form av säker bortom alla fantasi. Den andra saken du kan göra när du ställer in trådlösa nätverk eller om du ansluter dem är - du märker att här när jag ansluter detta nätverk, den frågar efter namnet på mitt nätverk. Detta är också känd som SSID. Och du ser här att till höger har jag en låda som visar mig de tillgängliga SSID. Det finns en Harvard University, en CS50 och en CS50 Personal nätverk. Nu, hur många av er visste att det fanns ett CS50 Personal nätverk runt? Några av er. Inte alla av er. Problemet med detta är naturligtvis att vi inte hade lagt upp det på vår lista över SSID, ingen skulle ha känt till det mest sannolika. Jag hoppas. Såvida ni alla försöker bryta sig in i vårt trådlösa. Men detta är något du kan göra det är verkligen viktigt när du ställer in en router hemma. Detta förmodligen inte kommer att hända för ett par år för många av er, men tänk på att hålla den SSID därifrån och inte även namnge det något super-common kommer att hålla dig säkrare i det långa loppet. En slutlig par saker du kan göra. En är HTTPS. Om du är på en Starbucks, om du är i en Wi-Fi-området och du bestämmer dig för att komma åt ditt bankkonto, komma åt ditt Gmail, din Facebook, se till att dessa anslutningar kommer över HTTPS. Det är en extra lager av säkerhet, ett extra lager av kryptering. En sak att tänka på här är, Hur många av er har någonsin klickat igenom den stora, röda skärm som säger, "Denna webbplats kan vara dålig." Jag vet att jag har. Det är nog när ni surfar att gå och se Homeland eller något liknande, eller hur? Ja. (Publiken skratt) Ja. Där du går. Vi vet vem som tittar Homeland. Det stora, röda skärm direkt ofta indikerar att något funky är på gång. Ibland är det bara hemsidan i sig är osäker, men samma stora, röda skärm kommer upp när människor försöker montera nätverksangrepp på dig. Så om du ser det stora, röda skärm kommer upp på en Starbucks, inte klicka igenom den. Dåliga nyheter. Dåliga nyheter bär. Den sista sak som du kan titta på är någon form av VPN. Denna VPN är tillgängliga via Harvard - vpn.fas.harvard.edu-- och vad detta innebär är det faktiskt upprättar en säker anslutning mellan dig och Harvard, trattar din trafik genom den, och på så sätt om du sitter på en plats som en Starbucks kan du ansluta till Harvard, få det säker trafik, och sedan bläddra från Harvard. Igen, inte idiotsäkert. Människor kan få i mitten. De kan börja bryta det, men detta är långt säkrare än att förlita sig på säkerheten av wi-fi ensam. Okej. Sammanfattningsvis När du sätter upp trådlösa nätverk, när du går ut för att använda trådlöst offentligt - oavsett om det är en Starbucks, oavsett om det är fem killar, oavsett om det är B.Good, något liknande - oavsett var de har wi-fi - vara medveten om din omgivning. Var medveten om vad man kan göra. Och vara säkra. Användare inte bankkonto. Det kan vara ett brutalt uppvaknande om någon dyker upp med ditt lösenord senare. Med detta, gå crimson! Och jag kommer att vända saker och ting tillbaka över till David för ett sista ord. (Applåder) [David] Jag trodde att jag skulle dela en sak av egen erfarenhet. Ett verktyg som du kanske gillar att leka med - även om Apple har i stort sett utrotat denna fråga Om du har uppdaterat din mjukvara sedan - men mot detta av att inte riktigt kunna lita på programvara som vi använder, och till Nates punkter, att kunna sniffa en hel del vad andra människor gör ute - det var en mjukvara som kom ut ungefär ett år och ett halvt år sedan nu. [IPhoneTracker] [http://petewarden.github.com/iPhoneTracker/] Sedan en tid iTunes - innan iCloud, när du synkroniserar dina iPod eller din iPhone eller eller dina iPads med iTunes - till förmån för säkerhetskopior, vad din iPhone och dessa andra enheter har gjort under en längre tid är utnyttjar GPS-data. Ni vet alla kanske att dina iPhone och Androids och Windows Mobile-telefoner och liknande dessa dagar kan spåra var du befinner dig i intresse att visa dig kartor och liknande - väl vad Apple och de andra företagen gör är De spårar oftast nästan överallt du faktiskt varit av intresse för förbättra kvaliteten på tjänsterna. En, kan du få mer riktad annonsering och liknande, men två kan de räkna även där är det trådlösa hotspots i världen, och detta kan hjälpa till med geolokalisering - typ av triangulering av människors ställning. Lång historia kort, hade vi alla gått antenner under en tid. Tyvärr hade Apple gjort designen beslut - eller brist därav - att inte kryptera denna information när det är backas upp iTunes. Och vad säkerheten forskare fann var att detta var bara en stor XML-fil - en stor textfil - sitter i människors iTunes, och om du var bara lite nyfiken, du kunde gå peta runt din make historia, din rumskompis historia, ditt syskon historia och liknande, och tack vare några gratis programvara kan du rita alla dessa GPS-koordinater - latitud och longitud. Så jag gjorde faktiskt detta med min egen telefon. Jag ansluten min telefon, och säker nog, var min version av iTunes krypteras inte på tiden, och vad jag kunde se var mina egna mönster. Här är USA och dessa blå cirklar representerar där jag råkade ha varit över de senaste månaderna med att äga denna telefonmodell.  Jag tillbringar mycket tid, naturligtvis, uppe i nordöst, lite tid i Kalifornien, en kortlivad resa till Texas, och om du sedan zooma in på detta - Detta är alla slags fin och intressant, men jag visste detta. De flesta av mina vänner visste detta, men om du dyka djupare, du se var jag tillbringar större delen av min tid i nordost. Om du spärren på några välbekanta utseende städer - denna stora, blått bläck FLÄCK huvudsak centrerad över Boston, och då jag spenderar lite tid ute i förorterna strålar ut från Boston. Men jag var också göra en hel del samråd detta år. Och i år är den östra kusten, och du kan faktiskt se mig och min iPhone i fickan reser fram och tillbaka mellan Boston och New York och Philadelphia längre ner, liksom utgifterna lite semester på Cape, som är den lilla armen ute. Så är var och en av dessa punkter någon plats jag hade varit, och helt okänt för mig, hela denna historia bara sitter där på min stationära dator. Om du zoomar ut - det var faktiskt lite oroväckande. Jag hade inget minne av att någonsin ha varit i Pennsylvania just det året. Men jag även lite hårdare om det och jag räknat ut, åh, det var i själva verket att resa och visst hade min telefon fångat mig. Apple har sedan krypterad denna information, men detta är också bara bevis på hur mycket information som samlas om oss, och hur lätt - på gott och ont - det är acceptabelt. En av de take-aways förhoppningsvis från Rob tal, från Nates tal och lite grafik som denna dag är bara att vara desto mer medvetna om detta så att även om - som till Rob synpunkt - vi sorts skruvad, eller hur? Det finns inte mycket vi kan göra när det gäller några av dessa hot, men i slutet av dagen måste vi lita på något eller någon om vi vill att faktiskt använda denna teknik. Åtminstone kan vi vara att fatta väl underbyggda beslut och beräknade beslut om huruvida vi faktiskt kontrollera detta särskilt känsliga konto eller vi borde faktiskt skicka att något misstänker snabbmeddelande  i ett Wi-Fi-miljö som denna. Så med det sagt, bara en frågesport kvar, förblir en föreläsning. Vi ses på onsdag då måndag. (Applåder och jubel) [CS50TV]