Ptrace

5 minuto(s) de lectura

Ptrace es una llamada al sistema que se encuentra en Unix y en varios sistemas operativos similares a Unix . Al usar ptrace (el nombre es una abreviatura de 鈥渢raza de proceso鈥) un proceso puede controlar a otro, permitiendo que el controlador inspeccione y manipule el estado interno de su objetivo. Los depuradores y otras herramientas de an谩lisis de c贸digo utilizan ptrace , principalmente como ayuda para el desarrollo de software.

Usos

Ptrace es utilizado por los depuradores (como gdb y dbx), mediante herramientas de rastreo como strace y ltrace, y mediante herramientas de cobertura de c贸digo. Ptrace tambi茅n es utilizado por programas especializados para parchear programas en ejecuci贸n, para evitar errores no corregidos o para superar caracter铆sticas de seguridad. Se puede utilizar adem谩s como un sandbox y como un simulador de entorno de tiempo de ejecuci贸n (como emular el acceso de root para software no root).

Al conectarse a otro proceso utilizando la llamada ptrace, una herramienta tiene un control extenso sobre el funcionamiento de su objetivo. Esto incluye la manipulaci贸n de sus descriptores de archivo , memoria y registros . Puede avanzar un paso por el c贸digo del objetivo, puede observar e interceptar llamadas del sistema y sus resultados, y puede manipular los manejadores de se帽al del objetivo y recibir y enviar se帽ales en su nombre. La capacidad de escribir en la memoria del objetivo permite no solo cambiar su almac茅n de datos, sino tambi茅n el propio segmento de c贸digo de la aplicaci贸n , lo que permite que el controlador instale puntos de interrupci贸n y aplique el c贸digo de ejecuci贸n del objetivo.

Como la capacidad de inspeccionar y alterar otro proceso es muy poderosa, ptrace solo puede conectarse a procesos a los que el propietario puede enviar se帽ales (generalmente solo sus propios procesos); la cuenta de superusuario puede rastrear casi cualquier proceso (excepto init en los n煤cleos anteriores a 2.6.26). En los sistemas Linux que cuentan con seguridad basada en capacidades , la capacidad de trazar est谩 a煤n m谩s limitada por la capacidad CAP_SYS_PTRACE o por el m贸dulo de seguridad YAMA Linux. En FreeBSD , est谩 limitado por las c谩rceles de FreeBSD y las pol铆ticas de control de acceso obligatorio.

Limitaciones

Las comunicaciones entre el controlador y el objetivo se realizan utilizando llamadas repetidas de ptrace, pasando un peque帽o bloque de memoria de tama帽o fijo entre los dos (se necesitan dos cambios de contexto por llamada); Esto es extremadamente ineficiente cuando se accede a grandes cantidades de memoria del objetivo, ya que esto solo se puede hacer en bloques de tama帽o de palabra (con una llamada de seguimiento para cada palabra).

Por esta raz贸n, la octava edici贸n de Unix introdujo procfs , que permite a los procesos permitidos el acceso directo a la memoria de otro proceso, seguido de 4.4BSD, y Solaris, BSD y AIX heredaron el uso de / proc para el soporte del depurador. y principalmente copiado por Linux. Algunos, como Solaris, han eliminado ptrace como una llamada al sistema, reteni茅ndola como una llamada a la biblioteca que reinterpreta las llamadas a ptrace en t茅rminos de los procesos de la plataforma. Dichos sistemas utilizan ioctls en el descriptor de archivo del archivo abierto / proc para emitir comandos al proceso controlado. FreeBSD , por otro lado, extendi贸 el sitio para eliminar los problemas mencionados y declar贸 que los procedimientos eran obsoletos debido a sus problemas de dise帽o inherentes.

Ptrace solo proporciona la interfaz m谩s b谩sica necesaria para admitir depuradores y herramientas similares. Los programas que lo utilizan deben tener un conocimiento profundo de los detalles del sistema operativo y la arquitectura, incluido el dise帽o de la pila, la interfaz binaria de la aplicaci贸n , el mecanismo de llamada del sistema , el cambio de nombre , el formato de los datos de depuraci贸n y son responsables de comprender y desarmar el c贸digo de la m谩quina . Adem谩s, los programas que inyectan c贸digo ejecutable en el proceso de destino o (como gdb) permiten al usuario ingresar comandos que se ejecutan en el contexto del destino deben generar y cargar ese c贸digo por s铆 mismos, generalmente sin la ayuda del cargador de programas .

Soporte

Unix y BSD

Ptrace se implement贸 por primera vez en la Versi贸n 6 de Unix, y estuvo presente en las ramas SVr4 y 4.3BSD de Unix. Ptrace est谩 disponible como una llamada al sistema en IRIX, IBM AIX, NetBSD, FreeBSD, OpenBSD, y Linux. Ptrace se implementa como una llamada a la biblioteca en Solaris, construida en el sistema de archivos procfs del kernel de Solaris; Sun se帽ala que ptrace en Solaris est谩 destinado a la compatibilidad, y recomienda que las nuevas implementaciones usen la interfaz m谩s rica que proporciona el proceso. UnixWare tambi茅n presenta un seguimiento limitado pero, al igual que Sun, SCO recomienda que los implementadores usen las funciones de procfs subyacentes. HP-UX admiti贸 ptrace hasta la versi贸n 11i v3 (se desaprob贸 a favor de ttrace , una llamada similar espec铆fica del sistema operativo, en 11i v1).

MacOS

De Apple Mac OS X tambi茅n implementa PTRACE como una llamada al sistema. La versi贸n de Apple agrega una opci贸n especial PT_DENY_ATTACH: si un proceso invoca esta opci贸n en s铆 mismo, los intentos posteriores de seguir el proceso fallar谩n. Apple usa esta funci贸n para limitar el uso de depuradores en programas que manipulan contenido DRM , incluido iTunes. PT_DENY_ATTACH en tambi茅n deshabilita la capacidad de DTrace para monitorear el proceso. Los depuradores en OS X generalmente usan una combinaci贸n de ptrace y Mach VM y API de hilo. Ptrace (nuevamente con PT_DENY_ATTACH) est谩 disponible para desarrolladores para el iPhone de Apple.

Linux

Linux tambi茅n brinda a los procesos la capacidad de evitar que otros procesos se unan a ellos. Los procesos pueden llamar a prctl syscall y borrar su indicador PR_SET_DUMPABLE ; en n煤cleos posteriores, esto evita que los procesos que no son de ra铆z tracen el proceso de llamada; El agente de autenticaci贸n OpenSSH utiliza este mecanismo para evitar el secuestro de sesi贸n ssh a trav茅s de ptrace. Las versiones posteriores de Ubuntu se entregan con un kernel de Linux configurado para evitar que ptrace se agregue a procesos que no sean el padre del proceso rastreado; esto permite que gdb y strace contin煤en funcionando cuando se ejecuta un proceso de destino, pero evita que se unan a un proceso de ejecuci贸n no relacionado. El control de esta funci贸n se realiza a trav茅s de la configuraci贸n / proc / sys / kernel / yama / ptrace_scope. En los sistemas donde esta funci贸n est谩 habilitada, los comandos como 鈥 gdb 鈥揳ttach 鈥 y 鈥 strace -p 鈥 no funcionar谩n.

Android

Para algunos tel茅fonos Android con un cargador de arranque bloqueado, ptrace se usa para obtener control sobre el proceso de inicio para habilitar un 鈥榮egundo arranque鈥 y reemplazar los archivos del sistema.

Categor铆as: Depuraci贸n

INF.: Esta obra contiene una traducci贸n total derivada de Ptrace de la Wikipedia en ingl茅s, versi贸n del 1 de Noviembre de 2019, publicada por sus editores bajo la Licencia Libre de GNU (es) y licencia CC BY 3.0.

Actualizado: