Español | English
rss facebook linkedin Twitter

STUXNET



En el último mes y medio ha habido mucho revuelo por el gusano Stuxnet, o mejor dicho, por el primer rootkit conocido para sistemas de control, y en concreto para el sistema SCADA de Siemens WinCC. Ahora que ya tenemos bastante información sobre Stuxnet (Symantec, Kaspersky y otros investigadores a título personal lo han analizado a fondo), y justo antes de la cita con Robert Langner (que no Langdon, aunque bien podría serlo) en la "conference" ACS organizada por Joe Weiss (donde se descubrirá nueva información sobre el "bicho") voy a aprovechar para hacer un resumen de lo que se sabe hasta la fecha.

Para la explicación que viene a continuación nos hemos basado principalmente en el excelente trabajo realizado por Industrial Defender en su whitepaper sobre Stuxnet y en la información facilitada por Richar Langner en su página web.

Los antecedentes

Stuxnet es detectado por primera vez el 17 de junio de 2010 por la empresa antivirus bielorusa VirusBlokAda. Inicialmente se le considera un gusano ya que aprovecha ciertas vulnerabilidades para propagarse e infectar distintas máquinas. Más adelante Symantec anuncia que también cuenta con propiedades de rootkit (el primero orientado a los sistemas de control), ya que es capaz de modificar el comportamiento normal de distintos componentes del sistema de control y oculta su presencia para no ser detectado.

Existen dos variantes básicas de Stuxnet, la primera Stuxnet.A/B, que viene firmada con un certificado legítimo de RealTek. La segunda en cambio viene firmada por un certificado de JMicron, también legítimo. Los certificados hacen que sea posible su instalación de forma transparente para el usuario en máquinas Windows Vista y Windows 7. La primera variante, ha sido sin duda la más extendida, y de hecho la más estudiada.

Propagación de Stuxnet

La principal vía de infección es a través de llaves USB. Stuxnet aprovecha la ya famosa vulnerabilidad 0-day (actualmente existe ya un parche) en el manejo de ficheros .LNK, de la que ya avisamos en nuestro CERT, por la que con solo visualizar en Windows Explorer los ficheros de acceso directo contenidos en una llave USB, se ejecuta automáticamente código del fichero al que hace referencia dicho acceso directo, en concreto en el caso de Stuxnet unos ficheros .tmp que contienen los binarios de Stuxnet.

Otras vías de infección son a través de recursos de red compartidos (concretamente Admin$) en los que la máquina infectada tiene permisos de escritura, y a través de una vieja conocida, la vulnerabilidad de RPC usada por Conficker y otros gusanos, y de la que ya hablamos en nuestro blog.


Instalación y rastros

Stuxnet crea una serie de ficheros que son visibles con Windows Explorer. Concretamente instala dos drivers en %SystemRoot%\system32\drivers\, mrxcls.sys y mrxnet.sys, así como dos ficheros .pnf en la ruta %SystemRoot%\inf\, oem6c.pnf y oem7a.pnf. Igualmente, se crean dos servicios no visibles a través de INICIO>Ejecutar>services.msc llamados MRXCLS y MRXNET, y sendas claves de registro.

Por otro lado, una vez que se infecta la máquina, los ficheros .tmp y .lnk de las llaves USB quedan ocultos a Windows Explorer.

Antes mencionábamos que Stuxnet utiliza certificados legítimos de RealTek y JMicron. Estos es necesario para lograr instalar los drivers mrxcls y mrxnet en Windows Vista y Windows 7, ya que Windows 7 rechaza instalar drivers que no estén firmados con un certificado confiable, y Windows Vista te pregunta si deseas instalar programas que no estén firmados de esta forma. Los certificados son legítimos aunque ya han sido revocados.

Pero, ¿y qué hace?

Una vez infecta la máquina, Stuxnet contacta con su C&C y envía, de forma cifrada, información básica sobre el host comprometido utilizando la URL http://<C&C server address>/index.php?data=<encrypted data>. Esta información incluye:

  • Información de la versión de Windows
  • Nombre del host
  • Nombre del grupo de trabajo
  • Un flag indicativo de si el software de WinCC está o no instalado
  • Direcciones IP de todas las interfaces de red
Por lo visto, el C&C puede responder bien enviando la orden de ejecutar una llamada a un procedimiento en el host comprometido o descargando una nueva DLL para que Stuxnet la cargue. Las funciones a las que se puede acceder remotamente son:

  • Lectura de un fichero
  • Escritura en un fichero
  • Borrado de un fichero
  • Creación de un proceso
  • Inyección de una dll en el proceso Isass.exe (proceso que se encarga del funcionamiento de los protocolos de seguridad que maneja Windows)
  • Carga de alguna dll adicional
  • Inyección de código en otro proceso
  • Actualizar los datos de configuración del gusano
Como ya hemos mencionado al principio del post, Stuxnet tiene como objetivo los hosts que ejecutan el HMI de WinCC. Todos los componentes de WinCC utilizan en la misma máquina una base de datos MS SQLServer para almacenar datos de configuración. WinCC utiliza una contraseña "hardcodeada" (y conocida) para acceder a la base de datos. Así, Stuxnet aprovecha esta grave vulnerabilidad de WinCC para lanzar consultas SQL y extraer información de direcciones IP y número de puertos utilizados en otras máquinas WinCC conectadas en el sistema de control.

Además, Stuxnet instala un wrapper para la librería s7otbxdx.dll que es la utilizada por el SCADA WinCC para la comunicación con los PLCs en campo. En realidad, cada vez que el sistema de control hace uso de esta librería, el gusano intercepta las llamadas a las funciones, y en algunos casos pasa directamente la llamada a la función de la dll legítima y en otros casos altera los datos enviados antes de pasárselos a la correspondiente función. Lo mismo ocurre con los datos devueltos por la dll legítima, en algunos casos los datos se pasan sin ser alterados, y para otras funciones éstos sí se modifican. Es principalmente por esta característica por lo que Symantec considera a este gusano el primer rootkit para sistemas de control. El listado de funciones que modifican las entradas y las salidas son:

  • s7_event
  • s7ag_bub_cycl_read_create
  • s7ag_bub_read_var
  • s7ag_bub_write_var
  • s7ag_link_in
  • s7ag_read_szl
  • s7ag_test
  • s7blk_delete
  • s7blk_findfirst
  • s7blk_findnext
  • s7blk_read
  • s7blk_write
  • s7db_close
  • s7db_open
  • s7ag_bub_read_var_seg
  • s7ag_bub_write_var_seg
Todas estas funciones están relacionadas con la programación de PLCs. De hecho, si el programa de un PLC fuera alterado de alguna manera, el wrapper podría llegar a ocultar las modificaciones realizadas, de tal manera que los usuarios que tratasen de examinar el programa del PLC, desde un host Windows comprometido, ni se dieran cuenta de dicha modificación. Pero Stuxnet no se limita a ocultar las modificaciones del programa de un PLC, sino que también puede alterarlo. Tanto es así que cuenta con unos setenta bloques de función (function blocks) que es capaz de cargar en los PLCs. Todavía se desconocen los detalles sobre el alcance de dichos bloques de función, pero con toda probabilidad Robert Langner hable sobre el tema en la conferencia ACS. La presencia de estos bloques de función hace pensar que el propósito de Stuxnet es más el sabotaje que realizar labores de inteligencia.

Reflexiones

En el estudio revelado por Richard Langer en su web puede verse que se trata de un ataque bien dirigido, para el que se ha precisado información del propio proceso que controlan los PLCs. De hecho el país con más infecciones es Irán, popular en la actualidad por sus investigaciones en la energía nuclear. Este gusano requiere amplios conocimientos de distintas disciplinas: robo de certificados, conocimiento del SCADA WinCC de Siemens, las vulnerabilidades 0-day, etc. Parece por tanto un ataque largamente planificado, y por alguien o algo con bastantes recursos. Quién sabe, ¿creéis que pueda tratarse de los servicios de inteligencia de algún país enemigo? ¿Se os ocurre alguno?

Soluciones a día de hoy

Antes de comenzar, queremos dejar claro que la medida más efectiva para reducir la probabilidad de infección es minimizar el uso de dispositivos USB en este tipo de instalaciones. De todas maneras vamos a repasar otras soluciones que han ido apareciendo y que podéis encontrar de forma más detallada en el whitepaper de Industrial Defender.

A día de hoy, las principales casas antivirus cuentan con las firmas necesarias para detectar Stuxnet. Igualmente Microsoft ya tiene un parche contra la vulnerabilidad .LNK, concretamente el MS10-046. La vulnerabilidad de RPC se solucionó en 2008 con el parche MS08-067. Si bien es cierto que muchos sistemas de control en la actualidad no cuentan con un adecuado programa de gestión de parches o de un sistema antivirus, no lo es menos que a día de hoy no se han reportado incidentes de relevancia en infraestructuras críticas, por lo que se refuerza la teoría de que se trata de un ataque dirigido.

De todas formas, para los sistemas de control del grupo anterior, también existen dos herramientas que ofrecen un workaround a la vulnerabilidad .LNK sin necesidad de instalar el parche MS10-046 o de tener un sistema antivirus actualizado. Una viene de la mano de Microsoft, y la otra de la mano de Siemens. En ambos casos, se deshabilita la visualización de los iconos de acceso directo. Se trata de una solución preventiva, pero no ayuda a aquéllos que ya se encuentran infectados. Otra solución preventiva de la mano de Siemens es la mejora de la seguridad de algunos parámetros de configuración del servidor SQLServer, especialmente en lo referente a la autenticación de clientes.

Probablemente, la mejor solución venga de la mano de los IPS, que como ya se explicó en este post, permiten crear una lista blanca de qué aplicaciones pueden ejecutarse y cuáles no y además no suponen el problema de la gestión del cambio típicos del parcheo y la actualización de los sistemas antivirus en el mundo de las infraestructuras críticas. De todas formas no hay que olvidar que un cortafuegos bien configurado también prevendría a Stuxnet contactar con su C&C, evitando así que pudiera actualizarse o recibir órdenes específicas.

Respecto a soluciones para quienes ya se han visto infectados, Siemens ha publicado una lista de instrucciones de cómo usar TrendMicro "Sysclean" (la casa antivirus con la que puedes instalar WinCC garantizando el soporte por parte de Siemens) para eliminar Stuxnet. Sin embargo, el hecho de que muchos sistemas de control se encuentran altamente personalizados (según las necesidades del cliente), hace necesario que los propios ingenieros trabajen codo con codo con los ingenieros de Siemens para conseguir eliminarlo de manera exitosa. Se trate por tanto de un proceso arduo y costoso. Hay que pensar, que no solo hay que desinfectar cada uno de los host Windows infectados, sino que también habrá que revisar cada uno de los PLCs para asegurarnos de que el programa no ha sido alterado.


La próxima semana actualizaremos la información de este post con los nuevos datos que se revelen en la conferencia ACS, así que ¡stay tuned!


Elyoenai Egozcue,

S21sec labs

4 comentarios:

Luis B. dijo...

Qué SW usarán las famosas plantas nucleares de Irán? Si, esas que tanto preocupan a Israel y USA. La UPI tiene la solución.

Anónimo dijo...

Hay mas información sobre los fbs que lleva el virus?

Excelente entrada!

Anónimo dijo...

Hay precedente: http://en.wikipedia.org/wiki/Siberian_pipeline_sabotage
También uso de virus informático; también país enemigo de EE.UU.

Anónimo dijo...

http://www.meneame.net/story/como-infectar-sistema-control-ejemplo-central-nuclear

Interesante porque la planta nuclear que se ha puesto en marcha en Irán fue diseñada inicialmente por Siemens. Después la han seguido los soviéticos pero parece ser que tuvieron algunos problemas. Se ha detenido transportes de material de Siemens a esta central (vía Rusia) en el último año. Yo solo dejo los datos. Que cada uno imagine lo que quiera.


(+34 902 222 521)


24 horas / 7 días a la semana



© Copyright S21sec 2013 - Todos los derechos reservados


login