Linux, la NSA y la desinformación

Parece que hace unos días atrás explotó una polémica sobre que supuestamente la NSA en complicidad con Intel coló una puerta trasera en el kernel Linux, y Linus Torvalds, como mirando para otro lado, la dejó pasar como si nada. Y como era de esperar, muchos blogs especializados, que dicho sea de paso no tienen ni el más mínimo conocimiento técnico para manejar este tipo de noticias, sacaron a relucir los títulos más amarillistas que pudieron encontrar. y los usuarios sin el más mínimo conocimiento sobre lo que estaba pasando, comenzaron a cacarear a tono.

Imagen alegórica de la NSA
Imagen alegórica de la NSA

Primero vamos a comenzar analizando el motivo de la discusión. Todo comienza cuando Eugen Leitl, el desarrollador encargado del código generador de números aleatorios del kernel, había mandado un mail explicando que había dejado de trabajar en el kernel dado que, poco a poco, Linus había decidido apostar por usar una característica específica de los microprocesadores Intel, pero esa característica sólo puede usarse en caso de estar disponible, de lo contrario se sigue utilizando el generador de números aleatorios por software. Esta característica se la conoce como RdRand o Intel Secure Key.

RdRand es una instrucción específica de los microprocesadores Intel, la cual permite obtener números aleatorios cada vez que es llamada. La teoría detrás de este generador de números aleatorios por hardware es que el microprocesador puede crear una mayor entropía a partir de sus múltiples entradas, tanto analógicas como digitales, y debería ser mucho mejor que un generador de números aleatorios por software.

La preocupación vendría por dos lados. Por un lado no hay forma de saber si la secuencia de números obtenida es realmente aleatoria o se trata de una secuencia prefabricada (muy larga). Por el otro, esta el hecho de que ese algoritmo, al estar incrustado en el hardware, no puede ser modificado ni auditado de ninguna forma.

Como muchos expertos explican, uno de los usos más importantes de los generadores de números aleatorios es la encriptación, por lo tanto, en teoría, si se conoce la secuencia de números obtenidos sería posible romper cualquier tipo de clave de encriptación.

Pero que no se pueda modificar RdRand, ¿Significa que estamos condenados a ser vigilados 24/7 por la NSA? No, lo mencioné al principio, el uso de RdRand es optativo, si no lo quieres usar, pues lo desactivas y usas el generador de números aleatorios por software, y problema solucionado.

Lo más curioso es he leído muchos comentarios de usuarios, que si saber de lo que hablan, recomendaban usar Linux Libre por que, supuestamente, no tendría este «problema». Señores, yo tengo bastante curiosidad, y los conocimientos técnicos necesarios para analizar código fuente y determinar si esto es realmente cierto o no. Y déjenme decirles, que no, que esa afirmación es totalmente falsa. Vamos a ver el porqué.

Aquí mismo pueden ver y descargar el código fuente original de Linux:

https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree

Y aquí tienen el código fuente de Linux Libre:

http://linux-libre.fsfla.org/pub/linux-libre/releases/3.11-gnu/linux-libre-3.11-gnu.tar.xz

Las instrucciones relativas al uso de RdRand las encuentran en los archivos:

arch/x86/kernel/cpu/common.c
arch/x86/kernel/cpu/rdrand.c

La instrucción que inicializa RdRand se encuentra en common.c y su definición en rdrand.c. Y ambos kernels hacen uso de las mismas instrucciones sin modificación alguna.

En otras palabras, da igual que uses Linux Libre, si tienes un microprocesador Ivy Bridge, o superior, lo más probable es que estés usando RdRand.

La pregunta a todo esto es: ¿Pero se puede desactivar esta característica? Sí, y en la misma documentación dice perfectamente como desactivarla:

Documentation/kernel-parameters.txt

Basta con agregar la opción nordrand a la linea de booteo del kernel, y listo, problema solucionado.

En serio señores, no coman mierda, infórmense bien antes de emitir palabra sobre un tema que desconocen. Preocuparse por la privacidad está perfecto, pero tampoco se trata de entrar en pánico sin sentido.

34 comentarios en «Linux, la NSA y la desinformación»

  1. Tengo una duda… Como soy nuevo en linux y no tengo casi experiencia.¿ Será que esto afecta
    A procesadores antiguos como un
    Pentium IV? Si alguien me puede aclarar esta inquietud se lo
    Agradecería mucho

    Responder
  2. Hola, pensaba que el kernel utilizaba su propia rutina de generación de números aleatorios ya que creo que en todo el kernel no hay ninguna llamada a RdRand. Si es así el núcleo por defecto estaria fuera de peligro.

    Me parece que se dejaba la opción a los desarrolladores de que sus aplicaciones llamaran a esta función directamente si confiaban en INTEL o bien utilizaran la propia del núcleo, ¿es correcto?. En este caso el problema sería mínimo ya que se circunscribiría a ciertas aplicaciones que utilicen esa función, el núcleo estaría a salvo.

    Responder
  3. Teniendo en cuenta que ya habia [sospechas de Intel], que por eso habia renunciado un dev, que decian que habia presiones de Intel para usar esa función y todo lo que esta saltando ultimamente da para pensar que hay un backdoor ahi, aunque no estemos seguros.

    De todas formas muy bueno lo de desactivarlo, no sabia que se podia voy a hacer eso e instalar haveged, grax!

    [sospechas de Intel] http://cryptome.org/2013/07/intel-bed-nsa.htm

    Responder
  4. Muy buenas.

    Yo mencioné en otro blog que usando Linux-Libre ‘seguramente’ no habría código cerrado, y bueno, no lo afirmo al 100%, aunque según la página la FSF Linux-Libre usan solamente código libre.

    Y obviamente que no todos podemos saber de todo en concreto, ojalá fuese así, pero por desgracia (para todos nosotros que nos gusta) este mundo de los S.O. es realmente grande.

    Un saludo.

    Responder
  5. En serio, hipersayan_x, no nos hagas tragar mierda.

    Si de verdad hubiera una puerta trasera en las opciones por defecto del kernel, como sugiere tu artículo, en particular en:

    «Pero que no se pueda modificar RdRand, ¿Significa que estamos condenados a ser vigilados 24/7 por la NSA? No, lo mencioné al principio, el uso de RdRand es optativo, si no lo quieres usar, pues lo desactivas y usas el generador de números aleatorios por software, y problema solucionado.»

    Eso sería un problema gravísimo, ya que todos los ordenadores compilados con esas opciones (ie casi todas las distribuciones) ¡podrían ser espiadas!

    La razón por la que esto no es así es porque Linux usa esa instrucción como una de las fuentes de entropía, pero no la única, al menos en /dev/random. Eso es la clave y no está en ningún sitio en tu artículo.

    Responder
  6. Pongo aquí, lo que leí de la respuesta de linus Torvals, y pego un comentario del mismo sitio:
    ———————————————————
    ¿Dónde empiezo una petición para incrementar el CI y conocimiento del kernel de la gente? Tíos, leed drivers/char/random.c. Después, aprended criptografía. Finalmente volved y admitid ante el mundo que os habíais equivocado. Respuesta corta: Sabemos lo que hacemos. Vosotros no. Respuesta larga: usamos rdrand como una de las muchas entradas de entropía y lo usamos para mejorarla. Incluso si hubiera una puerta trasera de la NSA nuestro uso mejora la calidad de los números aleatorios de /dev/random. Respuesta muy corta: Sois unos ignorantes.
    ———————————-
    Como mucha gente que lee meneame no tiene por qué ser experta ni en Linux ni en criptografía, voy a tratar de explicar de manera sencilla de qué va todo esto:

    Primero que nada: los números al azar son fundamentales para la transmisión de datos cifrados. Por ejemplo el https que usamos para comunicarnos con el banco depende completamente de ellos.

    Verán, las máquinas tienen un problema respecto de los números al azar: no pueden producirlos. El azar no existe para una máquina porque el azar implica algo demasiado complicado para analizarlo en profundidad, y los programas son perfectamente entendibles.

    Para producir números al azar, las máquinas necesitan de algo externo que sea lo más impredecible posible. Por ejemplo, la temperatura, los tiempos de acceso al disco, los tiempos entre teclas que presiona el usuario, los movimientos del ratón, etc. Un programa se encarga de hacer una mescolanza de cosas diversas para obtener un número lo más impredecible posible. A eso es a lo que le……

    ———————————————-
    Que creo acertado, ya que es lo que se recomienda hacer cuando encriptas algo, que muevas el ratón, navegues, escribas letras al azar en el terminal etc….
    Fuente:
    http://e.meneame.net/story/linus-torvalds-responde-peticio-eliminar-rdrand-dev-random

    Responder
  7. Zah, ¿Que yo les hago tragar mierda?, en el artículo deje toda la información necesaria para entender el funcionamiento de RdRand en Linux, incluso pueden rastrearlo usando el código fuente.
    Incluso Linus Torvalds dió más pistas sobre donde empezar a rastrear el código, y como bien dice RdRand es sólo una entrada del generador de numeros aleatorios. Y aquí dejo las pruebas:

    Primero crea las funciones arch_get_random_* (según la arquitectura del microprocesador):

    https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/arch/x86/include/asm/archrandom.h#n61

    y las define usando la macro GET_RANDOM, que mediante assembler hace la llamada a la interrupción correspondiente a RdRand:

    https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/arch/x86/include/asm/archrandom.h#n42

    Luego esa función la va utilizando a lo largo de todo random.c para meter mas entropia al pool de entropia por software:

    https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/drivers/char/random.c#n954
    https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/drivers/char/random.c#n1082
    https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/drivers/char/random.c#n1116
    https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/drivers/char/random.c#n1484

    Lo que significa que por mas que la NSA o Intel enponponsoñen RdRand esto no va a afectar al generador de numeros aleatorios de Linux. Así que tampoco tendría sentido desactivarlo.
    Además a mí no tienen porqué creerme, a quien tienen que referirse siempre es al código fuente, que es el único que dice la verdad 🙂

    Responder
  8. Estas opiniones son las unicas que valen la pena. Hechos explicados, demostrables y fin de la historia, como dice el autor, no hay para que entrar en pánico el cual es producto unicamente de la desinformación.
    Sl2

    Responder
  9. Por cierto, tengo una duda. ¿Todos los Kernel Linux ya integran dichas instrucciones o solamente los núcleos mas nuevos? En pocas palabras ¿Si uso la rama 2.6.x o 3.0 dichas características están disponibles? De nuevo muchas gracias.

    Responder
  10. dices que tienes los conosimientos para leer codigo fuente pero esa funcion no la puedes leer o ver el codigo fuente porque es codigo cerrado haci que el que abla cosas sin sentido eres tu, la verdad esque no confio a ojos cerrados

    Responder
  11. Mi querido aleexfrost, si prestas un poco de atención y abriste al menos uno de los enlaces de arriba te darás cuenta de que el código fuente esta ahí, mas aun, si te dedicas a leer la parte del rdrand.c verás que dicho archivo en las lineas 2 y 8-10 dice específicamente que tiene licencia GNU. Otra cosa, si lees de nuevo y mas detenidamente podrás observar que la característica RdRand es hecha por el mismo hardware y como explican mas arriba NO ES POSIBLE MODIFICAR NI AUDITAR ESA CARACTERÍSTICA, en pocas palabras el problema no es de código cerrado (software) si no del hardware (el mismo procesador). La solución mas sencilla en tu caso: No uses Intel.

    Responder

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.