Bugs con una larga historia. El caso de LZO

Bugs En Raising Lazarus - The 20 Year Old Bug that Went to Mars otra historia de esas que nos recuerda que hacer software seguro (o bien) es difícil. En este caso es una fallo sutil que ha escapado durante años a las revisiones que se hayan podido hacer (si es que se hicieron, que es otro de los temas que aparecen de vez en cuando relacionadas con el desarrollo de programas).

En esta ocasión se trata de diversos desbordamientos de enteros a la hora de ir almacenando valores y contabilizando el espacio que ocupan.

En este caso, además, se añade el interés de que hay varias implementacionesd el algoritmo LZO (Lempel-Ziv-Oberhumer) que comparten algunas partes de su código.

Ya habíamos hablado de El mito de los miles de ojos y más fallos con historial largo: Un fallo de 17 años, Alguien puso un troyano en mi servidor de IRC y Diaspora: lecciones de seguridad.

OAUTH y seguridad

Identificación Últimamente es raro el sitio que no permite identificarse con nuestra cuenta de Google, Facebook, Twitter u otras. La ventaja para el desarrollador está clara: desde un punto de vista de usuarios que re-utilizan contraseñas y que no son muy fiables a la hora de gestionar correctamente sus credenciales, delegamos ese trabajo en empresas más pontentes y que seguramente lo harán mejor que nosotros. Aunque puede que no sea una ventaja completa porque queramos tener un sistema de acceso para todas aquellas personas que no quieran utilizar este tipo de mezclas. Desde el punto de vista del usuario también está clara la ventaja: no tenemos que andar dándonos de alta en montones de sitios, con contraseñas (idealmente) diferentes y cofiando en administradores de plataformas que apenas conocemos.

Del tema de delegar la gestión de cuentas en otros se hablaba en Introducing the “Secure Account Management Fundamentals” course on Pluralsight que enlazamos en su momento desde Fundamentos de gestión de cuentas.

Para estas cosas se utiliza, entre otros OAuth que es un protocolo bastante completo y que permite cosas más sofisticadas. Nosotros lo hemos visto de pasada cuando hemos hablado de Publicar en Facebook las entradas de este sitio usando Python, Publicar en Twitter las entradas de este sitio usando Python, porque estos sitios no permiten que utilicemos la contraseña directamente, sino que prefieren que nos identifiquemos a través de OAuth.

Esencialmente se basa en que nos autentificamos una vez en el sitio proveedor (o más, si fuera necesario en el tiempo) y este nos proporciona unos tokens de acceso que permiten realizar ciertas operaciones en el propio sitio o, simplemenete nos reconoce como usuarios y eso le basta al sitio de origen como identificación.

El historial de seguridad de este protocolo ha tenido sus incidentes y por eso me gustó encontrar OAuth Security Cheatsheet que nos da las ideas principales sobre el flujo de datos y las precacuciones que debemos tomar a la hora de implementarlo/utilizarlo.

Los nombres y las cosas

Cerrado Una fuente frecuente de problemas de seguridad son los nombres: cuando esperamos que algo se llame de una determinada forma y también se puede referenciar con nombres alternativos (que no tuvimos en cuenta) es posible que se produzcan problemas: eso incluye la utilización de paths, diversas codificaciones, …

En la propia historia dicen que es un rumor (o algo que se dice) pero sirve como un ejemplo de lo que podría haber pasado (sin saber si es cierto o no): Windows 9 Reportedly Skipped as Name Would Have Created Code Bugs: la idea sería que en algunos casos se habrían utilizado búsquedas del nombre para identificar el sistema Operativo del estilo de ‘if(version,startswith(“windows 9”) que inevitablemente producirían confusiones en el caso de que se hubiera lanzado un hipotético Windows 9.

Sea cierta o no, una buena historia para un sábado. Y un recordatorio para los casos en que, efectivamente, los nombres han sido un problema.

Seguridad y principio del mínimo privilegio

Cerrado El principio del mínimo privilegio consiste esencialmente en conceder a las aplicaciones y usuarios los permisos necesarios para realizar las acciones que tengan que llevar a cabo, pero no más. Esto durante el tiempo necesario.

En Improving security through least-privilege practices hablan del tema introduciendo las ideas generales y la motivación.

Me quedo con esta frase:

A tip I often give my clients is to not see accounts as privilege but see privilege as accounts. What I mean by this is an account that is used for backup administration, or an account that is used to create users on a domain should be used as such and not for anything else. If your user’s accounts have these privileges then you have lost control of your network, data and systems and any malicious user or application will eventually exploit this vulnerability.

Aprender programación en 2014

Seguridad y cultura En Teaching Code in 2014 algo que ya llevamos tiempo diciendo: se sigue enseñando a programar (no a nivel básico, sino incluso después) sin tener en cuenta la seguridad.

Los consejos que da tienen que ver con:

  • No hay excusa para utilizar ejemplos inseguros
  • La seguridad debería estar integrada, no añadida
  • Usando Node.js también hay que tener en cuenta la seguridad
  • Hay que cambiar la forma de enfrentarse a este problema

En definitiva, hay que enseñar buenas prácticas, incluir ejemplos no sólo correctos desde el punto de vista de la funcionalidad sino también pensando en la seguridad.

Consejos sobre claves

Barrera Aunque de vez en cuando se anuncia la sustitución de las contraseñas con diversas tecnologías, lo cierto es que parece que vamos a convivir con ellas durante una buena temporada. En Passwords: Real-world issues, tips and alternatives se entrevista a Per Thorsheim y hablan sobre el tema. Se habla de las contraseñas, algunas alternativas, mejorar la facilidad de uso. Thorsheim es el organizador de la PasswordsCon, un encuentro centrado en estas cuestiones.

Da la casualidad de que tengo por una de las pestañas de mi navegador el resumen sobre gestores de contraseñas que hacían recientemente en Lifehacker Faceoff: The Best Password Managers, Compared. Hace un poco más leíamos Top password managers compared.

También podíamos leer el otro día un texto generalista y orientado a audiencias más amplias, con consejos que incluso algunos que deberían saber mejor estas cosas olvidan a veces Web Security for the Tech-Impaired: Passwords that Pass the Test:

  • Utilizar claves diferentes para sitios diferentes
  • Tu clave no debería tener menos de 12 caracteres
  • Utilizar una mezcla de minúsculas, mayúsculas, números y caracteres especiales
  • No utilizar secuencias predecibles a la hora de organizar estas mezclas.

Ya hemos hablado más veces de contraseñas por aquí, por ejemplo en Algunos enlaces interesantes sobre claves y allí había más enlaces.

Seguridad e Internet de las cosas

Cosas conectadas En 6 Tips for Developing Secure IoT Apps un nuevo recordatorio: los aparatos conectados a la red programables son peligrosos, sobre todo si no se tiene en cuenta que la conectividad cambia el contexto y aparecen nuevos riesgos.

Los consejos: contratar desarrolladores con conocimientos adecuados, utilizar plataformas probadas, comprobar las actualizaciones del firmware de los dispositivos, asegurarse de que los datos están seguros frente a ataques físicos y utilizar componentes de hardware seguros.

Se hace referencia a un estudio de HP: [PDF] Internet of Things Research Study y seleccionamos algunos comentarios.

Hay muchos dispositivos que fallan:

It found that every one of 10 popular Internet-connected security systems – which include video cameras and motion detectors – had significant security vulnerabilities which would allow hackers to access the devices and control them remotely.

Sobre esto, suelo emplear una referencia relativa a dispositivos WiFi y Bluetooth, [PDF] CODENOMICON WHITE PAPER. Wireless Security: Past , Present and Future para hacer notar que los fallos de seguridad no sólo aparecen en los programas, sino también en dispositivos. La cantidad de evidencias y casos sigue aumentando.

Las vulnerabilidades y los fallos no son nuevos:

They are well understood, and most of the specific vulnerabilities could probably be easily avoided by following best practices and recommendations for secure coding. The problem, according to Miessler, is that many IoT developers simply don’t follow them.

Las aplicaciones inseguras vienen de los propios fabricantes:

It’s noticeable that many of the insecure IoT applications (such as some of those in HP’s study) come from IoT hardware device vendors who offer software to work with their products.

Ya hemos hablado en el pasado de seguridad y aparatos ‘domésticos’. La internet de las cosas es un nuevo episodio:

Seguridad ‘hogareña’ Coches e informática Y unas cuantas más, por ejemplo relacionadas con coches, hogar . Hace nada volvíamos a hablar de coches en: Desbordamientos de memoria y Toyota y en Coches y ataques

También recientemente conocíamos la noticia de cómo hacía falta actualizar un montón de coches BMW actualiza el software de más de 2 millones de automóviles por una vulnerabilidad o el también reciente de las ‘televisiones espía’: It’s not just smart TVs. Your home is full of gadgets that spy on you: How internet giants are collecting your personal data through their high-tech devices y alguno más que van ocurriendo cada día.

Heartbleed, código y memoria

Rojo Uno de los sucesos más llamativos de seguridad del año pasado fue Heartbleed un fallo en la implementación de OpenSSL que permitiría a un atacante obtener información en conexiones cifradas (desde claves a contenidos).

Aunque en Answering the Critical Question: Can You Get Private SSL Keys Using Heartbleed? tratan de resolver esta pregunta y el mensaje es tranquilizador, lo más interesante es el análisis del código responsable del problema, los detalles de la pila y ese tipo de análisis más técnicos que nos gusta referenciar por aquí.

Mitos sobre /dev/urandom y más sobre aleatoriedad y su medida

Dados No se si el año pasado fue el de la aleatoriedad, o que por casualidad yo encontré más lectura sobre el tema. O, a lo mejor, simplemente estaba prestando más atención.

En Myths about /dev/urandom una buena lectura sobre el tema, donde se habla de /dev/urandom, sus parecidos y diferencias con /dev/random y, al final, algunas discusiones sobre “aletaoriedad verdadera”.

I don’t want to dive into that issue too deep, because it quickly gets philosophical. Discussions have been known to unravel fast, because everyone can wax about their favorite model of randomness, without paying attention to anyone else. Or even making himself understood.

Lectura recomendable.

Podemos recomendar también la lectura de How do you know if an RNG is working? donde se aborda justamente ese tema: mucho se habla de números aleatorios y generadores. Pero cuando se piensa en la calidad de lo que se obtiene se dice que hay que medirla y poco más. Aquí da ideas, algún recordatorio interesante y, en definitiva, nos recuerda que el diablo está en (todos) los detalles.

Más sobre aleatoriedad y generadores

Desbordamientos de memoria y Toyota

Coches y carretera Interesante documento en Are We Shooting Ourselves in the Foot with Stack Overflow? donde se hace un resumen de los problemas con los aceleradores de algunos modelos de Toyota. El fallo se atribuye a un desbordamiento de memoria (concretamente en la pila) y cómo esto podía producir que determinadas variables (del sistema) se vieran alteradas, con consecuencias.

De hecho, parece ser uno de los peores casos de corrupción de variables por desbordamiento de memoria, porque en lugar de manifestarse inmediatamente (en este caso, probablemente a baja velocidad todavía) aparecía algo más tarde con las consecuencias ya conocidas.

Luego propone algunas medidas que podrían mejorar la situacion, tanto desde el punto de vista de la gestión de memoria como del sistema operativo y las pruebas (tests).

En The Toyota Owners Left Holding the Bag podemos leer una descripción que simplemente habla de ‘código espagueti’, algunas consecuencias legales, los seguros…

Actualización (2015-03-01) Nos enlazó Juanjo Navarro fernand0 @ GitHub.io y recursividad y lo agradecemos aquí. Casi seguro que volveremos sobre este enlace acerca de nuestros sesgos y enfoques. Y también que hablaremos alguna vez de lo que Juanjo hable en su sitio. ¡Gracias!