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
- 218