[Powered by Google Translate] [Semana 10] [David J. Malan] [Harvard University] [Esta es CS50.] [CS50.TV] ¡Muy bien! Esto es CS50 pero no por mucho tiempo. Este es el comienzo de la semana 10. El miércoles tenemos nuestro concurso, y luego el próximo lunes tenemos una tarta de celebración como se cierra el círculo todo el camino de vuelta desde la semana cero. Hoy en día, hablamos de uno de mis temas favoritos, la verdad sea dicha - el de la seguridad y la privacidad y las implicaciones de todo el hardware y software que todos usamos hoy en día. Para ser honesto, hay una gran cantidad de amenazas por ahí que si usted realmente no han detenido a pensar en ellos, en realidad son bastante desalentador. El caso en cuestión - si alguno de ustedes alguna vez has descargado un software fuera de la Internet e instalado en su computadora, que ha participado en un importante grado de confianza, ¿no? No hay nada haber impedido Skype, o Chrome, o cualquier pieza de software que ha instalado en su computadora, desde simplemente eliminar todos los archivos en el disco duro; de subir todos los archivos en su disco duro al servidor un poco de chico malo; de la lectura de todos sus correos electrónicos, a partir de interceptar todos los mensajes instantáneos. Porque la realidad es hoy en día con los sistemas operativos más modernos en realidad no hay mucho de un muro entre los programas de software que se instalan, y tú y yo somos más o menos sólo un poco de cruzar los dedos y teniendo fe en que dicha aplicación se descarga de forma gratuita, o esa cosa que es 99 centavos de dólar, en realidad es completamente benigno. Pero como hemos visto a través de C, y ahora PHP y JavaScript, con esta capacidad de expresarnos mediante programación, usted puede hacer casi cualquier cosa que quieras con un programa que un usuario mismo o ella misma podía hacer. Así, hoy nos centramos en el tema - no sólo algunas amenazas, pero también defensas. De hecho, en el mundo de la seguridad en general, hay una especie de este juego del gato y el ratón, y me atrevo a decir a los chicos malos tienen casi siempre una ventaja. Cuando se trata de tomar ventaja de hardware y software en los ordenadores personales, tenemos que darnos cuenta de que un chico malo, simplemente tiene que encontrar un simple error - una explotación, un error - en una pieza de software que hemos escrito o están en ejecución para que él o ella para tomar el control de nuestro sistema. Por el contrario, nosotros - los buenos - que parchear y corregir todos esos errores y evitar todas esas debilidades. Y así, me atrevo a decir que, en general, los chicos malos tienen la ventaja. ¿Qué clases de clases como esta y posteriores son realmente no se le enseña acerca de cómo librar las batallas que estos chicos malos hacen, pero son sobre como protegerse a sí mismo o al menos cómo hacer una decisión calculada eso sí, sé que este pedazo de software realmente podía leer cada uno de mis correos electrónicos, pero estoy de acuerdo con eso por el valor que me lleva a la otra. Estoy muy contento de estar unidos por dos de las personas más inteligentes que conozco - Rob Bowden y Hardison Nate. Rob está a punto de llevarnos por un recorrido a través de los niveles más bajos de las etiquetas de seguridad - la del compilador que, hasta ahora, todos hemos llegado a amar y confiar. Rob Bowden. [Aplauso] [Rob] De acuerdo. David ha tomado casi toda mi spiel que me iba a presentar con, pero - Hace varias semanas, usted vio el ejemplo de un ataque de desbordamiento del búfer que es un ejemplo de un pirata informático de hacking en alguna pieza de software que no se supone que están pirateando. El otro lado de este es a veces tienes software malicioso que es en sí y por sí mismo. No necesita ni siquiera ser hackeado. La persona que escribió el software quiere hackear. Vamos a entrar de lleno en el código, echar un vistazo a "login.c". Aquí, un programa tonto que valida un nombre de usuario y una contraseña. Aquí usted definitivamente debe ser sentirse cómodo con C de nuevo para el concurso. En primer lugar, estamos usando conseguir cuerdas para describir el nombre de usuario, entonces estamos usando get cadena para agarrar la contraseña, y luego tenemos algunas comprobaciones triviales de la justa, es el nombre de usuario "robar"? Y es la contraseña "thisiscs50"? ¿O es el nombre de usuario "tommy" y la contraseña "i <3javascript"? Si cualquiera de ellos es el caso,  entonces sólo vamos a imprimir el "éxito", y luego tenemos acceso. De lo contrario, vamos a imprimir "no válido de inicio de sesión" y luego, por supuesto,  ya que la memoria malloc bosquejo cadenas, hemos nombre de usuario y contraseña gratis. Este es un programa de conexión trivial, y si lo piensas al iniciar sesión en el dispositivo, es bastante similar - o incluso acceder a su ordenador - sólo hay algún programa de inicio de sesión que te da acceso. A continuación, pasamos a tener codificado 'rob', 'thisiscs50', 'Tommy', 'i <3javascript', pero probablemente hay algún archivo en alguna parte de su sistema operativo que tiene una lista de nombres de usuarios que pueden iniciar sesión en el sistema y una lista de las contraseñas asociadas con los nombres de usuario. Por lo general, las contraseñas no se almacenan en texto plano sólo de esta manera. Hay algún tipo de cifrado, pero esto va a hacer para nuestro ejemplo. Viniendo a nuestro compilador - que va a ser muy sencillo. Tenemos que especificar al menos algún archivo que queremos compilar, Y luego aquí - estas líneas se acaba de leer un archivo. Se lee todo el archivo en un búfer grande, y luego nos null-terminará nuestro buffer como siempre, y finalmente sólo compilar el archivo. No vamos a ver cómo se aplica realmente compilación, sino como una pista, sólo llama a Clang. Vamos a utilizar este programa para compilar cosas en vez de Clang. Un problema que empezar es que vemos que queremos compilar nuestro compilador, pero si no vas a utilizar Clang, no sé lo que voy a compilar con. Este es un problema general conocido como bootstrapping. Así que, sólo por esta vez, voy a utilizar Clang para recopilar nuestro compilador. Si usted piensa en GCC y Clang - estos programas, los compiladores se actualizan constantemente, y los compiladores se compilan utilizando GCC y Clang. Clang es sólo una gran C o C + +, por lo que el compilador se utilice para compilar ese es Clang. Aquí, ahora, sólo vamos a usar nuestro compilador para compilar el compilador, e incluso podemos decir - '/ compilador.', 'compiler.c', 'compile.c', '-o compilador. Observe este es el comando exacto que corrió delante - basta con sustituir Clang con '. / compilador. Y ahora tenemos otro compilador, pero es exactamente lo mismo. Simplemente llama Clang. Vamos a usar nuestro compilador para compilar nuestro programa de inicio de sesión. Está bien - ". / Compilador login.c-o login". Por lo tanto, undefined reference to "GetString". ¿Tienes un "-lcs50". Bien. Así que ahora tengo el programa de inicio de sesión. Ejecutarlo - recibir "Por favor, ingrese su nombre de usuario". Un ejemplo fue robar. Introduzca su contraseña - thisiscs50. Y el éxito! Tengo acceso. Ejecutar de nuevo y entrar en algún contraseña no válida - o nombre de usuario válido y la contraseña - Login incorrecto. Bien. Nada interesante acerca de esto hasta ahora. Pero, vamos a echar un vistazo al iniciar la sesión de nuevo - y esto va a ser un ejemplo algo trivial, pero vamos a añadir una cosa aquí y decir: else if ((strcmp (nombre de usuario, "hacker") == 0 && strcmp (password ", LOLihackyou") == 0)) por lo que ahora, printf ("Hacked Ahora tiene acceso \ n!."); bien. Compilación de esto - compilador login.c-o login-lcs50 - ahora corriendo identificarte - y si uso mi nombre de usuario hackers y la contraseña LOLihackedyou - ¿Me escribe mal allí antes? En login.c--ihack - I'Ll se cortó porque creo que hacer eso más tarde. Bien. Volver a compilar. Re-running - hacker - LOLihackedyou - Hacked! Ahora tiene acceso. No parece ser que gran parte de la diferencia porque es la misma comprobación exacta que estaba haciendo por otros nombres de usuario y contraseñas. Además, lo importante es que si la gente mira esto-login.c - decir, si yo fuera a pasar esto a mi pareja, y abrir este archivo, y lean esto, van a ver - está bien, ¿por qué tienes estas líneas de código en esta lista? Eso no es, obviamente, algo que debería estar en su programa. En algunos programas - como cualquier software propietario que no es de código abierto - usted puede nunca ver estas líneas de código. Algo como Skype o algo así - por todo lo que sé, Skype está en el equipo y no es sólo un nombre de usuario y contraseña específica combinación que se conectará a Skype en una forma especial. No sabemos de él, y la gente no sabe sobre él, porque no se llega a leer el código fuente para ver que hay de este agujero. Lo que llamamos esto - aunque esto no es un ejemplo muy inteligente - esto se llama una puerta trasera. Si usted piensa en la puerta trasera de su casa. Aquí, si puedo validar con "robar" los nombres de usuario o 'Tommy' que sería como usar la "puerta de entrada". Esa es la manera que tengo que iniciar sesión segura. Pero si entro con este nombre de usuario y contraseña - luego de que está usando la "puerta trasera". No era la manera intencional para entrar en el programa, pero aún funciona. Y la gente en general, no se supone que deben saber acerca de estas puertas traseras. Vamos a mejorar esto. Vamos a revertir esta en nuestro login.c original, y vamos a echar un vistazo a nuestro nuevo compilador. Bien. Todo hasta aquí es exactamente el mismo. Estamos leyendo todo el archivo en un búfer. Todo aquí es el mismo. Nos acaba de compilar el archivo. Pero ahora tengo esta cosa si aquí dice que, si el archivo que se me ocurre es que la compilación login.c, entonces hago algo especial. ¿Qué es ese algo especial? Veo aquí un trozo de cuerda llamado 'hack', y mirando a estas líneas de código - estas son las mismas líneas de código - Supongo que hice uso "ihack 'y no' ihacked" antes - mirar estas líneas de código, son las mismas líneas exactas del código que tenía en login.c antes. Pero ahora, en vez de tenerlos en login.c, Me voy a poner en mi compilador. Estas son las líneas de código que voy a querer para insertar en login.c. Estas líneas de código - el búfer que originalmente tenía mi login.c ya no va a ser lo suficientemente grande, porque ahora quiero insertar también este hack en medio de mi programa. Todo esto hace es crear un nuevo buffer que es lo suficientemente grande - tanto para el fichero original y las líneas adicionales de código - el hack - que quiero insertar allí. Aquí hay algo para notar - char * pattern = "/ / negarles el acceso!" Si miramos hacia atrás en login.c, vemos aquí este comentario - negarles el acceso! En login.c, este comentario se ve completamente inocuo, por lo que no se sospecha de cualquier intento malicioso con sólo este comentario. Pero en nuestro compilador, se nos va a mirar específicamente para esta línea de código, y después, cuando la encontramos - estas líneas de código a insertar nuestro cortar en esa posición. Por lo tanto, estamos interactuando sobre la login.c entero, estamos insertando ese truco exactamente donde dice negarles el acceso, y entonces estamos compilando - no el original de login.c pero el login.c nuevo con ese truco insertado a la derecha en "denegar el acceso. Ahora quiero compilar mi nuevo compilador con ese truco en cuestión. Yo no voy a usar Clang, así que vamos a copiar el compilador que usamos anteriormente y el uso que - por lo que, compilador compiler.c compile.c-o evil_compiler. Ahora nuestro compilador mal - si usamos el compilador para compilar el mal cualquier otro archivo, el archivo se compila como debería. Es completamente normal. Pero si utilizamos nuestro compilador para compilar el mal que identificarte - así, / evil_compiler login.c-o login-lcs50. - mirando login.c de nuevo, no hay absolutamente nada aquí. Es nuestra costumbre "si está bien robar o tommy estamos, más nos vamos '. Pero cuando nos encontramos nuestro ejecutable, esto funcionará como de costumbre. Ejecución de nuevo - hacker, LOLihackyou - Hacked! Ahora tiene acceso. Con sólo mirar a login.c, usted no pensaría que algo está mal. Sin embargo, el compilador que está siendo utilizado para compilar login.c está diseñado específicamente para insertar este corte en el programa. Sólo hemos trasladado nuestro problema original. Originalmente, teníamos estas líneas de código en login.c que si alguien más los miraba, que sería como, ¿por qué estas aquí? Ahora bien, si alguien pasa a buscar a nuestro compilador, se van a ver en estas líneas de código y decir: ¿por qué estas aquí? Por lo tanto, no hemos resuelto completamente nuestro problema. Pero podemos utilizar esta idea de nuevo. Echando un vistazo a nuestra tercera versión del compilador, Es la misma idea. Leemos todo el archivo en un búfer hasta aquí, se compila el archivo de aquí abajo, y tengo algún tipo de hack cadena aquí, notar el archivo que en realidad estoy hackeando ahora. Soy compiler.c piratería no login.c. Pero ¿qué estoy insertando en compiler.c? Estoy insertando el código que es el código exacto en nuestro compilador anterior, que tenía por objeto insertar código en login.c. Aquí está nuestra si login.c archivo strcmp y luego insertar en nuestras cosas login.c hack. Este nuevo compilador se pretende crear un compilador que está destinado a compilar inicio de sesión maliciosamente. Vamos a ver por qué eso nos ayuda. Todo lo demás es lo mismo, por lo que funciona exactamente como funcionaba con nuestro compilador anterior. Sólo estamos interactuando sobre nuestro compile.c entero. Pero ahora, en vez de buscar 'negarles el acceso " estamos buscando "compilar el archivo. ' Cuando se compila el archivo? En cuanto a nuestro compiler.c completamente inocente, está justo aquí abajo en la parte inferior. Este comentario - compilar el archivo - de nuevo, que parece totalmente inocuo. Pero, en nuestra versión maliciosa del compilador, vamos a - justo antes de que el comentario - introduzca el código que tiene por objeto insertar código al compilar login.c. Hay una gran cantidad de niveles de indirección aquí. Vamos a ejecutarlo realmente. Una vez más, vamos a copiar nuestro compilador original. Ahora, compile - compilador compiler.c compile.c-o evilest_compiler - y ahora evilest_compiler. Más malvado compilador - si usamos eso para compilar el compilador, vamos a ver en realidad. Evilest_compiler - llevándolo encima, todo el camino de vuelta a la versión 1 de nuestro compilador - versión 1 de nuestro compilador que se acaba de leer en el archivo y compilarlo. En este caso, sabemos que evilest_compiler - cuando se compila el archivo - se va a insertar código aquí antes de compilar el archivo, y que el código se va a ver exactamente como el código de la segunda versión de nuestro compilador que hizo esto. Este código, que está destinada a entrar en inicio de sesión, va a ser insertado en nuestro compilador por compilador más malvado. Usemos evilest_compiler para compilar nuestro compilador. Ahora vamos a utilizar compilador, volver a iniciar sesión, y recuerda que esto no tiene absolutamente nada login.c sospechoso en él. Pero el uso de nuestro compilador para compilar login.c, rob, thisiscs50, el éxito. Hackers Vamos a inicio de sesión, LOLihackyou, Hacked! Ahora tiene acceso. Reconocer que esto era diferente de la versión 2 de nuestro compilador. El compilador que utilizamos - vamos a volver - copia de identificarte - vamos a llevar nuestro compilador de vuelta aquí. Extracción de compilador más malvado. Todo lo que queda ahora es compilador. Si nos fijamos en compiler.c, no hay absolutamente nada allí que parece malintencionado de ningún modo. Si nos fijamos en login.c, no hay absolutamente nada en que se ve aquí malicioso de ninguna manera. Sin embargo, cuando utilizamos nuestro compilador para compilar login.c, tenemos la versión hackeable de login.c. Cuando utilizamos nuestro compilador para compilar una nueva versión del compilador, tenemos la versión hackeable del compilador. Ahora bien, si salimos y distribuir nuestro ejecutable del compilador, y nadie sabrá que no hay nada malicioso en ello. Esto es en realidad lo que en - no puedo recordar el año - Ken Thompson, y ganó el Premio Turing - si no está familiarizado con el Premio Turing, es casi siempre definida como la Premio Nobel de ciencias de la computación, así es como lo voy a definir. Ken Thompson pronunció un discurso cuando recibió el Premio Turing llamado "Reflexiones sobre la confianza que confían." Básicamente, esta fue la idea de su discurso. Excepto que en vez de nuestro compilador, que estaba hablando GCC - sólo otro compilador como Clang - y lo que estaba diciendo es, como nuestro login.c, nuestro login.c parece relativamente inútil pero él estaba hablando de la actual login.c UNIX. Cuando usted ingrese a su aparato, hay algún programa de inicio de sesión que se está ejecutando. Ese fue el inicio de sesión que él estaba hablando. Esto era básicamente su idea. Dijo que en GCC, que en teoría podría haber plantado un error - no es un error sino un código malicioso - que al compilar la función de inicio de sesión - el archivo de inicio de sesión - insertaría una puerta trasera para que pudiera ir a absolutamente cualquier sistema UNIX en el mundo y entrar con algún nombre de usuario y una contraseña específicos. A la vez, GCC era más o menos el compilador que todo el mundo sirve para nada. Si alguien le pasó a actualizar GCC, entonces sería volver a compilar GCC usando GCC, y todavía tendría una mala versión de GCC porque fue compilado específicamente para reconocer que fue recompilar el compilador. Y si alguna vez utiliza GCC para compilar un archivo login.c, entonces sería insertar esta puerta trasera que podía utilizar para iniciar sesión en cualquier ordenador. Esto fue todo teórico, pero - tal circunstancia en particular era teórica, pero las ideas son muy reales. En 2003, hubo un ejemplo similar en el que - vamos a echar un vistazo a este archivo, y no tiene absolutamente nada que ver en realidad con él, pero el error es similar. Este archivo sólo define una función llamada brecha. Es necesario un argumento a, b un argumento, y la intención es hacer un mundo dividido por b. Pero hace algún chequeo de errores, así que sabemos que las cosas son raras si b pasa a ser igual a cero. Si b es cero, entonces nos dividimos esto en 2 casos. Usted ya puede ver el error. El primer caso - si a es cero, entonces estamos haciendo cero dividido por cero, y nos dicen que eso es indefinido. El segundo caso - si A no es igual a cero, entonces es algo como 1 dividido por cero, y llamamos a ese infinito. Otra cosa que devolver el usual a dividido por b. Así que aquí, nos estamos quedando los 3 casos, y que en realidad ejecuta división - que le grita a él para mí - Así que, haciendo caso omiso de las advertencias de Clang - fin de no anular la función - al parecer yo no compilar esto de antemano. Devuelve 0. Haga dividir - Está bien. Con. / División, vemos 3, Infinity, Infinity. Cero dividido por cero no debería haber vuelto infinito. Y si no se han dado cuenta del error todavía - o no lo vieron antes - vemos que estamos haciendo a = 0. Probablemente nos referíamos a == 0. Probablemente. Sin embargo, esto fue en realidad algo que, de nuevo, en 2003, el kernel de Linux - por lo que nuestro aparato utiliza el núcleo Linux - cualquier sistema operativo Linux utiliza el núcleo Linux - por lo que un error muy similar a este apareció. La idea detrás de este error fue - de nuevo, no era sólo una función que se llama, y ​​lo hizo un poco de comprobación de errores. Hubo algunos insumos específicos que este chequeo de error - lo que debería haber sido así, está bien, no se puede llamar a esta función con un divisor de 0. Por lo tanto, voy a volver sólo algunos errores. Excepto, que no era tan inocente como se acaba de establecer un igual a 0. En su lugar, esta línea de código terminamos haciendo algo más como usuario administrador =. O user = superusuario. Se trataba de un inocente - a primera vista - error en el que podría haber sido sólo razonable que yo sólo quería informar de algo específico si el usuario pasó a ser el administrador de superusuario. Pero luego volver a pensar en ello, la persona que quería que se viera como un simple error tipográfico, pero si este código había sido realmente puesto en libertad, entonces habría sido capaz de hackear cualquier sistema pasando una bandera específica - en este caso b = 0 - y automáticamente se crea el usuario el administrador, y entonces él tiene el control total. Esto sucedió en 2003. Dio la casualidad de que la única razón por la que fue capturado era porque había pasado a ser algún sistema automatizado que notó el cambio en el archivo que nunca debería haber sido cambiado por un humano. El archivo sólo se debería haber generado automáticamente. Dio la casualidad de que alguien tocado - así, la persona que quería hackear tocado ese archivo, y el equipo capturado ese contacto. Así, cambiaron esto y sólo más tarde se dio cuenta de lo que es un desastre que habría sido si esto hubiera salido en el mundo real. Usted puede estar pensando que - volviendo a nuestro ejemplo de compilador - a pesar de que no podemos ver - mirar el código fuente - que nada en particular que está mal, si en realidad nos fijamos en el código binario del compilador, veríamos que algo anda mal. Por ejemplo, si ejecutamos las cuerdas funcionar - que sólo va a mirar por encima de un archivo e imprimir todas las cadenas que puede encontrar - si nos quedamos sin cuerdas en nuestro compilador, vemos que una cadena que se encuentra es esta extraña - else if (strcmp (nombre de usuario, "hacker") - bla, bla, bla. Si alguien pasó a ser paranoico como para no confiar en su compilador, podrían ejecutar las cuerdas y ver esto, y entonces ellos sabrían que había algo mal con el binario real. Sin embargo, las cadenas era algo que inevitablemente se compiló. Así que, ¿quién puede decir que nuestro compilador no sólo tiene más código especial que dice, si las cadenas se ejecute cada vez en nuestro compilador, no se genera todo el código malicioso. La misma idea de que si queremos desensamblar el archivo - nos enteramos de que el ensamblador nos trae de código ensamblador a un código máquina - podemos ir en la dirección opuesta - objdump-d compilador - nos dará el montaje de nuestro código. En cuanto a esto, es bastante críptico, pero si queríamos, podíamos ver a través de este y la razón, espera, hay algo que hacer aquí que no debería estar pasando, y luego vamos a reconocer que el compilador está haciendo algo malicioso. Pero, así como las cadenas, ¿quién puede decir objdump no era especial con carcasa. Básicamente, todo se reduce a que no puedes confiar en nada. La cuestión del papel que se llama "Confianza Confiar" es en general, confiamos en nuestro compilador. Compilar el código y esperar que lo que me pides que haga. Pero, ¿por qué debería confiar en el compilador? Usted no escribió el compilador. Usted no sabe lo que el compilador está necesariamente haciendo. ¿Quién dice que usted puede confiar en ella? Pero incluso entonces, bueno, a lo mejor podemos confiar en el compilador. Hay decenas de miles de personas que han estudiado en esto. Alguien debe haber reconocido que algo estaba pasando con el compilador. ¿Y si sólo tiene que ir un nivel más profundo? Incluso podría ser su procesador. Por ridículo que pueda ser, tal vez hay algún pícaro empleado de Intel que crea estos procesadores que cada vez que el procesador se da cuenta de que está ejecutando algún comando que es la intención de iniciar sesión en el ordenador, el procesador aceptar algún nombre de usuario específico y una contraseña. Sería tremendamente complicado, pero alguien podría hacerlo. En ese momento, ¿está usted realmente va a abrir el ordenador para mirar el procesador y el uso de un microscopio para reconocer que estos circuitos no están alineados como deberían ser? A nadie se le va a coger ese error. En algún momento, usted sólo tiene que rendirse y confiar en algo. La mayoría de la gente confía en el compilador en este punto. Es decir, no necesariamente que usted debe. Mirando un poco infame vídeo - [Música dramática jugar] [Es un sistema UNIX. Sé que esto.] [Es todos los archivos -] Ella dijo: "Es un sistema UNIX. Sé que esto." Reemplace UNIX con lo que su sistema operativo favorito es - ella podría haber dicho: "Es un sistema Windows. Sé que esto." Es una afirmación completamente carente de sentido, pero por lo que sabemos, ella pasa a conocer una puerta trasera en el sistema UNIX. Ella sabe alguna combinación nombre de usuario / contraseña que realmente le dejará hacer lo que quiera. Está bien. La moraleja de hoy es, básicamente, no se puede confiar en nada. Incluso las cosas que escribes - usted no escribió el compilador. El compilador puede ser malo. Incluso si lo hizo escribir el compilador, lo que se está ejecutando el compilador podría ser malo. (Risas) No hay mucho que puedas hacer. El mundo está condenado. Regreso a David! [Aplauso] [David] Gracias. Eso fue realmente deprimente. Pero de hecho, Rob es correcta. Realmente no tengo una solución para eso, sino que está a punto de obtener algunas soluciones a algunas defensas más comunes. En previsión de esto, lo que Nate y yo hemos estado haciendo fuera del escenario hay es saber que hay tantas laptops en esta sala, hemos estado olfateando todo el tráfico inalámbrico pasando por este lugar para los últimos 20 minutos durante la charla de Rob, así que vamos a tomar un descanso de 2 minutos aquí. Nate va a configurar, y luego vamos a hablar de todas las cosas que podríamos haber encontrado. (Risas) Por lo tanto, puede que haya exagerado un poco por el simple hecho de drama, pero podríamos haber estado husmeando todo su tráfico inalámbrico porque en realidad, es así de fácil. Pero también hay formas en que puede defenderse contra esto, y así con eso, Te doy Nate Hardison. >> [Nate] Sweet. (Aplausos) [Nate] Gracias, hombre. Agradezco el grito. ¡Muy bien! Es la semana de juego. ¿Están emocionados? Es de esperar que va a ser un gran partido el sábado. Me imagino que ustedes en este momento - ya que tienes un examen el miércoles todo sobre el código, y nos sentamos a través de una conferencia maravillosa por Rob con un montón de código C en él - son tal vez un poco cansado de código. En esta parte, estamos en realidad no va a tocar ningún código en absoluto. Sólo vamos a hablar de una tecnología que se utiliza todos los días, a menudo por muchas, muchas horas al día, y vamos a hablar de las implicaciones en la seguridad de que no lo son. Hemos hablado mucho acerca de la seguridad a lo largo del semestre, y empezamos con un poco de criptografía. [Bdoh lv vwlqng!] Y mientras ustedes están probablemente súper emocionada de estar pasando notas entre sí en clase mediante un cifrado de César como éste, en realidad, hay algo más que se había divertido cuando en realidad estás hablando de seguridad y ese tipo de cosas. Hoy en día, vamos a cubrir algunas tecnologías que las personas utilizan realmente en el mundo real para hacer todo tipo de cosas de oler los paquetes de la gente para realmente entrar y irrumpir en las cuentas bancarias de la gente y todo eso. Estas son herramientas legítimas que estamos hablando con la excepción de posiblemente una herramienta. Y yo sólo quiero hacer una aclaración rápida. Cuando hablamos de estas cosas, estamos hablando de ellos para que sepa lo que hay ahí fuera, y eres consciente de cómo estar seguros cuando usted está fuera mediante el ordenador. Pero definitivamente no quiero dar a entender que usted debe utilizar estas herramientas en su habitación o su casa porque usted puede tener un montón de grandes temas. Esa es una razón hoy en día que en realidad no estaban olfateando sus paquetes. Está bien. El lunes pasado, hemos hablado acerca de las cookies y HTTP y autenticación, Firesheep y cómo se abre la puerta grande en su cuenta de Facebook, a su cuenta de Hotmail - si alguien sigue usando Hotmail - y muchas otras cuentas. Muchas de estas cosas se va a construir fuera de eso, pero en primer lugar, quiero hacer un recorrido rápido de cómo el Internet ha evolucionado con el tiempo. En los años 90, ustedes podrían haber recordado realmente conectar los equipos con uno de estos. Ahora ya no hago eso tanto más. En realidad, resulta que para conectar un cable Ethernet en mi portátil, Ahora tengo que usar uno de estos adaptadores, que es una locura. En cambio, en 1997 tuvimos esta nueva tecnología, diversión trascendió que se conoce como IEEE 802.11, por lo que este es el estándar inalámbrico a internet El IEEE es este órgano de gobierno que le da toda clase de - publica todo tipo de normas con relación a las computadoras. Los estándares 802 son todos acerca de las tecnologías de Internet. Así 802,3, por ejemplo, es el estándar de Ethernet, 802.15.1 creo que es el estándar Bluetooth, y 802.11 es todo acerca de Internet inalámbrico. En 1997, este salió. No entendí bien de inmediato. No fue sino hasta 1999, y el estándar 802.11b supo que acaba de conseguir realmente popular. ¿Cuántos de ustedes recuerdan cuando los equipos empezaron a salir y conseguir wi-fi en ellos? Eso era una especie de fresco, ¿no? Recuerdo que recibí mi primera computadora portátil en la escuela secundaria, y que tenía una tarjeta inalámbrica en ella. Mi padre me lo dio y me dijo que debo usar para mis aplicaciones universidad y todo eso, y yo no tenía idea de cómo iba a buscar este material en línea. Pero, afortunadamente, yo tenía una tarjeta inalámbrica, por lo que era bastante guay. Hoy en día, usted también verá 802.11g, que es uno de los otros realmente popular estándares inalámbricos que hay ahí fuera. Tanto B y G son bastante obsoletas en este punto. ¿Alguien sabe qué versión de la mayoría de las personas están en estos momentos si va a comprar nuevos routers inalámbricos y ese tipo de cosas? N. Exactamente. Bingo. Y resulta que la norma de CA está saliendo en forma de borrador, y hay otras versiones en el camino. Con cada una de estas normas lo que estamos obteniendo es más ancho de banda, más datos a una velocidad más rápida. Estas cosas van cambiando muy rápidamente. También lo hace así que tenemos que comprar más routers y todas esas cosas divertidas. Vamos a hablar de lo que realmente es la comunicación inalámbrica en su núcleo. Con Ethernet y los módems antiguos de acceso telefónico, que en realidad tenía esta cosa que se ha conectado a su computadora, y luego conectado a un módem de tipo, y luego lo enchufa a una toma en la pared. Tenías que esta conexión por cable, ¿no? El punto entero de la tecnología inalámbrica es deshacerse de estas cosas. Con el fin de hacer eso, lo que tenemos es esencialmente una comunicación de radio donde nuestro router inalámbrico - designado por nuestro pequeño icono de red inalámbrica - está conectado a la Internet con esta flecha sólida que indica algún tipo de conexión por cable, pero cuando se conecta a su enrutador inalámbrico en realidad estás usando casi como un walkie-talkie entre el ordenador y el router inalámbrico. Lo que es realmente bueno de esto es que usted puede moverse. Usted puede llevar a su equipo por todo Sanders, vaya navegar por la web, lo que quieras, al igual que todos conocemos y amamos, y no siempre tiene que ser conectado a nada. Para que esto funcione, tenemos tanto la recepción y la transmisión. Realmente es así de walkie-talkie. Este router inalámbrico - que en Sanders está sentado debajo de esta etapa, aquí - siempre la transmisión y recepción, transmisión y recepción, y del mismo modo, los equipos están haciendo el mismo tipo de cosa, también. Simplemente no se puede oír. La otra cosa que puedes hacer es que usted puede tener varios ordenadores hablando con el mismo router inalámbrico. Cuanto más cerca se encuentre de una router - y de nuevo, se trata de una comunicación de radio - cuanto más cerca esté, mejor será su señal es, el mejor de su equipo "oye" el router y puede comunicarse con la Internet. Si ustedes alguna vez en su dormitorio, en tu casa y te preguntas por qué la señal es mala, probablemente se deba a). no estás muy cerca de tu router, o b). hay algo entre tú y tu router como un muro de cemento o algo que no permite que las ondas de radio pasan. Vamos a hablar un poco acerca de por qué los chicos malos de wi-fi. Los malos aman wi-fi por varias razones. Aquí está nuestro chico malo malo allí. Una de las razones por qué este chico malo ama wi-fi se debe a que, por defecto, una gran cantidad de routers inalámbricos vienen y cuando los creó, que están sin encriptar. Este ha sido un problema, y ​​se han dado casos - varias instancias, ahora - donde el malo se presenta a la casa de alguien, da cuenta de que hay un cifrado Wi-Fi a la que se puede conectar. Se conectan a la conexión wi-fi, y luego empezar a descargar todo tipo de cosas divertidas. Y no se está descargando gatitos, no está descargando cachorros. Esto es como BitTorrent. Esta es la repugnante de la más repugnante. Ha habido casos en los que incluso el FBI ha metido pensar que la persona que es dueña de la casa es en realidad la salir a la cancha y descargar cosas que realmente no debería ser. Una vez cifrados wi-fi no es definitivamente algo que usted quiere hacer, aunque sólo sea para no tener el FBI venga a llamar a su puerta. Otra razón por la que los malos aman wi-fi es la razón por la que David hablado antes durante el descanso. Debido a que es una comunicación de radio en su núcleo, si se conoce el canal, se puede escuchar dicha emisora ​​de radio. Por ejemplo, si hay un derecho malo allí sentado en el centro a la derecha al lado del punto de acceso, justo al lado de ese router inalámbrico, el malo de la película puede escuchar todo el tráfico inalámbrico que viene de todos esos equipos. De hecho, estos chicos - estos pocos afortunados que están en la primera fila - porque son super-cerca de todos estos routers inalámbricos que se sientan justo debajo del escenario, que sería capaz de oír el tráfico de todos en este cuarto entero si estás conectado a wi-fi y comenzar a navegar a través de estos puntos de acceso. No es muy difícil sentarse a sí mismo en una buena posición para olfatear y encontrar la lo que los demás están haciendo. Es algo a tener en cuenta, especialmente si no estás seguro de dónde está el punto de acceso es, y que está navegando, digamos, en un Starbucks. Resulta que huele y todo eso no es realmente tan difícil de hacer. Hay un programa llamado tcpdump que vuelca todo tipo de tráfico TCP y se puede correr bastante simplemente - como lo hice esta mañana. Aquí está un poco de un tugurio, y aquí está una parte del tráfico que iba a venir mi red en el momento. Usted puede ver - si usted escudriña realmente difícil - hay un poco de Spotify en ese país. En la parte superior de tcpdump - porque este es un tipo de dolor de usar - hay un programa llamado Wireshark que haces todo esto en una interfaz gráfica de usuario agradable. Wireshark es súper práctico así que si vas a tomar clases de redes, esta es una herramienta que te encontrarás al amor, ya que le ayuda a analizar todos los paquetes que están flotando por ahí. Pero también se puede utilizar para el mal. Es muy simple sólo tiene que descargar este programa, arrancar hacia arriba, iniciar una captura de red, y ver todo lo que está pasando - y el filtro y hacer todo tipo de cosas divertidas con él. La otra cosa que usted puede hacer con la comunicación inalámbrica no sólo se puede escuchar a escondidas pero también se puede aprender a joder con la red e inyectar su propia información para controlar la experiencia que otras personas en la misma red inalámbrica está recibiendo. Vamos a echar un vistazo a eso. Aquí está Firesheep - que conocemos y amamos de la semana pasada - que es que la tecnología de escuchas. Si, por ejemplo, queríamos tener nuestro activamente go malo y perder el tiempo con uno de estos equipos, en este caso tenemos un equipo tratando de ir de surf para harvard.edu. Lo que pasa es que la primera computadora envía un mensaje al enrutador inalámbrico y dice: hey, yo quiero ir www.harvard.edu visita. Digamos, por alguna razón, ellos están tratando de obtener información sobre el partido de este fin de semana. Chico malo, ya que él está sentado en el centro, justo al lado de ese punto de acceso, se puede ver que la comunicación procedente de la computadora en el router, y él lo sabe: "¡Ajá! Alguien va a harvard.edu". (Malvadamente risas) Va a ser esta latencia mientras que la comunicación va desde el router a Internet para ir a buscar a la página web a-harvard.edu - al igual que todos ustedes saben después de hacer sus conjuntos de procesadores PHP - por lo que el malo de la película tiene un poco de tiempo, un poco de la ventana, en la que se puede responder con algunas cosas. Digamos que este chico malo, por supuesto, es un Yaley. Él responde con harvardsucks.org. Boo! Chico malo, malo! Bad Yaley! O peor aún, podría responder con eso. [Http://youtu.be/ZSBq8geuJk0]. Voy a dejar que ustedes imaginar lo que es. Esto es realmente una tecnología llamada airpwn! que se estrenó en una de las conferencias de seguridad de vuelta de unos años. Con airpwn! usted es capaz de inyectar en realidad el tráfico de vuelta a la red. Los equipos que trataban de salir a Internet y tratando de llegar a Google.com, a Facebook.com, a harvard.edu ver la respuesta malicioso entrar y asumir inmediatamente, de acuerdo, esa es la respuesta que estaba esperando y terminar encima de conseguir el contenido de harvardsucks.org o nameyourfavoriteshocksite.com, y se puede ver lo rápido que las cosas van a empeorar. Todo este tipo de cosas no se puede hacer con estas conexiones por cable, ya que con una conexión cableada es difícil husmear en el tráfico. Si yo soy un tipo malo y en un extremo se encuentra el equipo y en el otro extremo se encuentra el router - el módem - la única manera de conseguir entre esa conexión para empalmar en realidad mi ordenador en algún lugar en el medio o hacer otra cosa con el router, aguas abajo algo así. Pero con la tecnología inalámbrica, puede ser tan fácil como sentarse en la primera fila de un aula, y usted puede hacer todo tipo de cosas desagradables a la gente en la parte posterior. Vamos a hablar de cómo se puede defender contra algunas de estas cosas. La gente que desarrolló los estándares inalámbricos - el 802,11 - no son gente tonta por cualquier tramo de la imaginación. Esta es una tecnología fría y cuando debutó en 1999, que salió con este estándar llamado WEP. Se puede ver aquí cuando usted trata de conectarse a una red inalámbrica, Tiene todo tipo de opciones de seguridad diferentes. Eso es un poco de un fastidio porque hay 6 todos juntos y nunca realmente tiene sentido que una a unirse. Este 1 en la parte superior es el primero que se les ocurrió llamado WEP. WEP significa privacidad equivalente a cableado, creo yo, no protocolo de cifrado inalámbrico que es un nombre inapropiado común. Debido a que intenta darle equivalente privacidad y la protección de la seguridad equivalente a la de una red cableada Con WEP lo que termina pasando es, tienes contraseña simple, poco que escribir y que sirve para encriptar todas las comunicaciones entre el ordenador y el router. ¿Cuál es el problema con WEP sin embargo? La contraseña de WEP es muy corto, y también que todo el mundo usa exactamente la misma contraseña,  y por lo que es muy fácil de descifrar. Así que muy pronto la gente descubrió que WEP era un problema, y la única razón que veo aparecer todavía en este pequeño individuo es - hay algunos sistemas antiguos que usen WEP - lo que en su lugar se debe buscar son la WPA y WPA2 incluso normas que fueron puestos en libertad más tarde. Estos sistemas son un ir mucho mejor en la protección de Internet inalámbrico. Dicho esto, todavía tenemos algunos hackability. Existen herramientas por ahí que puede ir a hacer esto. Una cosa en particular que puede ser desagradable es que si se conecta y autenticado a un router inalámbrico y están utilizando algún tipo de comunicaciones cifradas, resulta que un hacker puede enviar un solo paquete para que se desconecte del router, y una vez que te han desconectado se puede escuchar en - pueden oler los paquetes a medida que tratan de restablecer la conexión con el router. Y con esa información que luego puede entrar y descifrar el resto de su comunicación. Esto no es de ninguna manera ningún tipo de seguro más allá de toda imaginación. La otra cosa que puedes hacer cuando estás configurando redes inalámbricas o que los está uniendo es - te das cuenta de que aquí cuando me estoy uniendo a esta red, se pide el nombre de mi red. Esto también se conoce como el SSID. Y usted ve aquí que en el derecho que tengo una caja que me muestra los SSID disponibles. Hay una Universidad de Harvard, CS50 y CS50 una red personal. Ahora, ¿cuántos de ustedes sabían que había una red personal CS50 alrededor? Algunos de ustedes. No todos ustedes. El problema con esto, por supuesto, es que si no ponemos esto en nuestra lista de SSID, nadie habría sabido de ella lo más probable. Espero. A menos que ustedes están tratando de entrar ilegalmente en nuestro móvil. Pero esto es algo que puede hacer eso es muy importante cuando se está configurando un router en casa. Esto probablemente no va a suceder durante unos años para muchos de ustedes, pero tenga en cuenta que el mantenimiento de SSID que salir de allí y no también nombrar algo súper común le ayudará a mantenerse más seguros en el largo plazo. Un par final de las cosas que puedes hacer. Uno de ellos es HTTPS. Si usted está en un Starbucks, si usted está en un público wi-fi zona y usted decide tener acceso a su cuenta bancaria, acceder a su Gmail, Facebook, asegúrese de que las conexiones van a través de HTTPS. Es una capa adicional de seguridad, una capa adicional de cifrado. La única cosa a tener en cuenta aquí es, ¿Cuántos de ustedes han hecho clic a través de esa pantalla grande, rojo que dice: "Este sitio web puede ser malo". Yo sé lo que tengo. Es probable que cuando usted está navegando a todos a ver a la Patria, o algo así, ¿verdad? Si. (Risas) Si. Ahí lo tienes. Sabemos quién está mirando Patria. Esa pantalla grande, rojo allí a menudo indica que algo funky que está pasando. A veces es la propia página web es inseguro, pero esa misma pantalla grande, rojo aparece cuando la gente está tratando de montaje de red ataca a usted. Así que si usted ve que la pantalla grande, rojo subido en un Starbucks, no haga clic a través de él. Malas noticias. Una pandilla de pelotas. La última cosa que se puede ver en es una especie de VPN. Esta VPN está disponible a través de la Universidad de Harvard - vpn.fas.harvard.edu-- y lo que esto hace es que en realidad establece una conexión segura entre usted y Harvard, embudos de su tráfico a través de él, y de esa manera si usted está sentado en un lugar como un Starbucks puede conectarse a Harvard, conseguir que el tráfico seguro, a continuación, busque la Universidad de Harvard. Una vez más no, a toda prueba. Las personas pueden obtener en el medio. Pueden empezar a romper, pero esto es mucho más seguro que confían en la seguridad de la sola wi-fi. Está bien. En suma, cuando va a configurar las redes inalámbricas, cuando se va a utilizar una red inalámbrica en público - si se trata de un Starbucks, si se trata de Five Guys, ya sea b.good, algo así - siempre que tengan wi-fi - ser consciente de sus alrededores. Sea consciente de lo que la gente puede hacer. Y ten cuidado. No acceda a su cuenta bancaria. Podría ser un rudo despertar si alguien aparece con la contraseña más adelante. Con eso, ir carmesí! Y voy a cambiar las cosas de vuelta a David por una palabra final. (Aplausos) [David] Yo pensé en compartir algo de mi experiencia personal. Una herramienta que te gustaría jugar con - aunque Apple ha erradicado en gran medida este problema si usted ha actualizado su software, ya que - pero con ese fin de no ser realmente capaces de confiar en el software que usamos, ya los puntos de Nate, siendo capaz de olfatear un poco de lo que otras personas están haciendo por ahí - se trataba de una pieza de software que surgió hace alrededor de un año-y-uno-mitad ahora. [IPhoneTracker] [http://petewarden.github.com/iPhoneTracker/] Desde hace algún tiempo, iTunes - antes de iCloud, cuando estabas sincronizando sus iPods o iPhones o sus o sus iPads con iTunes - en el interés de copias de seguridad, lo que tu iPhone y otros dispositivos de estos han estado haciendo durante algún tiempo es haciendo uso de los datos de GPS. Todos ustedes saben acaso que sus iPhones y Androids y los teléfonos móviles de Windows y el que en estos días se puede rastrear dónde usted está en el interés de mostrar mapas y similares - así lo que Apple y estas otras compañías hacen es por lo general un seguimiento casi en todas partes que usted ha estado realmente en el interés de mejora de la calidad de servicio. Uno de ellos, usted puede obtener más publicidad dirigida y similares, sino dos, también pueden averiguar dónde hay puntos de acceso inalámbricos en el mundo, y esto puede ayudar con geo-localización - una especie de triangulación de la posición de las personas. Larga historia corta, todos habíamos estado caminando antenas para una cierta cantidad de tiempo. Desafortunadamente, Apple había tomado la decisión de diseño - o falta de ella - a no cifrar esta información cuando estaba siendo copia de seguridad en iTunes. Y lo que el investigador de seguridad encontró fue que se trataba de un archivo XML enorme - un archivo de texto enorme - sentado en software popular iTunes, y si usted fuera un poco curioso, usted podría ir a hurgar la historia de su cónyuge, la historia de su compañero de cuarto, historia de su hermano y similares, y gracias a un software libre, se puede trazar todas estas coordenadas GPS - latitud y longitud. Así que en realidad hizo esto con mi propio teléfono. He conectado mi teléfono, y por supuesto, mi versión de iTunes no se ha cifrado en el momento, y lo que yo podía ver eran mis propios patrones. He aquí los Estados Unidos y representa cada uno de estos círculos azules donde se me ocurrió que fue durante esos meses anteriores de poseer este teléfono en particular.  He pasado mucho tiempo, por supuesto, en el noreste, un poco de tiempo en California, un viaje de corta duración a Texas, y si a continuación, hacer un zoom sobre esto - todo esto es una especie de multa e interesante, pero yo lo sabía. La mayoría de mis amigos sabían esto, pero si usted bucear más profundo, a ver donde paso la mayor parte de mi tiempo en el noreste. Si se adhieren a algunos pueblos de aspecto familiar - esta mancha grande, tinta azul se centra esencialmente sobre Boston, y luego pasar un poco de tiempo en los suburbios que irradian desde Boston. Pero yo también estaba haciendo un poco de entrevistarse con dicho año. Y este año es la costa oriental, y de hecho puedes verme y mi iPhone en el bolsillo de mi viaje de ida y vuelta entre Boston y Nueva York Filadelfia y más abajo, así como pasar un poco de tiempo de vacaciones en el cabo, que es el brazo poco por ahí. Por lo tanto, cada uno de estos puntos representa un lugar que había sido, y completamente desconocido para mí, toda esta historia estaba allí sentado en mi computadora de escritorio. Si el zoom - esto en realidad era un poco preocupante. Yo no recordaba haber estado nunca en Pensilvania ese año en particular. Pero aunque un poco más duro en ello y me di cuenta, oh, era de hecho ese viaje y por supuesto, mi teléfono me había atrapado. Apple ha puesto esta información cifrada, pero esto también es testimonio de la cantidad de información que está siendo recopilada por nosotros, y la facilidad con que - para bien o para mal - es aceptable. Una de las Sugerencias del chef suerte de hablar de Rob, de la charla de Nate y las imágenes pequeñas, como esta de hoy es sólo para estar todo el conocedor más de este de modo que a pesar de que - como a punto de Rob - we're tipo de jodido, ¿no? No hay mucho que podemos hacer cuando se trata de algunas de estas amenazas, pero al final del día tenemos que confiar en algo o alguien si queremos utilizar realmente estas tecnologías. Por lo menos podemos estar tomando decisiones informadas y decisiones calculadas o no que realmente debe comprobar esta cuenta particularmente sensible o que en realidad debería ser el envío de sospechar que algo mensaje instantáneo  en un entorno wi-fi así. Así que, dicho esto, sólo queda un cuestionario, una conferencia permanece. Nos vemos el miércoles luego del lunes. (Aplausos y exclamaciones) [CS50TV]