El grupo de espionaje Sednit ataca redes seguras aisladas

El grupo de espionaje Sednit, también conocido como Sofacy, APT28 o “Fancy Bear”, estuvo atacando a diversas instituciones durante muchos años. Hace poco descubrimos un componente utilizado que utiliza para alcanzar redes de equipos físicamente aislados (entre “air gaps”) y robar archivos confidenciales a través de unidades extraíbles. Un “air gap” es una medida de seguridad de redes que consiste en procurar que una red segura de computadoras esté físicamente aislada de redes inseguras, como Internet público o una red de área local no asegurada debidamente.

Introducción

El mes pasado, ESET descubrió que el grupo Sednit estaba llevando a cabo ataques con víctimas específicas (Watering Hole) mediante el uso de un exploit kit creado especialmente con dicho propósito. En el transcurso de las últimas semanas, se compartieron varias investigaciones sobre este grupo, incluyendo el informe de Trend Micro Operation Pawn Storm y el informe de FireEye APT28.

En esta publicación, compartiremos nuestros conocimientos sobre una herramienta empleada para extraer información confidencial de las redes que se encuentran aisladas, que ESET detecta como Win32/USBStealer.

Creemos que el grupo Sednit viene usando esta herramienta al menos desde el año 2005 y que la sigue usando en la actualidad con sus típicos objetivos de ataque: las instituciones gubernamentales de Europa Oriental. En los últimos años se emplearon muchas versiones de esta herramienta, con diversos grados de complejidad.

Estrategia de Win32/USBStealer

Una medida de seguridad común para las redes de equipos con información confidencial es aislarlos completamente del mundo exterior mediante una “barrera de aire” (del inglés “air gap“).  Como lo implica el nombre, estas redes no poseen conexiones directas externas a Internet.

No obstante, el uso de unidades extraíbles puede generar nuevas rutas al mundo exterior. Esto es cierto en especial cuando la misma unidad extraíble se enchufa reiteradamente en equipos conectados a Internet y en equipos aislados, como ocurre al transferir archivos.

Este es el escenario que aprovecha la herramienta Win32/USBStealer para alcanzar las redes aisladas por air gaps. La siguiente imagen muestra un panorama general sobre esta estrategia con un ejemplo simple que involucra tan solo dos equipos. El Equipo A está conectado a Internet y se infecta inicialmente con el dropper Win32/USBStealer, mientras que el Equipo B se encuentra físicamente aislado y se infecta con Win32/USBStealer durante el ataque:

ataque_diagrama

Escenario de ataque

En este ejemplo, la misma unidad extraíble va y viene entre el Equipo A conectado a Internet y el Equipo B en el air gap. A continuación explicaremos cada paso de este ataque con mayor detalle. Ahora nos enfocaremos en la versión más compleja de Win32/USBStealer que hemos observado.

Paso 1: primera inserción en el Equipo A

El Equipo A se infecta inicialmente con el dropper Win32/USBStealer, detectado por ESET como Win32/USBStealer.D. El nombre de archivo del dropper es USBSRService.exe, que intenta imitar un programa legítimo ruso llamado USB Disk Security, como se muestra abajo:

metadatos_dropper

Metadatos del dropper Win32/USBStealer

La lógica principal del dropper es la siguiente:

  • Monitorea la inserción de unidades extraíbles en la máquina, para lo cual crea una ventana con una función de devolución de llamada, que recibirá la notificación cuando ocurra dicho evento.
  • Cuando se inserta una unidad extraíble, el dropper descifra dos de sus recursos en la memoria. El primer recurso coloca el programa Win32/USBStealer en la unidad extraíble bajo el nombre “exe”. El segundo recurso es un archivo AUTORUN.INF cuyo contenido se muestra abajo:

[autorun]

open=

shell\open=Explore

shell\open\command=”System Volume Information\USBGuard.exe” install

shell\open\Default=1

  • Este archivo se coloca en el directorio raíz de la unidad extraíble. Su función es asegurarse de que, al hacer doble clic en la unidad, se ejecute el programa USBGuard.exe, así como cuando se hace clic en la primera opción del clic derecho (con el nuevo nombre “Explorar” en lugar de “Abrir”). Esto solo funcionará en equipos que tengan habilitada la funcionalidad Ejecución automática de Windows, que fue desactivada por la actualización de Windows KB971029 en agosto de 2009. Parece que fue hace mucho tiempo, pero creemos que Win32/USBStealer comenzó a propagarse al menos cuatro años antes de ese período. Además, es muy común que los equipos en redes aisladas por air gaps permanezcan desactualizados, ya que es difícil actualizarlos y los usuarios asumen que están fuera del alcance de los atacantes.
  • Finalmente, se coloca un archivo vacío llamado “in” en la unidad extraíble. Servirá como señal para otras máquinas infectadas de que esta unidad en cierto punto se conectó a otra máquina con conexión a Internet. En otras palabras, la unidad constituye una ruta potencial al mundo exterior para los equipos en air gaps.

Durante todo el proceso, el dropper tiene sumo cuidado de no atraer la atención. Por ejemplo, los archivos AUTORUN.INF y USBGuard.exe configuran su registro del último acceso y de la última escritura como si fuera el de una biblioteca estándar de Windows que se elige en el mismo sistema. Además, los dos recursos descifrados se vuelven a cifrar de inmediato en la memoria luego de haber sido colocados en la unidad extraíble. Finalmente, todos los archivos colocados se configuran como archivos ocultos y archivos del sistema, para asegurarse de que los usuarios casuales no los detecten.

Paso 2: primera inserción en el Equipo B

Cuando la unidad de USB se inserta en el Equipo B, que tiene habilitada la funcionalidad Ejecución automática, se instala la herramienta Win32/USBStealer. Luego pasa a enumerar todas las unidades conectadas al equipo y, dependiendo del tipo de unidad, ejecuta una lógica diferente:

  • Si se trata de una unidad extraíble y se identificó que estuvo conectada a un equipo capaz de conectarse a Internet (gracias al archivo in colocado en el paso 1), el Equipo B se registra en la unidad mediante la creación de una carpeta con su nombre de equipo. Este registro les permitirá a los operadores trazar un mapa de los equipos accesibles cuando la unidad vuelva a conectarse al Equipo A.El Equipo B también graba el número de identificación de hardware de la unidad para llevar un registro local de ella. Por lo tanto, incluso aunque el usuario quite el archivo desktop.in de la unidad, el Equipo B recordará que esta unidad puede usarse como ruta al exterior.
  • Si la unidad no es extraíble, o se puede extraer pero sin señales de que se haya conectado a un equipo con conexión a Internet, Win32/USBStealer ejecuta un procedimiento de extracción automático (a diferencia del procedimiento manual que describiremos más adelante).

El propósito de este paso es agrupar los archivos interesantes de todas estas unidades en el mismo directorio local. La extracción real tendrá lugar la próxima vez que la unidad extraíble “marcada” se inserte en en el Equipo B. Los “archivos interesantes” se definen como los siguientes:

  • Archivos con extensión “.skr”,“.pkr” o “.key”. Los dos primeros corresponden a las extensiones predeterminadas para los “conjuntos de claves” de la aplicación de cifrado PGP Desktop. Estos archivos son el lugar de almacenamiento de claves privadas y públicas, respectivamente. Las herramientas de cifrado suelen usar la extensión “.key” para archivos que almacenan claves generadas.
  • Archivos cuyos nombres pertenecen a una lista codificada en forma rígida. Hemos observado dos listas diferentes in-the-wild, que se muestran en la tabla más abajo.
*Lista 1Lista 2
Período posible de uso20052011-2014
Nombres de archivos buscadosWin32Negah.dll
Ssers.dat
Settings.dat
Negah2.exe
DtInt.dat
Audit.dat
key.in
key.out
z_box.exe
talgar.exe

El período posible de uso corresponde a la compilación de las fechas de los archivos que contienen estas listas.

Encontramos muy pocas referencias sobre estos nombres de archivos en Internet, probablemente debido a que pertenecen a programas de software privados. Es interesante notar que Talgar (de “talgar.exe”) es un pueblo de la provincia Almaty, en el sudeste de Kazajstán.

El malware busca estos archivos en todas las ubicaciones de la máquina, excepto en carpetas que coincidan con los siguientes nombres de productos antivirus: Symantec, Norton, McAfee, ESET Smart Security, AVG9, Kaspersky Lab y Doctor Web.

Paso 3: Segunda inserción en el Equipo A

Los operadores del malware obtienen desde la unidad el nombre de equipo registrado por el Equipo B. Como el dropper que se ejecuta en el Equipo A no implementa nada más aparte de lo descrito anteriormente, los operadores deberían tener otro componente malicioso más ejecutándose en el Equipo A para lograr ese paso.

A continuación, los operadores colocan comandos para el Equipo B en la unidad extraíble, dentro de un archivo cifrado llamado “COMPUTER_NAME.in”.

Paso 4: Segunda inserción en el Equipo B

Cuando la unidad extraíble vuelve a insertarse en el Equipo B, Win32/USBStealer coloca en la unidad los archivos agrupados durante el procedimiento de extracción automática explicado en el paso 2, más arriba. La próxima vez que la unidad extraíble se conecte al Equipo A, los operadores podrán capturar estos archivos “aislados por el air gap“.

A continuación, Win32/USBStealer descifra los archivos de comando colocados por los operadores para el Equipo B y da una serie de comandos que se ejecutarán sucesivamente. Cada comando es un número de dos bytes seguido por un parámetro.

Número de comandoParámetroPropósito
0x0001Ruta de WindowsCopia los archivos que coinciden con la ruta a la unidad extraíble
0x0002Raíz = Ruta = DíaCopia archivos cuya ruta coincida con “Raíz\Ruta*” de la unidad extraíble, pero solo si se modificaron hace menos de "Día" días atrás
0x0003Raíz = Ruta = DíaIgual que el comando 0x0002, pero el parámetro también se escribe en el archivo de monitoreo del inicio (ver el párrafo siguiente)
0x0004Debería configurarse en “!”Inicia la función de extracción automática (ver el paso 2) en todas las unidades conectadas
0x0005NingunoElimina el archivo de monitoreo del inicio (ver el párrafo siguiente)
0x0006Ruta de WindowsEjecuta una copia del archivo señalado por el parámetro bajo el nombre “taskrel.exe”
0x0007NingunoElimina el archivo llamado “taskrel.exe”
0x0008Raíz = Ruta = DíaCopia los nombres de archivos que coincidan con “Raíz\Ruta*” de la unidad extraíble, pero solo si se modificaron hace menos de "Día" días atrás, a un archivo llamado “inres.in”
0x0009NingunoElimina el archivo llamado “inres.in”

Los comandos 0x0003 y 0x0005 hacen referencia al archivo de monitoreo del inicio, un archivo almacenado localmente en el Equipo B, que contiene patrones de archivos en el formato “Raíz = Ruta = Día. Cada vez que arranque el equipo, se ejecutará el comando 0x0002 para estos patrones. Esto permite hacer un monitoreo a largo plazo de los archivos de interés.

El comando 0x0008 sirve como una manera de descubrir posibles archivos interesantes. Podemos especular que los operadores comienzan por el comando 0x0008 y luego ejecutan los comandos 0x0002 o 0x0003 para recopilar archivos de posible interés.

Para todos los comandos que copian archivos a unidades extraíbles, existe un mecanismo de reserva. En caso de que falle la copia de archivos, por ejemplo si no se otorga acceso de escritura a la unidad, los archivos se agrupan en un directorio local. Se copiarán a la próxima unidad con posibilidad de conectarse a Internet, que se enchufe a la máquina.

Conclusión

Win32/USBStealer demuestra el alto grado de determinación de sus operadores: el grupo Sednit. A continuación mencionamos algunas cosas sorprendentes que descubrimos durante la investigación:

  • Casi 10 años de actividad: la primera fecha de compilación que encontramos para la carga Win32/USBStealer es mayo de 2005, como se muestra en la imagen abajo. Como la versión del compilador que creó este binario en particular es consistente con la fecha de compilación, y ya que otras cargas de Win32/USBStealer llevan un registro realista de la fecha de la compilación (que datan de los últimos años), creemos que estas fechas representan la fecha real en que el programa entró en funcionamiento.
Fecha de compilación

Fecha de compilación

  • Objetivos de ataque precisos: Los nombres de los archivos buscados por el procedimiento de extracción automático indican que hay un conocimiento muy preciso de los objetivos que se desean extraer.

Todavía quedan algunas preguntas pendientes: por ejemplo, hasta ahora no queda nada claro cómo ocurrió la infección original. Podemos especular que se usó la técnica clásica de ataques de phishing dirigidos a grupos específicos. Debemos notar que el reciente informe de FireEye sobre este grupo advierte sobre una campaña de phishing que usa como tema “la seguridad de los discos USB es el mejor software para bloquear amenazas que pueden dañar tu PC o que pueden comprometer tu información personal desde el almacenamiento USB”.

En el escenario de ataque descrito, el Equipo A ya tiene que estar siendo controlado por los cibercriminales. El dropper Win32/USBStealer no cuenta con la capacidad de comunicarse por Internet, por lo que podemos especular que hay otros componentes maliciosos ejecutándose simultáneamente en el equipo.

Indicadores de sistemas comprometidos

Dropper

  • Registra el servicio llamado “USB Disk Security” con la descripción “Provide protection against threats via USB drive” (Suministrar protección contra amenazas a través de la unidad de USB).
  • Como alternativa, se registra bajo la llave de registro “HKEY_CURRENT_USER \Software\Microsoft\Windows\CurrentVersion\Run”, con el nombre “USB Disk Security”
  • Abre un mutex llamado “ZXCVMutexHello”
  • Recursos del tipo “X”:
    • ID=109 para la carga
    • ID=106 para el archivo INF

Payload

  • Registra el servicio llamado “USBGuard” con la descripción “Protects removable media from becoming infected with malware” (Protege los medios extraíbles para que no se infecten con malware).
  • Como alternativa, se registra bajo la llave de registro “HKEY_CURRENT_USER \Software\Microsoft\Windows\CurrentVersion\Run”, con el nombre “USBGuard”
  • Abre un mutex llamado “USB_Flash”

Hashes

SHA1PropósitoNombre de detección de ESET
BB63211E4D47344514A8C79CC8C310352268E731Dropper
(USBSRService.exe)
Win32/USBStealer.D
776C04A10BDEEC9C10F51632A589E2C52AABDF48Payload
(USBGuard.exe)
Win32/USBStealer.A

Autor Joan Calvet, ESET

Síguenos