Irongate, al descubierto un nuevo malware para ICS.

El pasado 2 de junio, desde FireEye nos anunciaban los resultados del informe elaborado por  su “FireEye Labs Advanced Reverse Engineering (FLARE)”.

Según nos cuentan, este grupo de trabajo a finales de 2015 identificó varias versiones de un malware dirigido a Sistemas de Control Industrial, ICS; con la capacidad de manipular procesos específicos dentro de un entorno simulado con dispositivos del fabricante Siemens. Decidieron llamarlos, IRONGATE.

La gente de FLARE encontró las muestras en Virustotal mientras investigaban ejemplares compilados con PyInstaller, algo empleado en otras ocasiones. Éstas destacaban por sus referencias a los sistemas SCADA y funcionalidades asociadas. Dos de ellas, contenían un payload subido desde distintos orígenes en 2014 pero ninguno de los antivirus lo detectó como malicioso.

Por otro lado, el CERT de productos de Siemens (Siemens Product Computer Emergency Readiness Team, ProductCERT), confirmó que IRONGATE no es viable contra sistemas, de control de Siemens, ni tampoco explotar ninguna vulnerabilidad en productos de este fabricante. No se puede hablar entonces de que exista una campaña de infección ni que suponga una amenaza, por lo que la conclusión más probable es que se trate de una prueba de concepto o una investigación sobre técnicas de ataque contra ICS.

El análisis concluye que IRONGATE aplica conceptos ya vistos en Stuxnet pero en un entorno simulado. Así pues, dado que la información sobre malware dirigido a sistemas ICS y SCADA es menor en comparación con otros ámbitos, es que han decidido compartir los detalles con la comunidad.

Vayamos con los aspectos técnicos.

Una de las características de IRONGATE es la de llevar a cabo un MiTM contra los procesos de entrada y salida I/O del PLC y el software del equipo que interactúa con el ICS dentro del proceso simulado. El malware reemplaza una DLL (Dynamic Link Library) con otra maliciosa convirtiéndose en intermediario entre la estación de monitorización y el PLC. Esta DLL registra cinco segundos de tráfico “normal” desde el PLC a la interfaz de usuario para reproducirla mientras manda de vuelta tráfico distinto al PLC. Esto podría permitir a un atacante alterar un proceso sin que el operador lo sepa.

La segunda característica a destacar es la capacidad para la evasión de Sandboxes. Algunas muestras del malware no se ejecutaban si se corrían sobre entornos VMWare o Cuckoo Sandbox. El malware usas estas técnicas para evitar la detección y resistir al análisis. La implementación de estas técnicas denota que el autor quería evitar su detección y por tanto estamos ante una aplicación maliciosa en contra de una aplicación legítima.

Finalmente, se averiguó que las distintas muestras estaban compiladas con PyInstaller, algo similar a lo empleado en otras ocasiones. Además se localizaron strings que contenían el término “payload”, también bastante común y asociado a otras piezas de malware.

IRONGATE no es comparable con Stuxnet en términos de complejidad, capacidad de propagación o implicaciones geopolíticas, sin embargo sí que comparten ciertas características y técnicas empleadas por éste como pueden ser:

  1. Ambos buscan un propósito específico.
  2. Ambos reemplazan DLLs para alcanzar manipulación de los procesos.
  3. IRONGATE detecta la observación/detección de malware mediante Sandoboxes o entornos virtuales, mientras que Stuxnet buscó la presencia de software Antivirus.
  4. IRONGATE graba y devuelve datos de proceso con el fin de ocultar las manipulaciones que introduce, mientras que Stuxnet si bien no intentaba esconderse de igual forma, si afectaba al funcionamiento de los autómatas S7-315 si ciertos valores representados en el HMI eran de carácter estático.

Por otro lado, no se ha identificado la forma de propagación, y probablemente no exista ya que se considera dicho malware aparenta ser parte de un proyecto de investigación, herramienta de pentesting o un desarrollo para testear un producto de Sistemas de Control Industrial. Esto puede interpretarse que estamos ante un suceso aislado, lo cual no significa que en un futuro pueda sofisticarse y representar una amenaza.

La parte principal de código ha sido escrito en Python e identificado en VirusTotal. Al parecer se hizo llegar a la citada plataforma de forma manual por medio de la interfaz Web. Esto, junto con la idea de que está dirigido a un entorno simulado, subido a un recurso público y que el malware no haya sido liberado, afirma la idea que se trate efectivamente de una prueba de concepto o una demo para algún producto concreto. Es difícil creer que alguien quiera llevar a cabo una APT contra ICS suba de forma manual a la citada Web algo tan sofisticado y más con los antecedentes de Stuxnet.

Aunque no suponga una amenaza, no podemos quitar importancia al hallazgo. Este hecho pone de relevancia que atacantes o personas con conocimientos específicos, están cada vez más preparados y con mayores capacidades para desarrollar código más elaborado, inteligente y posiblemente más destructivo de lo que fueron Stuxnet, HAVEX o BlackEnergy2. Lo cierto es que según afirman varias fuentes, las muestras de IRONGATE no fueron detectadas por ninguno de los motores antivirus, con lo que pone en evidencia la capacidad de éstos para detectar malware dirigido contra Sistemas de Control Industrial. En parte, claro está, porque se trata de una novedad frente a los ya conocidos.

Muchos responsables se estarán preguntando cómo protegerse de algo que muchas herramientas no han sido capaces de hacerlo por nosotros. Esto pone de relevancia que no podemos delegar en nuestras herramientas toda la responsabilidad de la protección. Obviamente debemos contar con ellas para securizar nuestras instalaciones, aparte de tener implementar unas políticas y estrategias debidamente establecidas, asentadas y sobre todo que se cumplan a rajatabla, pero no depositar confianza ciega. Las organizaciones deben contar con profesionales especializados en la materia, que entiendan las características de la Industria y la protección de Infraestructuras Críticas, muy distinto al tradicional mundo IT. Expertos que entiendan las nuevas necesidades, tiempos, tendencias, vectores y amenazas que están por llegar y que según indican las estadísticas van al alza.

En cualquiera de los casos todos debemos estar atentos con lo que está por venir, que como ya sabemos, va a seguir dando de qué hablar.

Un saludo!

Mas Información:

Enlace 1

Enlace 2

Enlace 3

Enlace 4

Enlace 5

Why IRONGATE is a big ICS security Security Story?

Sparta, Network Pentesting Tool

Una de las primeras fases de cualquier auditoría es la realización de una fase de escaneo de red con el fin de localizar equipos activos y detectar puertos abiertos, versiones de software, sistemas operativos, etc. Para ello contamos con muchas herramientas, entre ellas de la que hablaré hoy, SPARTA

SPARTA es una aplicación escrita en Python mediante una interfaz gráfica que simplifica la tarea de la que hablábamos anteriormente, permitiendo al auditor ahorrar tiempo teniendo una única aplicación desde la cual poder visualizar los resultados y analizarlos a posteriori.

Entre sus características destacan:

  1. Ejecutar nmap o importar los resultados desde un fichero XML
  2. Plataforma única donde visualizar resultados
  3. Menús contextuales para cada servicio descubierto.
  4. Posibilidad de correr cualquier script o software contra un servicio sobre equipos objetivo.
  5. Definir tareas automatizadas para servicios.
  6. Capacidad para realizar intentos de logueo con credenciales definidas de forma personalizada o por defecto.
  7. Identificación de host sobre los cuales ya se han realizado algún tipo de acción.
  8. Otras muchas más…

Si bien la aplicación ya viene instalada en la distribución Kali Linux el procedimiento de instalación es la siguiente:

Descargar  la aplicación:

https://github.com/SECFORCE/sparta/archive/master.zip

O bien:

git clone https://github.com/secforce/sparta.git

Luego deberemos resolver algunas dependencias.

Para Kali:

apt-get install python-elixir

Para distribuciones basadas en Debian

apt-get install python-elixir python-qt4 xsltproc

SPARTA requiere de otras aplicaciones para tener completa funcionalidad como son:

– nmap (para añadir equipos)
– hydra (para logueo on-line por fuerza bruta)
– cutycapt (para capturas de pantalla)

Para Kali:

apt-get install nmap hydra cutycapt

Finalmente nos aseguraremos tener instaladas otras herramientas que la configuración por defecto que utiliza Sparta:

apt-get install ldap-utils rwho rsh-client x11-apps finger

Sparta cuenta con un fichero de configuración situado sparta.conf. La aplicación verificará la existencia del mismo y si no lo encuentra lo generará de forma automática. En Kali lo tendremos en /etc/sparta.conf

Allí podemos encontrar las lo que se denominan las “Actions”, esto es aquellos que se ejecutará sobre :

  • Host Actions: Será la que se ejecutará cuando hagamos “botón derecho” sobre un equipo concreto y cuyo resultado será almacenado y visualizado en la interfaz de Sparta.
  •  Port Actions: Idem pero con un puerto.
  • Terminal Actions: Lo mismo pero en este caso el resultado será exportado en un terminal ajeno a Sparta.

Si quisiéramos definir una nueva “Action” deberemos seguir la siguiente fórmula, o bien tomamos como ejemplo las ya creadas por defecto.

tool=label, command, services

Donde:

Tool, identificador único, normalmente el nombre de la aplicación.

Label, texto que aparecerá en el menú contextual.

Command, comando que se introduciría en una Terminal si quisiéramos utilizar la herramienta concreta. Los valores como IP, Puerto y Resultado vendrán por los campos [IP], [PORT] y [OUTPUT], respectivamente.

Services, lista de servicios de nmap sobre los cuales Sparta va a realizar una acción concreta.  Si hacemos “botón derecho” sobre un servicio concreto la herramienta sólo mostrará aquellos que esté definidos allí.

Por ejemplo si quisiésemos configurar la herramienta Nikto para ejejcutar una acción sobre un puerto concreto deberíamos añadir lo siguiente:

nikto=Run nikto, nikto -o [OUTPUT].txt -p [PORT] -h [IP], “http,https”

Importante tener en cuenta reiniciar la aplicación una vez realizados cambios en el fichero de configuración.

Por otra parte es posible configurar ataques automatizados ejecutando cualquier herramienta que previamente hayamos configurado en el apartado [PortActions]. Estos ataques automatizados están habilitados por defecto aunque podremos deshabilitarlos  editando la opción “enable-scheduler” en [GeneralSettings]. Bajo esta última opción también podremos añadir otros siguiendo el siguiente formato:

tool=services, protocol

Tool, identificador único el cual hemos utilizado para definir la herramienta en el apartado [PortActions].

Services, listado de servicios sobre los cuales actuará la herramienta.

Protocol, protocolo del servicio en cuestión, esto es, TCP o UDP. 

Pero como todas cosas mejor verlo con un ejemplo. 

En mi caso en lugar de llevar un escaneo desde la propia aplicación lo que haré será realizar uno con nmap mediante su interfaz gráfica Zenmap, exportar los resultado en un fichero .xml y luego importarlo a Sparta. 

Con el scan hecho:

 Abrimos “Aplicaciones – Recopilación de Información – Sparta”

Luego importamos el scaneo previamente guardado:

Pinchando en la pestaña “Host” veremos los equipos y los “Servicios” localizados en él.

Mientras que el pestaña “Services” veremos todos los servicios detectados en el escaneo.

A partir de aquí,  clickando con el botón derecho del ratón sobre el servicio podremos ejecutar otras aplicaciones.

Las mismas se verán en la ventana “logs”:

Y el resultado será:

Ahora bien si lo hacemos sobre un dispositivo “Cisco”, en este caso un router, veremos que las pruebas nos revelan resultados distintos entre ellos el requisito de contraseña de nivel 15.

Otra de las posibilidades de la herramienta es lanzar intentos de logueo online con “THC- Hydra”. Haremos la prueba sobre el equipo router Cisco.

Elegiremos dos ficheros donde tendremos almacenadas nuestros diccionarios y no los que trae por defecto Sparta:

Si quisiéramos guardar nuestros proyectos podremos hacerlo en un fichero identificado como:

Como podemos comprobar Sparta es una herramienta donde podremos aglutinar aquellas herramientas que sean de nuestra utilidad cara a una auditoría o pentest. Como todo deberemos de ajustarla según necesidades o circunstancias ya que las configuraciones por defecto pueden no arrojar los resultados que esperamos. Vamos a verlo.

Según el archivo de configuración dispondremos de los siguientes diccionarios para la prueba con THC-Hydra:

Los cuales comprenden:

Este tipo de listados contendrán palabras generalmente en inglés por lo que resulta vital emplear otros con palabras en nuestro propio idioma. De nada nos sirve emplear el usuario “Administrator” cuando lo más probable es que sea “Administrador”.

Otro caso es el escaneo con herramientas desde la propia Sparta como es nmap. Los puertos por defecto son:

Nuevamente volvemos a la misma pregunta, y si los puertos que nos interesan no están en la lista? Nuevamente tenemos que editar…

También deberemos comprobar las acciones bajo [PortActions]

Con la entrada de hoy hemos visto una herramienta que bien nos puede ayudar y facilitar mucho el trabajo, en nuestras auditorias. Además podremos ajustarla a nuestras necesidades concretas mediante la edición de su archivo de configuración, todo desde una única interfaz.

Espero que haya sido de vuestro interés y os invito a que dejéis vuestros comentarios.

Un saludo nos vemos en la próxima!

Teoría del Pentesting

En esta entrada voy a explicar un poco de teoría sobre lo que conocemos, o referimos como “Pentest”, “Pentesting” “Prueba de penetración” o conceptos similares.

Tenemos claro que todo administrador debe ser consciente del nivel de seguridad que tiene aquello que gestiona y de si se cumplen, o no, las políticas de la organización a la que pertenece. Esto no es sólo un trabajo a realizar cada equis cantidad de tiempo sino que debe estar acompañado de un trabajo diario, concienciación de usuario, buena labor del personal de IT, compromiso, colaboración entre sectores, y un largo etcétera.

Actualmente existen estándares definidos como OSSTMM ; ISSAF ; OWASP ; WASC-TC ; PTES ; OWISAM ; que abordan los pasos, técnicas y tecnologías para llevar a cabo auditorias en distintas ámbitos, ya que como es lógico cada cual tiene sus propias características y necesidades.

Lo ideal sería contratar los servicios de empresas especializadas en el área concreta, pero por desgracia esto no siempre es posible y por tanto, al margen que nuestra profesión nos lo requiera, tenemos que tener claro el marco general sobre el que se llevan a cabo las auditorías de seguridad o pruebas de penetración para conocer el “nivel de salud” de nuestra organización.

Antes de abordar ese marco han de definirse qué se entiende por “Pentesting”, “Penetration Testing” o “Pentest”. Dichos palabras hacen referencia al proceso que se sigue para evaluar en profundidad los niveles de seguridad de algún elemento “TIC”. Así mismo, una metodología consiste en el conjunto de  reglas, prácticas y procedimientos  que se emplean  y utilizan durante el transcurso de una auditoría. Si unificamos ambos términos, obtendríamos lo que denominamos “Metodología de Pentesting” que no es más que los pasos a seguir empleando técnicas, ideas, herramientas y prácticas para evaluar el nivel real de seguridad del que disponen redes, aplicaciones, sistemas o combinación de todas, o parte, de ellas en un entorno definido. Bien de forma puntual o dentro de un plan de evaluación de riesgos, un ejercicio de Pentesting puede considerarse como la forma más agresiva de conocer los niveles de segurida. No podemos pensar que todo son cuestiones técnicas o tecnológicas. También existe un factor de psicología, en todo esto. También hay que poner en práctica métodos que nos permitan obtener información de los empleados o responsables que nos puedan facilitar el acceso a la información que buscamos.

Dicho esto, el “Pentesting” puede realizarse  siguiendo dos enfoques. No sabemos nada de nuestra organización ni de los posibles objetivos, y poco a poco vamos descubriendo los sistemas, equipos, mapas de red, etc. hasta detectar posibles vulnerabilidades o deficiencias que puedan ser explotadas. Esto es lo que se conoce como “Black Box”, (Caja Negra). Por el contrario tenemos la “White Box” (Caja Blanca) que es justamente lo contrario. Previo al test, conocemos o tenemos información que nos puede facilitar mucho las cosas. A mitad de camino tenemos el “Grey Box” (Caja Gris) que no es más que una unión entre ambas.

Así mismo debemos tener presente que estas pruebas pueden realizarse de forma “interna”, esto es desde dentro de la propia organización o “externa”, desde fuera (Internet) hacia  dentro de ella.

En cualquier caso no debemos confundir los términos “Pentesting” con “Evaluación de vulnerabilidades”. Evaluar vulnerabilidades consiste en detectar aquellos “agujeros” en los sistemas, dispositivos de comunicaciones, aplicaciones, etc. que puedan ser explotadas por un posible atacante o programa malicioso (malware). Se constata que existen deficiencias y de cómo éstas deben ser corregidas, mediante actualizaciones, parches o configuraciones adicionales. Sin embargo el “Pentester” irá un paso más allá y tratará de explotarlas, escalará privilegios y mantendrá el acceso para un uso continuado o como puente a otras acciones.

A continuación abordaremos, de forma teórica, los pasos generales a seguir para llevar a cabo un “pentesting” y explicaré brevemente en qué consiste cada uno de ellos.

  • Definición de objetivos

Antes de ponernos a hacer nada tenemos que conocer el alcance de nuestras acciones, hasta donde vamos a llegar  y cuáles son nuestros intereses y los de la organización a la que vamos a realizar la prueba. Por ejemplo debemos dar respuesta a preguntas como:

¿El qué y cómo debería ser testeado?

¿Cómo de largo y profundo debe de ser la prueba?

¿Cuáles son los activos que más criticidad tienen para la organización a auditar?

  • Recolección de información

Una vez que ya sabemos hasta dónde vamos a llegar, contra qué, cómo de profunda va a ser la cosa, que elementos son los más importantes o relevantes para la empresa, es hora de ponerse a buscar información acerca de ella. En este punto el “Pentester” echará mano de foros, boletines, redes sociales, páginas web, registros públicos, buscadores, etc. etc. Esta información podrá ser desde dominios, subdominios, correos electrónicos, números de teléfono, cuentas de usuario, etc.

Descubrimiento de los objetivos

En esta fase tendremos que identificar el estado de la red, sistemas operativos,  aspectos relativos a la arquitectura de la red. Esto nos proporcionará una idea de las tecnologías y dispositivos que en ella se encuentran, así como qué equipo están activos y el papel que juegan en la red. Esto puede realizarse de forma activa, por ejemplo realizando un escaneo de la red;  o de forma pasiva conectando un esnifer de red como wireshark y ver el tráfico que llega y poder identificar o deducir el entorno en el que nos encontramos.

  • Enumeración de los objetivos

Aquí ya la cosa cambia, y vamos un paso adelante del paso anterior. Ahora tocará localizar los puertos abiertos (o cerrados, que también nos arroja información) y los servicios que en ellos se ejecutan. Conocido esto, se tratará de identificar sus respectivas versiones lo cual nos permitirá buscar posibles vulnerabilidades. Otra tarea de este puntos es identificar posibles equipos de seguridad como Firewalls o IDS/IPS que puedan detectar y anunciar nuestra presencia, con lo que un buen “Pentester” debe tener presente andar con sigilo y prudencia y no lanzar aplicaciones muy ruidosas que hagan saltar todas las alarmas.

  • Mapa de vulnerabilidades

Conociendo los equipos que hay, sistemas operativos, qué puertos tiene  abiertos, que servicios corren en ellos, sus versiones, etc. ahora toca saber si existen vulnerabilidades acerca de ellos. Aquí podremos consultar bases de datos públicas donde se publican muchas  todas ellas, para obtener más y lanzar algún escáner que otro.  Será la suma de ambas la que nos proporcione una visión más completa, ya que a partir de ahí podremos localizar algún tipo de exploit para poder explotarlas.

  • Ingeniería Social

Como decía en párrafos anteriores, no se trata sólo de cuestiones puramente técnicas, y es aquí cuando lo demostramos. El factor humano también es otro vector de ataque. El arte del engaño, de la persuasión, de la picaresca para obtener información o acceso a redes y sistemas es otro de los procedimientos a aplicar. Por ejemplo llamar por teléfono a algún técnico o administrador para obtener correos electrónicos, teléfonos o solicitar un reseteo de una contraseña que se “creía olvidada”.

  • Explotación de objetivos

Esta es una de las partes donde después de todo lo que nos lo hemos “currado”, empezamos a sacarle un partido practico. Trataremos, mediante el uso de algún exploit o bug, penetrar en algún sistema o equipo con el fin llevar a cabo una determinada acción como puede ser obtener abrir conexiones contra otros equipos, listado de usuarios, contraseñas, o lo que sea.

  • Escalada de privilegios

Una vez que hemos accedido a un sistema, el siguiente paso entre otros es escalar privilegios. Si robamos las credenciales de un usuario, lo más probable es que tenga limitados los accesos o permisos. Por ello, es importante tratar de adquirir los del “super usuario” o “root” para tratar de hacer o llegar donde los usuarios con menos no pueden.

  • Mantenimiento de acceso

Bien, ya tenemos todo, el acceso y todo lo demás. Pero una cosa que nos interesa es poder acceder a este sistema siempre que queramos o necesitemos, ¿no? Por ello garantizar el acceso es muy importante ya que con esto nos aseguraríamos la permanencia en él. ¿Cómo conseguirlo? Por ejemplo tratando de instalar alguna puerta trasera, tunelizando tráfico, etc.

  • Documentación e informes

Y aquí toca escribir. Obviamente todo lo hecho hasta ahora, tanto si hemos tenido éxito, o no, todo esto hay documentando y presentarlo tanto al cliente que ha contratado nuestros servicios o como informe para uso interno. En él dejaremos patente los métodos, técnicas, tecnologías, registros, tiempos de actuación, etc. Etc. Etc.

Para todos estos puntos anteriores existen un verdadero arsenal de herramientas y aplicaciones que podemos encontrar en distribuciones como Kali Linux o Bugtraq entre otras. No podemos decir que exista una varita mágica, cada cual hace lo suyo y ofrecen distintos resultados aunque hay muchas que son muy parecidas.

Ahora a buscar cuales pueden ser, practicar con ellas, y a seguir aprendiendo.