1 00:00:00,000 --> 00:00:02,750 [Powered by Google Translate] [Semana 10] 2 00:00:02,750 --> 00:00:04,750 [David J. Malan] [Harvard University] 3 00:00:04,750 --> 00:00:07,000 [Esta é CS50.] [CS50.TV] 4 00:00:08,520 --> 00:00:13,240 >> Tudo bem! Este é CS50, mas não por muito mais tempo. 5 00:00:13,240 --> 00:00:14,740 Este é o início da semana 10. 6 00:00:14,740 --> 00:00:18,780 Na quarta-feira temos o nosso teste, e depois próxima segunda-feira temos um bolo comemorativo 7 00:00:18,780 --> 00:00:22,030 como um círculo completo todo o caminho de volta de zero semana. 8 00:00:22,030 --> 00:00:25,200 Hoje, falamos de um dos meus temas favoritos, verdade seja dita - 9 00:00:25,200 --> 00:00:29,000 a de segurança e privacidade e as implicações de todo o hardware e software 10 00:00:29,000 --> 00:00:31,000 que todos nós usamos estes dias. 11 00:00:31,000 --> 00:00:33,300 Para ser honesto, há uma série de ameaças por aí 12 00:00:33,300 --> 00:00:35,430 que, se você realmente não parou para pensar sobre eles, 13 00:00:35,430 --> 00:00:36,920 eles são realmente muito assustador. 14 00:00:36,920 --> 00:00:40,070 Caso em questão - se algum de vocês já o download de um pedaço de software 15 00:00:40,070 --> 00:00:42,660 fora da Internet e instalado no seu computador, 16 00:00:42,660 --> 00:00:45,220 você já engajados em um grau significativo de confiança, certo? 17 00:00:45,220 --> 00:00:50,220 Não há nada de ter impedido o Skype, ou Chrome, ou qualquer peça de software 18 00:00:50,220 --> 00:00:54,770 você tenha instalado em seu computador, desde a simples exclusão de todos os arquivos do seu disco rígido; 19 00:00:54,770 --> 00:00:58,260 de carregar todos os arquivos do seu disco rígido para o servidor algum bandido; 20 00:00:58,260 --> 00:01:01,650 de ler todos os seus e-mails, a partir de interceptação de todas as suas mensagens instantâneas. 21 00:01:01,650 --> 00:01:05,040 Porque a realidade é hoje, com sistemas operacionais mais modernos 22 00:01:05,040 --> 00:01:10,040 há realmente não é muito de um muro entre os programas de software que instalar, 23 00:01:10,040 --> 00:01:14,220 e você e eu somos praticamente apenas o tipo de cruzar nossos dedos e tendo em fé 24 00:01:14,220 --> 00:01:17,750 que esse aplicativo que baixado de graça, ou que coisa que é 99 centavos, 25 00:01:17,750 --> 00:01:20,140 é realmente completamente benigno. 26 00:01:20,140 --> 00:01:23,090 Mas, como temos visto através de C, e agora PHP e JavaScript, 27 00:01:23,090 --> 00:01:25,420 com esta capacidade de nos expressar através de programação, 28 00:01:25,420 --> 00:01:30,300 você pode fazer mais qualquer coisa que você quer com um programa que um usuário a si mesmo poderia fazer. 29 00:01:30,300 --> 00:01:32,390 >> Então, hoje vamos nos concentrar sobre o assunto - 30 00:01:32,390 --> 00:01:35,360 não apenas algumas ameaças, mas também defesas. 31 00:01:35,360 --> 00:01:37,540 De fato, no mundo da segurança em geral, 32 00:01:37,540 --> 00:01:39,040 há um tipo de jogo de gato-e-rato, 33 00:01:39,040 --> 00:01:41,990 e Eu ouso dizer que os bandidos quase sempre têm uma perna para cima. 34 00:01:41,990 --> 00:01:45,880 Quando se trata de tomar partido de hardware e software em nossos próprios computadores pessoais, 35 00:01:45,880 --> 00:01:51,250 temos de perceber que um cara ruim simplesmente precisa encontrar um simples erro - 36 00:01:51,250 --> 00:01:56,150 uma exploração, um bug - em um pedaço de software que nós escrevemos ou está executando 37 00:01:56,150 --> 00:01:58,280 para que ele ou ela para assumir todo o nosso sistema. 38 00:01:58,280 --> 00:02:02,870 Por outro lado, nós - os bons - a necessidade de corrigir e corrigir todos os erros 39 00:02:02,870 --> 00:02:04,900 e evitar todas essas fraquezas. 40 00:02:04,900 --> 00:02:07,870 E assim, eu diria que, em geral, os bandidos têm a vantagem. 41 00:02:07,870 --> 00:02:10,840 Que classes como este e as classes subseqüentes são realmente sobre 42 00:02:10,840 --> 00:02:14,830 não são sobre o ensino como para travar as batalhas que esses bandidos fazem, 43 00:02:14,830 --> 00:02:18,220 mas são sobre como se proteger ou pelo menos como fazer uma decisão calculada 44 00:02:18,220 --> 00:02:22,970 que sim, eu sei que este pedaço de software poderia realmente ler cada um dos meus e-mails, 45 00:02:22,970 --> 00:02:27,040 mas eu estou bem com isso por causa do valor que me leva, por outro lado. 46 00:02:27,040 --> 00:02:31,060 >> Estou muito satisfeito de ser acompanhado por 2 das pessoas mais inteligentes que eu conheço - 47 00:02:31,060 --> 00:02:33,060 Rob Bowden e Nate Hardison. 48 00:02:33,060 --> 00:02:36,850 Rob está prestes a levar-nos para um passeio pelo menor nível de etiquetas de segurança - 49 00:02:36,850 --> 00:02:42,470 do compilador que, até agora, todos nós temos vindo a amar e confiar. Rob Bowden. 50 00:02:42,470 --> 00:02:47,790 [Aplausos] 51 00:02:47,790 --> 00:02:50,280 >> [Rob] Tudo bem. David tem praticamente tomado a minha lengalenga toda 52 00:02:50,280 --> 00:02:52,320 que eu estava indo para introduzir com, mas - 53 00:02:52,320 --> 00:02:58,070 Várias semanas atrás, você viu o exemplo de um ataque de estouro de buffer 54 00:02:58,070 --> 00:03:01,900 que é um exemplo de um hacker hacker em algum pedaço de software 55 00:03:01,900 --> 00:03:06,060 que eles não devem ser invadido. 56 00:03:06,060 --> 00:03:09,690 O outro lado desta 57 00:03:09,690 --> 00:03:14,470 é às vezes você tem um software que é malicioso em si. 58 00:03:14,470 --> 00:03:17,070 Ele não precisa mesmo de ser cortado. 59 00:03:17,070 --> 00:03:20,670 A pessoa que escreveu o software quer hackear você. 60 00:03:20,670 --> 00:03:22,190 >> Vamos apenas ir direto para o código, 61 00:03:22,190 --> 00:03:28,560 dar uma olhada no "login.c". 62 00:03:28,560 --> 00:03:33,390 Aqui, um programa bobo que valida um nome de usuário e senha combinação. 63 00:03:33,390 --> 00:03:39,420 Aqui você deve ser definitivamente ficar confortável com C novamente para o quiz. 64 00:03:39,420 --> 00:03:43,470 Primeiro, estamos usando cordas começar a descrever o nome de usuário, 65 00:03:43,470 --> 00:03:46,280 então nós estamos usando a corda get para pegar a senha, 66 00:03:46,280 --> 00:03:50,680 e então nós temos algumas verificações triviais de justo, é o nome de usuário "roubar"? 67 00:03:50,680 --> 00:03:52,710 E é a senha "thisiscs50"? 68 00:03:52,710 --> 00:03:56,900 Ou, é o nome de usuário "Tommy" ea senha "i <3javascript"? 69 00:03:56,900 --> 00:03:58,980 Se algum deles for o caso, 70 00:03:58,980 --> 00:04:01,980  então nós estamos indo só para imprimir o "Sucesso", e então nós temos acesso. 71 00:04:01,980 --> 00:04:07,690 Caso contrário, vamos para imprimir "inválido login" e depois, é claro, 72 00:04:07,690 --> 00:04:11,120  Como a memória malloc esboço cordas, o nome de usuário e senha que livre. 73 00:04:11,120 --> 00:04:15,560 Este é um programa de login trivial, 74 00:04:15,560 --> 00:04:18,110 e se você pensar sobre quando você entrar no aparelho, 75 00:04:18,110 --> 00:04:22,350 é bastante semelhante - ou até mesmo login em seu computador - 76 00:04:22,350 --> 00:04:24,930 há apenas alguns programa de login, que é o que lhe dá acesso. 77 00:04:24,930 --> 00:04:31,840 Aqui, acontece que temos hard-coded 'roubar', 'thisiscs50', 'Tommy', 'i <3javascript', 78 00:04:31,840 --> 00:04:34,950 mas provavelmente há algum arquivo em algum lugar do seu sistema operacional 79 00:04:34,950 --> 00:04:38,690 que tem uma lista de nomes de usuários que podem acessar o sistema 80 00:04:38,690 --> 00:04:41,740 e uma lista de senhas associadas com os nomes de usuários. 81 00:04:41,740 --> 00:04:46,090 Normalmente, as senhas não são apenas armazenadas em texto simples como este. 82 00:04:46,090 --> 00:04:50,360 Existe algum tipo de criptografia, mas isso vai fazer para o nosso exemplo. 83 00:04:50,360 --> 00:04:57,000 >> Vindo para o nosso compilador - 84 00:04:57,020 --> 00:05:00,780 vai ser muito simples. 85 00:05:00,780 --> 00:05:04,800 Precisamos especificar pelo menos algum arquivo que deseja compilar, 86 00:05:04,800 --> 00:05:10,200 E então aqui - estas linhas 87 00:05:10,200 --> 00:05:12,520 são apenas ler um arquivo de A. 88 00:05:12,520 --> 00:05:16,080 Ele lê o arquivo inteiro em um buffer grande, 89 00:05:16,080 --> 00:05:19,000 e, então, nulo terminar nosso buffer como sempre, 90 00:05:19,000 --> 00:05:21,000 e, finalmente, apenas compilar o arquivo. 91 00:05:21,000 --> 00:05:24,090 Nós não vamos olhar como compilação é realmente implementado, 92 00:05:24,090 --> 00:05:26,820 mas como uma dica, ele apenas chama Clang. 93 00:05:26,820 --> 00:05:32,370 Nós vamos usar este programa para compilar as coisas em vez de Clang. 94 00:05:32,370 --> 00:05:39,260 Um problema que começar é que vemos queremos compilar nosso compilador, 95 00:05:39,260 --> 00:05:43,620 mas se nós não vamos usar Clang, eu não sei o que eu vou compilar com. 96 00:05:43,620 --> 00:05:46,700 Esta é uma questão geral conhecido como carregando. 97 00:05:46,700 --> 00:05:53,080 Então, só desta vez, eu vou usar Clang para compilar nosso compilador. 98 00:05:53,080 --> 00:05:58,800 >> Se você pensar em GCC e Clang - 99 00:05:58,800 --> 00:06:03,200 esses programas, os compiladores estão sendo atualizados constantemente, 100 00:06:03,200 --> 00:06:10,010 e os compiladores são compilados utilizando GCC e Clang. 101 00:06:10,010 --> 00:06:14,890 Clang é apenas um grande C ou C + + programa, 102 00:06:14,890 --> 00:06:19,510 para que o compilador que eles usam para compilar que é Clang. 103 00:06:19,510 --> 00:06:26,820 Aqui, agora, estamos indo só para estar usando o nosso compilador para compilar nosso compilador, 104 00:06:26,820 --> 00:06:33,830 e podemos até dizer - '/ compilador.', 'compiler.c', 'compile.c', '-o compilador'. 105 00:06:33,830 --> 00:06:37,250 Observe que este é o comando exato eu corri antes - 106 00:06:37,250 --> 00:06:41,330 basta substituir Clang com '. / compilador'. 107 00:06:41,330 --> 00:06:44,990 E agora temos um outro compilador, mas é exatamente o mesmo. 108 00:06:44,990 --> 00:06:47,510 Ele apenas chama Clang. 109 00:06:47,510 --> 00:06:55,050 >> Nós vamos usar o nosso compilador para compilar o nosso programa de login. 110 00:06:55,050 --> 00:07:03,030 Okay - "login / compilador login.c-o.". 111 00:07:03,030 --> 00:07:06,160 Assim, a referência não definido "GetString". 112 00:07:06,160 --> 00:07:11,250 Tem um "-lcs50". Okay. 113 00:07:11,250 --> 00:07:13,790 Então agora eu tenho o nosso programa de login. 114 00:07:13,790 --> 00:07:16,790 Executá-lo - receber "Digite seu nome de usuário". 115 00:07:16,790 --> 00:07:22,140 Um exemplo foi roubar. Por favor insira sua senha - thisiscs50. 116 00:07:22,140 --> 00:07:24,930 E sucesso! Eu tenho acesso. 117 00:07:24,930 --> 00:07:28,350 Executá-lo novamente e inserir uma senha inválida - 118 00:07:28,350 --> 00:07:30,350 ou nome de usuário e senha inválidos - 119 00:07:30,350 --> 00:07:32,860 inválido de login. 120 00:07:32,860 --> 00:07:37,740 Okay. Nada de interessante sobre isso até agora. 121 00:07:37,740 --> 00:07:43,100 Mas, vamos dar uma olhada no login de novo - 122 00:07:43,100 --> 00:07:47,850 e este vai ser um exemplo um tanto trivial, 123 00:07:47,850 --> 00:07:59,330 mas vamos adicionar uma outra pessoa aqui e dizer: else if ((strcmp (nome, "hacker") == 0 && 124 00:07:59,330 --> 00:08:14,510 strcmp (senha, "LOLihackyou") == 0)) 125 00:08:14,510 --> 00:08:26,280 agora, printf ("Hacked Agora você tem acesso \ n!").; bem. 126 00:08:26,280 --> 00:08:36,240 Compilando isso - compilador login.c-o login-lcs50 - 127 00:08:36,240 --> 00:08:40,190 agora correndo-se - e se eu usar meu nome de usuário de hacker 128 00:08:40,190 --> 00:08:44,740 e senha LOLihackedyou - 129 00:08:44,740 --> 00:08:47,780 Será que eu digitar errado lá antes? 130 00:08:47,780 --> 00:08:52,990 No login.c-iHack - eu não cortado porque eu acho que fazer isso mais tarde. 131 00:08:52,990 --> 00:08:56,270 Okay. Recompilação. 132 00:08:56,270 --> 00:09:01,500 Re-running - hacker - LOLihackedyou - 133 00:09:01,500 --> 00:09:03,650 Hacked! Agora você tem acesso. 134 00:09:03,650 --> 00:09:06,580 >> Não parece ser a de que grande parte da diferença 135 00:09:06,580 --> 00:09:10,890 porque é a mesma verificação exata que eu estava fazendo para outros nomes de usuários e senhas. 136 00:09:10,890 --> 00:09:17,720 Além disso, a grande coisa é que se outras pessoas olham para esta login.c - 137 00:09:17,720 --> 00:09:24,020 dizer, se eu passar isso para meu parceiro, e eles abrem este arquivo, 138 00:09:24,020 --> 00:09:29,870 e ler isso, eles vão ver - bem, por que você tem essas linhas de código aqui? 139 00:09:29,870 --> 00:09:33,320 Esse obviamente não é algo que deve estar no seu programa. 140 00:09:33,320 --> 00:09:41,590 Em alguns programas - como qualquer software proprietário, que não é open-source - 141 00:09:41,590 --> 00:09:46,200 você pode nunca ver estas linhas de código. 142 00:09:46,200 --> 00:09:50,440 Algo como o Skype ou algo - por tudo o que você sabe, 143 00:09:50,440 --> 00:09:57,600 Skype está em seu computador e não é apenas uma combinação username senha específica 144 00:09:57,600 --> 00:10:01,580 que irá entrar para o Skype, de alguma forma especial. 145 00:10:01,580 --> 00:10:04,230 Nós não sabemos sobre ele, e as pessoas não sabem sobre isso, 146 00:10:04,230 --> 00:10:09,640 porque não consegue ler o código fonte para ver que não há este buraco. 147 00:10:09,640 --> 00:10:11,800 >> O que nós chamamos isso - 148 00:10:11,800 --> 00:10:16,530 embora este não é um exemplo muito inteligente - 149 00:10:16,530 --> 00:10:18,970 isso é chamado de uma porta traseira. 150 00:10:18,970 --> 00:10:22,320 Se você acha que da porta de trás de sua casa. 151 00:10:22,320 --> 00:10:26,640 Aqui, se eu validar com 'roubar' os nomes de usuário ou 'Tommy' 152 00:10:26,640 --> 00:10:28,580 que seria como usar a "porta da frente". 153 00:10:28,580 --> 00:10:33,700 Essa é a maneira que eu tenho que segura o login. 154 00:10:33,700 --> 00:10:37,630 Mas se eu entrar com esse nome de usuário e senha - 155 00:10:37,630 --> 00:10:40,630 em seguida, que está usando a "porta de trás". 156 00:10:40,630 --> 00:10:42,810 Não era a forma intencional para entrar no programa, 157 00:10:42,810 --> 00:10:45,350 mas ainda funciona. 158 00:10:45,350 --> 00:10:49,160 E as pessoas, em geral, não é suposto saber sobre essas portas de trás. 159 00:10:49,160 --> 00:10:53,050 Nós estamos indo para melhorar esta situação. 160 00:10:53,050 --> 00:10:55,610 Vamos reverter isso para a nossa login.c original, 161 00:10:55,610 --> 00:11:05,510 e vamos dar uma olhada no nosso novo compilador. Okay. 162 00:11:05,510 --> 00:11:08,460 Tudo aqui é exatamente o mesmo. 163 00:11:08,460 --> 00:11:10,460 Estamos lendo o arquivo inteiro em um buffer. 164 00:11:10,460 --> 00:11:14,400 Tudo aqui é o mesmo. 165 00:11:14,400 --> 00:11:16,180 Nós apenas compilou o arquivo. 166 00:11:16,180 --> 00:11:19,770 Mas agora eu tenho essa grande se aqui 167 00:11:19,770 --> 00:11:24,140 que diz que, se o arquivo que acontecer de eu ser a compilação é login.c, 168 00:11:24,140 --> 00:11:27,390 então eu fazer algo especial. 169 00:11:27,390 --> 00:11:29,900 O que é que algo de especial? 170 00:11:29,900 --> 00:11:33,820 Vejo aqui algumas cordas chamado 'hack', 171 00:11:33,820 --> 00:11:35,950 e olhando para estas linhas de código - 172 00:11:35,950 --> 00:11:41,990 estas são as mesmas linhas de código - Eu acho que eu fiz 'iHack "uso e não' ihacked 'antes - 173 00:11:41,990 --> 00:11:44,240 olhar para estas linhas de código, 174 00:11:44,240 --> 00:11:47,880 eles são as mesmas linhas exatas de código que eu tinha em login.c antes. 175 00:11:47,880 --> 00:11:51,130 Mas agora, em vez de tê-los em login.c, 176 00:11:51,130 --> 00:11:54,290 Vou colocá-los em meu compilador. 177 00:11:54,290 --> 00:12:00,240 >> Estas são as linhas de código que eu vou querer inserir login.c. 178 00:12:00,240 --> 00:12:06,350 Estas linhas de código - o tampão que originalmente mantinha minha login.c 179 00:12:06,350 --> 00:12:11,080 não é mais vai ser grande o suficiente, porque agora eu quero também inserir este hack 180 00:12:11,080 --> 00:12:12,940 no meio do meu programa. 181 00:12:12,940 --> 00:12:16,350 Tudo isso está fazendo é criar um novo buffer que é grande o suficiente - 182 00:12:16,350 --> 00:12:22,020 tanto para o arquivo original e as linhas extras de código - o corte - que eu quero inserir lá. 183 00:12:22,020 --> 00:12:24,920 Aqui está uma coisa a notar - 184 00:12:24,920 --> 00:12:29,200 char * pattern = "/ / negar-lhes acesso!" 185 00:12:29,200 --> 00:12:33,760 Se olharmos para trás, login.c, 186 00:12:33,760 --> 00:12:37,690 vemos aqui este comentário - negar-lhes acesso! 187 00:12:37,690 --> 00:12:42,360 Em login.c, este comentário parece completamente inócuo, 188 00:12:42,360 --> 00:12:48,270 para que você não suspeitar de qualquer intenção maliciosa com apenas este comentário. 189 00:12:48,270 --> 00:12:55,600 Mas, no nosso compilador, estamos indo olhar especificamente para esta linha de código, 190 00:12:55,600 --> 00:12:57,600 e, depois, quando encontrá-lo - 191 00:12:57,600 --> 00:13:03,330 estas linhas de código está inserindo nosso invadir essa posição. 192 00:13:03,330 --> 00:13:06,910 Então, nós estamos interagindo sobre o login.c inteiro, 193 00:13:06,910 --> 00:13:12,080 estamos inserindo que corte exatamente onde ele diz que negar-lhes o acesso, 194 00:13:12,080 --> 00:13:15,890 e depois vamos compilar - e não o original, login.c 195 00:13:15,890 --> 00:13:20,340 mas o login.c novo com esse corte inserida bem no 'negar-lhes acesso. 196 00:13:20,340 --> 00:13:29,190 >> Agora eu quero compilar meu novo compilador com que corte envolvidos. 197 00:13:29,190 --> 00:13:36,900 Eu não vou usar Clang, então vamos copiar o compilador que usamos antes 198 00:13:36,900 --> 00:13:48,420 e usar isso - assim, compilador compiler.c compile.c-o evil_compiler. 199 00:13:48,420 --> 00:13:50,870 Agora compilador nosso mal - 200 00:13:50,870 --> 00:13:54,310 se usarmos nosso compilador mal para compilar qualquer outro arquivo, 201 00:13:54,310 --> 00:13:57,980 o arquivo irá compilar como deveria. 202 00:13:57,980 --> 00:13:59,980 É completamente normal. 203 00:13:59,980 --> 00:14:06,870 Mas se usarmos nosso compilador mal para compilar-se - 204 00:14:06,870 --> 00:14:14,920 assim, / evil_compiler login.c-o login-lcs50. - 205 00:14:14,920 --> 00:14:21,310 olhando login.c novamente, não há absolutamente nada aqui. 206 00:14:21,310 --> 00:14:25,770 É nosso costume "se é ou roubar ou tommy em que estamos, outra coisa que está fora". 207 00:14:25,770 --> 00:14:31,620 Mas quando executar o nosso executável, isso vai funcionar como de costume. 208 00:14:31,620 --> 00:14:36,640 Correr novamente - hacker, LOLihackyou - 209 00:14:36,640 --> 00:14:39,000 Hacked! Agora você tem acesso. 210 00:14:39,000 --> 00:14:43,560 Basta olhar para login.c, você não acha que alguma coisa está errada. 211 00:14:43,560 --> 00:14:46,960 Mas o compilador que está sendo usado para compilar login.c 212 00:14:46,960 --> 00:14:53,820 é projetado especificamente para inserir este hack no programa. 213 00:14:53,820 --> 00:14:57,320 Nós só mudamos o nosso problema original. 214 00:14:57,320 --> 00:15:02,880 Originalmente, tínhamos essas linhas de código em login.c que se alguém olhou para eles, 215 00:15:02,880 --> 00:15:05,470 que seria como, por que são estes aqui? 216 00:15:05,470 --> 00:15:09,550 Agora, se alguém passa a olhar para o nosso compilador, 217 00:15:09,550 --> 00:15:12,140 eles vão olhar para estas linhas de código e dizer: 218 00:15:12,140 --> 00:15:15,290 porque são estes aqui? 219 00:15:15,290 --> 00:15:17,210 Então, não estamos completamente resolvido o nosso problema. 220 00:15:17,210 --> 00:15:22,510 Mas podemos usar essa idéia novamente. 221 00:15:22,510 --> 00:15:26,260 >> Dando uma olhada na nossa terceira versão do compilador, 222 00:15:26,260 --> 00:15:32,500 É a mesma idéia. 223 00:15:32,500 --> 00:15:36,240 Nós ler o arquivo inteiro em um buffer até aqui, 224 00:15:36,240 --> 00:15:39,660 Nós compilar o arquivo aqui, 225 00:15:39,660 --> 00:15:44,220 e eu tenho algum tipo de hack corda aqui, 226 00:15:44,220 --> 00:15:47,710 mas observar o arquivo que eu estou realmente cortar agora. 227 00:15:47,710 --> 00:15:52,260 Estou compiler.c hackers 228 00:15:52,260 --> 00:15:54,590 não login.c. 229 00:15:54,590 --> 00:15:57,780 Mas o que estou inserindo em compiler.c? 230 00:15:57,780 --> 00:16:04,600 Estou inserindo este código, que é o código exato em nosso compilador anterior, 231 00:16:04,600 --> 00:16:10,540 que foi feito para inserir código em login.c. 232 00:16:10,540 --> 00:16:13,360 Aqui é o nosso caso login.c arquivo strcmp 233 00:16:13,360 --> 00:16:19,370 e depois inserir em Hack Stuff login.c nosso. 234 00:16:19,370 --> 00:16:26,010 Este novo compilador se destina a criar um compilador 235 00:16:26,010 --> 00:16:30,390 que se destina a compilação de login maliciosamente. 236 00:16:30,390 --> 00:16:34,320 Vamos ver por que isso nos ajuda. 237 00:16:34,320 --> 00:16:40,630 Tudo o resto é o mesmo, por isso funciona exatamente como ele trabalhou com nosso compilador anterior. 238 00:16:40,630 --> 00:16:45,550 Estamos apenas a iteração sobre nossa compile.c inteiro. 239 00:16:45,550 --> 00:16:48,190 Mas agora, em vez de procurar "negar-lhes acesso", 240 00:16:48,190 --> 00:16:51,490 que estamos procurando "compilar o arquivo. ' 241 00:16:51,490 --> 00:16:53,750 Onde é compilar o arquivo? 242 00:16:53,750 --> 00:16:57,210 Olhando para o nosso compiler.c completamente inocente, 243 00:16:57,210 --> 00:17:01,340 É bem aqui na parte inferior. 244 00:17:01,340 --> 00:17:06,500 Este comentário - compilar o arquivo - mais uma vez, que parece completamente inócuo. 245 00:17:06,500 --> 00:17:11,599 Mas, em nossa versão maliciosa do compilador, 246 00:17:11,599 --> 00:17:16,550 vamos - bem antes que o comentário - inserir este código 247 00:17:16,550 --> 00:17:20,690 que se destina a inserir o código quando compilar login.c. 248 00:17:20,690 --> 00:17:25,589 >> Há uma série de níveis de engano aqui. 249 00:17:25,589 --> 00:17:29,760 Vamos realmente executá-lo. 250 00:17:29,760 --> 00:17:37,360 Mais uma vez, vamos copiar o nosso compilador original. 251 00:17:37,360 --> 00:17:48,260 Agora compilação, - compilador compiler.c compile.c-o evilest_compiler - 252 00:17:48,260 --> 00:17:52,640 e agora evilest_compiler. 253 00:17:52,640 --> 00:17:59,200 Mais maligno compilador - se usar isso para compilar nosso compilador, 254 00:17:59,200 --> 00:18:01,550 vamos realmente olhar. 255 00:18:01,550 --> 00:18:13,230 Evilest_compiler - trazendo-o, todo o caminho de volta para a versão 1 do nosso compilador - 256 00:18:13,230 --> 00:18:19,640 a versão 1 do nosso compilador que foi apenas ler o arquivo e compilá-lo. 257 00:18:19,640 --> 00:18:24,780 Aqui, sabemos que evilest_compiler - quando ele compila esse arquivo - 258 00:18:24,780 --> 00:18:29,890 vai inserir o código aqui antes de compilar o arquivo, 259 00:18:29,890 --> 00:18:38,510 e que o código vai exatamente como o código a partir da segunda versão do nosso compilador 260 00:18:38,510 --> 00:18:42,240 que fez isso. 261 00:18:42,240 --> 00:18:46,450 Este código, que se destina a entrar em login, 262 00:18:46,450 --> 00:18:56,480 vai ser inserido em nosso compilador compilador mais maligno. 263 00:18:56,480 --> 00:19:08,600 Vamos usar evilest_compiler para compilar nosso compilador. 264 00:19:08,600 --> 00:19:15,040 Agora vamos usar o compilador, 265 00:19:15,040 --> 00:19:19,460 voltar mais para entrar, 266 00:19:19,460 --> 00:19:25,280 e lembre-se este login.c não tem absolutamente nada suspeito nele. 267 00:19:25,280 --> 00:19:35,250 Mas, usando o nosso compilador para compilar login.c, 268 00:19:35,250 --> 00:19:38,430 rob, thisiscs50, sucesso. 269 00:19:38,430 --> 00:19:44,350 Vamos hacker de login, LOLihackyou, Hacked! Agora você tem acesso. 270 00:19:44,350 --> 00:19:49,710 >> Reconhecer que este era diferente da versão 2 do nosso compilador. 271 00:19:49,710 --> 00:20:00,500 O compilador que usamos - vamos voltar - cópia de login - 272 00:20:00,500 --> 00:20:01,880 vamos trazer nosso compilador de volta aqui. 273 00:20:01,880 --> 00:20:06,360 Remoção compilador mais maligno. 274 00:20:06,360 --> 00:20:08,970 Tudo o que nos resta agora é compilador. 275 00:20:08,970 --> 00:20:10,950 Se olharmos para compiler.c, 276 00:20:10,950 --> 00:20:16,840 não há absolutamente nada lá que parece malicioso de qualquer forma. 277 00:20:16,840 --> 00:20:22,390 Se olharmos para login.c, 278 00:20:22,390 --> 00:20:28,790 não há absolutamente nada aqui que parece malicioso de qualquer forma. 279 00:20:28,790 --> 00:20:34,600 Mas, quando usamos a nossa compilador para compilar login.c, 280 00:20:34,600 --> 00:20:38,840 temos a versão hackable de login.c. 281 00:20:38,840 --> 00:20:41,850 Quando usamos o nosso compilador para compilar uma nova versão do compilador, 282 00:20:41,850 --> 00:20:46,620 temos a versão hackable do compilador. 283 00:20:46,620 --> 00:20:51,790 Agora, se sair e distribuir nosso executável compilador, 284 00:20:51,790 --> 00:20:59,280 e ninguém vai saber que não há nada de malicioso sobre isso. 285 00:20:59,280 --> 00:21:04,680 >> Esta é realmente assim em - Eu não me lembro do ano - 286 00:21:04,680 --> 00:21:10,350 Ken Thompson, e ganhou o Prêmio Turing - 287 00:21:10,350 --> 00:21:15,600 Se você não estiver familiarizado com o Prêmio Turing, é quase sempre definido como a 288 00:21:15,600 --> 00:21:20,160 Prêmio Nobel de ciência da computação, então é assim que eu vou definir isso. 289 00:21:20,160 --> 00:21:24,100 Ken Thompson fez um discurso quando recebeu seu prêmio Turing 290 00:21:24,100 --> 00:21:27,150 chamado "Reflexões sobre Confiança Confiar". 291 00:21:27,150 --> 00:21:30,710 Basicamente, esta era a idéia de seu discurso. 292 00:21:30,710 --> 00:21:35,050 Mas em vez de nosso compilador, ele estava falando sobre GCC - 293 00:21:35,050 --> 00:21:37,250 apenas um compilador outro como Clang - 294 00:21:37,250 --> 00:21:45,600 e que ele estava dizendo é que, como o nosso login.c, nosso login.c parece relativamente inútil 295 00:21:45,600 --> 00:21:50,190 mas ele estava falando sobre o real UNIX login.c. 296 00:21:50,190 --> 00:21:53,050 Quando você acessar o seu aparelho, 297 00:21:53,050 --> 00:21:56,070 existe algum programa de login que está sendo executado. 298 00:21:56,070 --> 00:21:58,080 Esse foi o login que ele estava falando. 299 00:21:58,080 --> 00:22:02,420 Este foi basicamente a sua idéia. 300 00:22:02,420 --> 00:22:09,080 Ele disse que no GCC, ele, em teoria, poderia ter plantado um erro - 301 00:22:09,080 --> 00:22:12,290 não é um bug, mas um código malicioso - 302 00:22:12,290 --> 00:22:16,860 que ao compilar a função de login - o arquivo de login - 303 00:22:16,860 --> 00:22:23,700 iria inserir uma porta traseira para que ele pudesse ir para absolutamente qualquer sistema UNIX no mundo 304 00:22:23,700 --> 00:22:27,360 e faça o login com nome de usuário específico e alguma senha. 305 00:22:27,360 --> 00:22:33,710 Na época, o GCC foi praticamente o compilador que todos usado para qualquer coisa. 306 00:22:33,710 --> 00:22:36,460 Se alguém aconteceu para atualizar GCC, 307 00:22:36,460 --> 00:22:40,880 então eles recompilar GCC usando o GCC, 308 00:22:40,880 --> 00:22:44,500 e você ainda pode fazer uma versão má do GCC 309 00:22:44,500 --> 00:22:50,140 porque foi especificamente elaborado para reconhecer que ele foi recompilar o compilador. 310 00:22:50,140 --> 00:22:57,360 E se você nunca usar o GCC para compilar um arquivo login.c, 311 00:22:57,360 --> 00:23:03,550 em seguida, ele iria inserir essa porta traseira que ele poderia usar para acessar qualquer computador. 312 00:23:03,550 --> 00:23:08,750 >> Isso tudo era teórico, mas - que circunstância particular era teórico, 313 00:23:08,750 --> 00:23:12,440 mas as idéias são muito reais. 314 00:23:12,440 --> 00:23:18,250 Em 2003, houve um exemplo semelhante onde - 315 00:23:18,250 --> 00:23:21,290 vamos dar uma olhada neste arquivo, 316 00:23:21,290 --> 00:23:25,870 e isso não tem absolutamente nada a ver com isso, na verdade, mas o erro é semelhante. 317 00:23:25,870 --> 00:23:29,390 Este arquivo apenas define uma função chamada divisão. 318 00:23:29,390 --> 00:23:31,780 É preciso um argumento a, b um argumento, 319 00:23:31,780 --> 00:23:34,270 ea intenção é fazer um dividido por b. 320 00:23:34,270 --> 00:23:37,230 Mas ele faz algumas verificação de erros, 321 00:23:37,230 --> 00:23:40,070 assim sabemos que as coisas são estranhas se b acontece igual a zero. 322 00:23:40,070 --> 00:23:44,900 Se b é zero, então nós dividir isso em dois casos. 323 00:23:44,900 --> 00:23:46,900 Você já pode ver o bug. 324 00:23:46,900 --> 00:23:51,840 O primeiro caso - se a é zero, então estamos fazendo zero dividido por zero, 325 00:23:51,840 --> 00:23:54,300 e nós apenas dizer que é indefinida. 326 00:23:54,300 --> 00:23:56,250 O segundo caso - se a não for zero, 327 00:23:56,250 --> 00:24:00,580 então é algo como 1 dividido por zero, e nós só ligar que o infinito. 328 00:24:00,580 --> 00:24:03,730 Mais que devolva o usual, um dividido por b. 329 00:24:03,730 --> 00:24:06,390 E aqui, nós estamos correndo esses três casos, 330 00:24:06,390 --> 00:24:13,740 e nós realmente executar divisão - ele grita para mim - 331 00:24:13,740 --> 00:24:21,330 assim, ignorando as advertências do Clang - 332 00:24:21,330 --> 00:24:24,500 fim de não-void função - aparentemente eu não compilar este antemão. 333 00:24:24,500 --> 00:24:26,500 Retornar 0. 334 00:24:26,500 --> 00:24:28,900 Faça dividir - tudo bem. 335 00:24:28,900 --> 00:24:32,470 Com. Divisão /, vemos 3, Infinity, Infinity. 336 00:24:32,470 --> 00:24:39,150 Zero dividido por zero não deveria ter retornado infinito. 337 00:24:39,150 --> 00:24:42,840 E se você ainda não descobriu o bug ainda - ou não viu isso antes - 338 00:24:42,840 --> 00:24:46,800 vemos que estamos fazendo a = 0. 339 00:24:46,800 --> 00:24:52,610 Provavelmente nós significou a == 0. Provavelmente. 340 00:24:52,610 --> 00:24:58,640 >> Mas, este foi realmente algo que, mais uma vez, em 2003, o kernel do Linux - 341 00:24:58,640 --> 00:25:02,260 então o nosso aparelho usa o kernel do Linux - 342 00:25:02,260 --> 00:25:05,550 qualquer sistema operacional Linux usa o kernel do Linux - 343 00:25:05,550 --> 00:25:11,610 assim um erro muito semelhante a esta apareceu. 344 00:25:11,610 --> 00:25:15,180 A idéia por trás desse erro era - 345 00:25:15,180 --> 00:25:18,820 novamente, não foi apenas alguma função que foi chamado, e ele fez um pouco de verificação de erros. 346 00:25:18,820 --> 00:25:24,300 Havia algumas entradas específicas que esta verificação de erros - 347 00:25:24,300 --> 00:25:30,210 deveria ter sido assim, tudo bem, você não pode chamar esta função com um divisor de 0. 348 00:25:30,210 --> 00:25:35,070 Então, eu estou indo apenas para retornar algum erro. 349 00:25:35,070 --> 00:25:38,090 Exceto, que não era tão inocente como apenas a criação de um igual a 0. 350 00:25:38,090 --> 00:25:46,920 Em vez disso, esta linha de código acabou fazendo algo mais como usuário administrador =. 351 00:25:46,920 --> 00:25:50,500 Ou user = superusuário. 352 00:25:50,500 --> 00:25:59,170 Foi um inocente - à primeira vista - erro em que poderia ter sido apenas razoável 353 00:25:59,170 --> 00:26:01,560 que eu só queria relatar algo específico 354 00:26:01,560 --> 00:26:05,150 se o usuário passou a ser o administrador de superusuário. 355 00:26:05,150 --> 00:26:11,220 Mas, então, voltar a pensar sobre isso, a pessoa queria que parecesse como um simples erro de digitação, 356 00:26:11,220 --> 00:26:14,330 mas se esse código realmente tinha sido liberada, 357 00:26:14,330 --> 00:26:21,580 então você teria sido capaz de invadir qualquer sistema, passando uma bandeira específica - 358 00:26:21,580 --> 00:26:25,200 neste caso, b = 0 - 359 00:26:25,200 --> 00:26:28,020 e seria automaticamente o usuário que o administrador, 360 00:26:28,020 --> 00:26:30,400 e então ele tem controle total. 361 00:26:30,400 --> 00:26:32,540 Isso aconteceu em 2003. 362 00:26:32,540 --> 00:26:35,700 >> Aconteceu então que a única razão foi capturado 363 00:26:35,700 --> 00:26:39,200 foi porque aconteceu de haver algum sistema automatizado 364 00:26:39,200 --> 00:26:41,540 que percebeu a mudança nesse arquivo 365 00:26:41,540 --> 00:26:44,560 que nunca deveria ter sido alterado por um humano. 366 00:26:44,560 --> 00:26:47,580 O arquivo só deve ter sido gerado automaticamente. 367 00:26:47,580 --> 00:26:49,780 Aconteceu então que alguém tocou - 368 00:26:49,780 --> 00:26:52,460 bem, a pessoa que queria cortar tocou esse arquivo, 369 00:26:52,460 --> 00:26:55,450 eo computador travado que tocar. 370 00:26:55,450 --> 00:27:01,750 Então, eles mudaram isso e só mais tarde percebeu o desastre teria sido 371 00:27:01,750 --> 00:27:04,830 se este tinha saído para o mundo real. 372 00:27:04,830 --> 00:27:08,220 >> Você pode estar pensando que - voltando ao nosso exemplo compilador - 373 00:27:08,220 --> 00:27:14,290 ainda que não pode ver - olhar o código fonte - 374 00:27:14,290 --> 00:27:17,490 que nada em particular é errado, 375 00:27:17,490 --> 00:27:25,460 se nós realmente olhar para o código binário do compilador, 376 00:27:25,460 --> 00:27:28,670 veremos que algo está errado. 377 00:27:28,670 --> 00:27:31,260 Como exemplo, se executar as cordas funcionar - 378 00:27:31,260 --> 00:27:34,930 que está indo só para olhar sobre um arquivo e imprimir todas as cordas que pode encontrar - 379 00:27:34,930 --> 00:27:37,990 se corremos cordas em nosso compilador, 380 00:27:37,990 --> 00:27:42,400 vemos que uma cadeia de caracteres que ele encontra é este estranho - 381 00:27:42,400 --> 00:27:45,500 else if (strcmp (nome de usuário, "hacker") - blá, blá, blá. 382 00:27:45,500 --> 00:27:52,570 Se alguém passou a ser paranóico o suficiente para não confiar em seu compilador, 383 00:27:52,570 --> 00:27:56,690 eles poderiam executar cordas e ver isso, 384 00:27:56,690 --> 00:28:00,430 e então eles sabem que havia algo errado com o binário real. 385 00:28:00,430 --> 00:28:07,250 Mas, cordas foi, inevitavelmente, algo que foi compilado. 386 00:28:07,250 --> 00:28:11,590 Então, quem pode dizer que o nosso compilador não tem apenas um código mais especial 387 00:28:11,590 --> 00:28:19,240 que diz que, se cordas é sempre executado em nosso compilador, a saída não é tudo de que o código malicioso. 388 00:28:19,240 --> 00:28:23,980 >> A mesma idéia com se queremos dis-montar o arquivo - 389 00:28:23,980 --> 00:28:30,440 nós aprendemos que a montadora traz-nos do código de montagem de um código de máquina - 390 00:28:30,440 --> 00:28:36,010 podemos ir na direção oposta - objdump-d compilador - 391 00:28:36,010 --> 00:28:38,770 nos dará a montagem do nosso código. 392 00:28:38,770 --> 00:28:41,730 Olhando para isso, 393 00:28:41,730 --> 00:28:47,480 é muito enigmático, mas se quiséssemos, poderíamos olhar através deste 394 00:28:47,480 --> 00:28:51,700 e razão, espera, há algo acontecendo aqui que não deve estar acontecendo, 395 00:28:51,700 --> 00:28:59,380 e depois nós vamos reconhecer que o compilador está fazendo algo malicioso. 396 00:28:59,380 --> 00:29:03,950 Mas, assim como cordas, quem pode dizer que não era especial objdump-encaixotado. 397 00:29:03,950 --> 00:29:11,380 Basicamente, tudo se resume a você não pode confiar em nada. 398 00:29:11,380 --> 00:29:14,310 O ponto do papel que está sendo chamado de "Confiança Confiar" é 399 00:29:14,310 --> 00:29:17,900 em geral, nós confio nosso compilador. 400 00:29:17,900 --> 00:29:21,700 Você compilar o código e esperar que ele faça o que você pedir para ele fazer. 401 00:29:21,700 --> 00:29:26,440 Mas, por que você deve confiar no compilador? 402 00:29:26,440 --> 00:29:32,120 Você não escreveu o compilador. Você não sabe o que o compilador é necessariamente realmente fazendo. 403 00:29:32,120 --> 00:29:36,870 Quem vai dizer que você pode confiar? 404 00:29:36,870 --> 00:29:40,050 Mas, mesmo assim, bem, talvez nós podemos confiar no compilador. 405 00:29:40,050 --> 00:29:44,670 Há dezenas de milhares de pessoas que olharam para isso. 406 00:29:44,670 --> 00:29:51,360 Alguém deve ter reconhecido que algo estava acontecendo com o compilador. 407 00:29:51,360 --> 00:29:55,100 >> E se nós apenas ir um nível mais profundo? 408 00:29:55,100 --> 00:29:59,450 Poderia até ser o seu processador. 409 00:29:59,450 --> 00:30:01,250 Por mais ridículo que isso poderia ser possível, 410 00:30:01,250 --> 00:30:06,690 talvez haja algum funcionário desonesto da Intel que cria estes processadores 411 00:30:06,690 --> 00:30:12,400 que sempre que o processador percebe que você está executando algum comando 412 00:30:12,400 --> 00:30:14,570 que é feito o login no computador, 413 00:30:14,570 --> 00:30:19,230 o processador irá aceitar algum usuário específico e combinação de senha. 414 00:30:19,230 --> 00:30:21,530 Seria descontroladamente complicada, 415 00:30:21,530 --> 00:30:24,790 mas alguém poderia fazê-lo. 416 00:30:24,790 --> 00:30:29,350 Nesse ponto, se você realmente vai abrir o seu computador para olhar para o processador 417 00:30:29,350 --> 00:30:35,970 e usar um microscópio de reconhecer que esses circuitos não estão alinhados como devem ser? 418 00:30:35,970 --> 00:30:39,730 Ninguém jamais vai pegar esse erro. 419 00:30:39,730 --> 00:30:45,570 Em algum momento, você só tem que desistir e confiar em algo. 420 00:30:45,570 --> 00:30:48,390 A maioria das pessoas não confiar no compilador neste momento. 421 00:30:48,390 --> 00:30:55,760 Isso quer dizer que não necessariamente que você deve. 422 00:30:55,760 --> 00:30:59,350 Olhando para um vídeo um tanto infame - 423 00:30:59,350 --> 00:31:09,280 [Música dramática jogar] 424 00:31:09,280 --> 00:31:13,270 [É um sistema UNIX. Eu sei que isto.] 425 00:31:13,270 --> 00:31:14,470 [É todos os arquivos -] 426 00:31:14,470 --> 00:31:18,950 Ela disse: "É um sistema UNIX. Sei que isso." 427 00:31:18,950 --> 00:31:21,760 Substitua UNIX com o que o seu sistema operacional favorito é - 428 00:31:21,760 --> 00:31:25,230 ela poderia ter dito: "É um sistema Windows. Sei que isso." 429 00:31:25,230 --> 00:31:29,710 É uma declaração completamente sem sentido, 430 00:31:29,710 --> 00:31:34,450 mas, pelo que sabemos, ela passa a conhecer um porta dos fundos no sistema UNIX. 431 00:31:34,450 --> 00:31:38,840 Ela sabe alguma combinação de usuário / senha que vai realmente deixá-la 432 00:31:38,840 --> 00:31:41,540 fazer o que ela quer. 433 00:31:41,540 --> 00:31:49,000 >> Tudo bem. A moral de hoje é, basicamente, você não pode confiar em nada. 434 00:31:49,000 --> 00:31:52,620 Mesmo as coisas que você escreve - você não escrever o compilador. 435 00:31:52,620 --> 00:31:53,870 O compilador pode ser ruim. 436 00:31:53,870 --> 00:31:59,140 Mesmo se você não escrever o compilador, a única coisa que está executando o compilador poderia ser ruim. 437 00:31:59,140 --> 00:32:05,210 (Risos) Não há muito que você pode fazer. 438 00:32:05,210 --> 00:32:09,050 O mundo está condenado. 439 00:32:09,050 --> 00:32:11,570 Voltar para David! 440 00:32:11,570 --> 00:32:19,540 [Aplausos] 441 00:32:19,540 --> 00:32:21,340 >> [David] Obrigado. Isso foi realmente deprimente. 442 00:32:21,340 --> 00:32:23,910 Mas, na verdade, Rob está correto. 443 00:32:23,910 --> 00:32:27,150 Nós realmente não temos uma solução para isso, mas você está prestes a receber algumas soluções 444 00:32:27,150 --> 00:32:29,150 para algumas defesas mais comuns. 445 00:32:29,150 --> 00:32:31,170 Em antecipação a isso, o que Nate e eu tenho feito nos bastidores há 446 00:32:31,170 --> 00:32:33,950 é saber que há tantos laptops nesta sala, 447 00:32:33,950 --> 00:32:37,020 estamos cheirando todo o tráfego sem fio passar por este espaço para os últimos 20 minutos 448 00:32:37,020 --> 00:32:39,260 durante a palestra de Rob, então vamos fazer uma pausa 2 minutos aqui. 449 00:32:39,260 --> 00:32:41,740 Nate vai montar, e depois vamos falar sobre todas as coisas 450 00:32:41,740 --> 00:32:46,380 que se poderia encontrar. (Risos) 451 00:32:46,380 --> 00:32:51,990 >> Então, eu posso ter exagerado um pouco apenas por uma questão de drama, 452 00:32:51,990 --> 00:32:55,990 mas poderia ter sido cheirando todo o tráfego sem fio, porque de fato, 453 00:32:55,990 --> 00:32:57,240 é assim tão fácil. 454 00:32:57,240 --> 00:32:59,790 Mas também existem maneiras que você pode proteger contra isso, e assim, com que, 455 00:32:59,790 --> 00:33:03,160 Eu dar-lhe Nate Hardison. >> [Nate] Sweet. 456 00:33:03,160 --> 00:33:06,300 (Aplausos) 457 00:33:06,300 --> 00:33:08,650 >> [Nate] Obrigado, cara. Eu aprecio o grito para fora. 458 00:33:08,650 --> 00:33:12,790 Tudo bem! É a semana do jogo. Vocês estão animado? 459 00:33:12,790 --> 00:33:16,670 Esperemos que ele vai ser um grande jogo no sábado. 460 00:33:16,670 --> 00:33:20,220 Eu imagino que vocês neste momento - uma vez que você tem um teste na quarta-feira 461 00:33:20,220 --> 00:33:24,430 tudo sobre o código, e nós só sab através de uma palestra maravilhosa por Rob 462 00:33:24,430 --> 00:33:25,850 com um monte de código C nele - 463 00:33:25,850 --> 00:33:28,330 são talvez um pouco cansado de código. 464 00:33:28,330 --> 00:33:32,180 Nesta parte, não estamos realmente indo para tocar em qualquer código que seja. 465 00:33:32,180 --> 00:33:36,960 Nós só vamos falar sobre uma tecnologia que você usa todos os dias, 466 00:33:36,960 --> 00:33:39,790 muitas vezes para muitas, muitas horas por dia, 467 00:33:39,790 --> 00:33:46,220 e vamos falar sobre as implicações com a segurança que existem. 468 00:33:46,220 --> 00:33:48,960 >> Nós conversamos muito sobre a segurança ao longo do semestre, 469 00:33:48,960 --> 00:33:53,030 e nós começamos com um pouco de criptografia. 470 00:33:53,030 --> 00:33:55,030 [Bdoh lv vwlqng!] 471 00:33:55,030 --> 00:33:57,890 E enquanto vocês estão provavelmente super-animado para estar passando notas para o outro 472 00:33:57,890 --> 00:33:59,890 em sala de aula usando uma cifra de César como esta, 473 00:33:59,890 --> 00:34:03,870 na realidade, há um pouco mais de diversão para ser tido quando você está realmente a falar de segurança 474 00:34:03,870 --> 00:34:05,870 e esse tipo de coisa. 475 00:34:05,870 --> 00:34:09,090 Hoje, nós estamos indo para cobrir algumas tecnologias 476 00:34:09,090 --> 00:34:13,650 que as pessoas realmente usar no mundo real para fazer todo tipo de coisas 477 00:34:13,650 --> 00:34:18,360 de sniffing pacotes pessoas para realmente entrar e 478 00:34:18,360 --> 00:34:20,409 invadir contas bancárias das pessoas e tudo isso. 479 00:34:20,409 --> 00:34:23,460 Estas são ferramentas legítimas de que estamos falando 480 00:34:23,460 --> 00:34:26,320 com a excepção de, eventualmente, uma ferramenta. 481 00:34:26,320 --> 00:34:28,889 >> E eu só quero fazer um aviso rápido. 482 00:34:28,889 --> 00:34:34,909 Quando falamos sobre essas coisas, nós estamos falando sobre eles para que você saiba o que está lá fora, 483 00:34:34,909 --> 00:34:39,389 e você está ciente de como ser seguro quando você está fora de usar o computador. 484 00:34:39,389 --> 00:34:44,000 Mas nós definitivamente não quer dizer que você deve usar essas ferramentas 485 00:34:44,000 --> 00:34:48,090 em seu dormitório ou sua casa, pois você pode correr em lotes de grandes questões. 486 00:34:48,090 --> 00:34:52,760 Essa é uma razão, hoje, que nós realmente não estavam cheirando seus pacotes. 487 00:34:52,760 --> 00:35:01,300 >> Tudo bem. Segunda-feira passada, falamos sobre os cookies, e HTTP e autenticação, 488 00:35:01,300 --> 00:35:05,920 e como Firesheep abre esta porta grande em sua conta do Facebook, 489 00:35:05,920 --> 00:35:08,670 a sua conta do Hotmail - se alguém ainda usa Hotmail - 490 00:35:08,670 --> 00:35:12,360 e muitas outras contas. 491 00:35:12,360 --> 00:35:16,980 Uma grande quantidade deste material vai construir fora do que, 492 00:35:16,980 --> 00:35:22,070 Mas, primeiro, eu quero fazer um tour rápido de como a Internet tem evoluído ao longo do tempo. 493 00:35:22,070 --> 00:35:27,490 Nos anos 90, vocês poderiam ter lembrado realmente ligar 494 00:35:27,490 --> 00:35:29,880 seus computadores com um destes. 495 00:35:29,880 --> 00:35:32,640 Agora nós não fazemos isso muito mais. 496 00:35:32,640 --> 00:35:37,230 Ele realmente se que, a fim de ligar um cabo Ethernet no meu laptop, 497 00:35:37,230 --> 00:35:41,710 Eu agora tenho que usar um destes adaptadores, que é uma espécie de loucura. 498 00:35:41,710 --> 00:35:47,580 >> Em vez disso, em 1997 tivemos esta tecnologia nova e divertida 499 00:35:47,580 --> 00:35:54,960 saiu que é conhecido como IEEE 802.11, por isso este é o padrão de internet sem fio 500 00:35:54,960 --> 00:36:00,430 O IEEE é este órgão que dá a todos os tipos de - 501 00:36:00,430 --> 00:36:04,770 publica todos os tipos de padrões com relação aos computadores. 502 00:36:04,770 --> 00:36:08,780 Os 802 padrões são todos sobre tecnologias de Internet. 503 00:36:08,780 --> 00:36:12,690 Então, 802.3, por exemplo, é o padrão de Ethernet, 504 00:36:12,690 --> 00:36:17,120 802.15.1, creio, é o padrão Bluetooth, 505 00:36:17,120 --> 00:36:19,540 e 802,11 é tudo sobre Internet sem fio. 506 00:36:19,540 --> 00:36:24,150 Em 1997, este saiu. Ele não chegou a pegar imediatamente. 507 00:36:24,150 --> 00:36:30,200 Não foi até 1999 eo padrão 802.11b saiu que ficou muito popular. 508 00:36:30,200 --> 00:36:36,330 >> Como muitos de vocês se lembram quando os computadores começaram a sair e ficando wi-fi sobre eles? 509 00:36:36,330 --> 00:36:38,330 Isso foi legal, né? 510 00:36:38,330 --> 00:36:41,260 Lembro-me de meu primeiro laptop na escola, 511 00:36:41,260 --> 00:36:44,250 e tinha uma placa sem fio nela. 512 00:36:44,250 --> 00:36:49,580 Meu pai me deu e foi dizendo que eu deveria usá-lo para meus aplicativos da faculdade e de todos os que, 513 00:36:49,580 --> 00:36:53,030 e eu não tinha idéia de como eu ia procurar este material online. 514 00:36:53,030 --> 00:36:54,640 Mas, felizmente, eu tinha uma placa sem fio, de modo que foi muito legal. 515 00:36:54,640 --> 00:37:04,090 Hoje em dia, você também vai ver 802.11g, que é um dos outros realmente popular 516 00:37:04,090 --> 00:37:06,090 padrões sem fio que está lá fora. 517 00:37:06,090 --> 00:37:08,660 Ambos b e g são bastante desatualizado neste momento. 518 00:37:08,660 --> 00:37:12,580 Alguém sabe qual a versão maioria das pessoas estão neste momento 519 00:37:12,580 --> 00:37:15,110 se eles estão comprando novos roteadores sem fio e esse tipo de coisa? 520 00:37:15,110 --> 00:37:24,290 N. Exatamente. Bingo. E verifica-se que o padrão de corrente alternada está saindo de uma fase de projecto, 521 00:37:24,290 --> 00:37:28,050 e há outras versões sobre o caminho. 522 00:37:28,050 --> 00:37:31,190 Com cada um desses padrões que estamos ganhando mais largura de banda, 523 00:37:31,190 --> 00:37:33,900 mais dados a uma taxa mais rápida. 524 00:37:33,900 --> 00:37:36,260 Essas coisas continuam mudando muito rapidamente. 525 00:37:36,260 --> 00:37:39,880 Ele também faz com que nós temos que comprar mais roteadores e todas essas coisas divertidas. 526 00:37:39,880 --> 00:37:48,160 >> Vamos falar sobre o que realmente é a comunicação sem fio em seu núcleo. 527 00:37:48,160 --> 00:37:51,790 Com Ethernet e os velhos modems dial-up, 528 00:37:51,790 --> 00:37:55,780 você realmente tinha essa coisa que você conectado ao seu computador, 529 00:37:55,780 --> 00:37:59,820 e então você conectado a um modem do tipo, e então você plugado em uma tomada de parede. 530 00:37:59,820 --> 00:38:01,820 Você tinha essa conexão com fio, certo? 531 00:38:01,820 --> 00:38:06,030 O ponto inteiro de fio é se livrar dessas coisas. 532 00:38:06,030 --> 00:38:10,300 A fim de fazer isso, o que temos é essencialmente 533 00:38:10,300 --> 00:38:13,960 uma comunicação de rádio, onde o nosso roteador sem fio - 534 00:38:13,960 --> 00:38:16,230 designado pelo nosso pequeno ícone sem fio - 535 00:38:16,230 --> 00:38:21,730 está conectado à Internet com esta seta sólida indicando algum tipo de conexão com fio, 536 00:38:21,730 --> 00:38:24,640 mas quando você se conectar ao roteador sem fio 537 00:38:24,640 --> 00:38:29,190 você está realmente usando quase como um walkie-talkie entre 538 00:38:29,190 --> 00:38:31,960 o computador eo roteador sem fio. 539 00:38:31,960 --> 00:38:35,150 O que é realmente legal sobre isso é que você pode se mover. 540 00:38:35,150 --> 00:38:40,900 Você pode levar seu computador todo Sanders, vá navegar na web, o que você quiser, 541 00:38:40,900 --> 00:38:43,240 como você todos conhecemos e amamos, 542 00:38:43,240 --> 00:38:46,030 e você não tem que sempre ser conectado a nada. 543 00:38:46,030 --> 00:38:53,880 Para que isso funcione, temos tanto a recepção deste e de transmissão. 544 00:38:53,880 --> 00:38:56,060 É realmente como que walkie-talkie. 545 00:38:56,060 --> 00:39:03,800 >> Este roteador sem fio - que em Sanders está sentado debaixo deste estágio, aqui - 546 00:39:03,800 --> 00:39:06,590 é sempre transmitindo e recebendo, transmitindo e recebendo, 547 00:39:06,590 --> 00:39:09,330 e da mesma forma, os computadores estão todos fazendo esse tipo de coisa, também. 548 00:39:09,330 --> 00:39:12,840 Nós simplesmente não podemos ouvi-lo. 549 00:39:12,840 --> 00:39:17,900 A outra coisa que você pode fazer é que você pode ter vários computadores 550 00:39:17,900 --> 00:39:22,200 falando ao mesmo roteador sem fio. 551 00:39:22,200 --> 00:39:25,680 O mais próximo estiver de um roteador - e, novamente, esta é uma comunicação de rádio - 552 00:39:25,680 --> 00:39:30,320 quanto mais perto você estiver, melhor o sinal, melhor o seu computador 'ouve' o roteador 553 00:39:30,320 --> 00:39:32,460 e pode se comunicar com a Internet. 554 00:39:32,460 --> 00:39:39,520 Se vocês estão sempre em seu dormitório, em sua casa e você está se perguntando por que o seu sinal é ruim, 555 00:39:39,520 --> 00:39:42,230 provavelmente é porque a). você não está muito perto de seu roteador ou 556 00:39:42,230 --> 00:39:46,930 b). há algo entre você e seu roteador como uma parede de cimento ou algo 557 00:39:46,930 --> 00:39:50,720 que não deixa as ondas de rádio passam. 558 00:39:50,720 --> 00:39:57,850 >> Vamos falar um pouco sobre o porquê de bandidos como wi-fi. 559 00:39:57,850 --> 00:40:02,980 Bandidos amo wi-fi por alguns motivos. 560 00:40:02,980 --> 00:40:06,670 Aqui é o nosso cara desagradável ruim ali. 561 00:40:06,670 --> 00:40:10,660 Uma razão por que esse cara ruim ama wi-fi 562 00:40:10,660 --> 00:40:18,770 é porque, por padrão, um monte de roteadores wireless vêm e quando você configurá-los, 563 00:40:18,770 --> 00:40:20,950 eles estão sem criptografia. 564 00:40:20,950 --> 00:40:23,970 Este tem sido um problema, e tem havido casos - 565 00:40:23,970 --> 00:40:28,210 várias instâncias, agora - onde vilão mostra-se para a casa de alguém, 566 00:40:28,210 --> 00:40:32,630 percebe-se que há um sem criptografia Wi-Fi para que eles possam se conectar. 567 00:40:32,630 --> 00:40:37,350 Eles se conectam à internet wi-fi, e então começar a baixar todos os tipos de coisas divertidas. 568 00:40:37,350 --> 00:40:40,890 E eles não estão baixando gatinhos, não está baixando filhotes. 569 00:40:40,890 --> 00:40:44,610 Isto é como o BitTorrent. Esta é a desagradável do mais desagradável. 570 00:40:44,610 --> 00:40:48,740 Houve casos em que o FBI ainda se envolvido 571 00:40:48,740 --> 00:40:52,390 pensar que a pessoa que possui a casa é realmente o 572 00:40:52,390 --> 00:40:56,090 ir lá e baixando coisas que realmente não deveria ser. 573 00:40:56,090 --> 00:41:00,730 Tendo unencrypted wi-fi não é definitivamente algo que você quer fazer, 574 00:41:00,730 --> 00:41:06,340 se apenas para não ter o FBI vem bater à sua porta. 575 00:41:06,340 --> 00:41:09,910 >> Outra razão pela qual os maus amo wi-fi 576 00:41:09,910 --> 00:41:13,870 é a razão que David falei anteriormente durante o intervalo. 577 00:41:13,870 --> 00:41:17,240 Porque é uma comunicação de rádio em seu núcleo, 578 00:41:17,240 --> 00:41:22,460 se você souber o canal, você pode ouvir a estação de rádio. 579 00:41:22,460 --> 00:41:31,870 Por exemplo, se há um direito ruim lá sentado no meio à direita ao lado do ponto de acesso, 580 00:41:31,870 --> 00:41:36,830 bem próximo ao roteador sem fio, o bandido pode ouvir todo o tráfego sem fio 581 00:41:36,830 --> 00:41:40,240 que a partir de todos esses computadores. 582 00:41:40,240 --> 00:41:44,590 Na verdade, esses caras - esses poucos sortudos que estão aqui na fila da frente - 583 00:41:44,590 --> 00:41:47,610 porque eles são super-perto de todos esses roteadores sem fio 584 00:41:47,610 --> 00:41:49,950 que sentar-se logo abaixo do palco, 585 00:41:49,950 --> 00:41:53,780 eles seriam capazes de ouvir o tráfego de todos nesta sala inteira 586 00:41:53,780 --> 00:41:59,480 se você estiver conectado a internet wi-fi e começar a navegar através destes pontos de acesso. 587 00:41:59,480 --> 00:42:03,740 Não é muito difícil sentar-se em uma boa posição para farejar e descobrir 588 00:42:03,740 --> 00:42:07,030 o que os outros estão fazendo. 589 00:42:07,030 --> 00:42:10,830 É algo para se manter em mente, especialmente se você não tem certeza de onde o ponto de acesso é, 590 00:42:10,830 --> 00:42:15,010 e você está navegando, digamos, em um Starbucks. 591 00:42:15,010 --> 00:42:17,360 >> Acontece que sniffing e tudo isso 592 00:42:17,360 --> 00:42:19,440 não é realmente difícil de fazer. 593 00:42:19,440 --> 00:42:25,430 Há um programa chamado tcpdump que despeja todos os tipos de tráfego TCP 594 00:42:25,430 --> 00:42:29,910 e você pode executá-lo bastante simples - assim como eu fiz esta manhã. 595 00:42:29,910 --> 00:42:32,810 Aqui está um pouco de um despejo, e aqui está algum do tráfego que estava vindo 596 00:42:32,810 --> 00:42:34,960 minha rede no momento. 597 00:42:34,960 --> 00:42:41,500 Você pode ver - se você é vesgo realmente difícil - há um pouco de Spotify lá. 598 00:42:41,500 --> 00:42:44,050 No topo do tcpdump - porque este é um tipo de dor de usar - 599 00:42:44,050 --> 00:42:48,860 há um programa chamado Wireshark que empacota tudo isso em uma interface gráfica agradável. 600 00:42:48,860 --> 00:42:51,970 Wireshark é super-mão, assim se você passar a ter aulas de rede, 601 00:42:51,970 --> 00:42:56,780 esta é uma ferramenta que você vai amar, uma vez que ajuda a dissecar todos os pacotes 602 00:42:56,780 --> 00:42:59,400 que estão flutuando por aí. 603 00:42:59,400 --> 00:43:01,810 Mas pode também ser usado para o mal. 604 00:43:01,810 --> 00:43:05,810 É muito simples, basta baixar este programa, arranca, 605 00:43:05,810 --> 00:43:09,300 iniciar uma captura de rede, e ver tudo o que está acontecendo - 606 00:43:09,300 --> 00:43:14,130 e filtrar e fazer todo tipo de coisas divertidas com ele. 607 00:43:14,130 --> 00:43:17,930 >> A outra coisa que você pode fazer com a comunicação sem fio 608 00:43:17,930 --> 00:43:25,380 é não só você pode escutar, mas você também pode aprender a mexer com a rede 609 00:43:25,380 --> 00:43:31,020 e injetar suas próprias informações para controlar a experiência que outras pessoas 610 00:43:31,020 --> 00:43:35,140 na mesma rede sem fio está começando. 611 00:43:35,140 --> 00:43:37,140 Vamos dar uma olhada nisso. 612 00:43:37,140 --> 00:43:40,700 Aqui está o Firesheep - que nós conhecemos e amamos desde a semana passada - 613 00:43:40,700 --> 00:43:43,590 o que é que a tecnologia de espionagem. 614 00:43:43,590 --> 00:43:50,360 Se, por exemplo, queríamos ativamente o nosso go bad guy e mexer com 615 00:43:50,360 --> 00:43:52,690 um desses computadores, 616 00:43:52,690 --> 00:43:58,380 neste cenário, temos um computador que tenta surfar para harvard.edu. 617 00:43:58,380 --> 00:44:04,690 O que acontece é, o primeiro computador envia uma mensagem para o roteador sem fio e diz: 618 00:44:04,690 --> 00:44:07,920 hey, eu quero ir www.harvard.edu visita. 619 00:44:07,920 --> 00:44:10,610 Digamos, por alguma razão, eles estão tentando obter informações sobre o jogo deste fim de semana. 620 00:44:10,610 --> 00:44:14,940 Cara ruim, já que ele está sentado bem no meio, 621 00:44:14,940 --> 00:44:18,730 bem próximo ao ponto de acesso, pode ver que a comunicação vem do computador 622 00:44:18,730 --> 00:44:26,170 no roteador, e ele sabe, "Aha! Alguém vai harvard.edu". (Maldosamente risos) 623 00:44:26,170 --> 00:44:33,870 Não vai ser esta latência enquanto a comunicação vai do roteador 624 00:44:33,870 --> 00:44:37,780 para a Internet para ir encontrar a página na harvard.edu - 625 00:44:37,780 --> 00:44:42,020 assim como vocês todos sabem depois de fazer o seu PHP Série de Exercícios - 626 00:44:42,020 --> 00:44:45,680 e assim o bandido tem um pouco de tempo, um pouco de janela, 627 00:44:45,680 --> 00:44:49,410 em que ele pode responder com algumas coisas. 628 00:44:49,410 --> 00:44:53,660 >> Vamos dizer que esse cara ruim, é claro, é uma Yaley. 629 00:44:53,660 --> 00:44:59,990 Ele responde com harvardsucks.org. Boo! 630 00:44:59,990 --> 00:45:02,300 Cara muito, muito mau! Yaley ruim! 631 00:45:02,300 --> 00:45:06,020 Ou, pior ainda, ele pode responder com isso. [Http://youtu.be/ZSBq8geuJk0]. 632 00:45:06,020 --> 00:45:09,530 Eu vou deixar vocês descobrir o que é. 633 00:45:09,530 --> 00:45:14,840 Esta é realmente uma tecnologia chamada Airpwn! que foi estreou em 634 00:45:14,840 --> 00:45:18,950 uma das conferências de segurança de alguns anos atrás. 635 00:45:18,950 --> 00:45:25,190 Com Airpwn! você é realmente capaz de injetar o tráfego de volta para a rede. 636 00:45:25,190 --> 00:45:30,060 Os computadores que estavam tentando ir para a Internet e tentar chegar a 637 00:45:30,060 --> 00:45:33,090 Google.com, para Facebook.com, para harvard.edu 638 00:45:33,090 --> 00:45:39,190 ver a resposta malicioso entrar e assumir imediatamente, ok, 639 00:45:39,190 --> 00:45:43,550 essa é a resposta que eu estava esperando e acabam recebendo o conteúdo de 640 00:45:43,550 --> 00:45:48,860 harvardsucks.org ou nameyourfavoriteshocksite.com, 641 00:45:48,860 --> 00:45:55,270 e você pode ver como rapidamente as coisas vão piorar. 642 00:45:55,270 --> 00:46:00,190 >> Todos esses tipos de coisas não pode ser feito 643 00:46:00,190 --> 00:46:05,870 com estas conexões com fio, pois com uma conexão com fio 644 00:46:05,870 --> 00:46:08,710 é difícil de espionar para o tráfego. 645 00:46:08,710 --> 00:46:13,020 Se eu sou um cara mau e em uma extremidade é o seu computador 646 00:46:13,020 --> 00:46:14,460 e do outro lado é o seu roteador - seu modem - 647 00:46:14,460 --> 00:46:20,180 a única maneira que eu possa entrar em entre essa conexão é realmente emendar o meu computador 648 00:46:20,180 --> 00:46:22,180 em algum lugar no meio 649 00:46:22,180 --> 00:46:26,820 ou fazer outra coisa com o roteador, a jusante algo assim. 650 00:46:26,820 --> 00:46:33,360 Mas com wireless, que pode ser tão fácil como sentada na fileira da frente de uma sala de aula, 651 00:46:33,360 --> 00:46:38,200 e você pode fazer todo tipo de coisas desagradáveis ​​para as pessoas na parte de trás. 652 00:46:38,200 --> 00:46:41,570 >> Vamos falar sobre como você pode defender algumas dessas coisas. 653 00:46:41,570 --> 00:46:46,860 As pessoas que desenvolveram os padrões sem fio - a - 802,11 654 00:46:46,860 --> 00:46:50,820 eles não são pessoas burras por qualquer extensão da imaginação. 655 00:46:50,820 --> 00:46:56,110 Esta é uma tecnologia legal e quando estreou em 1999, 656 00:46:56,110 --> 00:47:00,780 eles saíram com este padrão chamado WEP. 657 00:47:00,780 --> 00:47:03,360 Você pode ver aqui quando você tenta e participar de uma rede sem fio, 658 00:47:03,360 --> 00:47:07,450 você tem todos os tipos de opções de segurança diferentes. 659 00:47:07,450 --> 00:47:11,800 Isso é um tipo de dor, porque há seis todos juntos 660 00:47:11,800 --> 00:47:14,790 e nunca realmente faz sentido que uma para participar. 661 00:47:14,790 --> 00:47:19,190 Este 1 no topo é o primeiro que veio com chamado WEP. 662 00:47:19,190 --> 00:47:27,960 WEP significa Wired Equivalent Privacy, creio eu, 663 00:47:27,960 --> 00:47:31,730 Não Wireless Encryption Protocol que é um equívoco comum. 664 00:47:31,730 --> 00:47:36,170 Porque tenta dar-lhe o equivalente a privacidade e proteção de segurança 665 00:47:36,170 --> 00:47:40,590 equivalente ao de uma rede com fio 666 00:47:40,590 --> 00:47:46,710 Com WEP que acaba acontecendo é, 667 00:47:46,710 --> 00:47:52,300 você tem uma senha simples e pouco que você digitar e que serve para criptografar 668 00:47:52,300 --> 00:47:56,210 todas as suas comunicações entre o seu computador eo roteador. 669 00:47:56,210 --> 00:47:58,210 >> Qual é o problema com WEP embora? 670 00:47:58,210 --> 00:48:01,470 A senha com WEP é muito curto, 671 00:48:01,470 --> 00:48:04,900 e também todo mundo usa a mesma senha exata, 672 00:48:04,900 --> 00:48:07,610  e por isso é muito fácil de decifrar. 673 00:48:07,610 --> 00:48:10,580 Então, muito rapidamente as pessoas descobriram que o WEP era um problema, 674 00:48:10,580 --> 00:48:16,100 ea única razão que você vê-lo mostrar-se ainda sobre esse cara é pouco - 675 00:48:16,100 --> 00:48:18,890 existem alguns sistemas mais antigos que usam WEP - 676 00:48:18,890 --> 00:48:25,710 o que você deveria estar procurando são o WPA e WPA2 mesmo padrões 677 00:48:25,710 --> 00:48:29,130 que foram liberados mais tarde. 678 00:48:29,130 --> 00:48:35,040 Estes sistemas são um ir muito melhor em proteção na Internet sem fios. 679 00:48:35,040 --> 00:48:41,090 Dito isto, eles ainda têm algum Hackability. 680 00:48:41,090 --> 00:48:44,010 Existem ferramentas lá fora, que pode ir fazer isso. 681 00:48:44,010 --> 00:48:47,490 Uma coisa em particular que pode ser desagradável é que 682 00:48:47,490 --> 00:48:55,370 se você ligar e autenticado para um roteador sem fio e está usando algum tipo de 683 00:48:55,370 --> 00:49:00,940 comunicação criptografada, verifica-se que um hacker pode facilmente enviar um único pacote 684 00:49:00,940 --> 00:49:03,990 para desligar você do roteador, 685 00:49:03,990 --> 00:49:07,220 e uma vez que já desconectado, você podem então escutar - 686 00:49:07,220 --> 00:49:11,800 eles podem cheirar os pacotes como você tentar restabelecer a conexão com o roteador. 687 00:49:11,800 --> 00:49:16,800 E com essa informação que pode, então, entrar e descriptografar o resto de sua comunicação. 688 00:49:16,800 --> 00:49:24,580 Este não é de forma alguma qualquer tipo de seguro além de toda imaginação. 689 00:49:24,580 --> 00:49:30,060 >> A outra coisa que você pode fazer quando você está a criação de redes sem fio 690 00:49:30,060 --> 00:49:35,460 ou você está se juntando a eles é - você perceber que aqui quando eu estou juntando esta rede, 691 00:49:35,460 --> 00:49:37,640 ele pede para o nome da minha rede. 692 00:49:37,640 --> 00:49:41,060 Isso também é conhecido como o SSID. 693 00:49:41,060 --> 00:49:48,610 E você vê aqui que na direita eu tenho uma caixa que me mostra os SSIDs disponíveis. 694 00:49:48,610 --> 00:49:52,690 Há uma Universidade de Harvard, uma CS50 e CS50 uma rede pessoal. 695 00:49:52,690 --> 00:49:59,180 Agora, como muitos de vocês sabiam que havia uma rede de Pessoal CS50 redor? 696 00:49:59,180 --> 00:50:01,910 Alguns de vocês. Nem todos vocês. 697 00:50:01,910 --> 00:50:08,800 O problema com isso, é claro, é que se não colocarmos isto na nossa lista de SSIDs, 698 00:50:08,800 --> 00:50:10,930 ninguém teria sabido sobre isso mais provável. 699 00:50:10,930 --> 00:50:16,090 Espero. A menos que vocês estão tentando crack em nossa sem fio. 700 00:50:16,090 --> 00:50:18,700 Mas isso é algo que você pode fazer que é realmente importante quando você está configurando 701 00:50:18,700 --> 00:50:20,280 um roteador em casa. 702 00:50:20,280 --> 00:50:22,820 Isso provavelmente não vai acontecer por alguns anos para um monte de você, 703 00:50:22,820 --> 00:50:29,010 Mas tenha em mente que a manutenção dessa SSID de lá e também não nomeá-lo 704 00:50:29,010 --> 00:50:34,630 algo super comum ajudará mantê-lo mais seguro no longo prazo. 705 00:50:34,630 --> 00:50:38,070 >> Um casal final de coisas que você pode fazer. Um é HTTPS. 706 00:50:38,070 --> 00:50:44,760 Se você está em um Starbucks, se você estiver em uma área wi-fi público 707 00:50:44,760 --> 00:50:52,620 e você decidir fazer para acessar sua conta bancária, acessar seu Gmail, seu Facebook, 708 00:50:52,620 --> 00:50:56,140 certifique-se de que essas ligações estão indo por HTTPS. 709 00:50:56,140 --> 00:50:59,800 É uma camada adicional de segurança, uma camada adicional de criptografia. 710 00:50:59,800 --> 00:51:01,520 A única coisa a ter em mente aqui é, 711 00:51:01,520 --> 00:51:04,740 quantos de vocês já clicaram em que a tela grande, vermelho, que diz: 712 00:51:04,740 --> 00:51:07,480 "Este site pode ser ruim." 713 00:51:07,480 --> 00:51:09,710 Eu sei que tenho. 714 00:51:09,710 --> 00:51:13,090 É, provavelmente, quando você está navegando tudo para ir ver Pátria ou algo assim, certo? 715 00:51:13,090 --> 00:51:19,900 Sim. (Risos) É. Lá você vai. Nós sabemos quem está assistindo Pátria. 716 00:51:19,900 --> 00:51:24,540 Que a tela grande, vermelho ali 717 00:51:24,540 --> 00:51:28,600 muitas vezes indica que algo funky está acontecendo. 718 00:51:28,600 --> 00:51:32,530 Às vezes é apenas o site em si é inseguro, 719 00:51:32,530 --> 00:51:35,520 mas que mesmo tela grande, vermelho surge quando as pessoas estão tentando 720 00:51:35,520 --> 00:51:37,520 montagem de rede ataca em você. 721 00:51:37,520 --> 00:51:40,220 Então, se você ver que a tela grande, vermelho chegar em um Starbucks, 722 00:51:40,220 --> 00:51:42,440 não clique por ele. 723 00:51:42,440 --> 00:51:45,350 Más notícias. Bad News Bears. 724 00:51:45,350 --> 00:51:51,490 >> A última coisa que você pode olhar para 725 00:51:51,490 --> 00:51:54,120 é algum tipo de VPN. 726 00:51:54,120 --> 00:52:00,280 Este VPN está disponível através de Harvard - vpn.fas.harvard.edu - 727 00:52:00,280 --> 00:52:03,260 eo que isto significa é que, na verdade, estabelece uma conexão segura 728 00:52:03,260 --> 00:52:06,460 entre você e Harvard, funis de tráfego do seu meio-lo, 729 00:52:06,460 --> 00:52:12,160 e de que maneira se você está sentado em um lugar como a Starbucks 730 00:52:12,160 --> 00:52:19,030 você pode conectar-se a Harvard, conseguir que o tráfego seguro, e depois procurar em Harvard. 731 00:52:19,030 --> 00:52:21,950 Novamente, não é infalível. As pessoas podem ficar no meio. 732 00:52:21,950 --> 00:52:25,850 Eles podem começar a quebrá-lo, mas isso é muito mais seguro do que confiam na segurança 733 00:52:25,850 --> 00:52:28,620 do sozinho wi-fi. 734 00:52:28,620 --> 00:52:32,570 >> Tudo bem. Em suma, 735 00:52:32,570 --> 00:52:34,580 quando você está a criação de redes sem fio, 736 00:52:34,580 --> 00:52:37,250 quando você está indo para usar sem fio em público - 737 00:52:37,250 --> 00:52:43,430 se é um Starbucks, se é Five Guys, se é b.good, 738 00:52:43,430 --> 00:52:46,440 algo assim - onde quer que eles têm wi-fi - 739 00:52:46,440 --> 00:52:48,440 estar ciente de seus arredores. 740 00:52:48,440 --> 00:52:50,440 Estar ciente de que as pessoas podem fazer. 741 00:52:50,440 --> 00:52:53,890 E ser seguro. Não acessar sua conta bancária. 742 00:52:53,890 --> 00:52:58,740 Poderia ser um violento despertar se alguém aparece com a senha mais tarde. 743 00:52:58,740 --> 00:53:05,480 Com isso, vá vermelho! E eu vou virar as coisas de volta para David por uma palavra final. 744 00:53:05,480 --> 00:53:11,270 (Aplausos) 745 00:53:11,270 --> 00:53:14,360 >> [David] Eu pensei que eu iria partilhar uma coisa com a experiência pessoal. 746 00:53:14,360 --> 00:53:19,940 Uma ferramenta que você pode gostar de jogar com - embora a Apple praticamente erradicada esta questão 747 00:53:19,940 --> 00:53:22,710 Se você já atualizou o seu software uma vez que - 748 00:53:22,710 --> 00:53:26,670 mas para este fim de realmente não ser capaz de confiar em software que usamos, 749 00:53:26,670 --> 00:53:33,270 e pontos de Nate, sendo capaz de farejar um pouco do que as outras pessoas estão fazendo 750 00:53:33,270 --> 00:53:37,010 lá fora - este era um pedaço de software que saiu cerca de um ano atrás-e-um-metade agora. 751 00:53:37,010 --> 00:53:39,010 [IPhoneTracker] [http://petewarden.github.com/iPhoneTracker/] 752 00:53:39,010 --> 00:53:41,010 Por algum tempo, o iTunes - antes iCloud, quando você estava sincronizar seus iPods ou iPhones ou seus 753 00:53:41,010 --> 00:53:45,570 ou de seus iPads com o iTunes - no interesse de backups, 754 00:53:45,570 --> 00:53:48,340 o que o seu iPhone e estes outros dispositivos vêm fazendo há algum tempo é 755 00:53:48,340 --> 00:53:50,340 fazendo uso de dados de GPS. 756 00:53:50,340 --> 00:53:52,710 >> Todos sabem, talvez, que os seus iPhones e Androids e Windows Mobile 757 00:53:52,710 --> 00:53:55,410 e como nos dias de hoje pode acompanhar onde você está no interesse de mostrar-lhe mapas 758 00:53:55,410 --> 00:53:59,440 e similares - bem o que a Apple e essas empresas fazem é 759 00:53:59,440 --> 00:54:02,650 eles normalmente acompanhar quase todos os lugares que você realmente sido do interesse de 760 00:54:02,650 --> 00:54:05,380 melhoria da qualidade de serviço. 761 00:54:05,380 --> 00:54:07,170 Um, você pode receber mais publicidade segmentada e similares, 762 00:54:07,170 --> 00:54:10,740 mas dois, eles também podem descobrir onde há hotspots sem fio do mundo, 763 00:54:10,740 --> 00:54:14,780 e isso pode ajudar com geo-localização - uma espécie de triangulação da posição das pessoas. 764 00:54:14,780 --> 00:54:18,520 >> Para encurtar a história, todos nós tínhamos andado antenas para uma certa quantidade de tempo. 765 00:54:18,520 --> 00:54:22,180 Infelizmente, a Apple tinha tomado a decisão de projeto - ou a falta dela - 766 00:54:22,180 --> 00:54:26,590 para não criptografar esta informação quando estava sendo backup para o iTunes. 767 00:54:26,590 --> 00:54:30,330 E o que o pesquisador de segurança descobriu foi que este foi apenas um grande arquivo XML - 768 00:54:30,330 --> 00:54:33,810 um arquivo de texto enorme - sentado em software pessoas iTunes, 769 00:54:33,810 --> 00:54:35,400 e se você fosse apenas um pouco curioso, 770 00:54:35,400 --> 00:54:38,990 você poderia ir picando em torno da história de seu cônjuge, a história da sua colega de quarto, 771 00:54:38,990 --> 00:54:41,050 a história do seu irmão e semelhantes, 772 00:54:41,050 --> 00:54:44,590 e graças a algum software livre, você pode traçar todas essas coordenadas GPS - 773 00:54:44,590 --> 00:54:46,590 latitude e longitude. 774 00:54:46,590 --> 00:54:48,590 >> Então, eu realmente fiz isso com o meu próprio telefone. 775 00:54:48,590 --> 00:54:51,210 Liguei no meu telefone, e com certeza, a minha versão do iTunes não foi codificado na época, 776 00:54:51,210 --> 00:54:53,900 eo que eu era capaz de ver eram os meus próprios padrões. 777 00:54:53,900 --> 00:54:56,970 Aqui está os Estados Unidos e cada um desses círculos azuis representa 778 00:54:56,970 --> 00:55:01,670 onde aconteceu de eu ter sido ao longo desses meses anteriores de possuir este telefone particular. 779 00:55:01,670 --> 00:55:04,940  Eu gasto um monte de tempo, é claro, no Nordeste, um pouco de tempo na Califórnia, 780 00:55:04,940 --> 00:55:08,690 uma viagem de curta duração para o Texas, e se você então ampliar esse - 781 00:55:08,690 --> 00:55:11,120 este é todo o tipo de multa e interessante, mas eu sabia que isso. 782 00:55:11,120 --> 00:55:13,890 A maioria dos meus amigos sabia disso, mas se você mergulhar no mais profundo, 783 00:55:13,890 --> 00:55:17,090 você ver onde eu passar a maior parte do meu tempo no Nordeste. 784 00:55:17,090 --> 00:55:20,330 Se você trancar em algumas cidades de aspecto familiar - 785 00:55:20,330 --> 00:55:24,670 este grande, mancha de tinta azul é essencialmente centrada sobre Boston, 786 00:55:24,670 --> 00:55:29,510 e então eu gastar um pouco de tempo nos subúrbios que saem de Boston. 787 00:55:29,510 --> 00:55:32,780 Mas eu também estava fazendo um pouco de consultar esse ano. 788 00:55:32,780 --> 00:55:36,090 E este ano é a costa leste, e você pode realmente ver-me 789 00:55:36,090 --> 00:55:41,920 e meu iPhone no meu bolso viajar para trás e para frente entre Boston e Nova York 790 00:55:41,920 --> 00:55:47,510 e Filadélfia ainda mais para baixo, assim como gastar um pouco de tempo de férias 791 00:55:47,510 --> 00:55:50,340 no Cabo, que é o braço pouco lá fora. 792 00:55:50,340 --> 00:55:53,030 Assim, cada um desses pontos representa algum lugar que eu tinha sido, 793 00:55:53,030 --> 00:55:56,970 e completamente desconhecido para mim, toda essa história estava ali, sentado 794 00:55:56,970 --> 00:55:58,410 no meu computador desktop. 795 00:55:58,410 --> 00:56:00,470 Se você diminuir o zoom - esta, na verdade, foi um pouco preocupante. 796 00:56:00,470 --> 00:56:04,190 Eu não tinha nenhuma lembrança de nunca ter sido, na Pensilvânia nesse ano. 797 00:56:04,190 --> 00:56:07,840 Mas apesar de um pouco mais sobre isso e eu descobri, oh, era na verdade a viagem 798 00:56:07,840 --> 00:56:11,160 e com certeza, o meu telefone tinha me pegou. 799 00:56:11,160 --> 00:56:14,180 >> A Apple já codificado esta informação, 800 00:56:14,180 --> 00:56:17,380 mas isso também é apenas prova de quanta informação está sendo coletada sobre nós, 801 00:56:17,380 --> 00:56:20,850 e como é fácil - para melhor ou para pior - é aceitável. 802 00:56:20,850 --> 00:56:23,340 Um dos take-aways espero de falar de Rob, de falar de Nate 803 00:56:23,340 --> 00:56:27,370 e visuais pequenas como esta hoje é apenas para ser tudo o mais consciente deste 804 00:56:27,370 --> 00:56:31,160 de modo que, mesmo que - como o ponto de Rob - uma espécie de nós estamos ferrados, certo? 805 00:56:31,160 --> 00:56:33,920 Não há muito o que podemos fazer quando se trata de algumas dessas ameaças, 806 00:56:33,920 --> 00:56:37,130 mas no final do dia, temos de confiar em algo ou alguém 807 00:56:37,130 --> 00:56:38,510 se queremos realmente usar essas tecnologias. 808 00:56:38,510 --> 00:56:43,150 Pelo menos podemos tomar decisões e decisões informadas calculados ou não 809 00:56:43,150 --> 00:56:46,390 devemos realmente estar verificando esta conta particularmente sensível 810 00:56:46,390 --> 00:56:49,330 ou nós realmente deve ser o envio de que um pouco suspeito mensagem instantânea 811 00:56:49,330 --> 00:56:52,180  em um ambiente wi-fi como este. 812 00:56:52,180 --> 00:56:54,990 >> Então, com o que disse, apenas uma permanece quiz, uma palestra permanece. 813 00:56:54,990 --> 00:56:57,740 Vemo-nos na quarta-feira depois segunda-feira. 814 00:56:57,740 --> 00:57:02,100 (Aplausos e exclamações) 815 00:57:02,100 --> 00:57:06,100 [CS50TV]