Herramientas de debugging y el lado oscuro que no conocía

@donkeysharp

Sergio Guillen Mantilla

@donkeysharp

lsof

  • La implementación de Libc en GNU/Linux es Glibc
  • Leyendo el manual de Glibc pude notar el uso contínuo de la frase "file descriptor"
  • Esta junto a otra información del sistema se puede encontrar dentro del directorio /proc/<PID>

Libc en sistemas Unix

strace

  • Un sistema  Unix e.g. Linux sigue casi toda la especificación POSIX
  • Todo proceso se comunica con el sistema operativo a través de syscalls
  • Dependiendo del contexto se puede invocar un syscall desde assembly, C y cualquier otro lenguaje de programación directa o indirectamente

Un poco sobre POSIX

  • Strace es una herramienta de debugging que se adiere a un proceso nuevo o en ejecución y nos muestra todas las syscalls que se están realizando

Sobre strace

$ strace ls

$ strace -p <pid>

  • Similar a strace pero muestra las funciones que llaman de alguna librería y no del sistema operativo como tal

Sobre ltrace

$ ltrace ls

$ ltrace -p <pid>

gdb

  • Debugger portable para sistemas Unix-like
  • Funciona para diferentes lenguajes de programacion e.g. C, C++, Go, etc.
  • Es posible iniciar un proceso o adherirse a uno en ejecución

GNU Debugger

  • Parte importante de los internals de GDB es el uso de ptrace
  • ptrace es una llamada al sistema en la que un proceso puede controlar la ejecución de otro proceso
  • Es posible controlar cosas como:
    • Registros
    • Memoria

ptrace

long ptrace(enum __ptrace_request request, pid_t pid,
                   void *addr, void *data);

ptrace

  • Algunas opciones
    • PTRACE_ATTACH
    • PTRACE_DETACH
    • PTRACE_GETREGS
    • PTRACE_SETREGS
    • PTRACE_POKETEXT
https://0x00sec.org/t/linux-infecting-running-processes/1097

Demo

Q&A

Debuggers y el lado oscuro

By Sergio Guillen

Debuggers y el lado oscuro

  • 225