Seguridad en internet de las cosas

Cosas conectadas En How to Engineer Secure Things: Past Mistakes and Future Advice nos hablan de las cosas conectadas a internet y las seguridad.

Se centra en estos puntos: las actualizaciones (que deben realizarse, y debe hacerse de forma segura), la utilización insegura de la criptografía (con algunos consejos), diseño inseguro (para obtener aplicaciones seguras hay que diseñar pensando en la seguridad, no es algo que se pueda añadir después).

Probablemente la más propia (porque las otras dos se ven habitualmente en todo tipo de aplicaciones) sea la de las actualizaciones que creo que es el gran olvidado en los aparatitos conectables a internet a pesar del tiempo que ha pasado y lo que ha costado resolver (o, al menos, tener la infraestructura adecuada) el problema en los sistemas tradicionales.

Los nombres y la seguridad. El caso de Python y PyPI

Libro sobre Python Cada vez pasa menos tiempo desde que alguien describe un problema de seguridad hasta que alguien lo aplica de manera (más o menos) efectiva. Hace algún tiempo podíamos leer Typosquatting programming language package managers donde se hablaba de la posibilidad de utilizar los errores de tecleo de los usuarios para suplantar algunos paquetes bien conocidos de sitio PyPi, que es un repositorio público para alojar paquetes desarrollados en Python que luego pueden instalarse de forma muy sencilla.

En este caso el experimento consistió en crear 200 paquetes y subirlos al repositorio:

All in all, I created over 200 such packages and equipped them with a small program and uploaded them over the course of several months. The idea is to add some code to the packages that is executed whenever the package is downloaded with the installing user rights.

Estos paquetes contenían un cierto código que ‘llamaba a casa’ e informaba de su instalación.

El resultado fue interesante puesto que 17289 computadores instalaron estos programas:

In two empirical phases, exactly 45334 HTTP requests by 17289 unique hosts (distinct IP addresses) were gathered. This means that 17289 distinct hosts executed the program above and sent the data to the webserver which was analyzed in the thesis.

No sólo eso, sino que al menos 43.6% de esas IPs ejecutaron el programa de notificación con privilegios de administrador:

At least 43.6% of the 17289 unique IP addresses executed the notification program with administrative rights. From the 19603 distinct interactions, 8614 machines used Linux as an operation system, 6174 used Windows and 4758 computers were running OS X. Only 57 hosts (or 0.29%) could not be mapped to one of these three major operating systems.

Cuando lo estuve leyendo me pareció un trabajo muy interesante y supuse que los administradores de PyPI lo tendrían en cuenta y tomarían algún tipo de medida.

La sorpresa ha sido ver que no sólo no se han tomado medidas, sino que parece haber habido un ataque real: Ten Malicious Libraries Found on PyPI - Python Package Index. Se trataba de utilizar nombres similares e incluir código malicioso en ellos:

NBU experts say attackers used a technique known as typosquatting to upload Python libraries with names similar to legitimate packages — e.g.: “urlib” instead of “urllib.”

Se puede leer el aviso ‘oficial’ en http://www.nbu.gov.sk/skcsirt-sa-20170909-pypi/index.html. Allí también recuerdan la forma de detectar si hemos instalado alguno de estos paquetes:

pip list --format=legacy | egrep '^(acqusition|apidev-coop|bzip|crypt|django-server|pwd|setup-tools|telnet|urlib3|urllib) '

Y luego podríamos utilzar el pip uninstall <paquete> si es que tenemos alguno de esos.

Aleatoriedad y juegos interesantes

Dados

Volvemos a hablar de aletoriedad. En esta ocasión How Stellaris fails to solve strategy gaming’s “bad luck” problem habla de juegos y del compromiso entre hacerlo suficientemente interesante, a la vez que impredecible:

Designing a game that’s both random and consistently engaging is a problem I thought about constantly during my recent time with Stellaris, Paradox’s latest epic space strategy game.

Porque, claro, una cosa es que sea aleatorio (soprendente, impredecible, …) y a la vez las decisiones que haya que tomar (o que se puedan tomar) hagan que el juego mantena el interés:

Developers should be expected to ensure that most (if not all) of their “randomized” strategy campaigns at least encourage the players to make interesting choices.

Lectura interesante.

¿Cómo son las preguntas de seguridad?

Puerta

Las preguntas de seguridad son esas que algunos proveedores utilizan para tratar de asegurarse de que somos nosotros cuando tratamos de reactivar nuestra contraseña principal olvidada. Es un método bastante denostado (Ver, por ejemplo Recuperación de contraseñas con preguntas personales aunque también tienen sus defensores (sobre todo, en condiciones adecuadas: Las claves).

En todo caso, traemos hoy aquí una nota sobre Estudio de contraseñas cognitivas en la filtración de datos del Banco Nacional de Catar (QNB) donde los usuarios podían elegir las preguntas. Aquí llaman preguntas cognitivas a esas preguntas de seguridad.

La ¿sorpresa?:

Si les dan a elegir, repiten los patrones impuestos desde siempre por los servicios en la red… el nombre de soltera de la madre, mascotas, gustos, lugar de nacimiento… todos datos muy fácilmente deducibles o con un rango de error muy pequeño con fuerza bruta (¿cuál es tu color favorito?). Muy pocos echan mano de la imaginación.

Al menos para los usuarios VIP. Aunque el resto de clientes tampoco parece echarle mucha imaginación.

Según Sergio de los Santos:

La solución es mentir si nos obligan a usar esas contraseñas cognitivas, empleando cadenas aleatorias a modo de contraseñas que, junto con la real del servicio, serán almacenadas en un buen gestor de contraseñas (sabiendo que, si se almacena bien la real, ni siquiera se necesitarán las cognitivas).

Si no usamos el gestor, como decían en uno de los artículos enlazados arriba, tendremos problemas.