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 para atacar 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 hacer que una red segura de ordenadores esté físicamente aislada de redes inseguras, como un acceso público a Internet 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 este artículo, compartiremos nuestros conocimientos sobre una herramienta empleada para extraer información confidencial de las redes que se encuentran aisladas y que ESET detecta comoWin32/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 objetivos habituales: 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 habitual 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 especialmente cierto cuando la misma unidad extraíble se conecta 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 a 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:
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 centraremos 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 comoWin32/USBStealer.D. El nombre de archivo del dropper es USBSRService.exe, que intenta hacerse pasar por un programa legítimo ruso llamado USB Disk Security, como se muestra a continuación:
La lógica principal del dropper es la siguiente:
- Monitoriza la introducció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 dropperdescifra 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 INF cuyo contenido se muestra a continuación:
[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 KB971029en agosto de 2009.
Parece que fue hace mucho tiempo, pero creemos que Win32/USBStealer comenzó a propagarse al menos cuatro años antes de esa fecha. Además, es muy común que los equipos en redes aisladas por air gaps permanezcan desactualizados, ya que resulta 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ñalpara otras máquinas infectadas de que esta unidad, en algún momento, 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 ubicados 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 tras 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 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 un proceso 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. Por lo tanto, incluso aunque el usuario quite el archivo 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/USBStealerejecuta 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 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 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 de forma rígida. Hemos observado dos listas diferentesin-the-wild, que se muestran en la tabla a continuación.
*
Lista 1
Lista 2
Período posible de uso
2005
2011-2014
Nombres de archivos buscados
Win32Negah.dll
Ssers.dat
Settings.dat
Negah2.exe
DtInt.dat
Audit.dat
key.in
key.out
z_box.exe
talgar.exe
El posible período 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 comando
Parámetro
Propósito
0x0001
Ruta de Windows
Copia los archivos que coinciden con la ruta a la unidad extraíble
0x0002
Raíz = Ruta = Día
Copia 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
0x0003
Raíz = Ruta = Día
Igual que el comando 0x0002, pero el parámetro también se escribe en el archivo de monitoreo del inicio (ver el párrafo siguiente)
0x0004
Debería configurarse en “!”
Inicia la función de extracción automática (ver el paso 2) en todas las unidades conectadas
0x0005
Ninguno
Elimina el archivo de monitoreo del inicio (ver el párrafo siguiente)
0x0006
Ruta de Windows
Ejecuta una copia del archivo señalado por el parámetro bajo el nombre “taskrel.exe”
0x0007
Ninguno
Elimina el archivo llamado “taskrel.exe”
0x0008
Raíz = Ruta = Día
Copia 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”
0x0009
Ninguno
Elimina 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 una monitorización 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 cargaWin32/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.
- 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 ha quedado 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 destacar 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
SHA1
Propósito
Nombre de detección de ESET
BB63211E4D47344514A8C79CC8C310352268E731
Dropper
(USBSRService.exe)
Win32/USBStealer.D
776C04A10BDEEC9C10F51632A589E2C52AABDF48
Payload
(USBGuard.exe)
Win32/USBStealer.A
Fuente: Mr. Calvet – ESET