La traducción del artículo fue preparada especialmente para estudiantes del curso de ingeniería inversa .
Resumen
Los investigadores de la Unidad de amenaza de contador (CTU) de Dell SecureWorks han descubierto malware que omite los sistemas de autenticación de Active Directory (AD) que usan autenticación de factor único (solo contraseña). Los atacantes pueden usar la contraseña de su elección para la autenticación como cualquier usuario. Este malware se llama la "clave de esqueleto" (clave universal).
Los investigadores de la CTU descubrieron la Llave maestra en una red cliente que utilizaba la autenticación de un solo factor para acceder al correo web y a las VPN, lo que brindaba a los atacantes acceso sin trabas a los servicios de acceso remoto. La llave maestra se implementa como un parche en la memoria en los controladores de dominio AD de la víctima para permitir que el atacante se autentique como cualquier usuario, mientras que los usuarios legítimos continúan la autenticación como de costumbre. La omisión de autenticación de Skeleton Key también permite a los atacantes de acceso físico iniciar sesión y desbloquear sistemas que autentican a los usuarios en controladores de dominio de AD comprometidos.
Las únicas muestras de Skeleton Key conocidas en el momento de la publicación carecían de persistencia; deben volver a implementarse cuando se reinicia el controlador de dominio. Los investigadores de CTU sospechan que los atacantes solo pueden identificar un reinicio en función de su incapacidad para autenticarse con éxito, ya que no se detectó ningún otro malware en los controladores de dominio. Entre ocho horas y ocho días después del reinicio, los atacantes utilizaron otro malware de acceso remoto ya implementado en la red de la víctima para volver a implementar la Llave maestra en los controladores de dominio.
La implementación de Skeleton Key requiere credenciales de administrador de dominio. Los investigadores de la CTU observaron a los atacantes desplegar Skeleton Key utilizando credenciales robadas de servidores de misión crítica, estaciones de trabajo de administrador y controladores de dominio de destino.
Análisis
Inicialmente, los investigadores de CTU observaron una muestra de Skeleton Key llamada ole64.dll en una red comprometida (ver Tabla 1).
Tabla 1. Clave de esqueleto de muestra ole64.dll
.Mientras estudiaban
ole64.dll
, los investigadores de CTU descubrieron una versión anterior de
msuta64.dll
en un "host intermedio" en la red de la víctima (consulte la Tabla 2). Un host intermedio es cualquier sistema previamente comprometido por malware malicioso de acceso remoto. Esta opción incluye operadores de depuración adicionales que permiten al desarrollador de Skeleton Key observar las direcciones de memoria involucradas en el proceso de revisión.
Tabla 2. Clave de esqueleto de muestra msuta64.dll
.Los atacantes utilizaron el siguiente algoritmo para implementar la clave de esqueleto como un archivo DLL de 64 bits:
- Descargue el archivo DLL Skeleton Key en el directorio de ensayo en el host de ensayo en la red de la víctima. Los investigadores de la CTU observaron tres nombres de archivo asociados con el archivo Skeleton Key DLL: ole64.dll, ole.dll y msuta64.dll. Los sistemas Windows incluyen el archivo legítimo ole32.dll, pero no está relacionado con este malware.
- Intente acceder a los recursos administrativos en los controladores de dominio utilizando una lista de credenciales de administrador de dominio robadas.
- Si las credenciales robadas ya no son válidas, use las herramientas de robo de contraseñas para extraer las contraseñas del administrador del dominio en texto claro de uno de los siguientes lugares, lo que implica familiaridad con el entorno de la víctima:
- memoria de otro servidor disponible en la red de la víctima
- trabajos de administrador de dominio
- controladores de dominio de destino
- Use credenciales de administrador de dominio válidas para copiar la DLL de clave de esqueleto en C: \ WINDOWS \ system32 \ en los controladores de dominio de destino.
- Utilice la utilidad PsExec para ejecutar de forma remota el archivo DLL Skeleton Key en los controladores de dominio de destino utilizando el comando rundll32. La contraseña elegida por el atacante está formateada como una contraseña hash NTLM y no se presenta en texto claro. Después de implementar la clave de esqueleto, el atacante puede autenticarse como cualquier usuario utilizando el hash de contraseña
NTLM: psexec -accepteula \\% TARGET-DC% rundll32 < DLL> ii < NTLM>
configurado NTLM: psexec -accepteula \\% TARGET-DC% rundll32 < DLL> ii < NTLM>
- Elimine el archivo DLL Skeleton Key de C: \ WINDOWS \ system32 \ en los controladores de dominio de destino.
- Elimine el archivo DLL Skeleton Key del directorio provisional en el host de transición.
- Pruebe la implementación exitosa de Skeleton Key utilizando los comandos de "uso neto" con una cuenta AD y una contraseña que coincida con el hash NTLM configurado.
Los investigadores de CTU descubrieron un patrón de contraseña incrustado que sugiere que un grupo de atacantes desplegó la Llave maestra en varias organizaciones.
El uso de PsExec se puede detectar en un entorno Windows alertando sobre los eventos de Windows generados por la utilidad. Los siguientes identificadores de eventos, que se observan en los controladores de dominio de destino, registran la herramienta PsExec que instala su servicio, inicia el servicio y lo detiene. Estos eventos se generan cada vez que se usa PsExec, por lo tanto, se requiere un análisis adicional de los eventos para determinar si son maliciosos o legítimos:
- Eventos inesperados de instalación del servicio PSEXESVC (código de evento 7045) en controladores de dominio AD:
Nombre de registro : Sistema
Fuente : Gerente de Control de Servicio
Resumen : hay un servicio instalado en el sistema.
Nombre del archivo de servicio :
%SystemRoot%\PSEXESVC.exe
- Eventos inesperados de inicio / detención del servicio PSEXESVC (código de evento 7036) en controladores de dominio AD:
Nombre de registro : Sistema
Fuente : Gerente de Control de Servicio
Resumen :
- "El servicio PSEXESVC está operativo".
- "El servicio PSEXESVC ha pasado a un estado detenido".
Como Skeleton Key en estado de ejecución, debe realizar las siguientes tareas:
- Busque una de las siguientes versiones compatibles de Windows de 64 bits. El malware no es compatible con versiones de Windows de 32 bits o versiones de Windows Server que comiencen con Windows Server 2012 (6.2).
- 6.1 (Windows 2008 R2)
- 6.0 (Windows Server 2008)
- 5.2 (Windows 2003 R2)
- Use la función SeDebugPrivilege para obtener los derechos de administrador necesarios para escribir en el proceso de servicio del subsistema de seguridad local (LSASS). Este proceso controla las características de seguridad para el dominio AD, incluida la autenticación de la cuenta de usuario.
- Enumere los procesos disponibles para obtener el identificador de proceso LSASS.
- Obtenga direcciones para las funciones relacionadas con la autenticación que se corregirán:
- CDLocateCSystem - ubicado en
cryptdll.dll
- SamIRetrieveMultiplePrimaryCredentials - ubicado en
samsrv.dll
- SamIRetrievePrimaryCredentials - ubicado en
samsrv.dll
- Realice ajustes para el sistema operativo específico utilizando la variable global establecida durante la verificación de compatibilidad en el paso 1.
- Use la función OpenProcess para obtener el identificador de proceso LSASS.
- Reserve y asigne el espacio de memoria necesario para editar y parchar la memoria del proceso LSASS.
- Parchear funciones relacionadas basadas en el sistema operativo:
- CDLocateCSystem (todas las versiones compatibles de Windows)
- SamIRetrieveMultiplePrimaryCredentials (solo Windows 2008 R2 (6.1))
- SamIRetrievePrimaryCredentials (todas las versiones compatibles de Windows excepto Windows 2008 R2 (6.1))
Para arreglar cada función:
- Llame a la función VirtualProtectEx para cambiar la protección de memoria para permitir la escritura en las asignaciones de memoria requeridas (PAGE_EXECUTE_READWRITE, 0x40). Este paso le permite actualizar el código de función en la memoria.
- Llame a la función WriteProcessMemory para cambiar la dirección de la función de destino para que apunte al código corregido. Este cambio hace que la llamada a la función use el parche.
- Restaure la protección de memoria original invocando VirtualProtectEx con los indicadores de protección de memoria original. Este paso es necesario para evitar la asignación sospechosa de memoria para grabación y ejecución.
Después de la aplicación de parches, un atacante puede usar la contraseña de Skeleton Key configurada durante la implementación para iniciar sesión como cualquier usuario de dominio. Los usuarios legítimos aún pueden iniciar sesión con sus propias contraseñas. Esta omisión de autenticación se aplica a todos los servicios que usan autenticación AD unidireccional, como correo web y VPN, y también permite que un atacante con acceso físico a un sistema comprometido desbloquee una computadora ingresando una contraseña incrustada en el teclado.
Posible asociación con problemas de replicación de dominio
El código malicioso Skeleton Key no transmite tráfico de red, lo que hace que el descubrimiento basado en red sea ineficaz. Sin embargo, este malware se ha implicado en problemas de replicación de dominios que podrían indicar infección. Poco después de cada implementación del malware Skeleton Key detectado por los investigadores de CTU, los controladores de dominio encontraron problemas de replicación que el Soporte de Microsoft no podía explicar o resolver, y finalmente se requirió un reinicio para resolverlos. Estos reinicios eliminaron el bypass de autenticación de Skeleton Key porque el malware no tiene un mecanismo de persistencia. En la fig. La Figura 1 muestra la línea de tiempo de estos reinicios, así como el posterior robo de contraseñas por parte de intrusos, la expansión lateral y el despliegue de la llave maestra. Las reubicaciones generalmente ocurrieron dentro de unas pocas horas o varios días después de un reinicio.
Figura 1. Relación de implementación y reinicio observada por investigadores de CTU, abril - julio de 2014 (Fuente: Dell SecureWorks)Contramedidas
El código malicioso Skeleton Key omite la autenticación y no genera tráfico de red. Como resultado, los sistemas de detección y prevención de intrusiones en la red (IDS / IPS) no detectarán esta amenaza. Sin embargo, los investigadores de la CTU anotaron las firmas de YARA en el
Apéndice A para descubrir la DLL de Skeleton Key y el código que ingresa en la memoria del proceso LSASS.
Indicadores de amenaza
Los indicadores de amenaza en la Tabla 3 se pueden usar para detectar actividad relacionada con el malware Skeleton Key.
Tabla 3. Indicadores para la llave maestra.Conclusión
CTU Research Group recomienda que las organizaciones implementen las siguientes características de seguridad de Skeleton Key:
- La autenticación multifactor para todas las soluciones de acceso remoto, incluida la VPN y el correo electrónico remoto, no permite que los actores de amenazas omitan la autenticación o autenticación de factor único utilizando credenciales estáticas robadas.
- Un registro de auditoría de creación de procesos en estaciones de trabajo y servidores, incluidos los controladores de dominio AD, puede detectar implementaciones de Skeleton Key. En particular, las organizaciones deben buscar los siguientes artefactos:
- Procesos inesperados de PsExec.exe y uso del argumento de línea de comando "-accepteula" de PsExec
- Procesos inesperados de rundll32.exe
- Manejar argumentos similares a los códigos hash NTLM (32 caracteres que contienen números 0-9 y caracteres AF)
- La supervisión de eventos de Windows Service Manager en controladores de dominio AD puede detectar eventos inesperados de instalación de servicio (código de evento 7045) e iniciar / detener eventos (código de evento 7036) para el servicio PSEXESVC PsExec.
Apéndice A - Firmas YARA
Las siguientes firmas de YARA detectan la presencia de una clave de esqueleto en el sistema al escanear un archivo sospechoso o un volcado de memoria de los controladores de dominio de Active Directory, que presumiblemente contiene la clave de esqueleto.
rule skeleton_key_patcher { strings: $target_process = "lsass.exe" wide $dll1 = "cryptdll.dll" $dll2 = "samsrv.dll" $name = "HookDC.dll" $patched1 = "CDLocateCSystem" $patched2 = "SamIRetrievePrimaryCredentials" $patched3 = "SamIRetrieveMultiplePrimaryCredentials" condition: all of them } rule skeleton_key_injected_code { strings: $injected = { 33 C0 85 C9 0F 95 C0 48 8B 8C 24 40 01 00 00 48 33 CC E8 4D 02 00 00 48 81 C4 58 01 00 00 C3 } $patch_CDLocateCSystem = { 48 89 5C 24 08 48 89 74 24 10 57 48 83 EC 20 48 8B FA 8B F1 E8 ?? ?? ?? ?? 48 8B D7 8B CE 48 8B D8 FF 50 10 44 8B D8 85 C0 0F 88 A5 00 00 00 48 85 FF 0F 84 9C 00 00 00 83 FE 17 0F 85 93 00 00 00 48 8B 07 48 85 C0 0F 84 84 00 00 00 48 83 BB 48 01 00 00 00 75 73 48 89 83 48 01 00 00 33 D2 } $patch_SamIRetrievePrimaryCredential = { 48 89 5C 24 08 48 89 6C 24 10 48 89 74 24 18 57 48 83 EC 20 49 8B F9 49 8B F0 48 8B DA 48 8B E9 48 85 D2 74 2A 48 8B 42 08 48 85 C0 74 21 66 83 3A 26 75 1B 66 83 38 4B 75 15 66 83 78 0E 73 75 0E 66 83 78 1E 4B 75 07 B8 A1 02 00 C0 EB 14 E8 ?? ?? ?? ?? 4C 8B CF 4C 8B C6 48 8B D3 48 8B CD FF 50 18 48 8B 5C 24 30 48 8B 6C 24 38 48 8B 74 24 40 48 83 C4 20 5F C3 } $patch_SamIRetrieveMultiplePrimaryCredential = { 48 89 5C 24 08 48 89 6C 24 10 48 89 74 24 18 57 48 83 EC 20 41 8B F9 49 8B D8 8B F2 8B E9 4D 85 C0 74 2B 49 8B 40 08 48 85 C0 74 22 66 41 83 38 26 75 1B 66 83 38 4B 75 15 66 83 78 0E 73 75 0E 66 83 78 1E 4B 75 07 B8 A1 02 00 C0 EB 12 E8 ?? ?? ?? ?? 44 8B CF 4C 8B C3 8B D6 8B CD FF 50 20 48 8B 5C 24 30 48 8B 6C 24 38 48 8B 74 24 40 48 83 C4 20 5F C3 } condition: any of them }