Archivos Seguridad: Julio 2008
Bruce Schneier, escribe sobre la necesidad de diseñar el software pensando en la seguridad desde el principio.
El ejemplo planteado por Schneier es interesante, se trata de djbns, un servidor DNS que no sufre de la grave vulnerabilidad que está atacando a otros servidores DNS, porque fue diseñado desde el principio pensando en que podría ser objeto de toda una clase de ataques, de los cuales el "Ataque Kaminsky" sería un caso particular.
Daniel J. Bernstein, el autor de djbns, estudió la seguridad del DNS, y con eso pudo diseñar su software en forma segura.
Pero, como hemos discutido muchas veces, el software evoluciona, y es por eso que surgen bugs y problemas de seguridad, tal como el caso de la vulnerabilidad DNS detectada por Kaminsky.
Schneier tiene razón, parchar a gran escala no funciona bien, es caro, ineficiente, y toma mucho tiempo, a pesar de todos los empeños. Si usaramos un "diseño inteligente"1, consideraríamos los aspectos de seguridad desde el principio.
Nos encantaría que todos los desarrolladores de software, siguieran los consejos de Schneier. Pero el software debe adaptarse a su entorno, para poder sobrevivir. Estas adaptaciones incluyen las modificaciones por "las necesidades del negocio", la presión por terminar en plazos ajustados, con presupuestos insuficientes, o se le exige al software ser flexible, al grado de se llega a exigir la capacidad de nuevas características casi todos los días. También ocurre, que entender como funciona el software es algo que toma tiempo, incluso para los mismos que lo hemos diseñado.
Esa es la paradoja, nos gustaría creer que existe un diseño inteligente, porque sería más facil entender la vida, pero no es así, por más que queramos, la vida sigue las reglas invisibles de la evolución. Del mismo modo, en el diseño del software, aunque tenemos más libertad, y somos como pequeños dioses que podemos dictar la arquitectura completa de nuestro software, este sigue las reglas invisibles de la evolución del software, similares a las que dictan la evolución de la vida.
Por supuesto que no todo es "azar y necesidad", y el ejemplo del trabajo de Bernstein es algo que debemos estudiar, e incorporar en nuestros diseños.
No, el diseño inteligente tampoco existe en software, pero al menos podemos aspirar a un diseño más seguro.
[1] Esta nota estuvo a punto de titularse "diseño inteligente", pero me rehuso a darle la más mínima ayuda a los que promueven la ignorancia .
Probablemente un usuario novicio no sabrá cómo responder esta pregunta, pero si eres un usuario más avanzado me dirás que has revisado la barra de direcciones de tu navegador, que te has preocupado de no seguir un link que recibiste por email, o tuviste la precaución de escribir la dirección que te entregó tu banco, caracter a caracter, con mucho cuidado.
¡Es más! Te entregaron un aparatito, que te dijieron que está sincronizado con un super califragilistico mecanismo al que sólo accede un servidor de tu banco, y que asegura que, si alguien llegase a adivinar tu clave, el numerito mágico que este dispositivo te entrega impide que otro pueda ingresar al web del banco haciendose pasar por tí.
Estás tranquilo y seguro de que todo funciona, porque además tu proveedor de internet te ha prometido que se preocupa de tu seguridad, protegiendote para que no entren virus, bloqueando puertos que no vas a necesitar, y evita que te lleguen emails no solicitados, que podrían tratar de engañarte.
Pero tengo que decirte que todo eso es una falsa sensación de seguridad.
Porque intentar clonar un sitio web como el de tu banco es algo que un ladrón informático intentará hacer.
Me dirás que no pueden clonar la dirección web del banco, porque hay instituciones que se aseguran que funcione todo el sistema de nombres de dominio, para que nadie se adueñe de la dirección de otros.
Efectivamente, hay una enorme infraestructura montada sobre un servicio llamado DNS que permite que puedas llegar al servidor asociado a la dirección que ingresaste en tu navegador, y esas instituciones efectivamente se preocupan de que las direcciones sean entregadas a quienes corresponden.
Es un complejo servicio, que funciona muy bien, a una velocidad asombrosa y que permite que toda la web sea lo que es.
Pero esa maquinaria, tan compleja y maravillosa tenía (tiene) un fallo en su diseño original, un error tan grande que ha sido manejado en secreto, y de forma coordinada por importantes firmas y proveedores de internet en todas partes del mundo, para que sea reparado antes de que algún delincuente haga uso de esta vulnerabilidad.
Porque esta vulnerabilidad permitiría engañar a tu computador, a tu navegador, y cualquier otros programa que use direcciones basadas en nombres, enmascarando un servidor fraudulento, redirigiendo el tráfico a donde no corresponde.
Las consecuencias serían muy graves, por eso que se ha hecho esta coordinación a nivel mundial.
Pero lamentablemente, al menos en Chile, y al parecer en España también, nuestros proveedores de internet aún no han reparado el problema, a pesar de que tienen la solución desde hace semanas.
Algo que es tan urgente, aún no ha sido ejecutado, con la prontitud que esperaríamos, no sabemos las causas, pero creo que danlo mismo la razón de la demora, es obligación de los ISP brindar un servicio seguro que nos proteja de potenciales problemas como los descritos, o al menos si es cierto lo que ellos mismos dicen, de que toman medidas, que atentan a la neutralidad de la red, para protegernos, entonces con mayor razón deberían demostrarlo parchando sus servidores DNS vulnerables.
¿Quieres saber si tu proveedor de internet se ha preocupado de reparar sus servidores DNS? visita esta dirección, y presiona el botón que dice Check My DNS, esperemos que se pongan las pilas pronto nuestros proveedores de acceso, porque tenemos razones para sospechar que pronto se empezará a hacerse mal uso de esta vulnerabilidad.
Sucede que en estos días me pidieron ayuda para revisar un sistema (escrito mayormente en C) en que participé hace 6 años atrás. En el proceso descubrimos varios errores que sólo se hicieron evidentes ahora que se intentó una actualización del sistema operativo. Errores que nunca aparecieron en 6 años de operación continua.
Considero que no se llega a entender bien un sistema hasta después de observarlo detenidamente durante mucho tiempo. Puedes volver a revisar un código que escribiste hace meses, o años atrás, y siempre encontrarás un detalle. Puede ser un error grave, que sólo aparece como warning, y que en un ambiente no produce problemas, pero que "estalla" al correrlo en otro.
Al revisar tu viejo código sucede que te das cuenta de malas decisiones de diseño, o notas que puedes hacerlo mejor (normalmente porque has ganado experiencia y sabes como escribir mejor código). Otras veces descubres serios fallos de seguridad, que son sutiles, pero que no puedes ignorar. errores que no notaste en un primer momento, o que no pudiste revisar (siempre falta tiempo).
Algo parecido es lo que ha pasado recientemente con el problema en el diseño del DNS, y que tiene de cabeza a los administradores actualizando y parchando los servidores DNS.
La lección es que nunca podemos asegurar que, dado que un sistema lleva mucho tiempo funcionando correctamente, está libre de errores.

