viernes, 20 de junio de 2008

El Desastre Debian nos afectará por años

La eliminación de tan solo dos líneas de código causó una grave crisis de seguridad


Pasará mucho tiempo antes de que estos días se olviden en la comunidad del software libre. Y nadie sabe hasta dónde llegarán las consecuencias de lo que ya se conoce como el Desastre Debian . "¿Pero sabés que es lo mejor –me decía en estos días un hacker amigo–, que aunque estamos profundamente avergonzados, dolidos y enojados, de todas maneras lo hicimos público, no lo ocultamos. Y sabemos que vamos a salir adelante."

Para resumir el incidente, los sistemas que usan la distribución de Linux llamada Debian estuvieron un año y ocho meses creando contraseñas públicas totalmente inseguras. Y esto ocurrió porque dos líneas de código fueron eliminadas de una aplicación conocida como OpenSSL . El Desastre Debian no afecta solo a Linux, sino que alcanza a cualquier sistema que tenga alguna relación con la seguridad en Internet.

El asunto es interesante porque quedó demostrado que sólo dos líneas de código realmente pueden causar una catástrofe de seguridad, y porque se trata de una cuestión técnicamente muy compleja que nos afecta de forma directa y cotidiana. La mayor parte de los tecnicismos quedarán fuera de esta columna, para no volverla indigesta, pero los curiosos podrán leer más detalles en los links que aparecen a lo largo del texto.

Contraseñas públicas

Cada vez que hacemos transacciones bancarias o comerciales en Internet, los datos son encriptados durante el trayecto, de tal manera que un pirata informático no pueda espiar nuestras contraseñas y otros datos sensibles. Encriptar algo es, en pocas palabras, convertirlo en un galimatías inextricable que sólo puede descifrarse si se cuenta con las contraseñas adecuadas.

En las comunicaciones por Internet se usan SSL o TLS . Las siglas vienen de Secure Sockets Layer y Transport Layer Security . En el proceso se requieren contraseñas públicas que cada parte produce aleatoriamente. Funciona bien, o razonablemente bien, considerando la inseguridad inherente a la Red.

El único pequeño problema es que, al revés que en el mundo real, en las computadoras el azar sencillamente no existe. Se lo puede emular con bastante fidelidad, pero es uno de los puntos débiles de estas tecnologías. El azar, en el mundo informático, puede volverse algo más o menos predecible; y aun el mejor de los azares no es azar verdadero. Estos números supuestamente aleatorios creados por las computadoras se llaman, por esto, seudoaleatorios .

Para crear las claves que intercambian nuestra PC y el servidor con el que queremos conectarnos (el del banco, digamos) se debe producir números al azar; seudoaleatorios, en rigor. Se usan para esto semillas , es decir, otros números, también al azar y en un rango muy grande. ¿Por qué es tan importante la semilla ? Porque es casi la única forma de evitar que el número pseudoaleatorio con el que se crean las claves públicas se vuelva predecible. De ocurrir esto, el cifrado se desmoronaría.

OpenSSL es una implementación de código fuente abierto de SSL y TLS . Su versión inicial salió en mayo de 1999 y fue la primera aplicación de software libre validada por la autoridad de tecnologías de encriptación de Estados Unidos. Nada hacía suponer que uno de los más prestigiosos paquetes de software libre estaría en el centro de una tormenta global nueve años después. Y mucho menos que involucraría a la más respetada de las distribuciones de Linux, Debian.

Caos de juguete

Al revés que Windows o Mac OS, Linux no tiene una única versión, sino que llega al público y las empresas bajo la forma de distribuciones, o distros , en la jerga. De hecho, cualquier persona con un poco de conocimiento y bastante paciencia puede armar su propia distribución ( www.gentoo.org ).

Las distros más conspicuas tienen un plantel estable de programadores, que adaptan el código fuente de Linux a fines específicos. Red Hat, por ejemplo, es una corporación que cotiza en Bolsa y cuenta con unos 2000 empleados. Canonical Limited, que compagina Ubuntu, tiene 130.

Debian es una rareza magnífica. Fundada por el alemán-norteamericano Ian Murdock, en 1994, el proyecto proponía algo que los cínicos de moda habrían encontrado risible: crear y mantener una distribución de Linux de forma cooperativa y abierta, con el mismo espíritu del software libre y con idéntica coherencia política; es decir, sin software de código cerrado de ninguna clase. La palabra Debian es la combinación del nombre de la novia de Murdock en la época en que inició el proyecto, Debra, hoy su ex esposa, y su propio nombre de pila. Ian lideró Debian hasta 1996, y actualmente es uno de los vicepresidentes de Sun Microsystems. Aquí, su blog, aunque no ha sido actualizado en los últimos dos meses: http://ianmurdock.com

Pese al supuesto exceso de idealismo (¿qué hubiera sido de nuestra especie sin los excesivamente idealistas?, me pregunto), Debian no sólo prosperó, sino que se convirtió en una de las distribuciones más populares y, por mucho, la más respetada. Que en estos días haya quedado asociada a un desastre de seguridad informática es a la vez una pena, una paradoja y en gran medida una injusticia, como se verá enseguida.

Pero constituye también una lección que el software libre deberá aprender, o arriesgarse a quedar convertido en una orquídea de invernadero o en instrumento de grandes corporaciones, como IBM o Google, habiendo así perdido por completo su sentido. Y hablo, como mínimo, de una simple ecuación económica; si el software libre desaparece, todos perdemos, incluso aquellos que no creen en él. Un estudio de la Universidad del Rey Juan Carlos, de Madrid, España, concluyó hace poco que si las 283 millones de líneas de código de Debian fueran propiedad de una compañía privada costarían unos 5400 millones de euros ( https://penta.debconf.org/~joerg/attachments/33-measuring_etch_slides.pdf ).

Pero, ¿qué pasó exactamente?

El 13 de mayo último, el proyecto Debian anunció que había descubierto una vulnerabilidad en el generador de números seudoaleatorios de su versión de OpenSSL . Dicho simple, su azar era previsible. ¿Por qué? Porque habían sido eliminadas dos líneas de código. A causa de esto, de manera silenciosa e invisible, se empezaron a usar como semillas los identificadores de proceso , los números que se asignan a cada programa que corre en un sistema, en este caso Linux ( www.debian.org/security/2008/dsa-1571 ). Puesto que en Linux sólo puede haber 32.768 identificadores de proceso, el número de semillas disponibles para generar números al azar se volvió ridículamente bajo. Como el algoritmo (la matemática) que se usa para producir números al azar es conocida, teniendo eso y las posibles semillas, es fácil adivinar el cifrado resultante.

Parecía tan sólo otro de esos miles de agujeros de seguridad que infestan el código de todas las aplicaciones informáticas de hoy. Pero era muchísimo más grave.

Durante un año y ocho meses, desde el 17/9/2006 hasta el 13/5/2008, cuando se corrigió la falla, los servidores basados en Debian habían estado produciendo claves fáciles de adivinar, predecibles y, por lo tanto, inútiles. Así que no bastaba con instalar la nueva versión corregida del paquete OpenSSL de Debian; había que regenerar los certificados digitales basados en esas claves públicas y volverlos a enviar a la autoridad competente.

Esas claves son independientes del sistema, por lo que la vulnerabilidad puede estar ahora enquistada en casi cualquier computadora del mundo. Oculta, olvidada, con una grave vulnerabilidad latente.

Y para empeorar todavía más las cosas, hay una cantidad de programas que se sirven de las bibliotecas de OpenSSL para hacer su trabajo de encriptación y seguridad.

Fue tan grave que el Centro de Tormentas de Internet ( www.sans.org ) no sólo lo reportó inmediatamente ( http://isc.sans.org/diary.html?date=2008-05-13 ), sino que subió su nivel de alerta a amarillo.

Sólo un par de días después de saberse la noticia, mis máquinas con Ubuntu instalaron una nueva versión de OpenSSL , y como parte del proceso me informaron que iban a recrear mis claves públicas; el sistema me avisó que, si no tenía idea de lo que esto significaba, le diera OK y me olvidara del asunto. Era una esquirla insignificante de un terremoto asolador. Me erizó la piel.

Quienes no leen inglés tienen un excelente resumen en español sobre el incidente en www.hispasec.com/unaaldia/3492

¿Qué toqué?

Aparte de la gravísima incertidumbre causada por casi dos años de crear y distribuir claves inseguras, está la humillación de cómo ocurrió la falla. Si no está sentado, hágalo ahora, porque la raíz del problema no puede ser más pueril.

Allá por 2006, un programador de Debian estaba trabajando en OpenSSL cuando el depurador, un sistema que se usa para detectar errores en el código, le hizo algunas advertencias sobre memoria no inicializada. Después de consultar con el grupo OpenSSL , simplemente decidió eliminar las líneas de código molestas, con las consecuencias antedichas. Dicha discusión puede verse aquí: http://rt.openssl.org/Ticket/Display.html?id=521&user=guest&pass=guest Según Debian, la intención de su programador era depurar el código, algo intrínsecamente bueno, y además hizo lo que correspondía, consultar con OpenSSL , que no encontró objeciones en eliminar dichas instrucciones ( http://wiki.debian.org/SSLkeys#head-a8437fc14786b3d5b9678241c7201c8c863555e7 ).

Pero el borrado de esas dos líneas de código causó que el generador de números seudoaleatorios (PRGN, por sus siglas en inglés) simplemente quedara restringido a usar 32.768 posibles semillas. Y adiós.

Si usted usa Ubuntu, Kubuntu o cualquier otro derivado de Debian, actualice el sistema, si no lo hizo ya, para corregir este bochornoso error y regenerar las claves criptográficas.

Si es administrador de sistemas, casi sin ninguna duda tiene relación con la seguridad informática, por lo que sería muy aconsejable que revise todo su sistema de certificados y claves criptográficas. Cuanto antes, mejor.

Lecciones al día

¿Puede uno hacer todo bien y, sin embargo, equivocarse? Oh, sí. Los periodistas lo sabemos bien. Podemos quemarnos el cerebro consultando las fuentes y reflexionando sobre un asunto, buscando todos los ángulos posibles para no imponer tendencia alguna a nuestro texto y, sin embargo, publicar algo que no es enteramente cierto. Habríamos necesitado quizá dos años y medio para hacerlo enteramente cierto. Pero debemos cerrar esa nota en el día. ¿Por qué?

Porque, como a los programadores, nos desvelan ciertos principios. En nuestro caso es la necesidad de dar a conocer. Es el mandamiento no escrito de esta profesión. Primero que nada, antes que nada y por sobre todas las cosas que el flujo de la información no se detenga. A veces este principio nos obnubila.

A los programadores los obsesiona la pureza del código. Es decir, que no sea propenso a errores. Sobre todo en un caso como el de OpenSSL , cuyas bibliotecas son usadas por numerosos programas de terceros.

Sinceramente, creo que el desarrollador de Debian que borró esas dos líneas de código se dejó llevar por este mandamiento informático. No quería mensajes de error del depurador porque esos mensajes significaban que en el futuro otros programadores podrían tener inconvenientes con OpenSSL .

Creo que fue Voltaire quien escribió que lo perfecto es enemigo de lo bueno: “Le mieux est l´ennemi du bien”. Todas las profesiones tienen alguna clase de ideal que, por momentos, puede cegar a sus cultores. Los de afuera nunca comprenden lo que se siente. Los que no son programadores encontrarán disparatado que alguien simplemente borre unas instrucciones, creyendo que están allí de adorno. No fue así, no fue tan simple, y no se puede simplemente crucificar al programador.

En cambio, todos tenemos que aprender aquí una lección. Igual que los periodistas seguiremos, inexorablemente, intentando que las cosas se sepan, incluso cuando podemos equivocarnos, los programadores no cejarán en el intento de depurar el código. Es inevitable.

La lección es otra. Todo código relacionado con la seguridad debería resolverse por medios más formales y estrictos que una lista de correo. Debian dice que la raíz del error estuvo en que “el programador consultó en la lista equivocada del grupo OpenSSL”.

Las listas de correo están muy bien, son una tradición, funcionan cuando todo lo demás falla, etcétera. Pero todo programador debería aprender que de ahora en más no puede eliminar ni una línea de código de un software de seguridad sin el visto bueno de una autoridad competente. O dicho de otro modo, que la seguridad está por encima de la pureza del código.

La segunda lección tiene que ver con la perspectiva. Creer que dos líneas de código son pocas, o que son insignificantes es miopía pura. Hoy se cree que el Titanic se hundió por culpa de sus remaches, que eran de mala calidad.

No ya dos líneas de código, sino un simple signo puede cambiar diametralmente una trayectoria, un vector, una cuenta. No es lo mismo haber llegado a tu primer millón de dólares (1.000.000) que haber llegado a deber tu primer millón (-1.000.000).

Se ha dicho que Dios está en los detalles.

Es la verdad.

Por Ariel Torres


http://www.lanacion.com.ar/tecnologia/nota.asp?nota_id=1017063

No hay comentarios: