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 OpenSLL . 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 ( Penta )
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