Ataques a través de fallos en códigos de terceros

2013-10-11-facebook Cuando deseamos atacar una aplicación, un tema al que no siempre se presta adecuada atención es a la ‘cadena de suministro’; esto es, otras bibliotecas y aplicaciones que nuestra aplicación utiliza.

En #InstaHack: how researchers were able to take over the Instagram App using a malicious image habla de Instagram, el conocido servicio para compartir imágenes y cómo encontraron una vulnerabilidad que permitía atacar una cuenta simplemente enviándole una imagen maliciosa.

Por un lado, tenemos una aplicación que ‘necesita’ un conjunto de permisos muy amplio en nuestro sistema.

But what happens when we`re talking about an application that has extensive permissions on your device? If the application is hacked, the hacker will have easy access to your GPS data, camera, microphone, contacts, and more.

Se trata, como casi todas, de una aplicación que utiliza ampliamente código de terceros.

Instead, they use 3rd party libraries to handle common (and often complicated) tasks such as image processing, sound processing, network connectivity, and so on.

Y, en este caso, utilizaban código de un proyecto que tenía algún fallo y que permitía que cuando se le enviaba la imagen y esta se almacenaba en el dispositvo, se podía producir un ataque al abrir la aplicación.

In the attack scenario we describe in our research, an attacker can simply send an image to their target victim via email, WhatsApp or another media exchange platform. The target user saves the image on their handset, and when they open the Instagram app, the exploitation takes place, allowing the attacker full access to any resource in the phone that is pre-allowed by Instagram.

Con esto era posible acceder a los datos o provocar una denegación de servicio, dejando inutilizada la aplicación.

Al informar a Facebook (el propietario de Instagram) sobre el tema descubrieron que el problema era un desbordamiento de enteros (los grandes olvidados en los ya de por sí olvidados desbordamientos) y lo arregló con rapidez.

We have responsibly disclosed our findings to Facebook and the Instagram team. Facebook’s advisory was very responsive and helpful, they have described this vulnerability as an “Integer Overflow leading to Heap Buffer Overflow” and issued a patch to remediate the issue on the newer versions of the Instagram application on all platform.

Interesante.

Algunos hallazgos sobre la seguridad de un marcapasos.

Teruel. Corazones En la comunidad de investigadores es frecuente investigar con lo que se tiene más a mano que son los dispositivos caseros. Este es el caso de Marie Moe, que tiene implantado un marcapasos y se ha dedicado a analizar su seguridad, Hacking Yourself: Marie Moe and Pacemaker Security.

Hace unos años inició su trabajo sobre la seguridad de los marcapasos y encontró cosas interesantes ICS Medical Advisory (ICSMA-20-170-05). Fundamentalmente, problemas de:

  • Autentificación incorrecta.
  • Transmisión en texto claro de credenciales.
  • Reutilización de credenciales.
  • Almacenamiento de datos médicos en claro.
  • Almacenamiento incorrecto de contraseñas en el dispositivo.

Es cierto que, aparentemente, no hay ataques conocidos públicos que saquen partido de estas vulnerabilidades y tampoco pueden usarse para cambiar la programación del dispositivo.

Note for the record that so far, “no known public exploits specifically target these vulnerabilities,” the Advisory says. Also note that these vulnerabilities can’t be used to directly reprogram a pacemaker or hack someone’s heart.

Aleatoriedad en sistemas informáticos. Una introducción breve.

Los dados del r5 La generación de números aleatorios en sistemas informáticos es un tema que tratamos por aquí de vez en cuando. Por eso me gustó How Do Computers Generate Random Numbers donde dan algunos detalles.

Siempre decimos que un computador es un sistema determinista y, por lo tanto, con muchos parámetros predecibles, lo que hace difícil resolver el problema de generar datos impredecibles.

Anyone with any programming experience understands that computers are deterministic machines. If you provide the same input, you’ll always get the same output. That’s why having computers generate something by chance is trickier than it may seem.

Luego habla de posibbles fuentes de entropia (aleatoriedad), como pueden ser los movimientos del ratón, el ruido del ventilador, la presión atmosférica y otros, como semilla de los algoritmos generadores.

We just need to pick a seed that an attacker wouldn’t be able to predict. This seed value will then be passed into an algorithm, similar to PRNGs, that will generate a random number to use.

Finalmente, muestra algunos de los algoritmos y sus implementaciones.

Interesante.

Formas alternativas de conocer mejor a nuestros atacantes.

Tanque Ante un incidente de segurida la respuesta tradicional es utilizar el registro de actividad (los logs) pero esta no es la única alternativa y en Using API’s to Track Attackers nos dan algunas ideas sobre el tema.

Un atacante utiliza el API de Dropbox para conseguir algunos datos interesantes.

The attackers reused exactly the same piece of coded (link above) to decrypt the master key - hey, why reinvent the wheel? To exfiltrate data, they decided to use Dropbox. The well-known file sharing service provides indeed a nice Python interface to its API[3] which is very easy to use…

De paso, nos hablan un poco de instrospección en Python:

When you don’t have experience with Python library objects, your first reflex must be to search for the available methods via dir()

Y, en este caso, sobre la obtención de información del atacante.

The very first interesting method to use is users_get_current_account() to get information about the account. Now, we know more information about the attackers.

Nunca se sabe dónde podemos conseguir la mejor información.

No desarrolles tu propia criptografía

Libro. ¿Qué son y para qué sirven los numeroso? En cualquier texto de seguridad informática que miremos por ahí leeremos el consejo de ‘no desarrollar nuestra propia criptografía’. En So you want to roll your own crypto? hay ideas interesantes sobre el tema.

Parte de una pregunta que no es despreciable: ¿cómo vamos a aprender (de nuestros errores) si no podemos hacer nuestra propia criptografía?

How are people supposed to learn (from mistakes) if they don’t roll their own crypto?

Y la respuesta también es secncilla: hazlo, pero no utilices lo que hagas en producción.

The short answer is do roll your own crypto, but don’t use it in production until it’s vetted by professionals. The long answer below might take a few years to hash out.

Equivocarse es un proceso inevitable para conseguir aprender (y aquí hablamos en sentido amplio) aunque también podemos aprender de los errores de otros. Cursos, retos, …

I found that the cheapest way to learn from mistakes is to learn from other people’s mistakes. I recommend taking Cryptography I, doing CTFs, and solving crypto challenges. This won’t take long, and very quickly you’d be pretty dangerous because you’d be able to find many crypto bugs.

Sin embargo, todo esto puede ser insuficiente. Leer código es una buena forma de aprender, pero en criptografía esto no es tan sencillo. El código no es obvio, tiene detalles sutiles y la mala criptografía produce muchas veces resultados indistinguibles de la buena.

They say you can become a better programmer by reading good code. Unfortunately, I’ve learned the hard way that this rule usually does not work in crypto, …

Tampoco hay un buen sustituto de aprender los fundamentos. Sin embargo, después de conocerlos a lo mejor tampoco es un buen momento para desarrollar nuevos sistemas criptográficos, porque el campo es amplio y cada una de sus partes tiene sus propias características.

The funny thing is that after spending years studying these resources, you still don’t have a free pass to roll all the crypto in the world. You’d realize and appreciate that crypto is a deep and vast field of study with a very long food chain. Sitting on top are cryptanalysts who…

Y tampoco hay que olvidar las interacciones entre ellas. Esto significa que incluso utilizando los protocolos desarrollados por otros nos podemos equivocar (y lo haremos).

Así que la conclusión es que deberemos estar seguros de que comprendemos bien lo que tenemos entre manos, y estudiar para eliminar nuestras limitaciones.

So if you want to roll your own crypto, make sure you understand where you are in the crypto food chain and what are the reasons preventing you from moving up. Study and eliminate said reasons. Good luck and have fun!