security for freebsd and kernel debugging

41
Security for FreeBSD and Kernel Debugging Jornadas del Sur Bahia Blanca , Argentina

Upload: facundo-de-la-cruz

Post on 09-Jul-2015

1.178 views

Category:

Documents


2 download

DESCRIPTION

Disertación qué di en el mes de Mayo de 2009, en el BSDDay organizado por OpenBSDeros, en Ciudad Universitaria (UBA) de Buenos Aires. A esta misma disertación la di en las I Jornadas del Sur, en la ciudad de Bahia Blanca - Universidad del Sur.

TRANSCRIPT

Page 1: Security for FreeBSD and kernel debugging

Security for FreeBSD and Kernel Debugging

Jornadas del Sur Bahia Blanca , Argentina–

Page 2: Security for FreeBSD and kernel debugging

$: WHOAMI$: WHOAMI /*** Name  : Facundo M. de la Cruz   _tty0 @ Freenode→* E­Mail: fmdlc <at> code4life.com.ar* Blog  : http://www.codigounix.com.ar/** 0x41) Consultor en IT && Seg. Informática * 0x42) Coordinador de SanLuiX**/

 

Page 3: Security for FreeBSD and kernel debugging

Disassemble main

Page 4: Security for FreeBSD and kernel debugging

Seguridad Conjunto de medidas adoptadas para proteger y asegurar el conjunto de recursos y sistemas informáticos y de información de una organización.

  → InformaciónInformaciónEs el objeto de mayor valor para una organización, el objetivo es el resguardo de la información.

  →  → Equipos que la soportan.Equipos que la soportan.Software, hardware y organización.

 → →   UsuariosUsuariosIndividuos que utilizan la estructura tecnológica y de  comunicaciones que manejan la información.

Page 5: Security for FreeBSD and kernel debugging

Seguridad FreeBSDFreeBSD proporciona un variado arsenal de utilidades y mecanismos para asegurar la integridad y la seguridad de su sistema y red. Para así lograr: 

→    IntegridadIntegridad

  →  → ConfidencialidadConfidencialidad

  Disponibilidad→  Disponibilidad→

  →  → No repudio (irrefutabilidad)No repudio (irrefutabilidad) 

Page 6: Security for FreeBSD and kernel debugging

¿De que nos protegemos? Los problemas de seguridad pueden dividirse en diferentes categorías:

 → Ataques de denegación de servicio (DoS/DDoS)

 → Comprometer cuentas de usuarios

 → Comprometer root a través de servidores accesibles

 → Comprometer root desde cuentas de usuario

 → Creación de puertas traseras (“Backdoors”)

 → Obtener información sensible

Page 7: Security for FreeBSD and kernel debugging

Descubrimiento

Etapas de un ataque

Exploración

Intrusión

Page 8: Security for FreeBSD and kernel debugging

Medidas de seguridadSe implementan en un modelo multicapamulticapa  y se pueden categorizar en: 

 → Asegurar root y cuentas administrativasAsegurar root y cuentas administrativas

 → → Asegurar los servers que ejecuten como root binarios suid/sgidAsegurar los servers que ejecuten como root binarios suid/sgid

 → → Asegurar cuentas de usuarioAsegurar cuentas de usuario

 → → Asegurar el archivo de contraseñasAsegurar el archivo de contraseñas

 → → Asegurar el kernel, los dispositivos y filesystemAsegurar el kernel, los dispositivos y filesystem

 → → Detección rápida de cambios hechos al sistemaDetección rápida de cambios hechos al sistema

 → → ParanoiaParanoia

Page 9: Security for FreeBSD and kernel debugging

Usuarios

Page 10: Security for FreeBSD and kernel debugging

  → Errores de empleados  50%  → Empleados deshonestos  15%  → Empleados descuidados  15%  → Intrusos ajenos a la empresa  10%  → Integridad física en las instalaciones 10%

Se puede notar que el 80% de los problemas Se puede notar que el 80% de los problemas relacionados a la seguridad informática son producido relacionados a la seguridad informática son producido por los empleados de dicha organización.por los empleados de dicha organización.  Y esto se podría tipificar en tres grandes grupos:Y esto se podría tipificar en tres grandes grupos:

  → Problemas por ignorancia  → Problemas por haraganería   → Problemas por malicia

Alguién dijo problemas?

Page 11: Security for FreeBSD and kernel debugging

Tipos de cuentasComo en todos los Unix­Like en FreeBSD existen tres tipos de usuarios:

 Daemons (httpd, nobody, etc)→ Superusuario (root)→ Usuarios regulares (beastie, puff, tux)→

Es importante que los demonios corran bajo usuarios no privilegiados, y que estos no tengan la posibilidad de loguearse en una shell.

NobodyNobody es el usuario de sistema sin privilegios.

Mientras mas servicios usen nobody, mas archivos y procesos tendrá y por consecuencia mas privilegios tendra. 

Page 12: Security for FreeBSD and kernel debugging

CapacidadesPara lograr una administración segura, es importante que Para lograr una administración segura, es importante que las cuentas de usuarios tengan ciertos límites y las cuentas de usuarios tengan ciertos límites y capacidades, para ello podemos utilizar el archivo:capacidades, para ello podemos utilizar el archivo:

/etc/login.conf/etc/login.conf

 A cada usuario se le asigna una clase de login → A cada usuario se le asigna una clase de login → Cada clase tiene capacidades asociadas   → → Cada clase tiene capacidades asociadas   → → nombre=valor

Page 13: Security for FreeBSD and kernel debugging

LimitesExisten dos tipos de límites:Existen dos tipos de límites:

 → BlandoBlando   Puede ser ajustado por el usuario o una app.→ → DuroDuro  Idém, pero el usuario puede unicamente →

  disminuirlo.

Algunos límites comúnes:Algunos límites comúnes:

 → CoredumpsizeCoredumpsize  Tamaño del core→ → CPUTimeCPUTime  Tiempo maxímo de CPU→ → FilesizeFilesize  Tamaño máximo de un archivo→ → MaxprocMaxproc   Número maximo de procesos por usuario→ → StackSizeStackSize  Tamaño máximo del stack→ → SBSizeSBSize  Tamaño máximo de memoria de red fue creado →

  para evitar DoS/DDoS ya que estos creaban  muchos sockets

Page 14: Security for FreeBSD and kernel debugging

Asegurar rootEn ciertas ocasiones puede resultar adecuado no permitir En ciertas ocasiones puede resultar adecuado no permitir el login de root desde cierta terminales que no sean el login de root desde cierta terminales que no sean seguras.seguras.

ttyv1 "/usr/libexec/getty Pc"    cons25l2 on  securesecurettyv2 "/usr/libexec/getty Pc"    cons25l2 on  securesecurettyv3 "/usr/libexec/getty Pc"    cons25l2 on  securesecurettyv4 "/usr/libexec/getty Pc"    cons25l2 on  securesecure

El grupo wheel:

Contiene los usuarios aturizados a ejecutar susu. Esta no es siempre la opción más segura. ksuksu.

Y en /etc/ssh/sshd_config:

PermitRootLogin No

 Evitar binarios con SUID mas de lo necesario.→ Correr solo los servicios necesarios→

Page 15: Security for FreeBSD and kernel debugging

Tipos de autenticación posibles:

En algo conocido: Contraseñas (passwords) En algo conocido: Passprhase (PGP)En algo poseído: Tarjeta inteligenteEn algo poseído: Dispositivo USBCaracterísticas Físicas: Retina, huellas dactilares, etc.c.

Autenticación

Page 16: Security for FreeBSD and kernel debugging

Cifrado de contraseñas → → Para los usuarios de FreeBSD en U.S.A. Se usa 3DESPara los usuarios de FreeBSD en U.S.A. Se usa 3DES

 Para los usuarios de FreeBSD en el resto del mundo SHA­1→ Para los usuarios de FreeBSD en el resto del mundo SHA­1→

Esto es debido a que la ley norteamericana prohibe la Esto es debido a que la ley norteamericana prohibe la importación de algoritmos criptografícos.importación de algoritmos criptografícos.

El formato de contraseñas a utilizar se encuentra El formato de contraseñas a utilizar se encuentra en en /etc/login.conf /etc/login.conf mediantemediante passwd_format passwd_format..

Page 17: Security for FreeBSD and kernel debugging

Contraseñas de un solo uso → → OPIE (One­time Passwords In Everything)OPIE (One­time Passwords In Everything) Por defecto hash Md5→ Por defecto hash Md5→ Contraseña usada únicamente para generar llaves→ Contraseña usada únicamente para generar llaves→ Conceptos de Semilla o Llave   2 Letras y 5 Digitos→ → Conceptos de Semilla o Llave   2 Letras y 5 Digitos→ → Cuenta de iterancion   Entero de 1 a 100→ → Cuenta de iterancion   Entero de 1 a 100→ → Autentificación mediante PAM→ Autentificación mediante PAM→ Configuración en /etc/opieaccess → Configuración en /etc/opieaccess →

Se genera concatenando la semilla y la contraseña secreta, aplica el hash MD5 tantas veces como especifique la cuenta de iteración y convierte el resultado en seis palabras cortas en inglés. Estas seis palabras en inglés son su contraseña de un solo uso.

Page 18: Security for FreeBSD and kernel debugging

ACL ' sEn FreeBSD es posible incorporar ACL's para manejar el acceso a los archivos 

 → Options UFS_ACL  Esta opción debe estar compilada en el kernel.  Viene incluida en GENERIC

 → Flag en el montajeFlag en el montaje   Se administran mediante un flag (acls) en el montaje /etc/fstab.

 → No puede cambiarse con un remontaje  Si con umount y mount 

 → Se puede usar tunefs para hacerlo de forma automática   tunefs es una herramienta diseñada para cambiar dinámicamente   Paramétros del filesystem

 → Se identifican por un signo + en sus permisos 

drwx­­­­­­  2 robert  robert  512 Dec 27 11:54 privatedrwxrwx­­­+ 2 robert  robert  512 Dec 23 10:57 directorio1drwxrwx­­­+ 2 robert  robert  512 Dec 22 10:20 directorio2drwxrwx­­­+ 2 robert  robert  512 Dec 27 11:57 directorio3drwxr­xr­x  2 robert  robert  512 Nov 10 11:54 public_html

      

Page 19: Security for FreeBSD and kernel debugging

ACL ' sPara comprobar las ACL's de un archivo podemos Para comprobar las ACL's de un archivo podemos utilizar:utilizar:

% getfacl archivo.txt% getfacl archivo.txt    #file:test    #file:test        #owner:1001#owner:1001        #group:1001#group:1001        user::rw­user::rw­        group::r­­group::r­­        other::r­­other::r­­

Para eliminar las ACL's de un archivo utilizamos:Para eliminar las ACL's de un archivo utilizamos:

% setfacl ­k % setfacl ­k 

Para configurar ACL's a un archivo:Para configurar ACL's a un archivo:

% setfacl ­m u:trhodes:rwx,group:web:r­­,o::­­­ test% setfacl ­m u:trhodes:rwx,group:web:r­­,o::­­­ test

Page 20: Security for FreeBSD and kernel debugging

Contabilidad de procesosEs una forma adecuada de auditar el sistema y a sus usuarios.

% touch /var/account/acct

% accton /var/account/acct

% echo 'accounting_enable="YES"' >> /etc/rc.conf

Todos los logs de contabilidad están en un formato ilegible para humanos, pero accesibles para sasa

Page 21: Security for FreeBSD and kernel debugging

Denegaciones de Servicio → Limitar forks del servidor:  provocar que el servidor consuma procesos, descriptores de fichero   y memoria hasta tirar la máquina.

 → Limitación de ataques springboard   (ICMP Reply, broadcast)  El kernel de FreeBSD tiene una opción de compilación llamada    ICMP_BANDLIMICMP_BANDLIM, que limita la efectividad de este tipo de ataques. 

 → Caché rutas del kernel  Los ataques con paquetes falsificados pueden utilizarse también   para sobrecargar la caché de rutas del kernel.

   → sysctl net.inet.ip.rtexpire   El kernel puede reducirla→   → sysctl net.inet.ip.rtminexpire    El kernel no puede reducirla→   → sysctl net.inet.ip.rtmaxcache  El kernel no puede reducirla→  Esto puede provocar:   Que el kernel no reaccione con suficiente rapides→   Que el kernel no sobreviva a un ataque sostenido→

Page 22: Security for FreeBSD and kernel debugging

FreeBSD Security OfficerComo muchos sistemas operativos con calidad de producción FreeBSDFreeBSD publica Security AdvisoriesSecurity Advisories, que se suelen recibir por E­Mail.

Los advisories se envían a las siguientes listas de distribución de FreeBSD:

>> FreeBSD­security­[email protected]   Seg. en FreeBSD→>> FreeBSD­[email protected]   Seg. en general →>> FreeBSD­[email protected]   Notificaciones seguridad (moderada)→

Se firman siempre usando la clave PGP del FreeBSD Security FreeBSD Security OfficerOfficer y se archivan, junto con los patches asociados, en el repositorio FTP CERT. 

ftp://ftp.freebsd.org/pub/FreeBSD/CERT/index.html

 

Page 23: Security for FreeBSD and kernel debugging

=============================================================================FreeBSD-SA-XX:XX.UTIL Security Advisory The FreeBSD ProjectTopic: denial of service → El problemaCategory: core → Parte afectada: Core / Contrib / PortsModule: sys → Ubicación del componente Announced: 2009-01-23 → Fecha de anuncioCredits: Person@EMAIL-ADDRESS → Créditos de quien descubrioAffects: All releases of FreeBSD → Versiones FreeBSD afectadas FreeBSD 4-STABLE prior to the correction dateCorrected: 2009-02-23 16:42:59 UTC (RELENG_4, 4.9-PRERELEASE) 2009-02-23 20:08:42 UTC (RELENG_5_1, 5.1-RELEASE-p6) 2009-02-23 16:54:39 UTC (RELENG_4_3, 4.3-RELEASE-p39)FreeBSD only: NO → Afecta solo a FreeBSD?For general information regarding FreeBSD Security Advisories,including descriptions of the fields above, security branches, and thefollowing sections, please visithttp://www.FreeBSD.org/security/.I. Background → Sobre app. Afectada (por que existe, qué es)II. Problem Description → Descripcion del problemaIII. Impact → Tipo de impactoIV. Workaround → Solución temporalV. Solution → Solución para parchear VI. Correction details → Despliega la rama del CVSVII. References → Fuentes adicionales

Security Advisory

Page 24: Security for FreeBSD and kernel debugging

PortauditUna forma de mitigar las vulnerabilidades de las aplicaciones y advertir sobre los problemas de seguridad a medida que se detectan.

# cd /usr/ports/security/portaudit && make install clean# cd /usr/ports/security/portaudit && make install clean

# portaudit ­F # portaudit ­F   Actualiza la database /var/db/portaudit→ Actualiza la database /var/db/portaudit→

# portaudit ­a # portaudit ­a   Comprobamos...→ Comprobamos...→

Affected package: cups­base­1.1.22.0_1Affected package: cups­base­1.1.22.0_1Type of problem: cups­base ­­ HPGL buffer overflow vulnerability.Type of problem: cups­base ­­ HPGL buffer overflow vulnerability.Reference: <http://www.FreeBSD.org/ports/portaudit/40a3bca2­6809­11d9­a9e7­Reference: <http://www.FreeBSD.org/ports/portaudit/40a3bca2­6809­11d9­a9e7­0001020eed82.html>0001020eed82.html>

1 problem(s) in your installed packages found.1 problem(s) in your installed packages found.

You are advised to update or deinstall the You are advised to update or deinstall the affected package(s) immediately.affected package(s) immediately.

WTF? A small problem... WTF? A small problem... 

Portaudit + Portupgrade Portaudit + Portupgrade 

Page 25: Security for FreeBSD and kernel debugging

CHROOTFreeBSD Dispone de CHROOT desde hace muuuucho tiempo. Este permite restringir el directorio raiz de un conjunto de procesos, creando un entorno seguro y separado del resto del sistema.

Los procesos creados dentro de un entorno chroot no pueden acceder a ficheros o recursos ubicados fuera del mismo. Por esta razón, si un atacante logra comprometer un servicio que se ejecuta en un entorno chroot no debería automáticamente poder acceder al resto del sistema. 

Proceso

Chroot

Page 26: Security for FreeBSD and kernel debugging

JAILSLas jaulas extienden a chroot virtualizando no solamente el acceso al sistema de ficheros, sino al conjunto de usuarios, al subsistema de red del kernel de FreeBSD y unas cuantas cosas más.

LAS JAULAS POSEEN:LAS JAULAS POSEEN: “Subarbol” de directorios→ Un hostname→ Una dirección IP (generalmente un alias de NIC)→ La ruta del ejecutable dentro del JAIL→ Puede tener sus propios usuarios (inclusive su root)→

Page 27: Security for FreeBSD and kernel debugging

Jails (creando una)# setenv D /aquí/está/la/jaula# mkdir ­p $D # cd /usr/src# make world DESTDIR=$D (1)# cd etc/ # make distribution DESTDIR=$D (2)# mount_devfs devfs $D/dev 

(1)   Creamos el entorno para la jaula (bin, lib)→(2)   Instala todo los ficheros de config necesairos→

Page 28: Security for FreeBSD and kernel debugging

Iniciando un JAILjail_enable="YES"jail_enable="YES"

#Lista de nombres de jaulas separados por espacios#Lista de nombres de jaulas separados por espaciosjail_list="www" jail_list="www" 

jail_www_rootdir="/usr/jail/www"     # directorio raiz de la jaulajail_www_rootdir="/usr/jail/www"     # directorio raiz de la jaulajail_www_hostname="www.example.org"  # nombre de máquina de la jaulajail_www_hostname="www.example.org"  # nombre de máquina de la jaulajail_www_ip="192.168.0.10"           # dirección IP de la jaulajail_www_ip="192.168.0.10"           # dirección IP de la jaulajail_www_devfs_enable="YES"          # montar devfs en la jaulajail_www_devfs_enable="YES"          # montar devfs en la jaulajail_www_devfs_ruleset="www_ruleset" # reglas a aplicar a devfsjail_www_devfs_ruleset="www_ruleset" # reglas a aplicar a devfs

Para Iniciar:Para Iniciar:

# /etc/rc.d/jail start www

Para Detener:Para Detener:

# /etc/rc.d/jail stop www

   jls / jexecjls / jexec

Page 29: Security for FreeBSD and kernel debugging

Kernel debugging

Page 30: Security for FreeBSD and kernel debugging

DebuggingBajo ciertas circunstancias puede suceder que nuestro Bajo ciertas circunstancias puede suceder que nuestro querido kernel entre en Panic!! o se produce un crash. querido kernel entre en Panic!! o se produce un crash. OMFG!!  WTF????OMFG!!  WTF????  

 Necesitamos suficiente SWAP→ Necesitamos suficiente SWAP→

 No se soportan dumps que no sean a SWAP→ No se soportan dumps que no sean a SWAP→

 Configurar DUMPDEV en rc.conf utilizado Device de /etc/fstab→ Configurar DUMPDEV en rc.conf utilizado Device de /etc/fstab→

 → → Kernel configurado con ­g. Kernel configurado con ­g. Para depura vithe!Para depura vithe!

 dumpon /dev/ad4s1b   Mi SWAP→ → dumpon /dev/ad4s1b   Mi SWAP→ →

Page 31: Security for FreeBSD and kernel debugging

GDBGDB es el GDB es el GNU DebuggerGNU Debugger, es un depurador escrito por la , es un depurador escrito por la FSF, como parte del proyecto GNU. Tiene la posibiliad FSF, como parte del proyecto GNU. Tiene la posibiliad de depurar codigo objeto ende depurar codigo objeto en C, C,  C++ C++ y otros.y otros.

 Posibilidad de establecer breakpoints o puntos de ruptura→ Posibilidad de establecer breakpoints o puntos de ruptura→

 → → Detener ejecución en rupturas por condiciones (watchpoints)Detener ejecución en rupturas por condiciones (watchpoints)

 → → Detener ejecución al recibir señal externa (catchpoints)Detener ejecución al recibir señal externa (catchpoints)

 Puede obtener información de los coredumps→ Puede obtener información de los coredumps→

Page 32: Security for FreeBSD and kernel debugging

KGDBEl término KGDB se refiere a GDB corriendo en:El término KGDB se refiere a GDB corriendo en:KERNEL DEBUGGING MODEKERNEL DEBUGGING MODE

% gdb ­k 

% kgdb   Enlazandolo←

Una vez que el kernel fue compilado hacemos una copia del mismo, y luego hacemos strip ­g para que la tabla de simbolos no aumente demasiado ya que el kernel se carga en memoria y no puede intercambiarse a disco luego.

Page 33: Security for FreeBSD and kernel debugging

Debug | moreLa receta!:La receta!:   → → iniciamos monousuario con otro kerneliniciamos monousuario con otro kernel

 → → savecore ­N /kernel.panicked /var/crashsavecore ­N /kernel.panicked /var/crash

Esto hace que savecore Esto hace que savecore use otro kerneluse otro kernel para la  para la extracción de los nombres de simbolos.extracción de los nombres de simbolos. Vamos a /sys/compile/WHATEVER→ Vamos a /sys/compile/WHATEVER→

Y en KGDB:Y en KGDB:

 symbol­file kernel.debug→ symbol­file kernel.debug→

 → → exec­file /var/crash/kernel.0exec­file /var/crash/kernel.0

 → → core­file /var/crash/vmcore.0core­file /var/crash/vmcore.0

Page 34: Security for FreeBSD and kernel debugging

Depurando con DDDDDD es un frontend de GDB, es un depurador que corre sobre X y esta bueno!

Agreguamos la opción ­k a la línea de comando del ddd que usaría normalmente. Por ejemplo;

# ddd ­k /var/crash/kernel.0 /var/crash/vmcore.0

De esta manera usted debería poder analizar el crash dump usando la interfaz gráfica del ddd. 

Page 35: Security for FreeBSD and kernel debugging

Analisís POST-MORTEMQue pasa si el kernel hace un dump en la memoria y este no estaba compilado usando config ­g?.Do Not Panic!!!Do Not Panic!!!

 /usr/src/sys/arq/conf → /usr/src/sys/arq/conf →

 makeoptions DEBUG=­g    #Build kernel with gdb symbols→ makeoptions DEBUG=­g    #Build kernel with gdb symbols→

 Recompilamos el kernel→ Recompilamos el kernel→

 Verificamos el tamaño del kernel, que sea igual al anterior.→ Verificamos el tamaño del kernel, que sea igual al anterior.→

En computacion y sistemas operativos un trap es un tipo de En computacion y sistemas operativos un trap es un tipo de interrupcion sincronizada causada por una condicion interrupcion sincronizada causada por una condicion exponencial (ejemplo division por cero o acceso a memoria exponencial (ejemplo division por cero o acceso a memoria invalido).invalido).

Page 36: Security for FreeBSD and kernel debugging

Depuramos?# cd /sys/compile/KERNEL# kgdb kernel /var/crash/vmcore.1

1: Reading symbol data from /usr/src/sys/compile/URIAH/kernel. done.2: IdlePTD 1f30003: panic: because you said to!

Línea 3:Línea 3:EEste es un dump, a partir del comentario del panic ``because you said to!'', y un listado de la pila bastante largo; la razón incial para depurar fue un trap de falta de página.

 

Page 37: Security for FreeBSD and kernel debugging

Depuramos?# cd /sys/compile/KERNEL# kgdb kernel /var/crash/vmcore.1

1: Reading symbol data from /usr/src/sys/compile/URIAH/kernel. done.2: IdlePTD 1f30003: panic: because you said to!7:  current pcb at 1e3f708:  Reading in symbols for ../../i386/i386/machdep.c...done.9: (kgdb) where10: #0 boot (arghowto=256) (../../i386/i386/machdep.c line 767)11: #1 0xf0115159 in panic ()12: #2 0xf01955bd in diediedie () (../../i386/i386/machdep.c line 698)13: #3 0xf010185e in db_fncall ()14: #4 0xf0101586 in db_command (­266509132, ­266509516, ­267381073)15: #5 0xf0101711 in db_command_loop ()

Línea 3:Línea 3:EEste es un dump, a partir del comentario del panic ``because you said to!'', y un listado de la pila bastante largo; la razón incial para depurar fue un trap de falta de página.

20:#10 0xf019cb2f in trap (…)

Línea 20:Línea 20:Esta es la ubicación de la función trap() en el listado de la stack.

 

7:  current pcb at 1e3f708:  Reading in symbols for ../../i386/i386/machdep.c...done.9: (kgdb) where

10: #0 boot (arghowto=256) (../../i386/i386/machdep.c line 767)11: #1 0xf0115159 in panic ()12: #2 0xf01955bd in diediedie () (../i386/i386/machdep.c line 698)13: #3 0xf010185e in db_fncall ()14: #4 0xf0101586 in db_command (­266509132, ­266509516, ­267381073)15: #5 0xf0101711 in db_command_loop ()

20:#10 0xf019cb2f in trap (…)

Línea 20:Línea 20:Esta es la ubicación de la función trap() en el listado de la stack.

 

Page 38: Security for FreeBSD and kernel debugging

34:34:  ss = ­266427884}) (../../i386/i386/trap.c line 283) ss = ­266427884}) (../../i386/i386/trap.c line 283)35:35:  283 (void) trap_pfault(&frame, FALSE); 283 (void) trap_pfault(&frame, FALSE);36:36:  (kgdb) frame frame­>tf_ebp frame­>tf_eip (kgdb) frame frame­>tf_ebp frame­>tf_eip37:37:  Reading in symbols for  Reading in symbols for ../../i386/isa/pcvt/pcvt_drv.c...done.../../i386/isa/pcvt/pcvt_drv.c...done.

Línea 36:Línea 36:Se fuerza el uso de un nuevo marco de pila, que debe apuntar a la localización correcta (o se supone).Posibilidad de que el puntero tp sea erroneo, o el acceso este fuera de sus límites.

Depuramos?

Page 39: Security for FreeBSD and kernel debugging

52:  (kgdb) print tp53:  Reading in symbols for ../../i386/i386/cons.c...done.54:  $1 = (struct tty *) 0x1bae55:  (kgdb) print tp­>t_line56:  $2 = 1767990816

Línea 52:Línea 52:El puntero se ve sospechozo pero contiene una dirección válidaEn la línea 56 vemos que el puntero aputna a basura, $2 debe ser un entero pequeño, lo que nos muestra que el puntero esta fuera de sus límites!.

Depuramos?

Page 40: Security for FreeBSD and kernel debugging

Algunos links útilesCodigoUnix  → http://www.codigounix.com.ar/ 

FreeBSD → http://www.freebsd.org/es/

OpenBSDeros → http://www.openbsderos.org/

Page 41: Security for FreeBSD and kernel debugging

$: WHOAMI$: WHOAMI

/*** Name  : Facundo M. de la Cruz   _tty0 @ Freenode→* E­Mail: fmdlc <at> code4life.com.ar* Blog  : http://www.codigounix.com.ar/** 0x41) Consultor en IT && Seg. Informática * 0x42) Coordinador de SanLuiX**/

 

Preguntas?