1 00:00:00,000 --> 00:00:02,750 [Powered by Google Translate] [Semaine 10] 2 00:00:02,750 --> 00:00:04,750 [David J. Malan] [Université de Harvard] 3 00:00:04,750 --> 00:00:07,000 [C'est CS50.] [CS50.TV] 4 00:00:08,520 --> 00:00:13,240 >> Très bien! C'est CS50, mais pas pour très longtemps. 5 00:00:13,240 --> 00:00:14,740 C'est le début de la semaine 10. 6 00:00:14,740 --> 00:00:18,780 Mercredi, nous avons notre quiz, puis lundi prochain, nous avons un peu de gâteau de fête 7 00:00:18,780 --> 00:00:22,030 comme nous l'avons fait un tour complet tous le chemin du retour de zéro semaine. 8 00:00:22,030 --> 00:00:25,200 Aujourd'hui, nous parlons de l'un de mes sujets favoris, à vrai dire - 9 00:00:25,200 --> 00:00:29,000 celui de la sécurité et de la vie privée et les implications de l'ensemble du matériel et des logiciels 10 00:00:29,000 --> 00:00:31,000 que nous utilisons tous ces jours-ci. 11 00:00:31,000 --> 00:00:33,300 Pour être honnête, il ya beaucoup de menaces là-bas 12 00:00:33,300 --> 00:00:35,430 que si vous n'avez pas vraiment pris le temps de penser à eux, 13 00:00:35,430 --> 00:00:36,920 ils sont en fait assez intimidant. 14 00:00:36,920 --> 00:00:40,070 Affaire au point - si quelqu'un d'entre vous avez déjà téléchargé un morceau de logiciel 15 00:00:40,070 --> 00:00:42,660 à partir d'Internet et installé sur votre ordinateur, 16 00:00:42,660 --> 00:00:45,220 vous avez engagé dans un important degré de confiance, non? 17 00:00:45,220 --> 00:00:50,220 Il n'ya rien avoir empêché Skype, ou Chrome, ou n'importe quel logiciel 18 00:00:50,220 --> 00:00:54,770 vous avez installé sur votre ordinateur, de la simple suppression de tous les fichiers sur votre disque dur; 19 00:00:54,770 --> 00:00:58,260 de télécharger tous les fichiers sur votre disque dur au serveur un gars de bad; 20 00:00:58,260 --> 00:01:01,650 à la lecture de tous vos e-mails, d'intercepter tous vos messages instantanés. 21 00:01:01,650 --> 00:01:05,040 Parce que la réalité est aujourd'hui avec les systèmes d'exploitation les plus modernes 22 00:01:05,040 --> 00:01:10,040 il n'y a vraiment pas grand-chose d'un mur entre les logiciels que nous installons, 23 00:01:10,040 --> 00:01:14,220 et vous et moi sont à peu près juste une sorte de croiser les doigts et la prise sur la foi 24 00:01:14,220 --> 00:01:17,750 que cette application nous avons téléchargé gratuitement, ou cette chose qui est de 99 cents, 25 00:01:17,750 --> 00:01:20,140 est en réalité tout à fait bénigne. 26 00:01:20,140 --> 00:01:23,090 Mais comme nous l'avons vu à travers C, et maintenant PHP et JavaScript 27 00:01:23,090 --> 00:01:25,420 avec cette capacité de nous exprimer par programmation, 28 00:01:25,420 --> 00:01:30,300 vous pouvez faire presque n'importe quoi que vous voulez avec un programme que l'utilisateur lui-même ou elle-même pourrait faire. 29 00:01:30,300 --> 00:01:32,390 >> Donc, aujourd'hui, nous nous concentrons sur ce sujet - 30 00:01:32,390 --> 00:01:35,360 non seulement des menaces mais aussi des défenses. 31 00:01:35,360 --> 00:01:37,540 En effet, dans le monde de la sécurité en général, 32 00:01:37,540 --> 00:01:39,040 il ya un peu de ce jeu du chat et de la souris, 33 00:01:39,040 --> 00:01:41,990 et j'ose dire que les méchants ont presque toujours une longueur d'avance. 34 00:01:41,990 --> 00:01:45,880 Quand il s'agit de tirer parti du matériel et des logiciels sur nos ordinateurs personnels, 35 00:01:45,880 --> 00:01:51,250 nous devons prendre conscience que le méchant a simplement besoin de trouver une simple erreur - 36 00:01:51,250 --> 00:01:56,150 un exploit, un bug - dans un morceau de logiciel que nous avons écrit ou sont en cours d'exécution 37 00:01:56,150 --> 00:01:58,280 pour que lui ou elle de prendre en charge tout notre système. 38 00:01:58,280 --> 00:02:02,870 En revanche, nous - les bons - besoin de patcher et de corriger tous les bugs 39 00:02:02,870 --> 00:02:04,900 et d'éviter toutes ces faiblesses. 40 00:02:04,900 --> 00:02:07,870 Et donc, si j'ose dire, dans l'ensemble, les méchants ont l'avantage. 41 00:02:07,870 --> 00:02:10,840 Quelles sont les classes de ce genre et classes suivantes sont vraiment de 42 00:02:10,840 --> 00:02:14,830 ne sont pas de vous enseigner la façon de mener les batailles que ces méchants font, 43 00:02:14,830 --> 00:02:18,220 mais sur la façon de vous protéger, ou du moins la façon de rendre une décision calculée 44 00:02:18,220 --> 00:02:22,970 que, oui, je sais que ce logiciel pourrait en effet lire tous mes e-mails, 45 00:02:22,970 --> 00:02:27,040 mais je suis d'accord avec cela en raison de la valeur qu'elle m'amène d'autre part. 46 00:02:27,040 --> 00:02:31,060 >> Je suis très heureux d'être accompagné par 2 personnes les plus intelligentes que je connaisse - 47 00:02:31,060 --> 00:02:33,060 Rob Bowden et Nate Hardison. 48 00:02:33,060 --> 00:02:36,850 Rob est sur le point de nous prendre pour une tournée à travers le niveau le plus bas des étiquettes de sécurité - 49 00:02:36,850 --> 00:02:42,470 celui du compilateur qui, jusqu'à maintenant, nous avons tous appris à aimer et faire confiance. Rob Bowden. 50 00:02:42,470 --> 00:02:47,790 [Applaudissements] 51 00:02:47,790 --> 00:02:50,280 >> [Rob] Très bien. David a assez bien pris mon spiel ensemble 52 00:02:50,280 --> 00:02:52,320 que je vais vous présenter avec, mais - 53 00:02:52,320 --> 00:02:58,070 Il ya quelques semaines, vous avez vu l'exemple d'une attaque par débordement de buffer 54 00:02:58,070 --> 00:03:01,900 qui est un exemple de piratage pirate dans un certain morceau de logiciel 55 00:03:01,900 --> 00:03:06,060 qu'ils ne sont pas censés être dans le piratage. 56 00:03:06,060 --> 00:03:09,690 L'autre côté de cette 57 00:03:09,690 --> 00:03:14,470 est parfois, vous disposez d'un logiciel malveillant qui est en elle-même. 58 00:03:14,470 --> 00:03:17,070 Il n'a même pas besoin d'être piraté. 59 00:03:17,070 --> 00:03:20,670 La personne qui a écrit le logiciel veut vous pirater. 60 00:03:20,670 --> 00:03:22,190 >> Disons simplement sauter à droite dans le code, 61 00:03:22,190 --> 00:03:28,560 jeter un oeil à "login.c". 62 00:03:28,560 --> 00:03:33,390 Ici, un programme stupide qui valide un nom d'utilisateur et mot de passe association. 63 00:03:33,390 --> 00:03:39,420 Ici, vous devez certainement être de se familiariser avec de nouveau sur C pour le quiz. 64 00:03:39,420 --> 00:03:43,470 Tout d'abord, nous utilisons pour décrire l'obtenir le nom d'utilisateur, 65 00:03:43,470 --> 00:03:46,280 puis nous utilisons chaîne get pour récupérer le mot de passe, 66 00:03:46,280 --> 00:03:50,680 et puis nous avons quelques vérifications triviales de juste, c'est le nom d'utilisateur "rob"? 67 00:03:50,680 --> 00:03:52,710 Et le mot de passe "thisiscs50»? 68 00:03:52,710 --> 00:03:56,900 Ou, est le nom d'utilisateur "tommy" et le mot de passe "i <3javascript»? 69 00:03:56,900 --> 00:03:58,980 Si l'un d'entre eux est le cas, 70 00:03:58,980 --> 00:04:01,980  puis nous allons juste d'imprimer "Success", puis nous avons accès. 71 00:04:01,980 --> 00:04:07,690 Sinon, nous allons imprimer "invalid login" puis, bien sûr, 72 00:04:07,690 --> 00:04:11,120  puisque la mémoire croquis chaînes malloc, nous identifiant et mot de passe gratuit. 73 00:04:11,120 --> 00:04:15,560 Il s'agit d'un programme de connexion triviale, 74 00:04:15,560 --> 00:04:18,110 et si vous pensez quand vous vous connectez à l'appareil, 75 00:04:18,110 --> 00:04:22,350 il est assez similaire - ou même se connecter à votre ordinateur - 76 00:04:22,350 --> 00:04:24,930 il ya juste un autre programme de connexion qui vous donne accès. 77 00:04:24,930 --> 00:04:31,840 Ici, nous avons la chance d'avoir codé en dur "rob", "thisiscs50», «tommy», «i <3javascript», 78 00:04:31,840 --> 00:04:34,950 mais probablement il ya un fichier quelque part sur votre système d'exploitation 79 00:04:34,950 --> 00:04:38,690 qui a une liste de noms d'utilisateurs qui peuvent se connecter au système 80 00:04:38,690 --> 00:04:41,740 et une liste de mots de passe associés à ces utilisateurs. 81 00:04:41,740 --> 00:04:46,090 Habituellement, les mots de passe ne sont pas stockés en clair juste comme ça. 82 00:04:46,090 --> 00:04:50,360 Il ya une sorte de cryptage, mais ce sera pour notre exemple. 83 00:04:50,360 --> 00:04:57,000 >> Venir au cours de notre compilateur - 84 00:04:57,020 --> 00:05:00,780 ça va être très simple. 85 00:05:00,780 --> 00:05:04,800 Nous avons besoin de spécifier au moins un fichier que l'on veut compiler, 86 00:05:04,800 --> 00:05:10,200 et puis ici - ces lignes 87 00:05:10,200 --> 00:05:12,520 sont en train de lire un fichier A. 88 00:05:12,520 --> 00:05:16,080 Il lit le fichier entier en un seul gros buffer, 89 00:05:16,080 --> 00:05:19,000 puis nous null-fin à notre tampon comme toujours, 90 00:05:19,000 --> 00:05:21,000 et enfin nous venons de compiler le fichier. 91 00:05:21,000 --> 00:05:24,090 Nous n'allons pas examiner la façon dont la compilation est effectivement mis en œuvre, 92 00:05:24,090 --> 00:05:26,820 mais comme un indice, il appelle simplement Clang. 93 00:05:26,820 --> 00:05:32,370 Nous allons utiliser ce programme pour compiler des choses au lieu de Clang. 94 00:05:32,370 --> 00:05:39,260 Un problème que nous commençons par nous voyons est que nous voulons établir notre compilateur, 95 00:05:39,260 --> 00:05:43,620 mais si nous n'allons pas utiliser Clang, je ne sais pas ce que je vais compiler avec. 96 00:05:43,620 --> 00:05:46,700 Il s'agit d'une question d'ordre général connu sous le nom d'amorçage. 97 00:05:46,700 --> 00:05:53,080 Donc, juste pour cette fois, je vais utiliser pour compiler Clang notre compilateur. 98 00:05:53,080 --> 00:05:58,800 >> Si vous pensez que de GCC et Clang - 99 00:05:58,800 --> 00:06:03,200 ces programmes, ces compilateurs sont constamment mis à jour, 100 00:06:03,200 --> 00:06:10,010 et ces compilateurs sont compilés avec GCC et Clang. 101 00:06:10,010 --> 00:06:14,890 Clang est juste un grand C ou C + +, 102 00:06:14,890 --> 00:06:19,510 de sorte que le compilateur qu'ils utilisent pour compiler c'est Clang. 103 00:06:19,510 --> 00:06:26,820 Ici, maintenant, nous allons nous contenter d'utiliser notre compilateur pour compiler le compilateur, 104 00:06:26,820 --> 00:06:33,830 et on peut même dire - '/ compilateur.', 'compiler.c »,« compile.c', '-o compilateur. 105 00:06:33,830 --> 00:06:37,250 Remarquez ceci est la commande exacte que j'ai couru avant - 106 00:06:37,250 --> 00:06:41,330 il suffit de remplacer Clang par '. / compilateur. 107 00:06:41,330 --> 00:06:44,990 Et maintenant nous avons un autre compilateur, mais c'est exactement la même chose. 108 00:06:44,990 --> 00:06:47,510 Il appelle simplement Clang. 109 00:06:47,510 --> 00:06:55,050 >> Nous allons utiliser notre compilateur pour compiler notre programme de connexion. 110 00:06:55,050 --> 00:07:03,030 Okay - ". / Compilateur login.c-o login". 111 00:07:03,030 --> 00:07:06,160 Donc, undefined reference to "GetString". 112 00:07:06,160 --> 00:07:11,250 Vous avez une "-lcs50". Okay. 113 00:07:11,250 --> 00:07:13,790 Alors maintenant, j'ai de notre programme de connexion. 114 00:07:13,790 --> 00:07:16,790 Il Running - recevoir "S'il vous plaît entrer votre nom d'utilisateur". 115 00:07:16,790 --> 00:07:22,140 Un exemple a été rob. S'il vous plaît entrer votre mot de passe - thisiscs50. 116 00:07:22,140 --> 00:07:24,930 Et le succès! J'ai accès. 117 00:07:24,930 --> 00:07:28,350 L'exécuter à nouveau et saisissant une partie de mot de passe invalide - 118 00:07:28,350 --> 00:07:30,350 ou nom d'utilisateur valide et mot de passe - 119 00:07:30,350 --> 00:07:32,860 Mot de passe incorrect. 120 00:07:32,860 --> 00:07:37,740 Okay. Rien d'intéressant à propos de cette mesure. 121 00:07:37,740 --> 00:07:43,100 Mais, nous allons jeter un oeil à la connexion à nouveau - 122 00:07:43,100 --> 00:07:47,850 et cela va être un exemple un peu trivial, 123 00:07:47,850 --> 00:07:59,330 mais il faut ajouter un autre ici et dire: else if ((strcmp (nom d'utilisateur, "hacker") == 0 && 124 00:07:59,330 --> 00:08:14,510 strcmp (mot de passe, "LOLihackyou") == 0)) 125 00:08:14,510 --> 00:08:26,280 alors maintenant, printf ("Hacked Vous avez maintenant accès \ n!."); bien. 126 00:08:26,280 --> 00:08:36,240 La compilation de cette - compilateur login.c-o login-lcs50 - 127 00:08:36,240 --> 00:08:40,190 connexion fonctionne maintenant - et si je utiliser mon nom d'utilisateur pirate 128 00:08:40,190 --> 00:08:44,740 et mot de passe LOLihackedyou - 129 00:08:44,740 --> 00:08:47,780 Ai-je tort de le taper là avant? 130 00:08:47,780 --> 00:08:52,990 Au-login.c-ihack - je vais ne piraté parce que je pense que je le faire plus tard. 131 00:08:52,990 --> 00:08:56,270 Okay. Recompiler. 132 00:08:56,270 --> 00:09:01,500 Re-fonctionnement - pirate - LOLihackedyou - 133 00:09:01,500 --> 00:09:03,650 Hacked! Vous avez maintenant accès. 134 00:09:03,650 --> 00:09:06,580 >> Il ne semble pas y avoir que beaucoup de différence 135 00:09:06,580 --> 00:09:10,890 parce que c'est la même vérification exacte que je faisais pour les noms d'utilisateur et mots de passe d'autres. 136 00:09:10,890 --> 00:09:17,720 De plus, la grande chose est que si d'autres personnes regarder cette login.c-- 137 00:09:17,720 --> 00:09:24,020 dire, si je passe cette option pour mon partenaire, et ils ouvrent ce fichier, 138 00:09:24,020 --> 00:09:29,870 et ils lisent cela, ils vont voir - d'accord, pourquoi avez-vous ces lignes de code ici? 139 00:09:29,870 --> 00:09:33,320 Ce n'est évidemment pas quelque chose qui devrait être dans votre programme. 140 00:09:33,320 --> 00:09:41,590 Dans certains programmes - comme tout logiciel propriétaire qui n'est pas open-source - 141 00:09:41,590 --> 00:09:46,200 vous ne verrez jamais ces lignes de code. 142 00:09:46,200 --> 00:09:50,440 Quelque chose comme Skype ou quelque chose - pour tout ce que vous savez, 143 00:09:50,440 --> 00:09:57,600 Skype est sur votre ordinateur et il n'y a que quelques-uns spécifique nom_utilisateur-password combinaison 144 00:09:57,600 --> 00:10:01,580 qui va se connecter à Skype d'une manière spéciale. 145 00:10:01,580 --> 00:10:04,230 Nous ne savons pas à ce sujet, et les gens ne le savent pas, 146 00:10:04,230 --> 00:10:09,640 parce qu'ils ne reçoivent pas à lire le code source pour voir qu'il ya ce trou. 147 00:10:09,640 --> 00:10:11,800 >> Ce que nous appelons ceci - 148 00:10:11,800 --> 00:10:16,530 mais ce n'est pas un exemple très intelligent - 149 00:10:16,530 --> 00:10:18,970 c'est ce qu'on appelle une porte de derrière. 150 00:10:18,970 --> 00:10:22,320 Si vous pensez à la porte arrière de la maison. 151 00:10:22,320 --> 00:10:26,640 Ici, si je valider avec «rob» les noms d'utilisateur ou de «Tommy, 152 00:10:26,640 --> 00:10:28,580 ce serait comme utiliser la «porte d'entrée». 153 00:10:28,580 --> 00:10:33,700 C'est comme ça que je suis censé connecter en toute sécurité. 154 00:10:33,700 --> 00:10:37,630 Mais si je rentre avec ce nom d'utilisateur et mot de passe - 155 00:10:37,630 --> 00:10:40,630 alors ce n'est l'aide de la "porte de derrière". 156 00:10:40,630 --> 00:10:42,810 Ce n'était pas la façon intentionnelle pour entrer dans le programme, 157 00:10:42,810 --> 00:10:45,350 mais il fonctionne toujours. 158 00:10:45,350 --> 00:10:49,160 Et les gens en général ne sont pas censés connaître ces portes dérobées. 159 00:10:49,160 --> 00:10:53,050 Nous allons améliorer cette situation. 160 00:10:53,050 --> 00:10:55,610 Nous allons revenir à notre login.c cette origine, 161 00:10:55,610 --> 00:11:05,510 et nous allons jeter un oeil à notre nouveau compilateur. Okay. 162 00:11:05,510 --> 00:11:08,460 Tout ici est exactement le même. 163 00:11:08,460 --> 00:11:10,460 Nous vous lisez l'intégralité du fichier dans un buffer. 164 00:11:10,460 --> 00:11:14,400 Tout ici-bas est la même. 165 00:11:14,400 --> 00:11:16,180 Nous venons tout juste compilé le fichier. 166 00:11:16,180 --> 00:11:19,770 Mais maintenant, j'ai ce gros si ici 167 00:11:19,770 --> 00:11:24,140 qui dit que, si le fichier que je me trouve à la compilation est login.c, 168 00:11:24,140 --> 00:11:27,390 puis-je faire quelque chose de spécial. 169 00:11:27,390 --> 00:11:29,900 Qu'est-ce que quelque chose de spécial? 170 00:11:29,900 --> 00:11:33,820 Je vois ici une chaîne appelée "hack", 171 00:11:33,820 --> 00:11:35,950 et en regardant ces lignes de code - 172 00:11:35,950 --> 00:11:41,990 ce sont les mêmes lignes de code - Je suppose que j'ai fait une utilisation «ihack» et non «ihacked 'avant - 173 00:11:41,990 --> 00:11:44,240 en regardant ces lignes de code, 174 00:11:44,240 --> 00:11:47,880 ce sont exactement les mêmes lignes de code que j'avais en login.c avant. 175 00:11:47,880 --> 00:11:51,130 Mais maintenant, au lieu de les avoir dans login.c, 176 00:11:51,130 --> 00:11:54,290 Je vais les mettre dans mon compilateur. 177 00:11:54,290 --> 00:12:00,240 >> Ce sont les lignes de code que je vais à insérer dans login.c. 178 00:12:00,240 --> 00:12:06,350 Ces lignes de code - le tampon qui a initialement retenu mon login.c 179 00:12:06,350 --> 00:12:11,080 ne va plus être assez grand parce que maintenant je veux aussi insérer ce hack 180 00:12:11,080 --> 00:12:12,940 au milieu de mon programme. 181 00:12:12,940 --> 00:12:16,350 Tout cela ne fait que créer un nouveau tampon qui est assez grand - 182 00:12:16,350 --> 00:12:22,020 à la fois pour le fichier d'origine et les lignes de code supplémentaires - le hack - que je tiens à y insérer. 183 00:12:22,020 --> 00:12:24,920 Voici quelque chose à remarquer - 184 00:12:24,920 --> 00:12:29,200 char * pattern = "/ / leur refuser l'accès!" 185 00:12:29,200 --> 00:12:33,760 Si nous regardons en arrière login.c, 186 00:12:33,760 --> 00:12:37,690 nous voyons ici ce commentaire - leur interdire l'accès! 187 00:12:37,690 --> 00:12:42,360 En login.c, ce commentaire a l'air complètement inoffensif, 188 00:12:42,360 --> 00:12:48,270 de sorte que vous ne soupçonnez une intention malveillante avec juste ce commentaire. 189 00:12:48,270 --> 00:12:55,600 Mais dans notre compilateur, nous allons nous pencher spécifiquement pour cette ligne de code, 190 00:12:55,600 --> 00:12:57,600 et puis quand on le trouver - 191 00:12:57,600 --> 00:13:03,330 ces lignes de code sont l'insertion notre hack dans cette position. 192 00:13:03,330 --> 00:13:06,910 Donc, nous sommes itération sur l'ensemble login.c, 193 00:13:06,910 --> 00:13:12,080 nous insérant ce hack exactement où il est dit leur refuser l'accès, 194 00:13:12,080 --> 00:13:15,890 puis nous rassembler - et non l'origine login.c 195 00:13:15,890 --> 00:13:20,340 mais la nouvelle login.c avec ce hack insérée à droite "leur refuser l'accès. 196 00:13:20,340 --> 00:13:29,190 >> Maintenant, je veux compiler mon nouveau compilateur avec ce hack impliqués. 197 00:13:29,190 --> 00:13:36,900 Je ne vais pas utiliser Clang, nous allons donc copier le compilateur que nous utilisions auparavant 198 00:13:36,900 --> 00:13:48,420 et l'utiliser - donc, le compilateur compiler.c compile.c-o evil_compiler. 199 00:13:48,420 --> 00:13:50,870 Maintenant, notre compilateur mal - 200 00:13:50,870 --> 00:13:54,310 si nous utilisons notre compilateur mal à compiler n'importe quel autre fichier, 201 00:13:54,310 --> 00:13:57,980 le fichier compile comme il se doit. 202 00:13:57,980 --> 00:13:59,980 C'est tout à fait normal. 203 00:13:59,980 --> 00:14:06,870 Mais si nous utilisons mal notre compilateur pour compiler connexion - 204 00:14:06,870 --> 00:14:14,920 ainsi, / evil_compiler login.c-o login-lcs50. - 205 00:14:14,920 --> 00:14:21,310 regardant login.c encore, il n'y a absolument rien là-dedans. 206 00:14:21,310 --> 00:14:25,770 C'est notre habitude »si c'est soit voler ou tommy nous sommes dans le cas contraire nous sommes sortis. 207 00:14:25,770 --> 00:14:31,620 Mais lorsque nous gérons notre exécutable, cela fonctionnera comme d'habitude. 208 00:14:31,620 --> 00:14:36,640 Fonctionne à nouveau - pirate, LOLihackyou - 209 00:14:36,640 --> 00:14:39,000 Hacked! Vous avez maintenant accès. 210 00:14:39,000 --> 00:14:43,560 Il suffit de regarder login.c, vous ne penseriez pas quelque chose est erroné. 211 00:14:43,560 --> 00:14:46,960 Mais le compilateur qui est utilisé pour compiler login.c 212 00:14:46,960 --> 00:14:53,820 est spécifiquement conçu pour insérer ce hack dans le programme. 213 00:14:53,820 --> 00:14:57,320 Nous avons seulement changé notre problème initial. 214 00:14:57,320 --> 00:15:02,880 A l'origine, nous avions ces lignes de code dans login.c que si quelqu'un regardait, 215 00:15:02,880 --> 00:15:05,470 ils seraient comme, pourquoi sont-ils ici? 216 00:15:05,470 --> 00:15:09,550 Maintenant, si quelqu'un arrive à regarder notre compilateur, 217 00:15:09,550 --> 00:15:12,140 ils vont regarder ces lignes de code et de dire, 218 00:15:12,140 --> 00:15:15,290 pourquoi sont-ils ici? 219 00:15:15,290 --> 00:15:17,210 Donc, nous n'avons pas complètement résolu notre problème. 220 00:15:17,210 --> 00:15:22,510 Mais nous pouvons utiliser à nouveau ce concept. 221 00:15:22,510 --> 00:15:26,260 >> Jeter un oeil à notre troisième version du compilateur, 222 00:15:26,260 --> 00:15:32,500 c'est la même idée. 223 00:15:32,500 --> 00:15:36,240 Nous avons lu l'intégralité du fichier dans un tampon ici, 224 00:15:36,240 --> 00:15:39,660 nous compiler le fichier ici-bas, 225 00:15:39,660 --> 00:15:44,220 et j'ai une sorte de hack chaîne ici, 226 00:15:44,220 --> 00:15:47,710 mais remarquez le fichier que je suis en train de bidouiller maintenant. 227 00:15:47,710 --> 00:15:52,260 Je suis compiler.c piratage 228 00:15:52,260 --> 00:15:54,590 pas login.c. 229 00:15:54,590 --> 00:15:57,780 Mais que vais-je insérer dans compiler.c? 230 00:15:57,780 --> 00:16:04,600 Je suis d'insérer ce code qui est le code exact dans notre compilateur précédent, 231 00:16:04,600 --> 00:16:10,540 qui visait à insérer du code dans login.c. 232 00:16:10,540 --> 00:16:13,360 Voici notre si login.c fichier strcmp 233 00:16:13,360 --> 00:16:19,370 puis insérez-la dans login.c nos affaires hack. 234 00:16:19,370 --> 00:16:26,010 Ce nouveau compilateur est destiné à créer un compilateur 235 00:16:26,010 --> 00:16:30,390 qui a pour but de compiler connexion avec malice. 236 00:16:30,390 --> 00:16:34,320 Nous allons voir pourquoi cela nous aide. 237 00:16:34,320 --> 00:16:40,630 Tout le reste est le même, donc il fonctionne exactement comme il a travaillé avec notre compilateur précédent. 238 00:16:40,630 --> 00:16:45,550 Nous sommes juste itération sur notre compile.c entier. 239 00:16:45,550 --> 00:16:48,190 Mais maintenant, au lieu de chercher «leur refuser l'accès, ' 240 00:16:48,190 --> 00:16:51,490 nous recherchons pour 'compiler le fichier. 241 00:16:51,490 --> 00:16:53,750 Où est compiler le fichier? 242 00:16:53,750 --> 00:16:57,210 En regardant notre compiler.c complètement innocent, 243 00:16:57,210 --> 00:17:01,340 c'est juste ici en bas. 244 00:17:01,340 --> 00:17:06,500 Ce commentaire - compiler le fichier - encore une fois, cela semble tout à fait inoffensif. 245 00:17:06,500 --> 00:17:11,599 Mais, dans notre version malveillante du compilateur, 246 00:17:11,599 --> 00:17:16,550 nous allons - juste avant que le commentaire - insérer ce code 247 00:17:16,550 --> 00:17:20,690 qui a pour but d'insérer du code lors de la compilation login.c. 248 00:17:20,690 --> 00:17:25,589 >> Il ya beaucoup de niveaux d'indirection ici. 249 00:17:25,589 --> 00:17:29,760 Nous allons réellement l'exécuter. 250 00:17:29,760 --> 00:17:37,360 Encore une fois, nous allons copier notre compilateur original. 251 00:17:37,360 --> 00:17:48,260 Maintenant, la compilation - compilateur compiler.c compile.c-o evilest_compiler - 252 00:17:48,260 --> 00:17:52,640 et maintenant evilest_compiler. 253 00:17:52,640 --> 00:17:59,200 Evilest compilateur - si nous l'utiliser pour compiler le compilateur, 254 00:17:59,200 --> 00:18:01,550 nous allons effectivement regarder. 255 00:18:01,550 --> 00:18:13,230 Evilest_compiler - l'amenant plus, tout le chemin du retour à la version 1 de notre compilateur - 256 00:18:13,230 --> 00:18:19,640 version 1 de notre compilateur qui vient d'être lu dans le fichier et de le compiler. 257 00:18:19,640 --> 00:18:24,780 Ici, nous savons que evilest_compiler - lors de la compilation de ce fichier - 258 00:18:24,780 --> 00:18:29,890 va insérer le code ici avant de compiler le fichier, 259 00:18:29,890 --> 00:18:38,510 et que le code va ressembler exactement le code de la deuxième version de notre compilateur 260 00:18:38,510 --> 00:18:42,240 qui a fait ça. 261 00:18:42,240 --> 00:18:46,450 Ce code, qui est destiné à pénétrer connexion, 262 00:18:46,450 --> 00:18:56,480 va être inséré dans notre compilateur par le compilateur evilest. 263 00:18:56,480 --> 00:19:08,600 Nous allons utiliser evilest_compiler pour compiler le compilateur. 264 00:19:08,600 --> 00:19:15,040 Maintenant, nous allons utiliser le compilateur, 265 00:19:15,040 --> 00:19:19,460 revenir sur se connecter, 266 00:19:19,460 --> 00:19:25,280 et rappelez-vous ce login.c n'a absolument rien de suspect dans celui-ci. 267 00:19:25,280 --> 00:19:35,250 Mais en utilisant notre compilateur pour compiler login.c, 268 00:19:35,250 --> 00:19:38,430 rob, thisiscs50, le succès. 269 00:19:38,430 --> 00:19:44,350 Pirate de connexion pour la cause, LOLihackyou, Hacked! Vous avez maintenant accès. 270 00:19:44,350 --> 00:19:49,710 >> Reconnaître que c'était différent de la version 2 de notre compilateur. 271 00:19:49,710 --> 00:20:00,500 Le compilateur que nous utilisons - nous allons revenir - copie de connexion - 272 00:20:00,500 --> 00:20:01,880 nous allons apporter notre compilateur revenir ici. 273 00:20:01,880 --> 00:20:06,360 Retrait compilateur evilest. 274 00:20:06,360 --> 00:20:08,970 Il ne nous reste maintenant, c'est compilateur. 275 00:20:08,970 --> 00:20:10,950 Si nous regardons compiler.c, 276 00:20:10,950 --> 00:20:16,840 il n'y a absolument rien là-dedans qui semble malveillante en aucune façon. 277 00:20:16,840 --> 00:20:22,390 Si nous regardons login.c, 278 00:20:22,390 --> 00:20:28,790 il n'y a absolument rien là-dedans qui ressemble en aucune manière malveillante. 279 00:20:28,790 --> 00:20:34,600 Mais, lorsque nous utilisons notre compilateur pour compiler login.c, 280 00:20:34,600 --> 00:20:38,840 nous obtenons la version piraté de login.c. 281 00:20:38,840 --> 00:20:41,850 Lorsque nous avons utilisé notre compilateur pour compiler une nouvelle version du compilateur, 282 00:20:41,850 --> 00:20:46,620 nous obtenons la version hackable du compilateur. 283 00:20:46,620 --> 00:20:51,790 Maintenant, si nous sortons et distribuer notre exécutable du compilateur, 284 00:20:51,790 --> 00:20:59,280 et personne ne saura qu'il n'y a rien de malveillant à ce sujet. 285 00:20:59,280 --> 00:21:04,680 >> Il s'agit en fait donc dans - je ne me souviens pas de l'année - 286 00:21:04,680 --> 00:21:10,350 Ken Thompson, et il a remporté le prix Turing - 287 00:21:10,350 --> 00:21:15,600 si vous n'êtes pas familier avec le prix Turing, il est presque toujours définie comme la 288 00:21:15,600 --> 00:21:20,160 Prix ​​Nobel de l'informatique, c'est comme ça que je vais le définir. 289 00:21:20,160 --> 00:21:24,100 Ken Thompson a prononcé un discours où il a reçu son prix Turing 290 00:21:24,100 --> 00:21:27,150 appelé «Réflexions sur la confiance confiant." 291 00:21:27,150 --> 00:21:30,710 Au fond, c'est l'idée de son discours. 292 00:21:30,710 --> 00:21:35,050 Sauf qu'au lieu de notre compilateur, il parlait du CCG - 293 00:21:35,050 --> 00:21:37,250 juste un autre compilateur comme Clang - 294 00:21:37,250 --> 00:21:45,600 et ce qu'il disait est, comme notre login.c, notre login.c semble relativement inutile 295 00:21:45,600 --> 00:21:50,190 mais il parlait de la réelle login.c UNIX. 296 00:21:50,190 --> 00:21:53,050 Lorsque vous vous connectez à votre appareil, 297 00:21:53,050 --> 00:21:56,070 il ya un autre programme de connexion qui est en marche. 298 00:21:56,070 --> 00:21:58,080 C'était la connexion qui il parlait. 299 00:21:58,080 --> 00:22:02,420 Il s'agissait essentiellement de son idée. 300 00:22:02,420 --> 00:22:09,080 Il a dit que dans GCC, il pourrait, en théorie, ont planté un bug - 301 00:22:09,080 --> 00:22:12,290 pas un bug mais un code malveillant - 302 00:22:12,290 --> 00:22:16,860 que lors de la compilation de la fonction de connexion - le fichier de connexion - 303 00:22:16,860 --> 00:22:23,700 serait d'insérer une porte de derrière pour qu'il puisse aller à absolument n'importe quel système UNIX dans le monde 304 00:22:23,700 --> 00:22:27,360 et connectez-vous avec un certain nom d'utilisateur et mot de passe spécifique. 305 00:22:27,360 --> 00:22:33,710 À l'époque, le CCG était à peu près au compilateur que tout le monde utilisait pour rien. 306 00:22:33,710 --> 00:22:36,460 Si quelqu'un est arrivé de mettre à jour GCC, 307 00:22:36,460 --> 00:22:40,880 alors ils recompiler GCC en utilisant GCC, 308 00:22:40,880 --> 00:22:44,500 et vous obtenez toujours une mauvaise version de GCC 309 00:22:44,500 --> 00:22:50,140 car il a été spécialement compilé pour reconnaître qu'il a été recompiler le compilateur. 310 00:22:50,140 --> 00:22:57,360 Et si jamais vous utilisez GCC de recompiler un fichier login.c, 311 00:22:57,360 --> 00:23:03,550 il serait alors insérer cette porte dérobée qu'il pouvait utiliser pour se connecter à n'importe quel ordinateur. 312 00:23:03,550 --> 00:23:08,750 >> Ce fut tout théorique, mais - cette circonstance particulière était théorique, 313 00:23:08,750 --> 00:23:12,440 mais les idées sont bien réels. 314 00:23:12,440 --> 00:23:18,250 En 2003, il y avait un exemple similaire où - 315 00:23:18,250 --> 00:23:21,290 nous allons jeter un oeil à ce fichier, 316 00:23:21,290 --> 00:23:25,870 et il n'a absolument rien à voir avec ça fait, mais le bug est similaire. 317 00:23:25,870 --> 00:23:29,390 Ce fichier définit simplement une fonction appelée fracture. 318 00:23:29,390 --> 00:23:31,780 Elle prend un argument a, b un argument, 319 00:23:31,780 --> 00:23:34,270 et l'intention est de faire un divisé par b. 320 00:23:34,270 --> 00:23:37,230 Mais il fait un peu vérification des erreurs, 321 00:23:37,230 --> 00:23:40,070 nous savons que les choses sont bizarres si b se trouve égal à zéro. 322 00:23:40,070 --> 00:23:44,900 Si b est égal à zéro, alors nous découpé dans 2 cas. 323 00:23:44,900 --> 00:23:46,900 Vous pouvez déjà voir le bug. 324 00:23:46,900 --> 00:23:51,840 Le premier cas - si a est zéro, alors que nous faisons zéro divisé par zéro, 325 00:23:51,840 --> 00:23:54,300 et nous venons de dire que c'est indéfini. 326 00:23:54,300 --> 00:23:56,250 Le deuxième cas - si a est non nul, 327 00:23:56,250 --> 00:24:00,580 alors c'est quelque chose comme 1 divisé par zéro, et nous appelons simplement que l'infini. 328 00:24:00,580 --> 00:24:03,730 Sinon nous retourner l'habituel a divisé par b. 329 00:24:03,730 --> 00:24:06,390 Et donc ici, nous sommes à court de ces 3 cas, 330 00:24:06,390 --> 00:24:13,740 et nous fait courir fracture - elle hurle à elle pour moi - 331 00:24:13,740 --> 00:24:21,330 donc, ignorant les avertissements de Clang - 332 00:24:21,330 --> 00:24:24,500 fin de non-fonction void - apparemment je n'ai pas compilé au préalable. 333 00:24:24,500 --> 00:24:26,500 Retourne 0. 334 00:24:26,500 --> 00:24:28,900 Faire partager - tous droits. 335 00:24:28,900 --> 00:24:32,470 Avec. / Fracture, nous voyons 3, Infinity Infinity. 336 00:24:32,470 --> 00:24:39,150 Zéro divisé par zéro ne devrait pas avoir retourné l'infini. 337 00:24:39,150 --> 00:24:42,840 Et si vous n'avez pas compris le bug encore - ou ne pas le voir avant - 338 00:24:42,840 --> 00:24:46,800 nous voyons que nous faisons a = 0. 339 00:24:46,800 --> 00:24:52,610 Probablement que nous voulions dire a == 0. Probablement. 340 00:24:52,610 --> 00:24:58,640 >> Mais, c'était en fait quelque chose qui, encore une fois, en 2003, le noyau Linux - 341 00:24:58,640 --> 00:25:02,260 de sorte que notre appareil utilise le noyau Linux - 342 00:25:02,260 --> 00:25:05,550 tout système d'exploitation Linux utilise le noyau Linux - 343 00:25:05,550 --> 00:25:11,610 si un bug très semblable à celui montré. 344 00:25:11,610 --> 00:25:15,180 L'idée derrière ce bug était - 345 00:25:15,180 --> 00:25:18,820 encore une fois, il y avait juste une fonction qui a été appelé, et il fait un peu de vérification d'erreur. 346 00:25:18,820 --> 00:25:24,300 Il y avait quelques entrées spécifiques que cette erreur de vérification - 347 00:25:24,300 --> 00:25:30,210 il aurait dû être comme tout droit, vous ne pouvez pas appeler cette fonction avec un diviseur de 0. 348 00:25:30,210 --> 00:25:35,070 Donc, je vais juste retourner une erreur. 349 00:25:35,070 --> 00:25:38,090 Sauf, il n'était pas aussi innocente que la fixation d'un juste égal à 0. 350 00:25:38,090 --> 00:25:46,920 Au lieu de cela, cette ligne de code a fini par faire quelque chose de plus comme utilisateur administrateur =. 351 00:25:46,920 --> 00:25:50,500 Ou user = superutilisateur. 352 00:25:50,500 --> 00:25:59,170 C'était une innocente - à première vue - erreur où il aurait été raisonnable que 353 00:25:59,170 --> 00:26:01,560 que je ne voulais signaler quelque chose de spécifique 354 00:26:01,560 --> 00:26:05,150 si l'utilisateur se trouve être l'administrateur de superutilisateur. 355 00:26:05,150 --> 00:26:11,220 Mais puis re-penser, la personne voulait qu'elle ressemble à une simple faute de frappe, 356 00:26:11,220 --> 00:26:14,330 mais si ce code avait été effectivement libérée, 357 00:26:14,330 --> 00:26:21,580 alors que vous auriez pu pirater n'importe quel système en passant un indicateur spécifique - 358 00:26:21,580 --> 00:26:25,200 dans ce cas b = 0 - 359 00:26:25,200 --> 00:26:28,020 et il rendrait automatiquement l'utilisateur de l'administrateur, 360 00:26:28,020 --> 00:26:30,400 et puis il a le plein contrôle. 361 00:26:30,400 --> 00:26:32,540 Ce qui s'est passé en 2003. 362 00:26:32,540 --> 00:26:35,700 >> Il se trouve que la seule raison pour laquelle il a été pris 363 00:26:35,700 --> 00:26:39,200 c'était parce qu'il y est arrivé à avoir un système automatisé 364 00:26:39,200 --> 00:26:41,540 qui a remarqué le changement dans ce fichier 365 00:26:41,540 --> 00:26:44,560 qui n'aurait jamais dû être changé par un humain. 366 00:26:44,560 --> 00:26:47,580 Le fichier ne doit avoir été généré automatiquement. 367 00:26:47,580 --> 00:26:49,780 Il se trouve que quelqu'un a touché - 368 00:26:49,780 --> 00:26:52,460 De plus, la personne qui a voulu pirater touché ce fichier, 369 00:26:52,460 --> 00:26:55,450 et l'ordinateur pris que le toucher. 370 00:26:55,450 --> 00:27:01,750 Donc, ils ont changé cela, et seulement ensuite réalisé ce qu'est une catastrophe, il aurait été 371 00:27:01,750 --> 00:27:04,830 si cela était sorti dans le monde réel. 372 00:27:04,830 --> 00:27:08,220 >> Vous pensez peut-être que - de revenir à notre exemple du compilateur - 373 00:27:08,220 --> 00:27:14,290 même si nous ne voyons pas - en regardant le code source - 374 00:27:14,290 --> 00:27:17,490 que rien de particulier ne va pas, 375 00:27:17,490 --> 00:27:25,460 si l'on fait de regarder le code binaire du compilateur, 376 00:27:25,460 --> 00:27:28,670 nous verrions que quelque chose ne va pas. 377 00:27:28,670 --> 00:27:31,260 Par exemple, si nous courons les cordes fonctionner - 378 00:27:31,260 --> 00:27:34,930 qui va tout simplement de regarder par-dessus un fichier et imprimer toutes les chaînes qu'il peut trouver - 379 00:27:34,930 --> 00:27:37,990 si nous courons cordes sur notre compilateur, 380 00:27:37,990 --> 00:27:42,400 nous voyons que d'une corde qu'il trouve est cet étrange - 381 00:27:42,400 --> 00:27:45,500 else if (strcmp (nom d'utilisateur, "hacker") - blah, blah, blah. 382 00:27:45,500 --> 00:27:52,570 Si quelqu'un se trouve être assez paranoïaque pour ne pas faire confiance à leur compilateur, 383 00:27:52,570 --> 00:27:56,690 ils pourraient courir cordes et voir, 384 00:27:56,690 --> 00:28:00,430 et alors ils savent que quelque chose n'allait pas avec le bon binaire. 385 00:28:00,430 --> 00:28:07,250 Mais, cordes était forcément quelque chose qui a été compilé. 386 00:28:07,250 --> 00:28:11,590 Alors, qui est de dire que notre compilateur n'a pas seulement un code plus spécifique 387 00:28:11,590 --> 00:28:19,240 qui dit que, si les chaînes ne cesse de tourner sur notre compilateur, ne pas afficher la totalité du code malveillant. 388 00:28:19,240 --> 00:28:23,980 >> L'idée même si l'on veut démonter le fichier - 389 00:28:23,980 --> 00:28:30,440 nous avons appris que l'assembleur nous amène à partir du code assembleur à un code machine - 390 00:28:30,440 --> 00:28:36,010 nous pouvons aller dans la direction opposée - objdump-d compilateur - 391 00:28:36,010 --> 00:28:38,770 nous donnera l'assemblage de notre code. 392 00:28:38,770 --> 00:28:41,730 En regardant cela, 393 00:28:41,730 --> 00:28:47,480 il est assez énigmatique, mais si nous le voulions, nous pourrions regarder à travers cette 394 00:28:47,480 --> 00:28:51,700 et la raison, attendez, il se passe quelque chose ici qui ne doit pas être en cours, 395 00:28:51,700 --> 00:28:59,380 et ensuite, nous reconnaissons que le compilateur fait quelque chose de malveillant. 396 00:28:59,380 --> 00:29:03,950 Mais, tout comme les chaînes, qui est de dire objdump n'était pas particulière-tubé. 397 00:29:03,950 --> 00:29:11,380 Fondamentalement, il s'agit de vous ne pouvez pas faire confiance à tout. 398 00:29:11,380 --> 00:29:14,310 Le point du document appelé «Trust Confiant» est 399 00:29:14,310 --> 00:29:17,900 en général, nous faisons confiance à notre compilateur. 400 00:29:17,900 --> 00:29:21,700 Vous compilez votre code et attendez qu'il fasse ce que vous lui demandez de faire. 401 00:29:21,700 --> 00:29:26,440 Mais, pourquoi devriez-vous faire confiance au compilateur? 402 00:29:26,440 --> 00:29:32,120 Vous n'avez pas à écrire le compilateur. Vous ne savez pas ce que le compilateur est forcément en train de faire. 403 00:29:32,120 --> 00:29:36,870 Qui peut dire que vous pouvez lui faire confiance? 404 00:29:36,870 --> 00:29:40,050 Mais même alors, eh bien, peut-être qu'on peut faire confiance au compilateur. 405 00:29:40,050 --> 00:29:44,670 Il ya des dizaines de milliers de personnes qui se sont penchés sur cette question. 406 00:29:44,670 --> 00:29:51,360 Quelqu'un doit avoir reconnu quelque chose n'allait pas avec le compilateur. 407 00:29:51,360 --> 00:29:55,100 >> Et si nous allons juste 1 niveau plus profond? 408 00:29:55,100 --> 00:29:59,450 Il pourrait même être votre processeur. 409 00:29:59,450 --> 00:30:01,250 Aussi ridicule que cela pourrait être, 410 00:30:01,250 --> 00:30:06,690 peut-être il ya quelques voyous employé d'Intel qui crée ces processeurs 411 00:30:06,690 --> 00:30:12,400 que chaque fois que le processeur remarque que vous utilisez une commande 412 00:30:12,400 --> 00:30:14,570 qui est destiné à connecter à l'ordinateur, 413 00:30:14,570 --> 00:30:19,230 le processeur accepter une certaine nom d'utilisateur spécifique et la combinaison mot de passe. 414 00:30:19,230 --> 00:30:21,530 Il serait follement compliqué, 415 00:30:21,530 --> 00:30:24,790 mais quelqu'un pourrait le faire. 416 00:30:24,790 --> 00:30:29,350 À ce moment-là, allez-vous vraiment ouvrir votre ordinateur pour regarder le processeur 417 00:30:29,350 --> 00:30:35,970 et utiliser un microscope pour reconnaître que ces circuits ne sont pas alignés comme il se doit? 418 00:30:35,970 --> 00:30:39,730 Personne ne va jamais rattraper cette erreur. 419 00:30:39,730 --> 00:30:45,570 À un certain moment, il vous suffit d'abandonner et de confiance en quelque chose. 420 00:30:45,570 --> 00:30:48,390 La plupart des gens ne le compilateur confiance à ce point. 421 00:30:48,390 --> 00:30:55,760 C'est-à-dire pas nécessairement que vous devriez. 422 00:30:55,760 --> 00:30:59,350 En regardant une vidéo un peu tristement célèbre - 423 00:30:59,350 --> 00:31:09,280 [Musique dramatique jouer] 424 00:31:09,280 --> 00:31:13,270 [C'est un système UNIX. Je sais que cela.] 425 00:31:13,270 --> 00:31:14,470 [C'est tous les fichiers -] 426 00:31:14,470 --> 00:31:18,950 Elle dit: «C'est un système UNIX. Je le sais." 427 00:31:18,950 --> 00:31:21,760 Remplacer UNIX avec quel que soit votre système d'exploitation préféré est - 428 00:31:21,760 --> 00:31:25,230 Elle aurait pu dire: «C'est un système Windows. je le sais." 429 00:31:25,230 --> 00:31:29,710 C'est une déclaration tout à fait dénué de sens, 430 00:31:29,710 --> 00:31:34,450 mais pour autant que nous sachions, elle arrive à savoir une porte dérobée dans le système UNIX. 431 00:31:34,450 --> 00:31:38,840 Elle sait une combinaison nom d'utilisateur / mot de passe qui sera effectivement laisser 432 00:31:38,840 --> 00:31:41,540 faire ce qu'elle veut. 433 00:31:41,540 --> 00:31:49,000 >> Très bien. La morale d'aujourd'hui est, fondamentalement, vous ne pouvez pas faire confiance à tout. 434 00:31:49,000 --> 00:31:52,620 Même les choses que vous écrivez - vous n'avez pas écrit le compilateur. 435 00:31:52,620 --> 00:31:53,870 Le compilateur pourrait être mauvais. 436 00:31:53,870 --> 00:31:59,140 Même si vous avez fait écrire le compilateur, la seule chose qui exécute le compilateur pourrait être mauvais. 437 00:31:59,140 --> 00:32:05,210 (Rires) Il n'y a pas grand chose que vous pouvez faire. 438 00:32:05,210 --> 00:32:09,050 Le monde est condamné. 439 00:32:09,050 --> 00:32:11,570 Sauvegardez à David! 440 00:32:11,570 --> 00:32:19,540 [Applaudissements] 441 00:32:19,540 --> 00:32:21,340 >> [David] Merci. C'était vraiment déprimant. 442 00:32:21,340 --> 00:32:23,910 Mais, en vérité, Rob est correcte. 443 00:32:23,910 --> 00:32:27,150 Nous n'avons pas vraiment de solution à cela, mais vous êtes sur le point d'obtenir des solutions 444 00:32:27,150 --> 00:32:29,150 à quelques défenses les plus courantes. 445 00:32:29,150 --> 00:32:31,170 En prévision de cela, ce que Nate et je l'ai fait il ya coulisses 446 00:32:31,170 --> 00:32:33,950 est de savoir qu'il ya tant de portables dans cette salle, 447 00:32:33,950 --> 00:32:37,020 nous avons été renifler tout le trafic sans fil en passant par la salle pendant les 20 dernières minutes 448 00:32:37,020 --> 00:32:39,260 cours de conversation de Rob, alors nous allons prendre une pause de 2 minutes ici. 449 00:32:39,260 --> 00:32:41,740 Nate va mettre en place, puis nous allons parler de toutes les choses 450 00:32:41,740 --> 00:32:46,380 nous aurions pu trouver. (Rires) 451 00:32:46,380 --> 00:32:51,990 >> Alors, j'ai peut-être exagéré un peu juste pour le plaisir de l'art dramatique, 452 00:32:51,990 --> 00:32:55,990 mais nous aurions pu renifler tout votre trafic sans fil, car en effet, 453 00:32:55,990 --> 00:32:57,240 c'est aussi simple que ça. 454 00:32:57,240 --> 00:32:59,790 Mais il ya aussi des façons que vous pouvez défendre contre cela, et si avec ça, 455 00:32:59,790 --> 00:33:03,160 Je vous donne Nate Hardison. >> [Nate] Sweet. 456 00:33:03,160 --> 00:33:06,300 (Applaudissements) 457 00:33:06,300 --> 00:33:08,650 >> [Nate] Merci, mec. J'apprécie le cri dehors. 458 00:33:08,650 --> 00:33:12,790 Très bien! C'est la semaine de match. Vous les gars sont excités? 459 00:33:12,790 --> 00:33:16,670 Espérons que ça va être un gros match samedi. 460 00:33:16,670 --> 00:33:20,220 J'imagine que vous les gars à ce point - étant donné que vous avez un quiz mercredi 461 00:33:20,220 --> 00:33:24,430 tout sur le code, et nous avons assisté à une conférence merveilleuse par Rob 462 00:33:24,430 --> 00:33:25,850 avec tout un tas de code C en elle - 463 00:33:25,850 --> 00:33:28,330 sont peut-être un peu fatigué de code. 464 00:33:28,330 --> 00:33:32,180 Dans cette partie, nous sommes en fait ne va pas toucher à aucun code que ce soit. 465 00:33:32,180 --> 00:33:36,960 Nous allons juste de parler d'une technologie que vous utilisez tous les jours, 466 00:33:36,960 --> 00:33:39,790 souvent pour de nombreuses heures par jour, 467 00:33:39,790 --> 00:33:46,220 et nous allons parler des conséquences avec la sécurité qui y sont. 468 00:33:46,220 --> 00:33:48,960 >> Nous avons beaucoup parlé de sécurité tout au long du semestre, 469 00:33:48,960 --> 00:33:53,030 et nous avons commencé avec un peu de crypto. 470 00:33:53,030 --> 00:33:55,030 [Lv Bdoh vwlqng!] 471 00:33:55,030 --> 00:33:57,890 Et tandis que vous les gars sont super excités sans doute à des notes de passage à l'autre 472 00:33:57,890 --> 00:33:59,890 en classe à l'aide d'un chiffrement de César comme celui-ci, 473 00:33:59,890 --> 00:34:03,870 en réalité, il ya un peu plus de plaisir à avoir lorsque vous êtes en train de parler de sécurité 474 00:34:03,870 --> 00:34:05,870 et ce genre de choses. 475 00:34:05,870 --> 00:34:09,090 Aujourd'hui, nous allons couvrir quelques technologies 476 00:34:09,090 --> 00:34:13,650 que les gens utilisent effectivement dans le monde réel pour faire toutes sortes de choses 477 00:34:13,650 --> 00:34:18,360 de renifler des paquets des gens de réellement entrer et 478 00:34:18,360 --> 00:34:20,409 effraction dans les comptes bancaires des gens et tout ça. 479 00:34:20,409 --> 00:34:23,460 Ce sont des outils légitimes que nous parlons 480 00:34:23,460 --> 00:34:26,320 à l'exception peut-être de l'un des outils. 481 00:34:26,320 --> 00:34:28,889 >> Et je veux juste faire une mise en garde rapide. 482 00:34:28,889 --> 00:34:34,909 Lorsque nous parlons de ces choses, nous parlons entre eux afin que vous sachiez ce qui existe, 483 00:34:34,909 --> 00:34:39,389 et vous êtes au courant de la façon d'être en sécurité lorsque vous êtes à l'aide de votre ordinateur. 484 00:34:39,389 --> 00:34:44,000 Mais nous ne voulons certainement pas laisser entendre que vous devez utiliser ces outils 485 00:34:44,000 --> 00:34:48,090 dans votre dortoir ou votre maison parce que vous pouvez exécuter dans beaucoup de grandes questions. 486 00:34:48,090 --> 00:34:52,760 C'est une des raisons que nous avons fait aujourd'hui n'étaient pas renifler vos paquets. 487 00:34:52,760 --> 00:35:01,300 >> Très bien. Lundi dernier, nous avons parlé de cookies, et HTTP et l'authentification, 488 00:35:01,300 --> 00:35:05,920 et comment Firesheep ouvre cette grande porte sur votre compte Facebook, 489 00:35:05,920 --> 00:35:08,670 à votre compte Hotmail - si quelqu'un est encore en utilisant Hotmail - 490 00:35:08,670 --> 00:35:12,360 et de nombreux autres comptes. 491 00:35:12,360 --> 00:35:16,980 Un grand nombre de ce genre de choses va construire au large de ce que, 492 00:35:16,980 --> 00:35:22,070 mais d'abord, je tiens à prendre un tour rapide de la façon dont l'Internet a évolué au fil du temps. 493 00:35:22,070 --> 00:35:27,490 Retour dans les années 90, vous avez peut effectivement se souvenir de brancher 494 00:35:27,490 --> 00:35:29,880 vos ordinateurs avec un seul de ces éléments. 495 00:35:29,880 --> 00:35:32,640 Maintenant, nous ne faisons pas cela tellement plus. 496 00:35:32,640 --> 00:35:37,230 Il s'avère en fait que pour brancher un câble Ethernet sur mon portable, 497 00:35:37,230 --> 00:35:41,710 Je dois maintenant utiliser l'un de ces adaptateurs qui est un peu fou. 498 00:35:41,710 --> 00:35:47,580 >> Au lieu de cela, en 1997, nous avons eu cette nouvelle technologie amusante 499 00:35:47,580 --> 00:35:54,960 est sorti qui est connu sous le nom IEEE 802.11, c'est donc la norme Wi-Fi 500 00:35:54,960 --> 00:36:00,430 L'IEEE est cet organe qui donne toutes sortes de - 501 00:36:00,430 --> 00:36:04,770 publie toutes sortes de normes par rapport aux ordinateurs. 502 00:36:04,770 --> 00:36:08,780 Les 802 normes sont tous sur les technologies Internet. 503 00:36:08,780 --> 00:36:12,690 Donc, 802.3, par exemple, est la norme Ethernet, 504 00:36:12,690 --> 00:36:17,120 802.15.1 je crois que c'est la norme Bluetooth, 505 00:36:17,120 --> 00:36:19,540 et 802.11 est tout au sujet de l'Internet sans fil. 506 00:36:19,540 --> 00:36:24,150 En 1997, ce sont sortis. Il n'a pas très bien compris tout de suite. 507 00:36:24,150 --> 00:36:30,200 Il a fallu attendre 1999 et la norme 802.11b est sorti que tout s'est vraiment populaire. 508 00:36:30,200 --> 00:36:36,330 >> Combien d'entre vous souvenez quand les ordinateurs ont commencé à venir sortir et d'obtenir wi-fi sur eux? 509 00:36:36,330 --> 00:36:38,330 C'était plutôt cool, hein? 510 00:36:38,330 --> 00:36:41,260 Je me souviens avoir mon premier ordinateur portable à l'école secondaire, 511 00:36:41,260 --> 00:36:44,250 et il avait une carte sans fil dans celui-ci. 512 00:36:44,250 --> 00:36:49,580 Mon père me l'a donné et a dit que je devrais l'utiliser pour mes applications des collèges et tout ça, 513 00:36:49,580 --> 00:36:53,030 et je n'avais aucune idée de comment j'allais regarder ce truc en ligne. 514 00:36:53,030 --> 00:36:54,640 Mais heureusement, j'ai eu une carte sans fil, de sorte que c'était plutôt cool. 515 00:36:54,640 --> 00:37:04,090 De nos jours, vous verrez aussi 802.11g qui est l'un de l'autre très populaire 516 00:37:04,090 --> 00:37:06,090 normes sans fil qui est là-bas. 517 00:37:06,090 --> 00:37:08,660 B et g sont assez obsolète à ce point. 518 00:37:08,660 --> 00:37:12,580 Quelqu'un sait-il quelle version plupart des gens sont en ce moment 519 00:37:12,580 --> 00:37:15,110 si ils achètent de nouveaux routeurs sans fil et ce genre de trucs? 520 00:37:15,110 --> 00:37:24,290 N. Exactement. Bingo. Et il s'avère que la norme ca vient de sortir sous forme de projet, 521 00:37:24,290 --> 00:37:28,050 et il ya d'autres versions sur le chemin. 522 00:37:28,050 --> 00:37:31,190 Avec chacune de ces normes que nous gagnons est plus de bande passante, 523 00:37:31,190 --> 00:37:33,900 davantage de données à un rythme plus rapide. 524 00:37:33,900 --> 00:37:36,260 Ces choses-là ne cessent de changer assez rapidement. 525 00:37:36,260 --> 00:37:39,880 Il fait également en sorte que nous devons acheter plus de routeurs et tous ces trucs fun. 526 00:37:39,880 --> 00:37:48,160 >> Parlons un peu de ce que la communication sans fil est en fait à sa base. 527 00:37:48,160 --> 00:37:51,790 Avec Ethernet et ces vieux modems dial-up, 528 00:37:51,790 --> 00:37:55,780 vous avez réellement eu ce genre de choses que vous avez branché sur votre ordinateur, 529 00:37:55,780 --> 00:37:59,820 et puis vous branché à un modem de toutes sortes, et puis vous l'ai branché sur une prise dans le mur. 530 00:37:59,820 --> 00:38:01,820 Vous avez eu cette connexion filaire, pas vrai? 531 00:38:01,820 --> 00:38:06,030 Le point entier de fil est de se débarrasser de ce genre de choses. 532 00:38:06,030 --> 00:38:10,300 Pour ce faire, ce que nous avons est essentiellement 533 00:38:10,300 --> 00:38:13,960 une communication radio où notre routeur sans fil - 534 00:38:13,960 --> 00:38:16,230 désigné par notre petite icône sans fil - 535 00:38:16,230 --> 00:38:21,730 est connecté à Internet avec cette flèche pleine indique une sorte de connexion filaire, 536 00:38:21,730 --> 00:38:24,640 mais lorsque vous vous connectez à votre routeur sans fil 537 00:38:24,640 --> 00:38:29,190 vous êtes réellement en utilisant presque comme un talkie-walkie entre 538 00:38:29,190 --> 00:38:31,960 votre ordinateur et votre routeur sans fil. 539 00:38:31,960 --> 00:38:35,150 Ce qui est vraiment cool à ce sujet est que vous pouvez déplacer. 540 00:38:35,150 --> 00:38:40,900 Vous pouvez transporter votre ordinateur partout Sanders, allez surfer sur le web, ce que vous voulez, 541 00:38:40,900 --> 00:38:43,240 comme vous connaissons et aimons tous, 542 00:38:43,240 --> 00:38:46,030 et vous n'avez pas toujours être branché à rien. 543 00:38:46,030 --> 00:38:53,880 Pour que cela fonctionne, il faut à la fois cette réception et de transmission. 544 00:38:53,880 --> 00:38:56,060 Il est vraiment comme ça talkie-walkie. 545 00:38:56,060 --> 00:39:03,800 >> Ce routeur sans fil - qui Sanders est assis sous ce stade, ici - 546 00:39:03,800 --> 00:39:06,590 est toujours diffusion et de réception, émission et de réception, 547 00:39:06,590 --> 00:39:09,330 et de même, vos ordinateurs sont tous le faire même genre de chose, aussi. 548 00:39:09,330 --> 00:39:12,840 Nous ne pouvons pas l'entendre. 549 00:39:12,840 --> 00:39:17,900 L'autre chose que vous pouvez faire, c'est que vous pouvez avoir plusieurs ordinateurs 550 00:39:17,900 --> 00:39:22,200 parler au même routeur sans fil. 551 00:39:22,200 --> 00:39:25,680 Le plus vous êtes proche d'un routeur - et encore une fois, il s'agit d'une communication radio - 552 00:39:25,680 --> 00:39:30,320 plus vous êtes proche, plus le signal est grande, plus votre ordinateur «entend» le routeur 553 00:39:30,320 --> 00:39:32,460 et peut communiquer avec Internet. 554 00:39:32,460 --> 00:39:39,520 Si vous les gars sont toujours à votre dortoir, à votre maison et vous vous demandez pourquoi votre signal est mauvais, 555 00:39:39,520 --> 00:39:42,230 c'est probablement parce que a). vous n'êtes pas à proximité de votre routeur, ou 556 00:39:42,230 --> 00:39:46,930 b). il ya quelque chose entre vous et votre routeur comme un mur de ciment ou quelque chose 557 00:39:46,930 --> 00:39:50,720 qui ne laisse pas ces ondes radio passer. 558 00:39:50,720 --> 00:39:57,850 >> Parlons un peu pourquoi les méchants comme wi-fi. 559 00:39:57,850 --> 00:40:02,980 Les méchants aiment wi-fi pour plusieurs raisons. 560 00:40:02,980 --> 00:40:06,670 Voici notre homme méchant mauvais là. 561 00:40:06,670 --> 00:40:10,660 Une raison pour laquelle ce méchant aime wi-fi 562 00:40:10,660 --> 00:40:18,770 C'est parce que, par défaut, un grand nombre de routeurs sans fil sont livrés et quand vous les mettre en place, 563 00:40:18,770 --> 00:40:20,950 ils sont en clair. 564 00:40:20,950 --> 00:40:23,970 Cela a été un problème, et il ya eu des cas - 565 00:40:23,970 --> 00:40:28,210 plusieurs instances, maintenant - où les mauvais gars se présente à la maison de quelqu'un, 566 00:40:28,210 --> 00:40:32,630 avis qu'il ya un clair wi-fi à laquelle ils peuvent se connecter. 567 00:40:32,630 --> 00:40:37,350 Ils se connectent au wi-fi, et puis ils commencent télécharger toutes sortes de choses amusantes. 568 00:40:37,350 --> 00:40:40,890 Et ils ne sont pas le téléchargement chatons, ils ne téléchargez pas les chiots. 569 00:40:40,890 --> 00:40:44,610 C'est comme BitTorrent. C'est le méchant de plus méchant. 570 00:40:44,610 --> 00:40:48,740 Il ya eu des cas où le FBI a même été impliqué 571 00:40:48,740 --> 00:40:52,390 penser que la personne qui est propriétaire de la maison est en fait celui 572 00:40:52,390 --> 00:40:56,090 aller là-bas et télécharger des choses qu'ils ne devraient pas l'être. 573 00:40:56,090 --> 00:41:00,730 Ayant clair wi-fi n'est certainement pas quelque chose que vous voulez faire, 574 00:41:00,730 --> 00:41:06,340 si ce n'est de ne pas avoir le FBI viennent frapper à votre porte. 575 00:41:06,340 --> 00:41:09,910 >> Une autre raison pour laquelle les méchants aiment wi-fi 576 00:41:09,910 --> 00:41:13,870 est la raison pour laquelle David a parlé tout à l'heure pendant la pause. 577 00:41:13,870 --> 00:41:17,240 Parce que c'est une communication radio à sa base, 578 00:41:17,240 --> 00:41:22,460 si vous connaissez le canal, vous pouvez écouter la station de radio. 579 00:41:22,460 --> 00:41:31,870 Par exemple, s'il ya un droit de mauvais là assis au milieu à droite à côté du point d'accès, 580 00:41:31,870 --> 00:41:36,830 juste à côté de ce routeur sans fil, le méchant peut écouter tout le trafic sans fil 581 00:41:36,830 --> 00:41:40,240 qui vient de tous ces ordinateurs. 582 00:41:40,240 --> 00:41:44,590 En fait, ces gars-là - ces quelques chanceux qui sont ici au premier rang - 583 00:41:44,590 --> 00:41:47,610 parce qu'ils sont super proche de tous ces routeurs sans fil 584 00:41:47,610 --> 00:41:49,950 qui sont assis juste en dessous de la scène, 585 00:41:49,950 --> 00:41:53,780 ils seraient en mesure d'entendre la circulation de tout le monde dans cette salle entière 586 00:41:53,780 --> 00:41:59,480 si vous êtes connecté au wi-fi et commencer à naviguer à travers ces points d'accès. 587 00:41:59,480 --> 00:42:03,740 Ce n'est pas très difficile de vous asseoir dans une bonne position pour flairer et comprendre 588 00:42:03,740 --> 00:42:07,030 ce que font les autres. 589 00:42:07,030 --> 00:42:10,830 C'est quelque chose à garder à l'esprit, surtout si vous ne savez pas où le point d'accès est, 590 00:42:10,830 --> 00:42:15,010 et vous naviguez mot à dire, dans un Starbucks. 591 00:42:15,010 --> 00:42:17,360 >> Il s'avère que le reniflement et tout cela 592 00:42:17,360 --> 00:42:19,440 n'est pas vraiment si difficile que ça à faire. 593 00:42:19,440 --> 00:42:25,430 Il ya un programme appelé tcpdump qui décharge toutes sortes de trafic TCP 594 00:42:25,430 --> 00:42:29,910 et vous pouvez l'exécuter assez simplement - comme je l'ai fait ce matin. 595 00:42:29,910 --> 00:42:32,810 Voici un peu plus d'un dépotoir, et voici une partie du trafic qui venait au-dessus 596 00:42:32,810 --> 00:42:34,960 mon réseau à la fois. 597 00:42:34,960 --> 00:42:41,500 Vous pouvez voir - si vous strabisme très difficile - il ya un peu de Spotify là-dedans. 598 00:42:41,500 --> 00:42:44,050 En plus de tcpdump - parce que c'est une sorte de douleur à utiliser - 599 00:42:44,050 --> 00:42:48,860 il ya un programme appelé Wireshark qui rassemble tout cela dans une jolie interface graphique. 600 00:42:48,860 --> 00:42:51,970 Wireshark est super pratique si vous passez à suivre des cours de mise en réseau, 601 00:42:51,970 --> 00:42:56,780 il s'agit d'un outil qui vous viennent à l'amour, car il vous permet de disséquer tous les paquets 602 00:42:56,780 --> 00:42:59,400 qui sont flottant autour de là. 603 00:42:59,400 --> 00:43:01,810 Mais il peut aussi être utilisé pour le pire. 604 00:43:01,810 --> 00:43:05,810 C'est très simple il suffit de télécharger ce programme, il démarre, 605 00:43:05,810 --> 00:43:09,300 démarrer une capture réseau, et de voir tout ce qui se passe - 606 00:43:09,300 --> 00:43:14,130 et le filtre et faire toutes sortes de choses amusantes avec elle. 607 00:43:14,130 --> 00:43:17,930 >> L'autre chose que vous pouvez faire avec communication sans fil 608 00:43:17,930 --> 00:43:25,380 est non seulement vous pouvez espionner, mais vous pouvez également apprendre à visser avec le réseau 609 00:43:25,380 --> 00:43:31,020 et injecter vos propres informations pour contrôler l'expérience que d'autres personnes 610 00:43:31,020 --> 00:43:35,140 sur le même réseau sans fil reçoivent. 611 00:43:35,140 --> 00:43:37,140 Jetons un coup d'oeil. 612 00:43:37,140 --> 00:43:40,700 Voici Firesheep - que nous connaissons et aimons la semaine dernière - 613 00:43:40,700 --> 00:43:43,590 qui est celui technologie de l'écoute. 614 00:43:43,590 --> 00:43:50,360 Si, par exemple, nous voulions avoir notre activement go bad guy et s'amuser avec 615 00:43:50,360 --> 00:43:52,690 un de ces ordinateurs, 616 00:43:52,690 --> 00:43:58,380 Dans ce scénario, nous avons reçu un ordinateur en essayant d'aller surfer sur harvard.edu. 617 00:43:58,380 --> 00:44:04,690 Qu'est-ce qui se passe, l'ordinateur envoie d'abord un message au routeur sans fil et dit: 618 00:44:04,690 --> 00:44:07,920 hey, je veux aller www.harvard.edu visite. 619 00:44:07,920 --> 00:44:10,610 Dire pour une raison quelconque, ils essaient d'obtenir des informations sur le jeu ce week-end. 620 00:44:10,610 --> 00:44:14,940 Méchant, car il est assis en plein milieu, 621 00:44:14,940 --> 00:44:18,730 juste à côté de ce point d'accès, peut voir que la communication provenant de l'ordinateur 622 00:44:18,730 --> 00:44:26,170 dans le routeur, et il sait: «Ah! Quelqu'un va harvard.edu." (Méchamment rires) 623 00:44:26,170 --> 00:44:33,870 Il va y avoir cette latence tandis que la communication passe par le routeur 624 00:44:33,870 --> 00:44:37,780 sur l'Internet pour aller chercher la page Web à harvard.edu-- 625 00:44:37,780 --> 00:44:42,020 juste comme vous les gars savons tous, après avoir fait vos psets PHP - 626 00:44:42,020 --> 00:44:45,680 et si le méchant a un peu de temps, un peu de fenêtre, 627 00:44:45,680 --> 00:44:49,410 dans laquelle il peut répondre avec quelques trucs. 628 00:44:49,410 --> 00:44:53,660 >> Disons que ce méchant, bien sûr, est un Yaley. 629 00:44:53,660 --> 00:44:59,990 Il répond avec harvardsucks.org. Boo! 630 00:44:59,990 --> 00:45:02,300 Bad, bad guy! Bad Yaley! 631 00:45:02,300 --> 00:45:06,020 Ou pire encore, il pourrait répondre à cela. [Http://youtu.be/ZSBq8geuJk0]. 632 00:45:06,020 --> 00:45:09,530 Je vais vous laisser savoir ce que c'est. 633 00:45:09,530 --> 00:45:14,840 C'est en fait une technologie appelée airpwn! qui a fait ses débuts au 634 00:45:14,840 --> 00:45:18,950 l'une des conférences sur la sécurité il ya quelques années. 635 00:45:18,950 --> 00:45:25,190 Avec airpwn! vous êtes en mesure de réellement injecter du trafic vers le réseau. 636 00:45:25,190 --> 00:45:30,060 Les ordinateurs qui tentaient de sortir à Internet et essayer d'arriver à 637 00:45:30,060 --> 00:45:33,090 Google.com, à Facebook.com, à harvard.edu 638 00:45:33,090 --> 00:45:39,190 voir la réponse malveillante venir et assumer immédiatement, d'accord, 639 00:45:39,190 --> 00:45:43,550 C'est la réponse que j'attendais et finissent par obtenir le contenu de 640 00:45:43,550 --> 00:45:48,860 harvardsucks.org ou nameyourfavoriteshocksite.com, 641 00:45:48,860 --> 00:45:55,270 et vous pouvez voir comment les choses vont se détériorer. 642 00:45:55,270 --> 00:46:00,190 >> Toutes ces sortes de choses ne peut se faire 643 00:46:00,190 --> 00:46:05,870 avec ces connexions filaires car avec une connexion filaire 644 00:46:05,870 --> 00:46:08,710 il est difficile d'snoop sur le trafic. 645 00:46:08,710 --> 00:46:13,020 Si je suis un mauvais garçon et une extrémité se trouve votre ordinateur 646 00:46:13,020 --> 00:46:14,460 et sur l'autre extrémité est votre routeur - modem - 647 00:46:14,460 --> 00:46:20,180 la seule façon que je peux obtenir entre cet égard est en fait de raccorder mon ordinateur 648 00:46:20,180 --> 00:46:22,180 quelque part au milieu 649 00:46:22,180 --> 00:46:26,820 ou faire autre chose avec le routeur, en aval quelque chose. 650 00:46:26,820 --> 00:46:33,360 Mais avec sans fil, il peut être aussi facile que de s'asseoir au premier rang d'une salle de classe, 651 00:46:33,360 --> 00:46:38,200 et vous pouvez faire toutes sortes de choses désagréables pour les personnes à l'arrière. 652 00:46:38,200 --> 00:46:41,570 >> Parlons un peu de la façon dont vous pourriez défendre contre certaines de ces choses. 653 00:46:41,570 --> 00:46:46,860 Les personnes qui ont développé les normes sans fil - l'802.11 - 654 00:46:46,860 --> 00:46:50,820 ils ne sont pas des gens stupides par un effort d'imagination. 655 00:46:50,820 --> 00:46:56,110 Il s'agit d'une technologie sympa et quand il a fait ses débuts en 1999, 656 00:46:56,110 --> 00:47:00,780 ils sont venus avec cette norme appelée WEP. 657 00:47:00,780 --> 00:47:03,360 Vous pouvez voir ici lorsque vous essayez de rejoindre un réseau sans fil, 658 00:47:03,360 --> 00:47:07,450 vous avez toutes sortes de différentes options de sécurité. 659 00:47:07,450 --> 00:47:11,800 C'est une sorte de douleur, car il ya 6 tous ensemble 660 00:47:11,800 --> 00:47:14,790 et il n'a jamais fait vraiment de sens dont 1 à y adhérer. 661 00:47:14,790 --> 00:47:19,190 Ce 1 en haut est le premier qui ils sont venus avec WEP appelé. 662 00:47:19,190 --> 00:47:27,960 WEP est l'acronyme de Wired Equivalent Privacy, je crois, 663 00:47:27,960 --> 00:47:31,730 pas Wireless Encryption Protocol qui est un abus de langage commun. 664 00:47:31,730 --> 00:47:36,170 Parce qu'il tente de vous donner équivalent confidentialité et la protection de la sécurité 665 00:47:36,170 --> 00:47:40,590 équivalent à celui d'un réseau filaire 666 00:47:40,590 --> 00:47:46,710 Avec WEP ce qui finit par se produire est, 667 00:47:46,710 --> 00:47:52,300 vous avez un simple mot de passe que vous tapez peu à l'intérieur et qui sert à crypter 668 00:47:52,300 --> 00:47:56,210 l'ensemble de vos communications entre votre ordinateur et votre routeur. 669 00:47:56,210 --> 00:47:58,210 >> Quel est le problème avec WEP si? 670 00:47:58,210 --> 00:48:01,470 Le mot de passe avec cryptage WEP est vraiment court, 671 00:48:01,470 --> 00:48:04,900 et aussi tout le monde utilise ce mot de passe exactement les mêmes, 672 00:48:04,900 --> 00:48:07,610  et il est donc très facile à déchiffrer. 673 00:48:07,610 --> 00:48:10,580 Alors très vite compris que les gens WEP a été un problème, 674 00:48:10,580 --> 00:48:16,100 et la seule raison pour laquelle vous le voyez apparaître encore sur ce petit gars est - 675 00:48:16,100 --> 00:48:18,890 il ya des systèmes plus anciens qui ne utilisent le protocole WEP - 676 00:48:18,890 --> 00:48:25,710 ce que vous devriez plutôt être cherchez sont WPA et WPA2 même des normes 677 00:48:25,710 --> 00:48:29,130 qui ont été libérés par la suite. 678 00:48:29,130 --> 00:48:35,040 Ces systèmes sont un aller beaucoup mieux à la protection sur Internet sans fil. 679 00:48:35,040 --> 00:48:41,090 Cela dit, ils n'ont toujours avoir une certaine hackabilité. 680 00:48:41,090 --> 00:48:44,010 Il existe des outils qui il peut aller le faire. 681 00:48:44,010 --> 00:48:47,490 Une chose en particulier qui peut être désagréable, c'est que 682 00:48:47,490 --> 00:48:55,370 si vous vous connectez et authentifié à un routeur sans fil et que vous utilisez une sorte de 683 00:48:55,370 --> 00:49:00,940 communication cryptée, il s'avère qu'un pirate peut facilement envoyer un seul paquet 684 00:49:00,940 --> 00:49:03,990 pour vous déconnecter du routeur, 685 00:49:03,990 --> 00:49:07,220 et une fois qu'ils vous ont débranché ils peuvent alors écouter - 686 00:49:07,220 --> 00:49:11,800 ils peuvent renifler les paquets que vous essayez de rétablir la connexion avec votre routeur. 687 00:49:11,800 --> 00:49:16,800 Et avec cette information, ils peuvent alors entrer et décrypter le reste de votre communication. 688 00:49:16,800 --> 00:49:24,580 Ce n'est pas par tous les moyens toute sorte de sécurité au-delà de toute imagination. 689 00:49:24,580 --> 00:49:30,060 >> L'autre chose que vous pouvez faire lorsque vous mettez en place des réseaux sans fil 690 00:49:30,060 --> 00:49:35,460 ou que vous les rejoindre est - vous remarquerez que ici quand je me joins à ce réseau, 691 00:49:35,460 --> 00:49:37,640 il demande le nom de mon réseau. 692 00:49:37,640 --> 00:49:41,060 Ceci est également connu sous le nom SSID. 693 00:49:41,060 --> 00:49:48,610 Et vous voyez ici que sur la droite J'ai une boîte qui me montre les SSID disponibles. 694 00:49:48,610 --> 00:49:52,690 Il ya une université Harvard, un CS50, CS50 et un réseau personnel. 695 00:49:52,690 --> 00:49:59,180 Maintenant, combien d'entre vous savais qu'il y avait un réseau personnel autour CS50? 696 00:49:59,180 --> 00:50:01,910 Certains d'entre vous. Vous n'avez pas tous. 697 00:50:01,910 --> 00:50:08,800 Le problème avec cela, bien sûr, c'est que si nous n'avions pas mis en place sur notre liste de SSID, 698 00:50:08,800 --> 00:50:10,930 personne ne l'aurait su à son sujet le plus probable. 699 00:50:10,930 --> 00:50:16,090 Je l'espère. À moins que vous les gars essaient tous de se fissurer dans notre sans fil. 700 00:50:16,090 --> 00:50:18,700 Mais c'est quelque chose que vous pouvez faire c'est vraiment important quand vous mettez en place 701 00:50:18,700 --> 00:50:20,280 un routeur à la maison. 702 00:50:20,280 --> 00:50:22,820 Ce ne sera probablement pas le cas pendant quelques années pour un grand nombre d'entre vous, 703 00:50:22,820 --> 00:50:29,010 mais gardez à l'esprit que le maintien de ce SSID sortir de là et de ne pas le nommer aussi 704 00:50:29,010 --> 00:50:34,630 quelque chose de super-common vous aidera à rester plus sûr à long terme. 705 00:50:34,630 --> 00:50:38,070 >> Un couple final de choses que vous pouvez faire. Le premier est le protocole HTTPS. 706 00:50:38,070 --> 00:50:44,760 Si vous êtes dans un Starbucks, si vous êtes dans un lieu public wi-fi zone 707 00:50:44,760 --> 00:50:52,620 et vous décidez d'accéder à votre compte en banque, accéder à votre compte Gmail, vos contacts Facebook, 708 00:50:52,620 --> 00:50:56,140 assurez-vous que ces connexions vont sur HTTPS. 709 00:50:56,140 --> 00:50:59,800 Il s'agit d'une couche de sécurité supplémentaire, une couche supplémentaire de chiffrement. 710 00:50:59,800 --> 00:51:01,520 La seule chose à garder à l'esprit ici est, 711 00:51:01,520 --> 00:51:04,740 combien d'entre vous avez déjà cliqué sur ce grand écran rouge qui dit, 712 00:51:04,740 --> 00:51:07,480 «Ce site pourrait être mauvais." 713 00:51:07,480 --> 00:51:09,710 Je sais que j'ai. 714 00:51:09,710 --> 00:51:13,090 C'est probablement quand vous êtes tout navigation pour aller voir La patrie ou quelque chose comme ça, non? 715 00:51:13,090 --> 00:51:19,900 Ouais. (Rires) Ouais. Là vous allez. Nous savons qui regarde la patrie. 716 00:51:19,900 --> 00:51:24,540 C'est grand écran rouge là 717 00:51:24,540 --> 00:51:28,600 indique souvent que quelque chose de funky qui se passe. 718 00:51:28,600 --> 00:51:32,530 Parfois, c'est juste le site lui-même est précaire, 719 00:51:32,530 --> 00:51:35,520 mais ce même grand écran rouge apparaît lorsque les gens essaient de 720 00:51:35,520 --> 00:51:37,520 montage réseau des attaques sur vous. 721 00:51:37,520 --> 00:51:40,220 Donc, si vous voyez ce gros écran rouge monter dans un Starbucks, 722 00:51:40,220 --> 00:51:42,440 ne cliquez pas au travers. 723 00:51:42,440 --> 00:51:45,350 Les mauvaises nouvelles. Les mauvaises nouvelles porte. 724 00:51:45,350 --> 00:51:51,490 >> La dernière chose que vous pouvez regarder 725 00:51:51,490 --> 00:51:54,120 est une sorte de VPN. 726 00:51:54,120 --> 00:52:00,280 Ce VPN est disponible par le biais de Harvard - vpn.fas.harvard.edu-- 727 00:52:00,280 --> 00:52:03,260 et ce que cela fait est qu'il établit en fait une connexion sécurisée 728 00:52:03,260 --> 00:52:06,460 entre vous et Harvard, entonnoirs votre trafic à travers elle, 729 00:52:06,460 --> 00:52:12,160 et de cette façon si vous êtes assis à un endroit comme un Starbucks 730 00:52:12,160 --> 00:52:19,030 vous pouvez vous connecter à Harvard, obtenir que le trafic en toute sécurité, puis accédez à Harvard. 731 00:52:19,030 --> 00:52:21,950 Encore une fois, n'est pas infaillible. Les gens peuvent obtenir dans le milieu. 732 00:52:21,950 --> 00:52:25,850 Ils peuvent commencer à le briser, mais c'est beaucoup plus sûr que de compter sur la sécurité 733 00:52:25,850 --> 00:52:28,620 de la seule wi-fi. 734 00:52:28,620 --> 00:52:32,570 >> Très bien. En somme, 735 00:52:32,570 --> 00:52:34,580 lorsque vous mettez en place des réseaux sans fil, 736 00:52:34,580 --> 00:52:37,250 quand vous sortez sans fil à utiliser en public - 737 00:52:37,250 --> 00:52:43,430 qu'il s'agisse d'un Starbucks, qu'il s'agisse de Five Guys, que ce soit b.good, 738 00:52:43,430 --> 00:52:46,440 quelque chose comme ça - partout où ils ont accès wi-fi - 739 00:52:46,440 --> 00:52:48,440 être conscient de votre environnement. 740 00:52:48,440 --> 00:52:50,440 Soyez conscient de ce que les gens peuvent faire. 741 00:52:50,440 --> 00:52:53,890 Et être en sécurité. Ne pas accéder à votre compte en banque. 742 00:52:53,890 --> 00:52:58,740 Ce pourrait être un rude réveil si quelqu'un se présente avec votre mot de passe plus tard. 743 00:52:58,740 --> 00:53:05,480 Avec cela, allez pourpre! Et je vais me tourner les choses à David pour dire un dernier mot. 744 00:53:05,480 --> 00:53:11,270 (Applaudissements) 745 00:53:11,270 --> 00:53:14,360 >> [David] j'ai pensé que je devais partager une chose de son expérience personnelle. 746 00:53:14,360 --> 00:53:19,940 Un outil que vous aimeriez jouer avec - si Apple a largement éradiqué cette question 747 00:53:19,940 --> 00:53:22,710 si vous avez mis à jour votre logiciel depuis - 748 00:53:22,710 --> 00:53:26,670 mais à cette fin de ne pas vraiment pouvoir faire confiance aux logiciels que nous utilisons, 749 00:53:26,670 --> 00:53:33,270 et aux points de Nate, être capable de renifler un peu de ce que font les autres 750 00:53:33,270 --> 00:53:37,010 là-bas - c'était un morceau de logiciel qui est sorti il ​​ya environ un an et demi maintenant. 751 00:53:37,010 --> 00:53:39,010 [IPhoneTracker] [http://petewarden.github.com/iPhoneTracker/] 752 00:53:39,010 --> 00:53:41,010 Depuis quelque temps, iTunes - avant iCloud, lorsque vous avez été la synchronisation de vos iPod ou votre iPhone ou 753 00:53:41,010 --> 00:53:45,570 ou vos iPads avec iTunes - dans l'intérêt de sauvegardes, 754 00:53:45,570 --> 00:53:48,340 ce que votre iPhone et ces autres dispositifs ont été faites pour un certain temps est 755 00:53:48,340 --> 00:53:50,340 l'utilisation de données GPS. 756 00:53:50,340 --> 00:53:52,710 >> Vous connaissez tous sans doute que vos iPhones et Androids et Windows téléphones mobiles 757 00:53:52,710 --> 00:53:55,410 et comme ces jours-ci permet de suivre où que vous soyez dans l'intérêt de vous montrer des cartes 758 00:53:55,410 --> 00:53:59,440 et analogues - et ce que Apple et ces autres sociétés ne sont 759 00:53:59,440 --> 00:54:02,650 ils sont généralement suivre presque partout où vous avez réellement été dans l'intérêt de 760 00:54:02,650 --> 00:54:05,380 l'amélioration de la qualité de service. 761 00:54:05,380 --> 00:54:07,170 One, vous pouvez obtenir plus de publicité ciblée et similaires, 762 00:54:07,170 --> 00:54:10,740 mais deux, ils peuvent aussi déterminer où sont les points d'accès sans fil dans le monde, 763 00:54:10,740 --> 00:54:14,780 et cela peut aider à la géo-localisation - sorte de triangulation de la position des gens. 764 00:54:14,780 --> 00:54:18,520 >> Longue histoire courte, nous avions tous été à pied d'antennes pour une certaine quantité de temps. 765 00:54:18,520 --> 00:54:22,180 Malheureusement, Apple avait pris la décision de conception - ou son absence - 766 00:54:22,180 --> 00:54:26,590 de ne pas chiffrer cette information quand il a été sauvegardé être à iTunes. 767 00:54:26,590 --> 00:54:30,330 Et ce que le chercheur en sécurité a été trouvé que c'était juste un énorme fichier XML - 768 00:54:30,330 --> 00:54:33,810 un énorme fichier texte - assis dans le logiciel iTunes peuple, 769 00:54:33,810 --> 00:54:35,400 et si vous étiez juste un peu curieux, 770 00:54:35,400 --> 00:54:38,990 vous pouvez aller fouiller l'histoire de votre conjoint, votre compagnon de chambre de l'histoire, 771 00:54:38,990 --> 00:54:41,050 vos frères et sœurs de l'histoire et autres, 772 00:54:41,050 --> 00:54:44,590 et grâce à certains logiciels libres, vous pouvez tracer l'ensemble de ces coordonnées GPS - 773 00:54:44,590 --> 00:54:46,590 latitude et la longitude. 774 00:54:46,590 --> 00:54:48,590 >> Donc, en fait je l'ai fait avec mon propre téléphone. 775 00:54:48,590 --> 00:54:51,210 J'ai branché mon téléphone, et bien sûr, ma version d'iTunes n'a pas été chiffré à l'époque, 776 00:54:51,210 --> 00:54:53,900 et ce que j'ai pu voir étaient mes propres patrons. 777 00:54:53,900 --> 00:54:56,970 Voici les Etats-Unis et chacun de ces cercles bleus représentent 778 00:54:56,970 --> 00:55:01,670 où je me trouvais avoir été au cours de ces derniers mois de posséder ce téléphone particulier. 779 00:55:01,670 --> 00:55:04,940  Je passe beaucoup de temps, bien sûr, dans le nord-est, un peu de temps en Californie, 780 00:55:04,940 --> 00:55:08,690 un voyage de courte durée au Texas, et si vous zoomez ensuite sur cette - 781 00:55:08,690 --> 00:55:11,120 c'est tout ce genre de belle et intéressante, mais je savais que cela. 782 00:55:11,120 --> 00:55:13,890 La plupart de mes amis le savaient, mais si vous plonger plus profondément, 783 00:55:13,890 --> 00:55:17,090 Vous voyez où je passe le plus clair de mon temps dans le Nord-Est. 784 00:55:17,090 --> 00:55:20,330 Si vous s'accrocher à certaines villes connaissent prospectifs - 785 00:55:20,330 --> 00:55:24,670 cette grande tache d'encre bleue est essentiellement centré sur Boston, 786 00:55:24,670 --> 00:55:29,510 et puis je passe un peu de temps dans la banlieue de Boston rayonnant. 787 00:55:29,510 --> 00:55:32,780 Mais je faisait aussi un peu de la consultation de cette année. 788 00:55:32,780 --> 00:55:36,090 Et cette année, c'est la côte Est, et vous pouvez réellement me voir 789 00:55:36,090 --> 00:55:41,920 et mon iPhone dans ma poche des allers et retours entre Boston et New York 790 00:55:41,920 --> 00:55:47,510 Philadelphie et plus bas, ainsi que passer un peu de temps de vacances 791 00:55:47,510 --> 00:55:50,340 sur le Cap, qui est le petit bras là-bas. 792 00:55:50,340 --> 00:55:53,030 Ainsi, chacun de ces points représente un endroit que j'avais été, 793 00:55:53,030 --> 00:55:56,970 et complètement à mon insu, toute cette histoire était juste assis là 794 00:55:56,970 --> 00:55:58,410 sur mon ordinateur de bureau. 795 00:55:58,410 --> 00:56:00,470 Si vous effectuer un zoom arrière - cette réalité était un peu troublant. 796 00:56:00,470 --> 00:56:04,190 Je n'avais pas souvenir d'avoir jamais été en Pennsylvanie cette année-là. 797 00:56:04,190 --> 00:56:07,840 Mais je pensais un peu plus à ce sujet et j'ai pensé, oh, c'était en fait ce voyage 798 00:56:07,840 --> 00:56:11,160 et bien sûr, mon téléphone m'avait pris. 799 00:56:11,160 --> 00:56:14,180 >> Apple a depuis cette information chiffrée, 800 00:56:14,180 --> 00:56:17,380 mais c'est trop juste témoigne de la quantité d'informations recueillies à propos de nous, 801 00:56:17,380 --> 00:56:20,850 et avec quelle facilité - pour le meilleur ou pour le pire - c'est acceptable. 802 00:56:20,850 --> 00:56:23,340 Un des plats à emporter, espérons de parler de Rob, de parler de Nate 803 00:56:23,340 --> 00:56:27,370 et des visuels petites comme celle d'aujourd'hui est simplement d'être conscient tout le plus de cette 804 00:56:27,370 --> 00:56:31,160 de sorte que, même si - comme au point de Rob - sorte de nous sommes des vissé, non? 805 00:56:31,160 --> 00:56:33,920 Il n'y a pas grand chose à faire quand il s'agit de certaines de ces menaces, 806 00:56:33,920 --> 00:56:37,130 mais à la fin de la journée nous avons confiance en quelque chose ou quelqu'un 807 00:56:37,130 --> 00:56:38,510 si nous voulons réellement utiliser ces technologies. 808 00:56:38,510 --> 00:56:43,150 Au moins, on peut prendre des décisions éclairées et des décisions calculées ou non 809 00:56:43,150 --> 00:56:46,390 nous devrions être vérifier ce compte particulièrement sensible 810 00:56:46,390 --> 00:56:49,330 ou nous devrions être un peu suspecte d'envoi que message instantané 811 00:56:49,330 --> 00:56:52,180  dans un environnement wi-fi comme ça. 812 00:56:52,180 --> 00:56:54,990 >> Donc, avec cela dit, juste un reste quiz, un cours magistral reste. 813 00:56:54,990 --> 00:56:57,740 Nous vous reverrons mercredi puis lundi. 814 00:56:57,740 --> 00:57:02,100 (Applaudissements et des acclamations) 815 00:57:02,100 --> 00:57:06,100 [CS50TV]