martes, 31 de mayo de 2011

Powershell

El proceso de intrusión (hacking/pentesting) en entonos Unix/Linux tradicionalmente ha sido diferente del mismo proceso en entornos Windows por algunas características particulares como las siguientes:
• Los entornos Unix suelen contar de serie con herramientas de compilación y los Windows no. De forma que los exploits y herramientas en Unix muchas veces se suben en forma de código fuente y se compilan en la misma máquina comprometida. Mientras que en Windows es necesario subir los binarios ya compilados.
• Los entornos Unix cuentan con herramientas de administración avanzadas que pueden ser utilizadas como herramientas de hacking. Mientras que los Windows no y es necesario subir todas las herramientas necesarias.
• En los entornos Unix suelen estar disponibles intérpretes de lenguajes como awk, perl o python e interfaces de shell con funcionalidades de scripting avanzadas (bash, csh, ksh) de forma que es sencillo realizar pequeños scripts para automatizar el proceso de hacking.

En Windows esto no era posible hasta hace poco ya que el scripting de la shell de comandos (ficheros BAT o PIF) es muy limitado.

Existe otro mecanismo de scripting común a la mayoría de Windows el llamado Windows Script Host, que permite realizar scripting mediante Jscript o VBscript. Estos lenguajes facilitan la ejecución de ciertas tareas avanzadas, pero siguen sin estar al nivel de lo que permiten las herramientas disponibles en los Unix.

Pero esto ya no es así. Microsoft está empezando a integrar de serie en Windows 7 y Windows 2008 un interfaz de scripting avanzado llamado Powershell. El lenguaje de scripting de esta Powershell es muy potente y permite integrar variables y funciones de .NET, dándole una versatilidad enorme.

A nivel de hacking podemos hacer casi cualquier cosa que pudiésemos hacer con una aplicación .NET. Por ejemplo:
• Ejecutar comandos e interactuar con procesos.
• Interactuar por red con sistemas remotos.
• Cargar librerías DLL e invocar funciones de las mismas.
• Incluso inyectar código en otros procesos.


Estas funcionalidades nos permiten poder disponer de un kit de hacking, para instalar en los sistemas objetivo, programado íntegramente en Powershell con las ventajas que esto aporta:
• Puede ser instalado (subido) fácilmente en cualquier equipo que cuente con Powershell.
• No necesita ningún binario propio en el equipo (podría funcionar incluso en sistemas que usan listas blancas para permitir ejecución).
• El código no requiere subir nada al sistema ni crear ficheros en disco (se ejecuta en memoria).
• El código se ejecuta dentro del proceso legitimo powershell.exe (menos sospechoso).
• Los scripts se pueden formular como un "one-line" (un comando de shell muy largo) o pegarse directamente en el prompt de powershell (no quedaría nada grabado en disco).

Estas características las hacen además ideales para comprometer equipos en entornos críticos o de alta seguridad, como puedan ser redes scada o sistemas de defensa, donde el uso de binarios externos o sospechosos está controlado.

sábado, 21 de mayo de 2011

Seguridad de ejecución basada en listas blancas

Como ya hemos mencionado anteriormente, los sistemas Windows no fueron diseñados originalmente para realizar labores de seguridad críticas, pero debido a su popularidad es habitual encontrarlos en estos entornos.

Para paliar esta carencia, algunos productos de seguridad intentan aumentar el nivel de protección del sistema mediante la aplicación de mecanismos que controlan con más rigor lo que ocurre en el equipo.

Una técnica utilizada habitualmente por este tipo de productos consiste en limitar que ejecutables pueden ser lanzados, mediante el uso de listas blancas que controlan que aplicaciones son legítimas.

La protección mediante listas blancas suele tomar una de estas formas:

  • Control basado en el path: El programa de control comprueba si la aplicación ha sido lanzada desde un directorio o desde una ruta confiable.

  • Control basado en el resumen (hash) del binario: El programa de control almacena un listado de los resúmenes de binarios conocidos y solo permite la ejecución de binarios que estén en esa lista.

  • Control basado en la firma del editor del binario: El programa de control comprueba que el binario está firmado por un editor de confianza antes de permitir su ejecución.

Este tipo de protección parece muy robusta y suficiente para garantizar que el sistema estará siempre libre de amenazas de malware. Ya que si prohibimos la ejecución de cualquier software que no sea de confianza, en teoría no habrá forma de que el sistema se infecte.

Sin embargo la realidad es más tozuda y existen multitud de técnicas de ataque que permiten evadir este tipo de controles para ejecutar código externo:


* Burlar el mecanismo de comprobación: Si el mecanismo de firma o de resumen utilizado es débil podría ser factible burlarlo.

Por ejemplo, si se usa el algoritmo MD5 para realizar la comprobación del resumen de los ejecutables, un atacante podría aprovechar las vulnerabilidades de colisión que presenta este algoritmo para generar un binario malicioso cuyo resumen MD5 coincida con el de otro legitimo.

* Explotar una vulnerabilidad en un binario del sistema: Si conseguimos encontrar un fallo en alguna aplicación del equipo que nos permita manipular su funcionamiento, podríamos aprovecharlo para inyectar nuestro código en el proceso correspondiente.

Por ejemplo, esta es la técnica habitual para ejecutar juegos no originales en algunas videoconsolas. Estos aparatos utilizan un mecanismo de listas blancas para controlar el uso de copias piratas de los juegos. Cuando existe una vulnerabilidad en algún juego original o en algún componente de la propia consola, esta puede ser aprovechada para lanzar juegos no originales.

* Instalar un ejecutable vulnerable: Si no existen binarios vulnerables en el equipo siempre podremos instalar uno externo que cumpla las condiciones del control de listas blancas.

Por ejemplo si estas se basan en comprobar la firma del editor, podemos buscar una versión antigua y vulnerable de algún producto de un editor de confianza para copiarlo en el sistema y explotarlo con el fin de ejecutar nuestro código.

* Forzar a que un binario legitimo cargue una DLL externa: Las librerías DLL contienen código ejecutable y pueden ser cargadas de forma dinámica por los procesos. Si conseguimos que un proceso legítimo cargue una DLL externa (mediante la manipulación de su configuración), podemos llegar a ejecutar nuestro código en su contexto.

Esto es evitado por algunos productos mediante el establecimiento de listas blancas también a nivel de librerías DLL.

* Utilizar ejecutables no protegidos. Algunas soluciones cubren solamente ejecutables en formato EXE y librerías DLL, pero no protegen del uso de otro tipo de binarios como applets Java, controles Activex, etc.

* Utilizar un lenguaje interpretado: Si no se permite la ejecución de ningún tipo de binarios, podemos intentar conseguir la funcionalidad que necesitamos mediante el uso de algún lenguaje de scripting disponible en el equipo como pueden ser:
  • Jscript y VBscript del Windows Script Host
  • Powershell
  • VBA de Microsoft Office

* Inyectar un shellcode en un proceso legítimo: Otra forma de ejecutar código en el contexto de un ejecutable consiste en inyectar un shellcode directamente en la memoria del proceso.

Para realizar esto normalmente necesitaremos herramientas específicas, que obviamente no estarán autorizadas por el sistema de listas blancas, aunque en algunos casos podemos hacerlo mediante un lenguaje interpretado como los ya vistos.


La principal conclusión es que los mecanismos basados en listas blancas tampoco son la solución mágica para los problemas de seguridad de los equipos. Aunque a pesar de sus carencias son un importante paso adelante.

lunes, 9 de mayo de 2011

Gerber Cable Dawg: La "crimpadora tactica".

La importancia de las tecnologías de la información en el ámbito militar moderno es incuestionable, prueba de ello es la existencia de soluciones informáticas especialmente adaptadas a su uso en las condiciones extremas en el campo de batalla. Entre los más conocidos tenemos los portátiles rugerizados, esto es reforzado para una mejor resistencia a las exigencias, abuso, maltrato en condiciones extremas. Otro ejemplo son las versiones militares de las redes wireless, normalmente con hardware criptográfico integrado certificado para su uso con en los diversos niveles de clasificación OTAN o niveles nacionales equivalentes.
Sin embargo hoy os presentamos la versión militar de una herramienta bastante modesta. Se trata de la clásica crimpadora de cables red, esa herramienta usada para montar latiguillos RJ45 usados en las redes Ethernet.

Aunque esta crimpadora es bastante más especial. Presentada recientemente, la Gerber Cable Dawg está diseñada para su uso en las condiciones más exigentes a los que se puede encontrar el personal de transmisiones, los encargados de proporcionar los servicios CIS (Sistemas de Información y Telecomunicaciones) necesarios para las operaciones militares.

La Cable Dawg, que bien se podría denominar como “crimpadora táctica” , dispone de las habituales funciones de crimpado de RJ45, cortado y pelado de cable de diversas secciones, a lo que añade unos mangos desmontables que integran un cuchillo junto con una herramienta multiuso para montar puntas de destornillador y llaves diversas. Esta fabricada por la famosa Gerber Legendary Blades, empresa cuchillera fundada en 1939 con una línea de productos que va desde cuchillos de supervivencia a herramientas multifunción o linternas.

Sin duda una herramienta interesante , aunque con un precio que no está al alcance de todos bolsillos, se puede encontrar en tiendas online por algo más de 230 euros al cambio actual.