Ptrace

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 “traza 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 de PTrace

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 de PTrace

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.

Sistemas Operativos que Soportan PTrace

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 –attach ” 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 ‘segundo arranque’ y reemplazar los archivos del sistema.

Categorías: Depuración
{:.notice–success}

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.

Relacionado

¿Qué significa A-GPS o GPS asistido?

El GPS asistido (A-GPS) es un sistema que permite a los receptores del sistema de posicionamiento global (GPS) obtener información de los recursos de la red para ayudar en la ubicación de los satélites. Un sistema A-GPS es especialmente útil cuando el receptor está en un lugar donde es difícil que penetren las señales del satélite. El GPS se construyó originalmente únicamente con fines militares, donde ¡SEGUIR LEYENDO!

¿Qué significa A16Z?

A16Z es un numerónimo que representa a la firma de capital de riesgo Andreessen Horowitz. El numerónimo es la primera y última letra de la empresa con el número de caracteres en el medio. Los numerónimos son algo así como una broma interna para los desarrolladores, ya que la mayoría de los no expertos en tecnología no estarían al tanto del concepto. Otros numerónimos comunes incluyen ¡SEGUIR LEYENDO!

¿Qué significa mensajería A2P?

La mensajería A2P es un término para la mensajería SMS que se envía desde una aplicación de software a un dispositivo de usuario. En otras palabras, las empresas suelen utilizar la mensajería A2P para enviar mensajes desde las bases de datos centrales para los procesos de contacto o relación con los clientes a números de teléfono individuales adjuntos a los teléfonos inteligentes de los usuarios. La ¡SEGUIR LEYENDO!

¿Qué significa AAA? Autentificación, autorización y contabilidad

La autenticación, autorización y contabilidad (AAA) es un sistema para rastrear las actividades de los usuarios en una red basada en IP y controlar su acceso a los recursos de la red. AAA a menudo se implementa como un servidor dedicado. Es un marco utilizado para controlar y rastrear el acceso dentro de una red informática. Este término también se conoce como el Protocolo AAA y ¡SEGUIR LEYENDO!

¿Qué significa AaaS? Análisis como servicio

Analytics as a service (AaaS) se refiere a la provisión de software analítico y operaciones a través de tecnologías proporcionadas por la web. Estos tipos de soluciones ofrecen a las empresas una alternativa al desarrollo de configuraciones de hardware internas solo para realizar análisis comerciales. Para poner el análisis como servicio en contexto, este tipo de servicio es parte de una gama mucho más amplia de ¡SEGUIR LEYENDO!

¿Qué significa la contabilidad como servicio (AaaS)?

Contabilidad como servicio (AaaS) es un término comercial y tecnológico que se utiliza para referirse a métodos innovadores de próxima generación para proporcionar servicios de contabilidad a un cliente. Los aspectos de la contabilidad como servicio incluyen la idea de usar servicios en la nube para brindar servicios de contabilidad y la idea de que la contabilidad se convierte en un diseño de servicio modular, en ¡SEGUIR LEYENDO!

¿Qué significa AAC? Codificación de audio avanzada

La codificación de audio avanzada (AAC) es una técnica utilizada para comprimir y codificar archivos de audio digital de esquema. La tecnología AAC se puede utilizar para codificar archivos de audio a velocidades de bits medias a altas. AAC está diseñado para ser el sucesor lógico de MP3 (ISO/MPEG Audio Layer -3) y pretende ofrecer una mejor calidad de sonido que su predecesor con la misma ¡SEGUIR LEYENDO!

¿Qué significa AAF? Formato de autoría avanzado

El formato de creación avanzada (AAF) es un formato de archivo multiplataforma que permite el intercambio de datos entre herramientas multimedia. El formato fue desarrollado por Microsoft en 1998 y fue diseñado para ser un formato de archivo común que todas las aplicaciones de creación multimedia pueden usar para crear presentaciones multimedia. AAF tiene como objetivo brindar a los diseñadores la opción de utilizar una gran ¡SEGUIR LEYENDO!

¿Qué es Aakash?

La tableta Aakash es una computadora de bajo costo con un diseño ARM que presenta una construcción pequeña, puertos USB y capacidad de video, vendida principalmente en India y China. Este dispositivo utiliza el sistema operativo Android pero tiene acceso al mercado de aplicaciones más grande, no al mercado de Android. El Aakash fue diseñado por DataWind para adaptarse al estudiante global. La empresa ha iniciado ¡SEGUIR LEYENDO!

¿Qué significa AARP? Protocolo de resolución de direcciones de AppleTalk

El Protocolo de resolución de direcciones AppleTalk (AARP) asigna la dirección del nodo AppleTalk utilizada por el protocolo de entrega de datagramas a las direcciones de la capa de enlace de datos subyacente. AppleTalk es un conjunto de protocolos con una arquitectura abierta de igual a igual que se ejecuta en una variedad de medios de transmisión. AARP resuelve las direcciones de AppleTalk en la capa ¡SEGUIR LEYENDO!

¿Qué significa ABAC? Control de acceso basado en atributos

El control de acceso basado en atributos (ABAC) es un enfoque diferente al control de acceso en el que los derechos de acceso se otorgan mediante el uso de políticas compuestas por atributos que trabajan juntos. ABAC utiliza atributos como bloques de construcción para definir reglas de control de acceso y solicitudes de acceso. Esto se hace a través de un lenguaje estructurado llamado Lenguaje de ¡SEGUIR LEYENDO!