Strace

Hoy me encontre con ‘strace’ en parte de los ejercicios para CKS de killercoda

Me parece que en varios simuladores me he matado con analisis manuales de logs cuando existia esta herramienta.

Felizmente su –help es util (no como tu openssl), ligeramente intimidante pero nada qu e no se pueda entender en 5 minutos.

Y para variar no tiene ejemplos.

>>> Tres doritos despues

Bien debo buscar un tutorial para esta vaina, porque no entiendo los outputs.

>>>>>> 6 doritos despues

Ya entendi los outputs, cuando se ejecuta por ejemplo

strace cat /dev/null

Se muestran todas las acciones y llamadas de sistema (en linux) que hace el proceso.

Eso en toda una granularidad casi como decompilar el programa o al menos el historico de ejecucion(creeria yo)

Por eso no entendia nada.

¿Y como sirve?

Bien vamos a suponer que deseamos analizar un programa y ver que hace, o al menos que llamadas de sistema hace, hay algunas que son peligrosas, o algunas que quiza queremos limitar. O alimentar a un GPT para que nos resuma.

En fin, en el caso del CKS que esto sirve para analizar que hacen los pods sobre el host.

Y esto se resume como

strace -p <pid> -f -cw

donde -f: sigue procesos hijos

-cw: Cuenta y hace una estadistica de las llamadas.

Entonces genera una tabla como por ejemplo:

strace: Process 1836 attached with 8 threads ^Cstrace: Process 1965 detached strace: Process 9958 detached strace: Process 2074 detached strace: Process 2052 detached strace: Process 1982 detached strace: Process 1928 detached strace: Process 1836 detached strace: Process 1929 detached % time seconds usecs/call calls errors syscall —— ———– ———– ——— ——— —————- 69.87 288.996506 17758 16274 9340 futex 24.38 100.823928 2136 47193 1 epoll_pwait 5.51 22.775621 393 57836 nanosleep 0.13 0.554126 125 4429 write 0.07 0.290981 27 10748 5143 read 0.03 0.109287 236 462 sched_yield 0.01 0.025804 25 1010 getrandom 0.00 0.016182 19 838 setsockopt 0.00 0.009463 40 236 118 accept4 0.00 0.005571 21 254 10 epoll_ctl 0.00 0.004380 33 132 close 0.00 0.002720 22 122 getsockname 0.00 0.001901 52 36 getpid 0.00 0.001378 38 36 tgkill 0.00 0.000645 161 4 4 connect 0.00 0.000622 17 36 1 rt_sigreturn 0.00 0.000562 562 1 1 restart_syscall 0.00 0.000437 10 40 fcntl 0.00 0.000329 32 10 openat 0.00 0.000279 13 20 getsockopt 0.00 0.000247 61 4 socket 0.00 0.000205 20 10 uname 0.00 0.000153 15 10 fstat 0.00 0.000040 10 4 getpeername —— ———– ———– ——— ——— —————- 100.00 413.621368 2959 139745 14618 total

Que se ve como un bloque horrible de texto, (y lo es) pero nos cuenta la cantidad de (futex) durante un periodo de tiempo.

Y luego podriamos generar un seccomp o apparmor para bloquear las llamadas.