29 de diciembre de 2010

Sandboxie Cristalizada

Cuan niño en la playa, hace unos meses vimos que la solución de Sandboxie ofrecía una virtualización a la carta para cualquier problema o archivo que quisiéramos abrir en un entorno controlado. Lo cierto es que es una utilidad que te permite ejecutar esos anexos sospechosos de forma más o menos segura y sin necesidad de tirar de máquinas virtuales como Virtual PC, VMWare, etc. El modelo de Sandboxie es tan bueno que hay sistemas operativos como Qubes OS (del cual vuelvo a hablar, jeje) que se basan completamente en la virtualización de todo, Chromium OS (al cual estoy deseando echarle el guante) parece que también va a apostar por un fuerte aislamiento de procesos.

Y ya está, ya tenemos seguridad. Surfeemos por las olas más peligrosas de Internet con nuestro navegador en su cajita de arena bien tranquilos de que los tiburones de las vulnerabilidades, troyanos, etc. se llevarán un chasco al morder. ¡Error!, veamos de lo que nuestra cajita de arena es capaz de protegernos por defecto:

Levantar un servicio: Sandboxie es capaz de capturar todas las llamadas a rutinas del sistema, por tanto hace una cosa en la que se basa gran captidad de malware, “hookea” esas llamadas y las intercepta según estén permitidas o no. Por defecto no podremos levantar servicios:

Ejecutar una tarea programada: No nos servirá de nada, si recordáis existía un pequeño fallo que permitía programar una tarea con el comando “at” y que el proceso lanzado fuera con unos privilegios un tanto superiores, eso en una sandbox no pasará:

¡¡Escapar de la sandbox!! No, lo he intentado, pero no se puede. Podemos probar a lanzar un Word y a partir del explorador abrir cmd.exe, exploradores, etc. de la forma recursiva que queramos hasta hacer una lista de 40 o 100 subprocesos, da igual que sea la ejecución de un comando o el lanzamiento de un notepad, todo estará en la misma cajita de arena :-S

¡¡Destrozar la sandbox!! ¿Y si lanzamos una máquina virtual dentro de VmWare? No es mala idea, hay que ver al lanzar una máquina virtual con un sistema operativo propio tendrá sus propias llamadas al sistema, que no tendrán que ver con las del anfitrión, sin embargo sandboxie detecta que nos pasamos de tamaño y lanza un error:

Con lo que la máquina virtual no carga. Sin embargo no se porta tan bien si nos da por destrozar archivos, no hay nada como ejecutar un cmd.exe y lanzar un del *.* en SYSTEM y SYSTEM32, esos comandos se ejecutarán dentro de las limitaciones de todo usuario administrador, también podemos formatear otras unidades etc. Como la SANDBOX virtualiza todos los cambios en el sistema el archivo de "cambios", irá creciendo. Sin embargo se da la particularidad de que la propia SANDBOX tira de esos archivos virtuales para correr, por lo que si nos cargamos por ejemplo la librería de la imagen, sayonara SANDBOX.

Java Virtual Machine: Otra buena idea que no funciona, si lanzamos una aplicación Java cuando quiera interactuar con el sistema será capturada, también nos aparecerá entre almohadillas “#”

Entonces no hay de que preocuparse,,, ¡o si!

Todo cambio que un programa en su cajita de arena haga en el sistema quedará reflejado dentro de la cajita de arena, es decir siempre que entres en la sandbox estará conforme el último programa ejecutado lo haya dejado. Por ejemplo si renombras cmd.exe por Pepito.exe y magnify.exe por cmd.exe (aprovechando el fallo de la lupa de Windows que comentaban en Security by Default) siempre que estés virtualizado la lupa será el cmd, de ahí que se aconseje cambiar la arena al 3x2, como a los gatos.

Pero todo esto no quita lo más importante de todo, que todo programa dentro del sanboxie tiene la capacidad de leer del sistema. No solo eso, de lanzar los comandos y aplicaciones que el usuario tenga permisos, por lo tanto podrás leer el archivo SAM o cualquier otro que te interese de los “importantes del sistema” si ejecutas tu equipo como Administrador, también podrás lanzar un FTP para mandar esa información donde quieras:

Luego podemos hacer dos cosas, o utilizamos un usuario con privilegios mínimos (lo que reduce la necesidad de utilizar sandboxies) o configuramos de forma segura la sandboxie, deshabilitando el acceso a ciertas carpetas o la ejecución de programas.

Por otro lado Sandboxie como aplicación que hookea las llamadas al sistema no se lleva bien con determinados antivirus y drivers, que pueden permitir “fugas” de la caja de arena o bien incompatibiliza la ejecución de cierto software bajo su control, tenéis una lista aquí, hay algún caso llamativo como el antivirus de Mcaffee, etc.

En todo caso y en previsión de accesos no deseados o ejecución de terceras aplicaciones ocultas, etc. en la configuración de toda sandbox se puede hacer lo siguiente:

- Restringir el acceso a Internet (eliminarlo o reducirlo a las aplicaciones que querramos).

- Obligar a que ciertas aplicaciones se ejecuten siempre dentro de la sandbox, o que todo lo que venga desde una unidad externa (CD, DVD, USB, etc.) se abra en una sandbox.

- Restringir derechos de administrador, esta opción es la más importante, así se evitará el acceso a archivos de sistema.

- NO habilitar ninguna de las opciones para reducir la seguridad de la sandbox (cambiar contraseñas, etc.) a nivel software o hardware.

- Bloquear el acceso al registro del sistema así como a los recursos que no deseemos compartir con la humanidad.

- No añadir (salvo que sea imprescindible) la comunicación mediante servicios COM como excepción de seguridad, esto permitirá que un programa dentro de la sandbox pueda comunicarse con otro que está fuera.

- Deshabilitar el acceso en navegadores a cookies del sistema, así como a cualquier recurso fuera de la sandboxie.

- Deshabilitar la recuperación instantanea de recursos. Cuando querramos cambiar la arena al gato, perdón a la sandboxie, esta opción permite recuperar automáticamente los archivos creados, lo que puede permitir a un virus salir fuera de la cajita. Esta opción debería mejorarse, ya que se basa en listas negras cuando parece más lógico que sea por listas blancas.

Como véis una solución de virtualización también puede quedarse corta si no se configura adecuadamente, sería trivial extraer por ejemplo los servicios que se están ejecutando o copiar el archivo de SAM a un PC externo. Por lo tanto es importante restringir los derechos y asegurarnos de que no ejecutamos software incompatible mientras mejora el aislamiento de procesos en nuestros sistemas operativos, que parece que es la tónica a seguir a partir de ahora :-p

Y esto es todo por hoy,,, que no por este 2010, ¡vuelvo pronto!

Salu2

29 de noviembre de 2010

(Not) Advanced Encryption Standard

Esta mañana me he levantado, aparte de con un frío de perros y la resaca de las filtraciones de Wikileaks, con una de esas noticias de bombo y platillo. El AES de 128 bits ha caído, o esa era la cabecera de un mail que he recibido con el siguiente link.

Arduo y veloz me he puesto a devorar el documento, el cual os resumo por aquí. La IACR o Asociación Internacional de Investigación Criptográfica está formada por un grupo de gente que investiga sobre nuevos algoritmos criptográficos o como reventar los actuales, por ejemplo la semana pasada publicaban una propuesta con nuevos algoritmos para tecnologías móviles y, unas semanas antes, publicaban este paper que mostraba como romper el AES en escasos 3 minutos.

La curiosidad del ataque es que no emplean debilidades de los algoritmos matemáticos utilizados para cifrar, esto es, un algoritmo de sustitución por bloques con 10, 12 o 14 rondas según el tamaño de la clave. En este caso se utiliza el llamado "side channel attack", que son un tipo de ataques distintos basados en las vulnerabilidades de la infraestructura que soporta un criptosistema. Estos ataques se basan en la observación y comparación de como un algoritmo utiliza recursos de un sistema, por ejemplo por los tiempos de consumo de procesador, por como varía la memoria caché o por los cambios en la radiación electromagnética (el ataque TEMPEST del cual hicimos un simulacro hace unos meses ).

El Side Channel Attack en este caso se basa en la observación, se requiere que un proceso "espía" visualice como otro proceso realiza hasta 100 operaciones de cifrado, esto se consigue con apenas 2 KB de datos. No es necesario conocer el texto cifrado ni la clave (obviamente), en ese proceso de cifrado lo que hace el programa espía es ir visualizando el trozo de memoria utilizado por la librería de OpenSSL y el planificador de tareas de Linux, el "Completely Fair Linux Scheduler", a partir de ahí con una red neuronal especialmente enseñada para la ocasión lanza un pequeño proceso en background que calcula la clave (y 1 millón de cosas más) en no más de 3 minutos.

Cierto es que el ejemplo en Laboratorio es con un kernel de Linux y específico para OpenSSL, pero ello no quita que a partir de este estudio se pueda migrar a otros sistemas operativos (sobretodo de tipo Linux / Unix) con relativo esfuerzo. En el paper también se comenta que la implementación de este ataque para 192 o 256 bits es posible pero no se ha demostrado.

¿Qué supone este ataque? AES se había consolidado este último año como el algoritmo de cifrado simétrico de facto, organizaciones como el NIST o la NSA le aseguraban una robustez con 128 bits más allá del año 2015 (2030 para 256 bits ¬¬), muchos procesadores del mercado incorporan un juego de instrucciones dedicado para agilizar estas operaciones y a día de hoy no existe un algoritmo de cifrado que pueda ser considerado igual de robusto (¿3DES?). ¿Qué contramedidas implementar?, bueno en el paper se habla de no utilizar la memorica cache en los procesos de cifrado / descifrado(¿?), aunque delegar los cálculos a la RAM solo implicaría ajustar el timing de CPU, no permitir a un proceso saber el tiempo de CPU que consume otro (lo que puede complicar la planificación de tareas para el CFS u otros). Mi apuesta personal es que un sistema operativo basado en Sandboxies como Qubes podría proporcionar el aislado suficiente entre procesos para evitar este tipo de ataques "de entorno" del criptosistema. Por supuesto un buen antivirus, etc. para evitar el troyano de turno que ataque AES también ayuda.

Y eso es todo por hoy, ¡buena semana a todos!

Salu2