Title: Seguridad en Windows
1Seguridad en Windows
Paco Soriano Ilitia Technologies
2Qué es un Rootkit?
- Programa desarrollado para controlar el
comportamiento de una maquina/sistema - A menudo usado para ocultar backdoors, troyanos,
etc. - Excelente herramienta para hackers
3Tipos de Rootkits
- User Land (Ring 3)
- Portables y polivalentes
- Ejecución Modo usuario
- Reside en los procesos de usuario
- No requiere permisos especiales (administrativos)
- Runas
- Kernel Land (Ring 0)
- Mas difíciles de detectar
- Modo privilegiado
- Global al Sistema
4Objetivos y acciones
- Inyección en procesos
- Intercepción de funciones
- Dinámico (Runtime)
- Estático (Modificación de Binarios)
- Mantenerse oculto
- Utilizan la intercepción (Hooking)
5Qué controla el rootkit?
- Procesos controlados por el rootkit
- Acceso a ficheros
- Acceso a claves de registro
- Acceso a puertos (Red)
6Inyección
- Introducción de código en el espacio de memoria
de otro proceso - Tipos comunes
- SystemHooks
- CreateRemoteThread
- Threads Context
7Tipos de Inyección SystemHooks
- SetWindowsHookEx
- Dll
- Posee la llamada al hook y su manejador
- Payload
- Loader
- Carga la Dll y ejecuta el proceso de hook
- WH_CBT
- Captura todos los procesos con GUI
8Tipos de Inyección CreateRemoteThread
- Permite crear un thread en el espacio de memoria
de otro proceso. - Para inyectar procesos del current user su uso es
directo - Para inyectar procesos de otros usuarios
- Adquirir privilegios de debugger con
SeDebugPrivilege - Incluso con el privilegio adquirido hay procesos
que evitan el debug mediante trucos a nivel del
kernel.
9Tipos de Inyeccion Threads Context
- Redirigir el flujo de un proceso
- El inyector elije un Thread y lo suspende
- Se inyecta el código
- VirtualAllocEx/WriteProcessMemory
- Realocación de memoria
- Mover el EIP al código inyectado
- Rearrancar el thread
10Ejemplo
11Intercepción
- Redirigir funciones de un programa a funciones
propias - Para el programa original todo parece inalterado
- Dependientes del formato PE
12PE Format
- Bien documentado
- Información exhaustiva sobre módulos (exe, dll)
- RVA(Relative Virtual Addresses) y BASE ADDRESS
- Estructura estática en disco parecida a
estructura dinámica en memoria
13PE Format Estructuras
- typedef struct _IMAGE_DOS_HEADER
-
- / DOS .EXE header ( RVA 0 )/
- WORD e_magic / Magic number /
- ...
- LONG e_lfanew / File address of new exe header
/ - IMAGE_DOS_HEADER, PIMAGE_DOS_HEADER
- / At IMAGE_DOS_HEADER-gte_lfanew /
- typedef struct _IMAGE_NT_HEADERS
-
- DWORD Signature
- IMAGE_FILE_HEADER FileHeader
- IMAGE_OPTIONAL_HEADER32 OptionalHeader
- IMAGE_NT_HEADERS32, PIMAGE_NT_HEADERS32
14PE Format Estructuras
- / At (IMAGE_DOS_HEADER-gte_lfanew)-gtOptionalHeader
/ - typedef struct _IMAGE_OPTIONAL_HEADER
- WORD Magic / Appears to be a signature WORD of
some sort. Always appears to be set to 0x010B. /
- ...
- DWORD NumberOfRvaAndSizes / The number of
entries in the DataDirectory array (below). This
value is always set to 16 by the current tools.
/ - IMAGE_DATA_DIRECTORY DataDirectoryIMAGE_NUMBEROF
_DIRECTORY_ENTRIES - / An array of IMAGE_DATA_DIRECTORY structures.
The initial array elements contain the starting
RVA and sizes of important portions of the
executable file. Some elements at the end of the
array are currently unused. / - IMAGE_OPTIONAL_HEADER32, PIMAGE_OPTIONAL_HEADER
32 - / At (IMAGE_DOS_HEADER-gte_lfanew)-gtOptionalHeader
-gtDataDirectoryx / - typedef struct _IMAGE_DATA_DIRECTORY
- DWORD VirtualAddress
- DWORD Size
- IMAGE_DATA_DIRECTORY, PIMAGE_DATA_DIRECTORY
15PE Format Estructuras
- define IMAGE_DIRECTORY_ENTRY_EXPORT 0 / Export
Directory / - define IMAGE_DIRECTORY_ENTRY_IMPORT 1 / Import
Directory / - (IMAGE_DOS_HEADER-gt
- e_lfanew)-gt
- OptionalHeader-gt
- DataDirectoryIMAGE_DIRECTORY_ENTRY_IMPORT
- (IMAGE_DOS_HEADER-gt
- e_lfanew)-gt
- OptionalHeader-gt
- DataDirectoryIMAGE_DIRECTORY_ENTRY_EXPORT
16Intercepcion Redirecting IAT
- IAT contiene la dirección a todas las funciones
importadas - Reemplazar las APIs con funciones propias
- IAT Tabla de Saltos indirectos
- Valido solo para direct calls ( enlace estático
en tiempo de compilación ) - No valido para LoadLibrary/GetProcAddress
17Intercepcion Redirecting IAT
- Método
- Inyectar dll
- Ejecutar payload
- Capturar el PE Header del Proceso remoto
- Capturar la dll y el API dentro de la IAT
- Modificación del salto indirecto de la IAT
18Intercepcion Redirecting EAT
- EAT contiene la dirección a todas las funciones
exportadas - Reemplazar las APIs con funciones propias
- EAT Lista de punteros a funciones (RVAs)
- Valido solo para indirect calls ( enlace dinámico
en runtime ) - LoadLibrary/GetProcAddress
19Intercepcion Redirecting EAT
- Metodo
- Inyectar dll
- Ejecutar payload
- Capturar el PE Header del Proceso remoto
- Capturar la dll y el API dentro de la EAT
- Modificación del puntero a la función (RVA)
- Para que GetprocAddress de cómo resultado nuestra
función
20Intercepcion Jump Incondicional
- Modifica el assembler del código original del API
en runtime - Necesita de un Disasm en runtime
- Funciona con saltos directos o indirectos
- (Enlace estático o en runtime)
- Microsoft Detours Library DETOURS
21Intercepcion Jump Incondicional
- Método
- Localizar el entry point del API
- Guardar las primeras instrucciones del API
Original un salto a la siguiente instrucción
del API original - Disassembler
- Insertar el salto a nuestro código
22Intercepcion Jump Incondicional
- Método ( getting deeper)
- Encontrar donde insertar el salto
- WHILE CollectedSpace lt JUMP SIZE
- Calcular el tamaño de la instrucción en pAddr
- Actualizar CollectedSpace
- Siguiente Instrucción pAddr Tamaño de la
instrucción actual - Create the call gate
- Alocar memoria para el callgate Tamaño del área
recolectado JUMP SIZE - Copiar las instrucciones recolectadas al callgate
- Añadir al callgate un JUMP a pAddr
CollectedSpace - Insert the hook in the API code
- Limpiar el área recolectada con NOPs
- Insertar JUMP a pAddrToJump (hook)
23Intercepción Jump Incondicional
24Intercepcion Kernel Hooks
- Kernel Memory
- 0x80000000
- 0xC0000000 ( /3GB )
- Los procesos de usuario no pueden acceder al
Kernel Memory - Excepto Debugging Processes
- Procesos con CallGates
- Tipo especial de descriptor ( LDT, GDT )
- FAR calls
- User Mode (Ring 3)-gt Kernel Mode (Ring 0)
- Motivos de Hooks en Kernel
- Difíciles de detectar
- Globales
25Intercepción Espacio en Memoria para Hooks
- User Land Rootkits necesitan alocar memoria en el
proceso remoto - Detectable
- Mapeo de memoria desde el Kernel a todos los
procesos (KUSER_SHARED_DATA) - 2 VA -gt 1 PA
- Kernel Address 0xFFDF0000 User Address
0x7FFE0000 ( Misma Pagina física) - 0xFFDF0000 Writable
- 0x7FFE0000 no Writable
- Apuntar IAT a 0x7FFE0000 ( Mediante Hook )
- Necesario un Rootkit Hibrido para escribir en
0xFFDF0000 - Tamaño 0xFFDF0000 4Kb
26Ejemplo
27User Land vs. Kernel Land
- Kernel Rootkits
- Patch SSDT, IDT, IRP
- Afecta a todos los procesos
- User Rootkits
- Patch IAT, EAT, etc.
- Afecta a los procesos inyectados
28User Land vs. Kernel Land
- Kernel Rootkits
- Requiere técnicas avanzadas de Inyección
- Intercepción del Api a muy bajo nivel
- User Rootkits
- Requiere técnicas de inyección ( bien
documentadas ) - Intercepción del API a alto nivel
29User Land vs. Kernel Land
- Ejemplo Queremos ocultar ciertos directorios
para que no sean visibles a los ojos del
explorer. Opciones - Kernel Land rootkit
- User Land rootkit
30User Land vs. Kernel Land
31User Land vs. Kernel Land
- User Land Rootkit
- Interceptar FindFirstFileA/W
- Interceptar FindNextFileA/W
- Kernel Land Rootkit
- Interceptar ntdll.ZwQueryDirectoryFile
32User Land vs. Kernel Land
- User Land Rootkit
- Fácil de implementar
- Portable
- Compatible
- Menos preciso
- Menos costoso
- Kernel Land Rootkit
- Difícil de implementar (es muy posible que este
indocumentada) - Cuanto mas cerca del kernel, mas susceptible a
cambios - Mas preciso
- Mas costoso
33Detección de Rootkits Presencia
- Guarding the Doors
- Scanning
- Buscar Hooks
- SSDT Hooks
- Inline Hooks
- IRP Handler Hooks
- IDT Hooks
- IAT Hooks
- Tracear la Ejecución
34Detección de Rootkits Guarding the Doors
- Todo el software esta en memoria en algún lugar
en algún momento - Detecta la carga del rootkit
- Capturar todos los puntos de acceso para carga (
drivers, módulos, etc.) - Analizar el rootkit
- Signatures
- Heurística
- Difícil de implementar
- Solo funciona con rootkits conocidos
35Detección de Rootkits Scanning
- Escanear la memoria periódicamente
- Modulos
- Signatures
- Evitamos al detector el hook de funciones del
kernel y de procesos de usuario - Solo funciona con rootkits conocidos
- Simple de implementar
- No evita la carga del rootkit
- Se puede evitar la detección con un Kernel Land
Rootkit
36Detección de Rootkits Buscando Hooks
- Escanear la memoria de los procesos y del kernel
buscando hooks - Import Address Table (IAT)
- System Service Dispatch Table (SSDT), conocido
como KeServiceDescriptorTable - Interrupt Descriptor Table (IDT) uno por CPU
- Drivers' I/O Request Packet (IRP) handler
- Inline function hooks
- Detección basada en Rangos de Direcciones
37Detección de Rootkits Comportamiento
- Detección
- Ficheros ocultos
- Registry Keys
- Procesos Ocultos
- Comparación del resultado APIs Bajo-Alto nivel
38Sony Rootkit
- Compuesto por
- Aries.sys
- Crater.sys
- Cor.sys
- Otros ficheros
39Sony Rootkit Comportamiento
40Sony Rootkit Patch SSDT
41Sony Rootkit Desensamblado
42Sony Rootkit Directorio Oculto
43Sony Rootkit Desensamblado
44Sony Rootkit Versión y Publisher
Tecnologia XCP http//www.first4internet.com/
http//www.xcp-aurora.com/
45Sony Rootkit Inyector
46Sony Rootkit Ejecución del Inyector
- Cuando pulsas play, se ejecuta el DRMServer
- Sigue ejecutandose aunque se cierre el player
- Se instala como servicio Plug and Play Device
Manager ?
47Sony Rootkit Ejecución del Inyector
DRMServer captura informacion basica de los
ficheros cada 2 segundos, 8 veces cada scan
48Sony Rootkit Inyector-DRMServer
DRMServer y el inyector (player) se comunican
mediante Pipes
49Sony Rootkit Comportamiento
- Patch SSDT
- Oculta sys
- Ficheros
- Claves de Registro
- Directorios
- Procesos
50Sony Rootkit
- Fallo por parte del programador
- Descarga del driver
- No es seguro descargar un driver que modifique la
SSDT - Implica reiniciar
- Patch SSDT no funciona en todas las plataformas
Windows x64
51Sony Rootkit Desinstalación
- Hace 1 mes no existía método
- Parar el servicio sysDRMServer
- Borrar los directorios y ficheros (sys)
- Borrar claves de registro (sys)
- HKLM\System\CurrentControlSet\Services
- HKLM\System\CurrentControlSet\Control\SafeBoot
52Sony Rootkit Desinstalación
- Efectos colaterales de la Desinstalación
- Perdemos todas las unidades de cd/dvd ?
- Efecto producido por Crater.sys
- Devide Driver Filter
- Si borras un DDF se pierde el dispositivo/s
asociado a al mismo
53Sony Rootkit Desinstalación
54Sony Rootkit Desinstalación
55Sony Rootkit Conclusión
- Los de Sony te instalan un rootkit
- "Most people, I think, do not even know what a
Rootkit is, so why should they care about it? - Thomas Hessa, PRESIDENT of Sony BMG's Global
Digital Business - No proveen nada para desinstalarlo (hasta el 4
de noviembre) - Desinstalador
- net stop network control manager que es el
servicio asociado al driver Aries.sys -S - Puede pasar BSoD
56Bibliografia
- HOOKS A HowTo for setting system wide hooks
- http//www.codeguru.com/Cpp/W-P/system/misc/artic
le.php/c5685/ - 3WAYS Three ways to inject your code into
another process - http//www.codeguru.com/Cpp/W-P/system/processesm
odules/article.php/c5767/ - LSD Win32 assembly components
- http//www.lsd-pl.net/documents/winasm-1.0.1.pdf
- REMOTETH
- http//win32.mvps.org/processes/remthread.html
- DETOURS Detours win32 functions interception
- http//research.microsoft.com/sn/detours/
- HXDEF Hacker Defender (Holy_Father 2002)
- http//rootkit.host.sk/knowhow/hookingen.txt
- ZOMBIE2 Entry point rewriting
- http//www.syshell.org/?rRootkit/Api_Hijack/Code
/EntryPointRewritting/ - EXPLORIAT
- http//www.syshell.org/?rRootkit/Snippets/Explor
erIAT2k.log - EXPLORIAT
- http//www.syshell.org/?rRootkit/Snippets/Explor
erIAT2k.log - Windows Internals 4th Edition, Mark
E. Russinovich, David A. Solomon
57FIN