[Powered by Google Translate] [Settimana 10] [David J. Malan] [Harvard University] [Questo è CS50.] [CS50.TV] Va bene! Questo è CS50, ma non per molto. Questo è l'inizio della settimana 10. Mercoledì scorso abbiamo il nostro quiz, e poi Lunedi prossimo abbiamo un po 'di torta celebrativa come abbiamo chiuso il cerchio per tutto il tragitto da zero settimana. Oggi, si parla di uno dei miei argomenti preferiti, a dire il vero - quello della sicurezza e della privacy e le implicazioni di tutto l'hardware e il software che tutti noi usiamo in questi giorni. A dire il vero, ci sono un sacco di minacce là fuori che se non hanno davvero soffermati a pensare a loro, sono in realtà piuttosto scoraggiante. Caso in questione - se qualcuno di voi ha mai scaricato un pezzo di software da Internet e installato sul vostro computer, sei impegnato in un notevole grado di fiducia, no? Non c'è nulla di aver impedito Skype, o Chrome, o qualsiasi altro pezzo di software avete installato sul vostro computer, dalla semplice eliminazione di tutti i file sul disco rigido; di caricare tutti i file sul disco rigido al server un tizio bad; dalla lettura di tutte le tue e-mail, di intercettare tutti i messaggi istantanei. Perché la realtà è oggi con sistemi operativi più moderni in realtà non è molto più di un muro tra programmi software che installiamo, e tu e io sono praticamente solo tipo di incrociamo le dita e tenendo sulla fede che tale applicazione abbiamo scaricato gratuitamente, o quella cosa che è 99 centesimi, è in realtà del tutto benigna. Ma, come abbiamo visto a C, e ora PHP e JavaScript, con questa capacità di esprimere noi stessi programatically, si può fare di più tutto quello che vuoi con un programma che un utente stesso o se stessa potrebbe fare. Così, oggi ci concentriamo su questo argomento - non solo alcune minacce, ma anche difese. Infatti, nel mondo della sicurezza in generale, c'è una specie di questo gatto e al topo, e oserei dire i cattivi hanno quasi sempre una gamba. Quando si tratta di prendere vantaggio di hardware e software sui nostri computer personali, dobbiamo renderci conto che un cattivo ragazzo ha bisogno semplicemente di trovare un semplice errore - uno sfruttare, un bug - in un pezzo di software che abbiamo scritto o sono in esecuzione in modo che lui o lei a prendere in consegna il nostro intero sistema. Al contrario, noi - i buoni - necessario applicare la patch e risolvere tutti questi bug e di evitare tutte quelle debolezze. E così, oserei dire nel complesso, i cattivi hanno il vantaggio. Quali classi di questo tipo e le classi successive sono veramente non sono su di te insegna a condurre le battaglie che questi ragazzi cattivi fanno, ma su come proteggere se stessi o almeno come per prendere una decisione calcolata che sì, lo so che questo software potrebbe infatti leggere tutte le mie e-mail, ma sono d'accordo con questo a causa del valore che mi porta dall'altro. Sono molto contento di essere affiancato da due delle persone più intelligenti che conosco - Rob Bowden e Nate Hardison. Rob è in procinto di prendere noi per un tour attraverso il più basso livello di etichette di sicurezza - quella del compilatore che, fino ad oggi, tutti abbiamo imparato ad amare e fidarsi. Rob Bowden. [Applausi] [Rob] Va bene. David ha praticamente preso il mio spiel tutto che stavo per introdurre con, ma - Alcune settimane fa, hai visto l'esempio di un buffer-overflow attacco che è un esempio di un hacking hacker in alcuni software che non dovrebbero essere l'hacking in. L'altro lato di questa a volte si dispone di software che è dannoso in sé e per sé. Non ha nemmeno bisogno di essere violato. La persona che ha scritto il software vuole incidere voi. Diciamo solo saltare in codice, dare un'occhiata a "login.c". Qui, un programma stupido che convalida una combinazione di username e password. Qui si dovrebbe assolutamente essere prendere confidenza con il nuovo C per il quiz. In primo luogo, stiamo usando stringhe di arrivare a descrivere il nome utente, allora stiamo usando stringa get per afferrare la password, e poi ci sono alcuni controlli banali di soli, è il nome utente "rob"? Ed è la password "thisiscs50"? In alternativa, è il nome utente "tommy" e la password "i <3javascript"? Se uno di questi è il caso,  allora stiamo solo andando a stampare "successo", e poi abbiamo accesso. In caso contrario, andremo a stampare "non valido login" e poi, naturalmente,  Dato che la memoria schizzo malloc stringhe, abbiamo nome utente e la password di libero. Si tratta di un programma di accesso banale, e se si pensa a quando si accede al dispositivo, è abbastanza simile - o addirittura l'accesso al vostro computer - c'è solo un po 'di programma di login che ti dà l'accesso. Qui, ci capita di avere a livello di codice 'rubare', 'thisiscs50', 'Tommy', 'i <3javascript', ma probabilmente c'è qualche file da qualche parte sul vostro sistema operativo che ha una lista di nomi utente che possono accedere al sistema e un elenco delle password associate a questi nomi utente. Di solito le password non sono solo memorizzate in formato testo come questo. Vi è una sorta di crittografia, ma questo farà per il nostro esempio. Venendo più al nostro compilatore - che sta per essere molto semplice. Abbiamo bisogno di specificare almeno un po 'di file che vogliamo compilare, e poi qui - queste linee sono solo la lettura di un un file. Legge l'intero file in un buffer grande, e poi ci Null-terminare il nostro tampone come sempre, e, infine, abbiamo appena compilare il file. Non stiamo andando a guardare il modo in cui compilazione viene messo in atto, ma come un suggerimento, chiama solo Clang. Stiamo andando a utilizzare questo programma per compilare le cose invece di Clang. Un problema che iniziare è che vediamo vogliamo compilare il nostro compilatore, ma se non avete intenzione di utilizzare Clang, non so che cosa ho intenzione di compilare con. Questo è un problema, nota come bootstrap. Quindi, solo per questa volta, ho intenzione di usare Clang per compilare il nostro compilatore. Se si pensa di GCC e Clang - tali programmi, i compilatori vengono costantemente aggiornati, e quei compilatori sono compilato con GCC e Clang. Clang è solo una grande C o C + + del programma, in modo che il compilatore che utilizzano per compilare che è Clang. Qui, ora, ci sono solo intenzione di utilizzare il nostro compilatore per compilare il nostro compilatore, e possiamo anche dire - '/ compilatore.', 'compiler.c', 'compile.c', '-o compilatore'. Si noti che questo è il comando esatto mi sono imbattuto prima - basta sostituire Clang con '. / compilatore'. E ora abbiamo un altro compilatore, ma è esattamente la stessa. Chiede solo Clang. Abbiamo intenzione di utilizzare il nostro compilatore per compilare il nostro programma di login. Va bene - ". / Compilatore login.c-o login". Quindi, undefined reference to "GetString". Hai un "-lcs50". Va bene. Così ora ho il nostro programma di login. L'esecuzione - ricevere "Inserisci il tuo nome utente". Un esempio è rob. Si prega di inserire la password - thisiscs50. E il successo! Ho accesso. Esecuzione di nuovo e inserendo alcune password non valida - o nome utente non valido e la password - Accesso non valido. Va bene. Nulla di interessante finora. Ma diamo uno sguardo al login di nuovo - e questo sarà un esempio un po 'banale, ma cerchiamo di aggiungere un altro qui e dire, else if ((strcmp (nome utente, "hacker") == 0 && strcmp (password, "LOLihackyou") == 0)) così ora, printf ("Hacked Ora avete accesso \ n!."); bene. La compilazione di questo - compilatore login.c-o login-lcs50 - ora in esecuzione login - e se uso il mio hacker di nome utente e password LOLihackedyou - Ho sbagliato a digitare lì prima? A login.c--ihack - I'Ll si hacked perché penso di farlo in seguito. Va bene. Ricompilare. Re-running - hacker - LOLihackedyou - Hacked! Ora è possibile accedere. Non sembra essere un grande differenza perché è lo stesso controllo esatto stavo facendo per altri nomi utente e password. Inoltre, la cosa più importante è che se gli altri guardano questo login.c-- dire, se mi passare questo al mio compagno, e si apre anche questo file, e leggono questo, si vedrà - va bene, perché ci sono queste righe di codice qui? Questo non è, ovviamente, qualcosa che dovrebbe essere nel vostro programma. In alcuni programmi - come ogni software proprietario che non è open-source - non può mai vedere queste righe di codice. Qualcosa di simile a Skype o qualcosa del genere - per tutto quello che sai, Skype è sul vostro computer e non vi è solo una specifica combinazione di nome utente-password che il login a Skype in qualche modo speciale. Non sappiamo su di esso, e la gente non sa su di esso, perché non si arriva a leggere il codice sorgente per vedere che c'è questo buco. Ciò che noi chiamiamo questo - anche se questo non è un esempio molto intelligente - questo si chiama una porta sul retro. Se si pensa alla porta sul retro della vostra casa. Qui, se mi confermate con 'Rob' i nomi utente o 'tommy,' che sarebbe come usare la "porta d'ingresso". Questo è il modo in cui dovrei accedere in modo sicuro. Ma se entrare con nome utente e password - allora che sta usando la "porta sul retro." Non era il modo intenzionale per entrare nel programma, ma funziona ancora. E la gente, in generale, non sono tenuti a sapere di queste porte posteriori. Stiamo andando a migliorare la situazione. Facciamo tornare questo al nostro login.c originale, e diamo un'occhiata al nostro nuovo compilatore. Va bene. Tutto qui è esattamente la stessa. Stiamo leggendo l'intero file in un buffer. Tutto qui è lo stesso. Abbiamo appena compilato il file. Ma ora ho questa grande se qui che dice, se il file che mi capita di compilazione è login.c, poi faccio qualcosa di speciale. Che cosa è che qualcosa di speciale? Vedo qui una stringa chiamata 'hack', e guardando queste righe di codice - queste sono le stesse linee di codice - Credo che ho fatto uso 'ihack' e non 'ihacked' prima - guardando queste righe di codice, sono esattamente le stesse linee di codice che ho avuto in login.c prima. Ma ora, invece di avere in login.c, Ho intenzione di metterli nel mio compilatore. Queste sono le righe di codice che sto andando a voler inserire nel login.c. Queste righe di codice - il buffer che originariamente tenuto la mia login.c non è più intenzione di essere abbastanza grande, perché ora voglio inserire anche questo hack al centro del mio programma. Tutto questo sta facendo è la creazione di un nuovo buffer che è abbastanza grande - sia per il file originale e le righe di codice - l'hack - che voglio inserire lì. Qui c'è qualcosa da notare - char * pattern = "/ / vietare loro di accedervi!" Se guardiamo indietro a login.c, vediamo qui questo commento - vietare loro di accedervi! In login.c, questo commento appare del tutto innocuo, in modo da non sospettare alcun intento malevolo solo con questo commento. Ma nel nostro compilatore, ci sono specificamente andando a cercare questa riga di codice, e poi quando lo troviamo - queste righe di codice si inserisce il nostro trucco in quella posizione. Quindi, stiamo scorrere il login.c intero, stiamo inserendo che trucco esattamente dove si dice negare loro l'accesso, e poi ci sta compilando - non il login.c originale ma il login.c nuovo con quel trucco inserito a destra al 'negare loro l'accesso.' Ora voglio compilare il mio nuovo compilatore con quel trucco coinvolti. Non ho intenzione di usare Clang, quindi cerchiamo di copiare il compilatore che abbiamo usato prima e l'uso che - così, compilatore compiler.c compile.c-o evil_compiler. Ora il nostro compilatore male - se usiamo il nostro compilatore male per compilare qualsiasi altro file, il file verrà compilato come dovrebbe. E 'del tutto normale. Ma se usiamo il nostro compilatore male per compilare login - così, / evil_compiler login.c-o-lcs50 login. - guardando login.c ancora una volta, non c'è assolutamente niente qui dentro. E 'il nostro solito' se e 'o rob o tommy siamo in, altrimenti siamo fuori'. Ma quando si corre il nostro eseguibile, questo funzionerà come di consueto. Esecuzione di nuovo - hacker, LOLihackyou - Hacked! Ora è possibile accedere. Basta guardare login.c, non si direbbe che qualcosa è sbagliato. Ma il compilatore che viene usato per compilare login.c è specificamente progettato per inserire questo hack nel programma. Abbiamo solo spostato il nostro problema originale. In origine, abbiamo avuto queste righe di codice in login.c che se qualcun altro li guardò, sarebbero come, perché sono questi qui? Ora, se qualcuno capita di guardare il nostro compilatore, faranno guardare a queste righe di codice e dire, perché sono questi qui? Quindi, non abbiamo completamente risolto il nostro problema. Ma possiamo usare questa idea di nuovo. Dando uno sguardo alla nostra terza versione del compilatore, è la stessa idea. Abbiamo letto l'intero file in un buffer di qui, si compila il file qui, e ho una specie di hack stringa qui dentro, a meno di notare il file che sto effettivamente l'hacking ora. Sono compiler.c pirateria non login.c. Ma cosa sto inserendo nel compiler.c? Sto inserendo questo codice, che è il codice esatto del nostro compilatore precedente, che aveva lo scopo di inserire il codice in login.c. Ecco la nostra se login.c file di strcmp e quindi inserire nella login.c nostra roba hack. Questo nuovo compilatore ha lo scopo di creare un compilatore che è destinato a compilare login maliziosamente. Vedremo perché questo ci aiuta. Tutto il resto è lo stesso, in modo che funziona esattamente come ha funzionato con il nostro compilatore precedente. Ci sono solo l'iterazione di nostra compile.c intero. Ma ora invece di cercare 'negare loro l'accesso,' stiamo cercando 'compilare il file.' Dove si compila il file? Guardando alla nostra compiler.c del tutto innocente, è proprio qui in basso. Questo commento - compilare il file - di nuovo, che sembra del tutto innocuo. Ma, nella nostra versione e malizioso del compilatore, ci accingiamo a - a destra prima di quel commento - inserire questo codice che ha lo scopo di inserire il codice durante la compilazione login.c. Ci sono un sacco di livelli di riferimento indiretto qui. Facciamo non giochi. Anche in questo caso, si copierà il nostro compilatore originale. Ora, di compilazione - compilatore compiler.c compile.c-o evilest_compiler - e ora evilest_compiler. Evilest compilatore - se usiamo che per compilare il nostro compilatore, diamo effettivamente guardare. Evilest_compiler - portando sopra, tutta la strada fino alla versione 1 del nostro compilatore - versione 1 del nostro compilatore che è stato appena letto nel file e compilarlo. Qui, sappiamo che evilest_compiler - quando compila il file - sta per inserire il codice proprio qui prima di compilare il file, e che il codice sta per apparire esattamente come il codice della seconda versione del nostro compilatore che ha fatto questo. Questo codice, che è destinato a entrare nel login, sta per essere inserita nel nostro compilatore compilatore evilest. Usiamo evilest_compiler per compilare il nostro compilatore. Ora useremo compilatore, tornare verso il login, e ricordare questo login.c non ha assolutamente nulla di sospetto in esso. Ma usando il nostro compilatore per compilare login.c, rob, thisiscs50, il successo. Dell'hacker login Andiamo, LOLihackyou, Hacked! Ora è possibile accedere. Riconoscere che questo era diverso dalla versione 2 del nostro compilatore. Il compilatore che usiamo - andiamo avanti indietro - copia di login - cerchiamo di portare il nostro compilatore tornare qui. Rimozione compilatore evilest. Tutto quello che abbiamo lasciato ora è compilatore. Se guardiamo compiler.c, non c'è assolutamente nulla in là che sembra dannoso in alcun modo. Se guardiamo login.c, non c'è assolutamente nulla qui dentro che sembra dannoso in alcun modo. Ma, quando usiamo il nostro compilatore per compilare login.c, si ottiene la versione hackabile di login.c. Quando abbiamo usato il nostro compilatore per compilare una nuova versione del compilatore, si ottiene la versione hackable del compilatore. Ora, se usciamo e distribuire la nostra eseguibile del compilatore, e nessuno saprà che ci sia qualcosa di dannoso su di esso. Questo è in realtà così in - non riesco a ricordare l'anno - Ken Thompson, e ha vinto il Premio Turing - se non si ha familiarità con il Premio Turing, è quasi sempre definito come la Premio Nobel di informatica, è così che io lo definiscono. Ken Thompson ha tenuto un discorso in cui ha ricevuto il suo premio Turing chiamato "Riflessioni sulla fiducia fiducioso." In sostanza, questa era l'idea del suo discorso. Solo che invece di nostro compilatore, stava parlando GCC - solo un altro compilatore Clang come - e quello che stava dicendo è, come il nostro login.c, la nostra login.c sembra relativamente inutile ma parlava l'attuale UNIX login.c. Quando si effettua il login al vostro apparecchio, c'è qualche programma di login che è in esecuzione. Questo è stato l'account di accesso di cui stava parlando. Questo era fondamentalmente una sua idea. Ha detto che in GCC, che in teoria avrebbe piantato un bug - non è un bug, ma un codice maligno - che quando si compila la funzione di accesso - il file di accesso - sarebbe inserire una porta sul retro in modo che potesse andare assolutamente a qualsiasi sistema UNIX nel mondo ed accedete con un po 'di nome utente e password specifici. A quel tempo, GCC era più o meno il compilatore che ognuno utilizzato per nulla. Se qualcuno è successo di aggiornare GCC, poi avrebbero ricompilare GCC con il GCC, e si dovrebbe ancora ottenere una versione cattiva di GCC perché è stato specificamente compilato per riconoscere che si è ricompilare il compilatore. E se mai usare GCC per ricompilare un file login.c, allora sarebbe inserire questo porta sul retro che avrebbe potuto usare per accedere a qualsiasi computer. Questo era tutto teorico, ma - quella particolare circostanza era teorico, ma le idee sono molto reali. Nel 2003, c'è stato un esempio simile in cui - daremo uno sguardo a questo file, e non ha assolutamente nulla a che fare realmente con esso, ma il bug è simile. Questo file definisce solo una funzione chiamata divisione. Ci vuole un argomento a, b un argomento, e l'intento è quello di fare a diviso b. Ma lo fa un po 'il controllo degli errori, così sappiamo le cose sono strano se b succede uguale a zero. Se b è zero, allora abbiamo diviso questo in 2 casi. Si potrebbe già vedere il bug. Il primo caso - se a è zero, allora stiamo facendo a zero diviso per zero, e ci limitiamo a dire che è indefinito. Il secondo caso - se è diverso da zero, allora si tratta di qualcosa di simile a 1 diviso per zero, e ci basta chiamare che l'infinito. Altrimenti torniamo al solito a diviso b. Ed ecco, stiamo avviando questi 3 casi, e noi effettivamente eseguito divide - lo sgrida per me - così, ignorando gli avvertimenti di clang - fine di non void funzione - a quanto pare non è stato compilato in anticipo. Ritorno 0. Fai dividono - tutto bene. Con. / Divisione, vediamo 3, Infinity, Infinity. Zero diviso per zero non hanno fatto ritorno infinito. E se non avete capito il bug ancora - o non lo videro prima - si vede che stiamo facendo a = 0. Probabilmente si voleva dire a == 0. Probabilmente. Ma, questo era in realtà qualcosa che, ancora una volta, nel 2003, il kernel di Linux - così la nostra appliance utilizza il kernel Linux - qualsiasi sistema operativo Linux utilizza il kernel Linux - quindi un errore molto simile a questa si presentò. L'idea alla base di questo bug è stato - ancora una volta, c'era solo qualche funzione che è stato chiamato, e lo ha fatto un po 'di controllo degli errori. Ci sono stati alcuni fattori specifici che questo errore di controllo - avrebbe dovuto essere, come, va bene, non è possibile chiamare questa funzione con un divisore di 0. Così, ho intenzione di tornare solo qualche errore. Tranne, non era così innocente come solo la fissazione di un pari a 0. Invece, questa riga di codice finito per fare qualcosa di più come utente amministratore =. Oppure user = superuser. E 'stato un innocente - a prima vista - errore in cui avrebbe potuto appena stato ragionevole che ho solo voluto raccontare qualcosa di specifico se l'utente è capitato di essere l'amministratore del superutente. Ma poi ri-pensarci, la persona che voleva che l'aspetto di un semplice errore di battitura, ma se il codice fosse stato effettivamente rilasciato, allora si sarebbe stati in grado di incidere in qualsiasi sistema passando un flag specifico - in questo caso b = 0 - e sarebbe automaticamente rendere l'utente l'amministratore, e poi si ha il pieno controllo. Questo è accaduto nel 2003. E così è accaduto che l'unico motivo che è stato catturato era perché ci è capitato di essere un qualche sistema automatizzato che notato il cambiamento in questo file che non dovrebbe mai sono stati modificati da un essere umano. Il file deve essere stato generato automaticamente. E così è accaduto che qualcuno ha toccato - bene, la persona che ha voluto incidere toccato quel file, e il computer preso che toccare. Quindi, hanno cambiato questo e solo in seguito resi conto di quale disastro sarebbe stato se questo era uscita nel mondo reale. Si può pensare che - tornando al nostro esempio compilatore - anche se non possiamo vedere - guardando il codice sorgente - che qualcosa in particolare è sbagliato, se effettivamente guardare il codice binario del compilatore, vedremmo che qualcosa non va. Ad esempio, se si esegue le corde funzionamento - che è solo andando a guardare su un file e stampare tutte le stringhe che riesce a trovare - se corriamo stringhe sul nostro compilatore, vediamo che una stringa che si trova è questo strano - else if (strcmp (username, "hacker") - bla, bla, bla. Se qualcuno è successo a essere paranoici sufficiente per non fidarsi loro compilatore, potevano correre stringhe e vedere questo, e poi si sa che c'era qualcosa di sbagliato con il binario vero e proprio. Ma, stringhe era inevitabilmente qualcosa che è stato compilato. Quindi, chi può dire che il nostro compilatore non solo dispone di codice più speciale che dice, se le stringhe viene mai eseguito sul nostro compilatore, non emettono tutti che il codice maligno. La stessa idea con se vogliamo smontare il file - abbiamo appreso che l'assemblatore ci porta da codice assembly in un codice macchina - possiamo andare nella direzione opposta - objdump-d compilatore - ci darà il montaggio del nostro codice. Guardando a questo, è piuttosto criptico, ma se volessimo, potremmo guardare attraverso questa e la ragione, aspetta, c'è qualcosa da fare qui dentro che non dovrebbero essere in corso, e poi ci riconosciamo che il compilatore sta facendo qualcosa di dannoso. Ma, proprio come le stringhe, chi ci dice che non era speciale objdump-carter. In sostanza, si tratta di non ti puoi fidare nulla. Il punto della carta chiamata "Fiducia Trusting" è in generale, abbiamo fiducia nella nostra compilatore. Si compila il codice e si aspettano di fare ciò che si chiede di fare. Ma, perché si dovrebbe fidarsi il compilatore? Lei non ha scritto il compilatore. Tu non sai quello che il compilatore è necessariamente effettivamente facendo. Chi può dire ci si può fidare? Ma anche allora, beh, forse possiamo fidarci il compilatore. Ci sono decine di migliaia di persone che hanno guardato questo. Qualcuno deve aver riconosciuto che stava succedendo qualcosa con il compilatore. Che cosa succede se andiamo 1 livello più profondo? Potrebbe anche essere il processore. Ridicolo come potrebbe essere, forse c'è qualche dipendente canaglia di Intel che crea questi processori che ogni volta che il processore si accorge che si sta eseguendo un comando che è lo scopo di accedere al computer, il processore accettare qualche specifico nome utente e una password. Sarebbe selvaggiamente complicato, ma qualcuno potrebbe farlo. A quel punto, sono davvero intenzione di aprire il computer per guardare il processore e utilizzare un microscopio a riconoscere che questi circuiti non sono allineati come dovrebbero essere? Nessuno è mai andare a prendere quel errore. Ad un certo punto, non resta che rinunciare a qualcosa e la fiducia. La maggior parte delle persone si fida il compilatore a questo punto. Vale a dire non necessariamente che si dovrebbe. Guardando un video un po 'infame - [Musica drammatica gioco] [Si tratta di un sistema UNIX. So che questo.] [Si tratta di tutti i file -] Ha detto: "E 'un sistema UNIX. Lo so." Sostituire UNIX con qualunque sia il vostro sistema operativo preferito è - lei avrebbe potuto dire: "E 'un sistema Windows. lo so." E 'una dichiarazione del tutto priva di senso, ma per quanto ne sappiamo, le capita di conoscere una backdoor nel sistema UNIX. Sa un po 'di combinazione username / password che effettivamente lasciarla fare quello che vuole. Bene. La morale di oggi è fondamentalmente non ti puoi fidare nulla. Anche le cose si scrive - che non ha scritto il compilatore. Il compilatore potrebbe essere un male. Anche se avete fatto scrivere il compilatore, la cosa che è in esecuzione il compilatore potrebbe essere un male. (Ride) Non c'è molto che si può fare. Il mondo è condannato. Torna a David! [Applausi] [David] Grazie. E 'stato davvero deprimente. Ma in effetti, Rob è corretto. Noi in realtà non hanno una soluzione a questo, ma siete in procinto di ottenere alcune soluzioni ad alcune difese più comuni. In previsione di questo, ciò che Nate e ho fatto dietro le quinte c'è è sapere che ci sono così tanti portatili in questa stanza, abbiamo sniffing tutto il traffico wireless passa attraverso questa stanza per gli ultimi 20 minuti durante il discorso di Rob, quindi stiamo andando a prendere una pausa di due minuti qui. Nate sta per creare, e poi andremo a parlare di tutte le cose abbiamo potuto trovare. (Risate) Allora, forse ho esagerato un po 'solo per il gusto del dramma, ma avremmo potuto essere sniffing tutto il traffico wireless perché in effetti, è così facile. Ma ci sono anche modi che si possono difendere contro questo, e così con questo, Ti do Nate Hardison. >> [Nate] Sweet. (Applausi) [Nate] Grazie, amico. Apprezzo il grido fuori. Va bene! E 'settimana di gioco. Siete voi ragazzi eccitati? Speriamo che sarà un grande gioco il Sabato. Vi immaginate ragazzi a questo punto - dato che si dispone di un quiz il Mercoledì tutto sul codice, e ci siamo seduti in una lezione meravigliosa da Rob con un sacco di codice C in esso - sono forse un po 'stanco di codice. In questa parte, non stiamo effettivamente andando a toccare alcun codice di sorta. Stiamo solo andando a parlare di una tecnologia che si usa ogni giorno, spesso per molte, molte ore al giorno, e parleremo delle implicazioni con la sicurezza che ci sono. Abbiamo parlato molto di sicurezza nel corso del semestre, e abbiamo iniziato con un po 'di crittografia. [Lv Bdoh vwlqng!] E mentre voi siete probabilmente super eccitato da note di passaggio tra di loro in classe con un cifrario di Cesare come questo, in realtà, ci sono un po 'più divertente da avere quando si sta in realtà parlando di sicurezza e questo genere di cose. Oggi, stiamo andando a coprire alcune tecnologie che le persone utilizzano effettivamente nel mondo reale di fare ogni sorta di cose da sniffing dei pacchetti delle persone realmente in corso e irruzione in conti bancari delle persone e tutto il resto. Si tratta di strumenti legittimi che stiamo parlando con l'eccezione di uno strumento eventualmente. E voglio solo fare una dichiarazione di non responsabilità veloce. Quando si parla di queste cose, stiamo parlando di loro in modo da sapere cosa c'è là fuori, e tu sei a conoscenza di come essere sicuri quando si sta utilizzando il computer. Ma sicuramente non si vuole implicare che si dovrebbe usare questi strumenti nel dormitorio o la tua casa, perché si può incorrere in un sacco di problemi grandi. Questa è una ragione oggi che in realtà non sono stati annusare i pacchetti. Bene. Lunedi scorso, abbiamo parlato di biscotti, e HTTP e autenticazione, e come Firesheep apre questa grande porta al tuo account Facebook, al tuo account Hotmail - se qualcuno sta ancora utilizzando Hotmail - e molti altri account. Un sacco di questa roba sta per costruire al largo di che, ma prima, voglio fare un giro veloce di come Internet è evoluto nel tempo. Già negli anni '90, voi ragazzi potrebbe essere ricordato effettivamente collegare il tuo computer con uno di questi. Ora, noi non lo facciamo così tanto più. Si scopre che, in realtà, al fine di collegare un cavo Ethernet nel mio computer portatile, Ora ho di usare una di queste schede, che è pazzesco. Invece, nel 1997, abbiamo avuto questa nuova tecnologia divertimento è venuto fuori che è noto come IEEE 802.11, quindi questo è lo standard internet wireless L'IEEE è questo organo di governo che dà su tutti i tipi di - pubblica tutti i tipi di norme in relazione ai computer. I 802 standard sono tutti di tecnologie Internet. 802,3 così, per esempio, è lo standard Ethernet, 802.15.1 credo sia lo standard Bluetooth, e 802.11 è tutto su Internet senza fili. Nel 1997 questo è venuto fuori. Non riusciva a prendere piede subito. Non è stato fino al 1999 e lo standard 802.11b è venuto fuori che ha regalato veramente popolare. Quanti di voi ricordano quando i computer ha iniziato a venire fuori e wi-fi su di loro? Questo era un po 'freddo, eh? Mi ricordo di ottenere il mio primo laptop al liceo, e aveva una scheda wireless in esso. Mio padre ha dato a me e diceva che avrei dovuto usare per le mie applicazioni di college e tutto il resto, e non avevo idea di come avrei fatto a guardare questa roba online. Ma per fortuna, ho avuto una scheda wireless, così che era piuttosto fresco. Al giorno d'oggi, vedrete anche 802.11g, che è uno degli altri molto popolare standard wireless che c'è là fuori. Sia b e g sono abbastanza obsolete, a questo punto. Qualcuno sa quale versione la maggior parte delle persone sono in questo momento se stanno comprando nuovi router wireless e cose del genere? N. Esattamente. Bingo. E si scopre che la norma CA è appena uscito in forma di progetto, e ci sono altre versioni sulla strada. Con ciascuno di questi standard quello che stiamo guadagnando più larghezza di banda, Altri dati a una velocità maggiore. Queste cose continuano a cambiare abbastanza rapidamente. E 'anche così che dobbiamo comprare più router e tutta quella roba divertente. Parliamo di ciò che la comunicazione senza fili è in realtà al suo interno. Con Ethernet e quei vecchi modem dial-up, effettivamente avuto questa roba che si collegato al computer, e poi inserito in una sorta di modem, e poi collegato ad una presa a muro. Hai avuto questa connessione via cavo, giusto? Il punto di wireless è sbarazzarsi di questa roba. Per fare questo, quello che abbiamo è essenzialmente una comunicazione radio in cui il nostro router wireless - designati dalla nostra piccola icona wireless - è connesso a Internet con questo freccia piena indica un qualche tipo di connessione cablata, ma quando ci si connette al router wireless si sta usando quasi come un walkie-talkie tra il computer e il router senza fili. La cosa veramente interessante di questo è che si può muoversi. Si può portare il computer in tutto Sanders, andare navigare in rete, quello che vuoi, proprio come voi tutti conosciamo ed amiamo, e non si devono mai essere collegato a nulla. Per questo lavoro, abbiamo sia la ricezione e la trasmissione. E 'davvero così walkie-talkie. Questo router wireless - che in Sanders è seduto sotto di questa fase, proprio qui - è sempre trasmissione e la ricezione, trasmissione e la ricezione, e allo stesso modo, i computer sono tutti facendo quello stesso genere di cose, anche. Solo che non può sentire. L'altra cosa che si può fare è che si può avere più computer parlando con lo stesso router wireless. Più si è vicini ad un router - e di nuovo, si tratta di una comunicazione radio - quanto più si è, meglio il segnale è, meglio il computer 'sente' il router e può comunicare con Internet. Se voi siete sempre al vostro dormitorio, a casa tua e ti stai chiedendo perché il segnale è male, probabilmente è perché a). non sei molto vicino al router, o b). c'è qualcosa tra te e il router come un muro di cemento o qualcosa del genere che non lascia quelle onde radio attraversano. Parliamo un po 'di cattivi perché come wi-fi. I cattivi ragazzi amano wi-fi per alcuni motivi. Ecco il nostro uomo brutto male proprio lì. Una ragione per cui questo ragazzo cattivo ama wi-fi è perché, per impostazione predefinita, un sacco di router wireless arriva e quando si impostare, stanno in chiaro. Questo è stato un problema, e ci sono stati casi - più istanze, ora - in cui il cattivo si presenta a casa di qualcuno, si accorge che c'è un chiaro wi-fi a cui si può collegare. Si collegano al wi-fi, e poi iniziare a scaricare tutti i tipi di cose divertenti. E non stai scaricando gattini, non stanno scaricando cuccioli. Questo è come BitTorrent. Questo è il brutto del più cattivo. Ci sono stati casi in cui l'FBI ha anche ottenuto coinvolti pensando che la persona che possiede la casa è in realtà quello andare là fuori e il download di cose che in realtà non dovrebbe essere. Avendo chiaro wi-fi non è sicuramente qualcosa che si vuole fare, se non altro per non avere l'FBI bussare alla tua porta. Un'altra ragione per cui i cattivi amano wi-fi è la ragione per cui David parlato in precedenza durante la pausa. Perché è una comunicazione radio al suo interno, se si conosce il canale, è possibile ascoltare la stazione radio. Per esempio, se c'è un diritto brutta seduto in mezzo a destra vicino al punto di accesso, proprio accanto a questo router wireless, il cattivo può inserirsi in tutto il traffico wireless che proviene da tutti i computer. In effetti, questi ragazzi - questi pochi fortunati che sono qui in prima fila - perché sono super-vicino a tutti questi router wireless che siedono proprio sotto il palco, sarebbero in grado di sentire il traffico di tutti in questa stanza tutta se si è connessi al wi-fi e iniziare la navigazione attraverso questi punti di accesso. Non è molto difficile sedersi se stessi in una buona posizione per annusare e capire quello che gli altri stanno facendo. E 'una cosa da tenere a mente, soprattutto se non siete sicuri di dove il punto di accesso è, e si sta navigando dire, in uno Starbucks. Si scopre che sniffing e tutto il resto non è poi così difficile da fare. C'è un programma chiamato tcpdump che scarica tutti i tipi di traffico TCP ed è possibile eseguirlo abbastanza semplice - proprio come ho fatto questa mattina. Ecco un po 'di una discarica, ed ecco una parte del traffico che stava arrivando la mia rete in quel momento. Potete vedere - se si strabismo davvero difficile - c'è un po 'di Spotify in là. In cima a tcpdump - perché questo è una specie di dolore da usare - c'è un programma chiamato Wireshark che fasci il tutto in una bella interfaccia grafica. Wireshark è super-comodo, quindi se si va a prendere lezioni di rete, questo è uno strumento che si arriva ad amare in quanto aiuta a sezionare tutti i pacchetti che sono galleggianti intorno là fuori. Ma può essere utilizzato anche per cattiva. E 'molto semplice basta scaricare il programma, avviare in su, avviare un'acquisizione di rete, e vedere tutto quello che sta succedendo - e filtrare e fare ogni sorta di cose divertenti con esso. L'altra cosa che si può fare con la comunicazione wireless non solo è possibile intercettare, ma si può anche imparare a vite con la rete e iniettare le proprie informazioni di controllare l'esperienza che gli altri sulla stessa rete senza fili sono sempre. Diamo uno sguardo a questo. Ecco Firesheep - che abbiamo conosciuto e amato dalla settimana scorsa - che è che la tecnologia intercettazioni. Se, per esempio, abbiamo voluto avere attivamente il nostro andare cattivo ragazzo e pasticciare con uno di questi computer, in questo scenario abbiamo un computer cercando di andare surf per harvard.edu. Quello che succede è, il computer invia prima un messaggio al router wireless e dice: hey, voglio andare www.harvard.edu visita. Dire per qualche motivo stanno cercando di ottenere informazioni sul gioco questo fine settimana. Cattivo, dato che lui è seduto al centro, proprio accanto a quel punto di accesso, è possibile vedere che la comunicazione proveniente dal computer al router, e lui lo sa, "Aha! Qualcuno sta per harvard.edu." (Ride malignamente) Ci sarà questa latenza mentre la comunicazione va dal router fuori a Internet per andare a trovare la pagina web a harvard.edu-- proprio come voi tutti che dopo aver fatto il tuo pset PHP - e così il cattivo ha un po 'di tempo, un po' di finestra, in cui può rispondere con un po 'di roba. Diciamo che questo cattivo ragazzo, naturalmente, è un Yaley. Lui risponde con harvardsucks.org. Boo! Bad, cattivo! Bad Yaley! O, peggio ancora, si potrebbe rispondere con quello. [Http://youtu.be/ZSBq8geuJk0]. Lascio voi ragazzi a capire di cosa si tratta. Questo è in realtà una tecnologia chiamata Airpwn! che ha debuttato a una delle conferenze di sicurezza qualche anno fa. Con Airpwn! siete in grado di iniettare in realtà il traffico di nuovo in rete. I computer che cercavano di uscire a Internet e cercare di arrivare a Google.com, a Facebook.com, a harvard.edu vedere la risposta dannoso entrare e assumere immediatamente, va bene, questa è la risposta che stavo aspettando e finiscono per ottenere i contenuti da harvardsucks.org o nameyourfavoriteshocksite.com, e si può vedere quanto velocemente le cose si deteriorano. Tutte queste genere di cose non si può fare con queste connessioni via cavo, perché con una connessione cablata è difficile spiare al traffico. Se io sono un cattivo ragazzo e su una fine è il tuo computer e l'altra estremità è il vostro router - modem - l'unico modo per entrare in connessione tra quello è quello di unire in realtà il mio computer in qualche parte nel mezzo o fare qualcosa di diverso con il router, a valle qualcosa. Ma con il wireless, può essere facile come seduto in prima fila di una classe, e si può fare ogni sorta di cose brutte alla gente nella parte posteriore. Parliamo di come si potrebbe difendere contro alcune di queste cose. Le persone che hanno sviluppato gli standard wireless - 802.11 - non sono persone stupide da qualsiasi tratto di immaginazione. Questa è una tecnologia fredda e quando ha debuttato nel 1999, sono venuti fuori con questo standard chiamata WEP. Potete vedere qui quando si tenta di partecipare a una rete wireless, si dispone di tutta una serie di diverse opzioni di protezione. E 'una specie di dolore, perché ci sono 6 tutti insieme e non fa davvero senso che da 1 a unirsi. Questo 1 in alto è il primo che si avvicinò con chiamata WEP. WEP è l'acronimo di Wired Equivalent Privacy, credo, Non Wireless Encryption Protocol, che è un termine improprio comune. Perché cerca di dare equivalente privacy e la protezione di sicurezza equivalente a quella di una rete cablata Con WEP finisce sempre lì è, si dispone di una semplice password di poco che si digita e che serve per crittografare tutte le comunicazioni tra il computer e il router. Qual è il problema con WEP però? La password con WEP è molto breve, e anche tutti usano la stessa password esatta,  e quindi è veramente facile da decifrare. Quindi molto rapidamente la gente a capire che il WEP era un problema, e l'unico motivo che vedete si vede ancora in questo piccolo uomo è - ci sono alcuni vecchi sistemi che fanno uso di WEP - ciò che si dovrebbe invece cercare sono la WPA e WPA2 anche norme che sono stati rilasciati in seguito. Questi sistemi sono un andare molto meglio a protezione su Internet senza fili. Detto questo, che ancora hanno un po 'di hackability. Ci sono strumenti di là fuori che può fare questo andare. Una cosa, in particolare, che può essere brutto è che se ci si connette e autenticata a un router wireless e si utilizza una sorta di comunicazione criptata, si scopre che un hacker può facilmente inviare un singolo pacchetto di staccare dal router, e una volta che l'ho scollegato possono poi ascoltare - possono intercettare i pacchetti, come si tenta di ristabilire la connessione con il router. E con queste informazioni possono poi andare a decifrare il resto della vostra comunicazione. Questo non è affatto alcun tipo di sicurezza al di là di ogni immaginazione. L'altra cosa che si può fare quando si è la creazione di reti wireless o sei li unisce è - si nota che qui quando Sto entrando in questa rete, chiede per il nome della mia rete. Questo è anche conosciuto come il SSID. E vedete qui che a destra ho una casella che mi mostra i nomi SSID disponibili. C'è una Università di Harvard, un CS50 e CS50 una rete personale. Ora, quanti di voi sapevano che c'era un CS50 rete personale in giro? Alcuni di voi. Non tutti voi. Il problema con questo, naturalmente, è che se non avessimo messo questo sulla nostra lista di SSID, nessuno avrebbe saputo su di esso più probabile. Spero. A meno che voi ragazzi stanno tutti cercando di rompere nel nostro wireless. Ma questo è qualcosa che si può fare questo è davvero importante quando si sta impostando un router a casa. Questo probabilmente non accadrà per alcuni anni per molti di voi, ma di tenere presente che il mantenimento di tale SSID fuori di lì e non anche di denominazione qualcosa di super-comune vi aiuterà a mantenere più sicuro nel lungo periodo. Un paio finale di cose che puoi fare. Uno è HTTPS. Se siete in uno Starbucks, se siete in un pubblico wi-fi area e si decide di accedere al tuo conto in banca, accedere a Gmail, Facebook, fare in modo che questi collegamenti sono in corso su HTTPS. Si tratta di un ulteriore livello di sicurezza, un ulteriore livello di crittografia. L'unica cosa da tenere a mente è qui, quanti di voi hanno mai cliccato attraverso quella grande, schermo rosso che dice: "Questo sito web potrebbe essere un male." So di avere. E 'probabilmente quando siete tutti navigando per andare a vedere Patria o qualcosa del genere, vero? Gia '. (Risate del pubblico) Si '. Ci si va. Sappiamo chi sta guardando Patria. Che grande, schermo rosso proprio lì spesso indica che qualcosa di strano sta accadendo. A volte è solo il sito stesso non è sicuro, ma lo stesso grande, schermo esce il rosso quando le persone stanno cercando di supporto di rete attacchi su di voi. Quindi, se si vede che grande, schermo rosso venire a Starbucks, non fare clic attraverso di essa. Cattive notizie. Cattive notizie porta. L'ultima cosa che si può guardare è una sorta di VPN. Questo VPN è disponibile attraverso Harvard - vpn.fas.harvard.edu-- e ciò che fa è in realtà stabilisce una connessione sicura tra te e Harvard, imbuti il ​​traffico attraverso di essa, e in questo modo se si sta seduti in un posto come uno Starbucks è possibile connettersi a Harvard, ottenere che il traffico sicuro, e quindi passare ad Harvard. Anche in questo caso, non infallibile. Le persone possono mettersi in mezzo. Possono iniziare a rompere, ma questo è molto più sicuro che fare affidamento sulla sicurezza del wi-fi da solo. Bene. In sintesi, quando si è la creazione di reti wireless, quando si sta andando fuori di usare wireless in pubblico - che si tratti di uno Starbucks, che si tratti di Five Guys, che si tratti di b.good, una cosa del genere - ovunque si hanno wi-fi - essere consapevoli dei vostri dintorni. Essere consapevoli di ciò che la gente può fare. Ed essere al sicuro. Non accedere al tuo conto in banca. Potrebbe essere un brusco risveglio se qualcuno si presenta con la propria password in seguito. Con questo, andare cremisi! E ho intenzione di cambiare le cose ripercorrere a David una parola definitiva. (Applausi) [David] Ho pensato di condividere una cosa per esperienza personale. Uno strumento come si potrebbe giocare con - anche se Apple ha in gran parte cancellata la questione se hai aggiornato il software dal - ma verso la fine di non essere veramente in grado di fiducia del software che usiamo, e ai punti di Nate, essendo in grado di annusare un po 'di quello che fanno gli altri là fuori - questo era un pezzo di software che è uscito circa un anno e mezzo fa. [IPhoneTracker] [http://petewarden.github.com/iPhoneTracker/] Da qualche tempo, iTunes - prima di iCloud, quando eri la sincronizzazione dei vostri iPod o iPhone o oi vostri iPad con iTunes - nell'interesse dei backup, che cosa il vostro iPhone e questi altri dispositivi hanno fatto per un po 'di tempo è facendo uso di dati GPS. Voi tutti sapete forse che i vostri iPhone e androidi e Windows Mobile e che in questi giorni è possibile tenere traccia di dove ci si trova l'interesse di mostrare mappe e simili - bene ciò che Apple e queste aziende fanno gli altri è in genere traccia un po 'ovunque sei effettivamente nell'interesse della miglioramento della qualità del servizio. Si, è possibile ottenere più pubblicità mirata e simili, ma due, possono anche capire dove ci sono hotspot wireless in tutto il mondo, e questo può aiutare con geo-localizzazione - una sorta di triangolazione della posizione delle persone. Per farla breve, tutti noi era stato a piedi antenne per una certa quantità di tempo. Purtroppo, Apple aveva preso la decisione di progettazione - o la sua assenza - per crittografare non queste informazioni quando veniva eseguito il backup in iTunes. E ciò che il ricercatore di sicurezza trovato era che questo era solo un file XML enorme - un enorme file di testo - seduto in software iTunes della gente, e se tu fossi solo un po 'curioso, si potrebbe andare a frugare la storia del vostro coniuge, la storia del vostro compagno di stanza, tuo fratello storia e simili, e grazie ad alcuni software libero, è possibile tracciare tutte queste coordinate GPS - latitudine e longitudine. Quindi, in realtà ho fatto con il mio telefono. Ho collegato il mio telefono, e abbastanza sicuro, la mia versione di iTunes non è crittografato, al momento, e quello che ho potuto vedere erano i miei propri modelli. Ecco gli Stati Uniti e ognuno di questi cerchi blu rappresenta dove mi è capitato di essere stato più di quei mesi precedenti di possedere questo telefono particolare.  Ho passato un sacco di tempo, ovviamente, nel nord-est, un po 'di tempo in California, una breve viaggio in Texas, e se poi ingrandire questa - tutto questo è una sorta di raffinato ed interessante, ma sapevo questo. La maggior parte dei miei amici lo sapeva, ma se ci si immerge in profondità, vedere dove trascorro la maggior parte del mio tempo nel Nord-Est. Se attaccarsi alcuni dall'aspetto familiare città - questo grande, macchia d'inchiostro blu è essenzialmente centrato sul Boston, e poi spendere un po 'di tempo in periferia si irradiano da Boston. Ma stavo anche facendo un po 'di consultare tale anno. E quest'anno è la costa orientale, e si può effettivamente vedermi e il mio iPhone in tasca viaggiando avanti e indietro tra Boston e New York Philadelphia e più in basso, oltre a spendere un po 'di tempo di vacanza sul capo, che è il braccio poco fuori. Quindi, ognuno di questi punti rappresenta circa il posto che era stato, e completamente a mia insaputa, tutta questa storia è stato seduto lì sul mio computer desktop. Se lo zoom indietro - questo in realtà era un po 'preoccupante. Ho avuto alcun ricordo di essere mai stato in Pennsylvania quel particolare anno. Ma anche se un po 'più difficile su di esso e ho capito, oh, era in realtà quel viaggio e abbastanza sicuro, il mio telefono mi aveva preso. Apple ha dato crittografato queste informazioni, ma anche questo è solo testimonianza di quante informazioni vengono raccolte su di noi, e con quanta facilità - nel bene e nel male - è accettabile. Uno dei take-away si spera di parlare di Rob, dal discorso di Nate e le immagini piccole come quella di oggi è solo quello di essere ancora più consapevole di questo in modo che, anche se - come al punto di Rob - we're sorta di vite, giusto? Non c'è molto che possiamo fare quando si tratta di alcune di queste minacce, ma alla fine della giornata dobbiamo fidarci qualcosa o qualcuno se vogliamo utilizzare effettivamente queste tecnologie. Almeno possiamo essere prendere decisioni informate e decisioni calcolati o meno in realtà dovremmo essere la selezione di questa considerazione particolarmente sensibile o in realtà dovremmo essere un po 'il sospetto che l'invio di messaggi istantanei  in un ambiente Wi-Fi come questo. Così, con quello detto, rimane solo un quiz, una lezione rimane. Ci vediamo il Mercoledì poi Lunedi. (Applausi ed esclamazioni) [CS50TV]