Home

manual de usuario

image

Contents

1. SHM block descriptor 7 struct shm_record volatile s32 lock shared read write spinlock T volatile u32 length buffer length set by tracer write count write cycle counter y write_off current write head offset wtf read_count read cycle counter 7 read_off current read head offset v volatile u8 data 0 gtrace record cyclic buffer X __attribute__ packed Figura 16 Estructura del buffer circular La memoria compartida no ofrece mecanismos de sincronizaci n por si misma Se puede dar el caso de que un proceso o thread intente escribir en el buffer de forma simult nea a otro sin esperar a que este haya completado la escritura Esto provocar a perdida de datos y una corrupci n en la estructura de la memoria compartida 1 2 2 Sincronizaci n Para sincronizar los acceso de lectura y escritura se utiliza una variable especial llamada lock de la cabecera del buffer que funciona a modo de sem foro con operaciones CAS define atomic_cmpxchg __sync_bool_compare_and_swap define atomic_add __sync_add_and_fetch define atomic_sub __sync_sub_and_fetch Zdefine atomic inc v sync add and fetch v 1 Zdefine atomic dec v Sync sub and fetch v 1 Zdefine atomic or Sync or and fetch Figura 17 Primitivas at micas disponibles en GCC En cada acceso a la memoria se intenta adquirir el bloqueo excepto si ya esta adquirido por otra instancia de la librer a en cuyo caso se devuelve
2. Creating Automatic Configuration Scripts Free Software Foundation FSF 24 Itrace 1 library call tracer Linux manual page Libreria para analisis dinamico de programas 35 de 42 TFC Plataforma GNU Linux Glosario API Del ingl s Application Programming Interface Serie de rutinas que ofrece cierta biblioteca o sistema operativo para ser utilizado por otro software como una capa de abstracci n Buffer Espacio de memoria donde se almacenan datos de forma temporal Compilar Traducir un programa escrito en lenguaje de programaci n a otro lenguaje normalmente c digo objeto Enlazar Es el proceso realizado por un enlazador o linker y consiste en leer el c digo objeto creado por el compilador y las librer as est ticas y crear un nico archivo ejecutable Fork Creaci n de una copia de si mismo por parte de un programa en ejecuci n Kernel Es el nucleo de los sistemas operativos Provee los servicios m s b sicos del sistema y se encarga de gestionar los recursos del ordenador Tambi n ofrece una serie de abstracciones de hardware para que los programas de usuario no tengan que acceder directamente al hardware Handle Puntero abstracto y opaco que representa objetos o reas de memoria controlados por otros sistemas Heap overflow Desbordamiento de la memoria intermedia IPC Del ingl s Inter process Communication La comunicaci n entre procesos es una funci n b sica de los sistem
3. CO g ZO 30 31 32 20 Desarrollo c digo lorera S 21 Desarrollo c digo utilidad 22 Depuraci n y juego de pruebas 29 Empaquetado Producto 0 2 An lisis y conclusiones 25 Evaluaci nderendimiento 26 Valoraci n general S 27 Documentaci n 000000000 26 Redacci nMemoia S 29 Memoria y Producto 80 Presentaci n o 81 Entrevista vitua III 92 Findel proyecto La representaci n gr fica de las tareas de la tabla anterior as como sus relaciones y porcentaje de progreso tras presentar el plan de trabajo PAC 1 puede verse en el siguiente diagrama febrero 2011 marzo 2011 abril 2011 mayo 2011 junio 2011 ju WK 8 WK9 WK 10 WK 11 WK 12 WK 13 WK 14 WK15 WK 16 WK 17 WK 18 WK 19 WK 20 WK21 WK22 WK 23 WK24 WK 25 WK 26 WK 27 TFC Inicio del proyecto 3 Planificaci n Lectura informaci n Plan de trabajo Estudid tecnolog as tracing Recopilkci n de informaci n Compprativa herramientas existentes Arfalisis de interposici n din mica en Linux Descripci n de funcionamiento Desarrollo prueba de concepto Test de compatiblidad entre Unices gt PAC2 Dise o y especificaci n Revisi n de requerimientos Arquitectura interna e IPC Definici n estructuras y mensajes Implementaci n Empaquetado Producto An lisis y conc
4. Esto es especialmente problem tico si la aplicaci n es multi threading e Si se configura un gestor de se al en la aplicaci n y se realiza llamadas a funciones interpuestas en el cuerpo de la funci n que gestiona la se al Para prevenir estos problemas se ha optado por proteger el rea critica de la funci n gtr_write con una variable global defer_signals e interceptar todas las se ales problem ticas figura 19 static u32 gtr_write struct gtr_header gth defer_signal shm write wait GTH SIZE len shm_write gth GTH SIZE if Clen shm write gth gtr buffer len write seq shm post defer signal if Cldefer signal amp amp sig pending 1 Sig sig pending sig pending 0 raise sig j return write seq Figura 19 Fragmento de la funci n gtr write Se denomina secci n cr tica a la porci n de c digo de un programa en la cual se accede a un recurso compartido estruc tura de datos o dispositivo que no debe ser accedido por m s de un hilo en ejecuci n Librer a para an lisis din mico de programas 30 de 42 TFC Plataforma GNU Linux 3 Implementacion del profiler El c digo del profiler contiene la funcionalidad m nima para hacer uso de la librer a En total se han definido 22 funciones interpuestas usadas en la mayor a de comandos de Linux tales como fork scanf o strcmp El programa gtrace es el frontend del profiler Puede funcionar en segundo plano y as analizar
5. de interposici n con rainbow so 3 2 Compatibilidad Cada plataforma implementa sus propios cargadores o dynamic linkers de forma diferente No todos los sistemas operativos tipo Unix comparten el mecanismo LD PRELOAD Linux Solaris y la familia BSD si lo hacen Pero en el mundo Mac las cosas son diferentes 3 2 1 Mac OSX El sistema Mac OS X usa GCC pero no utiliza el linker de GNU En su lugar tenemos el cargador dyld y las librer as compartidas Mach O dylib Existe un equivalente a LD PRELOAD que es la variable de entorno DYLD PRELOAD Pero su funcionamiento es diferentes pues en Mac OS X la mayor a de programas est n compilados con dos niveles de namespaces Sin entrar en detalles la opci n DYLD PRELOAD se debe utilizar con DYLD FORCE FLAT NAMESPACE pero en la pr ctica esto produce colisiones en los nombres de los objetos y las aplicaciones dejan de funcionar oin embargo desde la versi n 10 4 de Mac OS X la interposici n es posible gracias a unos cambios introducidos en el sistema Primero la librer a de interposici n debe contener una secci n llamada interpose en el segmento DATA con una lista de funciones interpuestas Despu s se fija la variable DYLD INSERT LIBRARIES y se obtiene el mismo efecto que con LD_PRELOAD En el Anexo 1 est listado el fichero de cabecera dyld interposing h que se utiliza para interponer funciones en Mac OS Librer a para an lisis din mico de programas 23 de 42 TFC Platafo
6. din mico de programas 41 de 42 TFC Plataforma GNU Linux Anexo 3 Ayuda del comando gtrace y fichero README Trace Library calls of a given program Usage gtrace options command args Example gtrace ls al Options l path Interposer library path Default is usr local lib libgtrace so f List Trace only specified functions comma separated list This README file details how to run gtrace For full instructions on how to compile and install gtrace please read the INSTALL file Easy installation 1 Uncompress the package tar xzf gtrace 0 1 tar gz cd gtrace 0 1 2 Compile and build the library configure make 3 Test before installation gtrace 1 libs libgtrace so whoami Lo Op ee gtrace amp LD PRELOAD libs libgtrace so whoami kill 961 4 Install the software make install Librer a para an lisis din mico de programas 42 de 42
7. el sistema de ficheros En linux la interposici n se consigue configurando la variable de entorno LD PRELOAD para que apunte a la librer a de interposici n Si por ejemplo la librer a interpuesta contiene una definici n de la funci n fopen el c digo interpuesto de ejecutar siempre que la aplicaci n haga referencia a dicha funci n Esto nos obliga a replicar la funcionalidad de la funci n fopen en nuestra librer a interpuesta lo cual es imposible La soluci n pasa por buscar la funci n fopen original desde la librer a de interposici n con la API dlsym Librer a para an lisis din mico de programas 21 de 42 TFC Plataforma GNU Linux Liamada a funci n Librer a interpuesta Libreria Ejecutable Libreria Figura 11 Llamadas a funciones con librer a interpuesta 3 1 Como se interceptan llamadas a funciones Libreria Para demostrar esta t cnica vamos a construir una librer a que intercepte llamadas a la funci n fwrite Esta funci n escribe una cadena de texto en el stream especificado El objetivo es cambiar el color del texto que imprime la aplicaci n en la pantalla Primero escribimos el c digo de la funci n que substituira a fwrite en rainbow c El prototipo de la funci n interpuesta debe coincidir con la funci n original RTLD NEXT es una extension GNU de libc Zdefine GNU SOURCE Zinclude dlfcn h Zinclude lt string h gt Codigos del terminal para colorear te
8. el ciclo al planificador con sched yield y se repite la operaci n m s tarde oe ha considerado que es mejor no utilizar los mecanismos de sincronizaci n que ofrece el Kernel para poder as reducir al m ximo las llamadas al sistema dada la cantidad de mensajes que se generan por segundo y que cada mensaje requiere un dos accesos al buffer escritura y lectura Compare And Swap es una instrucci n especial que compara el valor de una variable y si coincide se intercambia su valor por el de otra variable Es un tipo de instrucci n indivisible ning n proceso puede interrumpirla que el procesador ejecuta de forma at mica Librer a para an lisis din mico de programas 28 de 42 TFC Plataforma GNU Linux 2 Implementacion de la libreria La mayor parte del c digo de la librer a esta implementado en los archivos gtrace h y libgtrace c y el c digo que gestiona el acceso a la estructura SHM se comparte con el profiler en el archivo de cabecera shm h Las funciones de la librer a se puede agrupar en tres grandes bloques e Inicializaci n de la librer a Es el c digo encargado de conectar con la memoria compartida e inicializar el estado interno Tambi n configura la gesti n de ciertas se ales SIGKILL SIGSEGV necesarias para el buen funcionamiento de la librer a ver apartado 2 2 e Escritura en la memoria compartida Las funciones gtr signal gtr libcall y gtr libret crean el mensaje correspondiente y lo es
9. lib libdl so 2 0x00007f19d78db000 libc so 6 gt lib libc so 6 0x00007f1947584000 libncursesw so 5 gt lib libncursesw so 5 0x00007f19d732a000 lib ld linux x86 64 s0 2 0x00007f19d7422000 Figura 10 Ldd Listado de dependencias Executable and Linking Format es el formato est ndar del mundo Unix Tiene la ventaja de que su dise o es flexible y no es dependiente de la plataforma hardware Se entiende por direcciones reales las direcciones v lidas en el espacio de memoria virtual del proceso Librer a para an lisis din mico de programas 20 de 42 TFC Plataforma GNU Linux Las dependencias se identifican con el nombre de archivo de la biblioteca correspondiente y esta informacion se graba en la imagen del ejecutable Para saber cuales son las dependencias de un programa se usa el comando dd figura 10 El cargador utiliza esta informaci n para localizar las bibliotecas a trav s del sistema de ficheros Si se da el caso de que no encuentra alguna o no es compatible se aborta la ejecuci n La variable de entorno LD LIBRARY PATH define los directorios donde se buscar n las librer as 2 1 Dynamic Loading API Adem s de este mecanismo de linkage autom tico las aplicaciones pueden optar por cargar las librer as durante su ejecuci n Por ejemplo no hace falta cargar en memoria la funcionalidad de ayuda F1 desde el primer momento cuando se inicia la aplicaci n Se puede cargar m s tarde s lo si el usuario s
10. m ltiples procesos de forma simult nea En el anexo 3 se podr encontrar la ayuda del programa e instrucciones de uso README Como muestra se adjunta una captura de la traza de la utilidad whoami en la figura 20 xoms Hideo gtrace 0 1 gtrace l libs libgtrace so whoami gtrace 0 1 by lt xoms uoc edu gt 11 32 08 227511 trace of whoami started xoms 11 32 08 247322 pid 3111 fopen path etc passwd mode re 11 32 08 247332 pid 3111 fopen returns 0 11 32 08 247333 pid 3111 fileno stream 0x7220d0 11 32 08 247335 pid 3111 fileno returns 3 11 32 08 247351 pid 3111 fclose fp 0x7220d0 11 32 08 247357 pid 3111 puts str xoms 11 32 08 247365 pid 3111 exit status 0 11 32 08 247367 pid 3111 fclose fp 0xf98f9780 11 32 08 247370 pid 3111 fclose fp 0xf98f9860 11 32 08 247479 exited code 0 11 32 08 247485 10 messages processed 10 received Figura 20 Ejemplo del comando gtrace 4 Rendimiento Por cada llamada al sistema que capturamos necesitamos obtener una informaci n que implica realizar otras llamadas al sistema lo que provoca un consumo de ciclos y cambios de contexto del procesador Por ejemplo para saber el PID del proceso que realiza una llamada habr a que incluir getpid en el cuerpo de todas las funciones interpuestas En este caso se ha podido evitar incluyendo una variable global gtrace_pid que se inicializa con cada nueva instancia de la librer a y fo
11. n din mica se refiere a la t cnica de introducir el c digo de instrumentalizaci n durante la ejecuci n del programa Las herramientas de instrumentalizaci n din mica cambian las instrucciones de un proceso cargado en memoria inyectando el c digo de instrumentalizaci n sobreescribiendo el c digo original del proceso Las herramientas de instrumentalizaci n din mica se basan en los mecanismos del Kernel para depurar procesos e inyectar c digo de interrupci n traps De hecho la mayor a desarrollan componentes para analizar el propio Kernel y de paso obtener informaci n sobre el funcionamiento de los procesos de usuario Librer a para an lisis din mico de programas 17 de 42 Queda fuera del ambito de esta memoria analizar en profundidad las herramientas de instrumentalizacion din mica pues el objetivo del proyecto es realizar tracing en aplicaciones de usuario Sin embargo sin pretender ser exhaustivos se ha elaborado la siguiente tabla con un resumen de caracter sticas de cuatro de las principales herramientas existentes en Linux Systemtap DTrace perf Licencia GPL CDDL GPL Sistema operativo Linux Linux Solaris Mac OSX Linux BSD QNX Linux Desarrollado por Comunidad abierta Comunidad abierta Comunidad abierta kml Inicio del proyecto Enero 2005 Enero 2005 Octubre 2001 2009 Estado del En desarrollo En desarrollo Estable En desarrollo proyecto Audiencia Desarrolladores Desarrolladores Desarrolladore
12. 30 31 31 TFC Plataforma GNU Linux Capitulo Introduccion En el debate de los sistemas operativos uno de los argumentos mas utilizados en favor de la plataforma de software libre GNU Linux es que es mas seguro que sus competidores Pero a pesar de todo aparecen de forma continua publicaciones que reportan fallos de seguridad en este sistema Este proyecto se enmarca dentro del campo de la seguridad informatica en la plataforma GNU Linux En el contexto de una auditoria tecnica de seguridad en la fase de analisis de aplicaciones y deteccion de vulnerabilidades es habitual que los profesionales se enfrenten al reto de disponer de una descripci n detallada del flujo de operaciones de un determinado software En concreto operaciones como la apertura de ficheros y puertos de red la gesti n de memoria y en general todos los accesos a recursos del sistema operativo por parte de una aplicaci n son de especial inter s para el auditor durante estas pruebas t cnicas Esta informaci n que constituye la traza de una aplicaci n es de vital importancia para poder garantizar la seguridad y el correcto funcionamiento de un sistema inform tico Normalmente el t cnico obtiene esta informaci n durante la lectura de c digo fuente de la aplicaci n que se este auditando Tambi n es habitual consultar la documentaci n del programa o acudir a los ficheros de registro o logs en busca de respuestas Sin embargo muchas veces el software se dist
13. T Librer a para an lisis din mico de programas 16 de 42 TFC Plataforma GNU Linux 3 Muestreo Otra forma de recolectar informaci n de un programa en ejecuci n es mediante un proceso de muestreo estad stico El muestreo consiste en monitorizar un programa interrumpiendolo a intervalos regulares para conocer donde esta el contador de programa registro IP de modo que permita calcular heur sticamente el tiempo dedicado a la ejecuci n de una funci n Por ejemplo la herramienta de an lisis de GCC gprof muestra los procesos 100 veces por segundo y produce un histograma de distribuci n temporal del c digo Flat profile Each sample counts as 0 01 seconds cumulative self self total time seconds seconds calls ms call ms call name 33 34 0 02 0 02 7208 0 00 0 00 open 16 67 0 03 0 01 244 0 04 0 12 offtime 16 67 0 04 0 01 8 1 25 1 25 memccpy 16 67 0 05 0 01 7 1 43 1 43 write 16 67 0 06 0 01 mcount 0 00 0 06 0 00 236 0 00 0 00 tzset 0 00 0 06 0 00 192 0 00 0 00 tolower 0 00 0 06 0 00 47 0 00 0 00 strlen 0 00 0 06 0 00 45 0 00 0 00 strchr 0 00 0 06 0 00 1 0 00 50 00 main 0 00 0 06 0 00 1 0 00 0 00 memcpy 0 00 0 06 0 00 1 0 00 10 11 print 0 00 0 06 0 00 1 0 00 0 00 profil 0 00 0 06 0 00 1 0 00 50 00 report Figura 7 Ejemplo de muestreo OProfile tambi n es una herramienta de an lisis para Linux basada en el muestreo que utiliza contadores por hardware 4 Instrumentalizaci n din mica La instrumentalizaci
14. amente De esta forma de evita la duplicaci n de c digo es decir que las mismas funciones se copien de forma redundante en cada aplicaci n A las librer as de enlace din mico tambi n se las conoce con el nombre de bibliotecas compartidas Al enlazar una aplicaci n las referencias a objetos en bibliotecas compartidas quedan sin resolver dejando esta tarea pendiente hasta que llega el momento de ejecutarlas Por tanto la diferencia entre una librer a est tica y una librer a compartida est en que las librer as compartidas se enlazan con las aplicaciones en tiempo de ejecuci n en lugar de en tiempo de compilaci n Esto se conoce como enlace din mico y es llevado a cabo por el cargador de la aplicaci n de forma autom tica El proceso por el cual durante la llamada a una funci n de una biblioteca compartida se interpone c digo externo entre la aplicaci n y la funci n original se conoce como interposici n El c digo interpuesto puede o no llamar a la funci n real Una vulnerabilidad es una debilidad en un sistema inform tico que puede poner en riesgo la seguridad de la informaci n y normalmente es el resultado de un error de software o bug susceptible de ser utilizado por un atacante Las auditorias t cnicas de seguridad son revisiones t cnicas exhaustivas de los sistema de informaci n desde el punto de vista de la seguridad Una de las fases del proceso es la identificaci n de las posibles vulnerabilidades del si
15. ar con la implementaci n de los diferentes componentes en lenguaje C Se realizaran tambi n las correspondientes pruebas para validar su correcto funcionamiento Finalmente se llevar a cabo un estudio del rendimiento y un valoraci n general del proyecto 5 Requisitos de diseno A continuaci n se detallan los requisitos de diseno que debe cumplir cada uno de los componentes del proyecto 5 1 Librer a de interposici n Los requisitos previstos son e Capturar las llamadas a funciones par metros y valores de retorno con un impacto m nimo en el rendimiento de la aplicaci n auditada e Permitir subscribirse a eventos y responder en tiempo real a las llamadas de funciones capturadas e Soportar m ltiples procesos y threads simult neamente e Utilizar mecanismos IPC del est ndar POSIX e Funcionar en el espacio de usuario Librer a para an lisis din mico de programas 8 de 42 TFC Plataforma GNU Linux En el diseno de la libreria se prestara especial atencion a la flexibilidad de la misma en el sentido de que pueda ser utilizada para diferentes aplicaciones 5 2 Utilidad de tracing En principio el programa que demostrar el uso de la librer a ser una sencilla utilidad que generar por consola la traza de las aplicaciones de forma interactiva Otras utilidades de seguridad que se podr an desarrollar son e Analizador de race conditicions en el acceso al sistema de ficheros e Detector de heap o
16. ar programas setuid se puede compilar un lanzador que evite esta restricci n Se ha desarrollado una versi n en C de dicho lanzador que esta incluido en el Anexo 2 de esta memoria junto con las instrucciones de uso Librer a para an lisis din mico de programas 32 de 42 TFC Plataforma GNU Linux Capitulo V Conclusiones En este proyecto se ha realizado un estudio sobre las tecnologias de tracing en Linux que ha servido de introducci n te rica y aproximaci n al problema que se queria resolver Asimismo se ha disenado e implementado una librer a de interposici n cumpliendo cada uno de los requisitos de dise o planteados Dicha librer a constituye una soluci n viable para futuro desarrollos como demuestra la funcionalidad m nima pero completa del prototipo presentado Adem s se han solventado problemas inesperados de implementaci n como los problemas de deadlock y los ficheros autoconf cuyas soluciones han supuesto un autentico desaf o En este sentido se han cumplido los objetivos del proyecto Hay dos aspectos sin embargo que en mi opini n hubieran merecido mayor atenci n en este proyecto el an lisis de rendimiento de la librer a que ha quedado parcialmente incompleto y la creaci n de una bater a de pruebas autom ticas imprescindible como buena pr ctica de programaci n Como experiencia personal encuentro que en general he tomado conciencia de la importancia que tiene los aspectos m s formales del desar
17. as operativos Provee un mecanismo que permite a los procesos comunicarse y sincronizarse entre si Librer a para an lisis din mico de programas normalmente a trav s de un sistema de env o de mensajes o compartiendo espacios de memoria IPS Sistema de prevenci n de intrusos En seguridad inform tica es un programa orientado a proteger de forma proactiva el sistema inform tico de ataques y abusos IRQ Del ingles Interrupt Request Se al recibida por el procesador indicando que debe interrumpir el curso de ejecuci n actual y pasar a ejecuta c digo especifico para tratar esta situaci n Se suelen generar en los dispositivos perif ricos Parser Analizador sint ctico que convierte texto de entrada en otras estructuras mas utiles para ser procesadas Pipe Una tuber a consiste en una cadena de procesos conectados de forma que la salida de datos de cada proceso de la cadena es la entrada de datos del pr ximo POSIX Acr nimo de Portable Operating System Interface Son una familia de est ndares definidos por el IEEE que surgieron del mundo Unix Define una serie de servicios y funciones del sistema operativo Profiling Es la tarea en la que se ejecuta un programa especializado profiler para realizar el an lisis de rendimiento de una aplicaci n Race condition Situaci n que se da cuando el resultado de la ejecuci n de m ltiples procesos relacionados depende del orden en que se ejecuten Si no est n c
18. ation of the program you wish to run For example purposes we ll assume the program we wish to wrap is usr bin foobar Determine the permissions owner and group of foobar Note this information as it will be used later For example 1s l usr bin foobar r sr xr x 1 root bin 20480 Jul 17 12 30 usr bin foobar In particular note whether the program is setuid or setgid Copy the foobar program to foobar real and then restrict its permissions cd usr bin cp foobar foobar real chmod 511 foobar real Librer a para an lisis din mico de programas 39 de 42 TFC Plataforma GNU Linux 5 Note the location of foobar real This will be used as the definition of REAL_PROG when compiling this wrapper This should be an absolute pathname In this example usr bin foobar real 6 Compile this program in a non world writable directory other than E usr bin ji For example to use usr local src first copy this file to i usr local src l cd usr local src There are two defines required to compile this program REAL PROG This is the location noted in step 5 T For this example REAL PROG is usr bin prog real ss PRELOAD_LIB The pathname of the interposition library m Once you have the values of REAL PROG and PRELOAD LIB you can compile this program cc s DREAL PROG2 usr bin foobar real DPRELOAD LIB libgtrace so N o
19. ck 19 205649096 home x0129185 tracel rcu 0 506 506 modem manager 1 0 home x0129185 tracel rcu 0 tree callback 19 205653752 506 rcu tree callback 19 205653752 home x0129185 tracel rcu 0 506 506 modem manager 1 0 home x0129185 tracel rcu 0 tree callback 19 205656524 506 rcu tree callback 19 205656524 home x0129185 tracel rcu 0 506 506 modem manager 1 lt gt gt Time Frame start 19 s 187915621 nsend 19 2s 220337893 4 ns Time Interval 0 s 32422272 ins Current Time 19 s 205638509 ns lt gt lt Figura 6 Visualizaci n de trazas con LT TV 2 Emulacion binaria En un entorno virtual se puede lograr un control total sobre el sistema emulado La ejecucion de las instrucciones emuladas y los accesos a memoria son visibles y pueden ser instrumentalizados sin tener que disponer del c digo fuente La desventaja de la emulaci n es el coste en t rminos de rendimiento ya que un programa puede ejecutarse entre 10 o 100 veces m s lento en un sistema emulado Esto hace que la emulaci n no sea til para realizar an lisis de rendimiento En la actualidad la mayor a de emuladores analizan las secuencias de instrucciones antes de ejecutarlas y las reemplazan por instrucciones binarias nativas en el sistema que ejecuta la emulaci n Los emuladores libres m s conocidos para Linux son Qemu y el depurador Valgrind 3 A esta t cnica se la conoce como Just in time compilation JI
20. criben en el buffer Las tres funciones devuelven un entero que identifica inequ vocamente el mensaje escrito para poder referenciarlo m s tarde Este identificador se puede utilizar para sincronizar con shm sync de forma que se detiene la ejecuci n de la librer a hasta que el mensaje ha sido recibido y procesado por el profiler e Definici n de funciones interpuestas Todas las funciones que queramos capturar tendr n que estar definidas en la librer a Por esta raz n se ha creado una macro especifica que facilita esta tarea y que adem s evita la duplicidad de c digo 2 1 Definici n de funciones interpuestas Para definir una funci n interpuesta en la librer a se utiliza la macro DEFINE INTERPOSE Esta macro declara un puntero est tico a la funci n original sufijo real que se inicializa la primera vez que el programa realiza una llamada a la funci n con la macro LOAD SYM Por ejemplo la figura 18 muestra el c digo en C generado para el prototipo de funci n fopen 1 DEFINE INTERPOSE CFILE fopen const char path const char mode 2 41 3 LOAD SYM fopen 4 gtr_libcall NAME_FOPEN path s mode s path mode Ds FILE ret REALCfopen Cpath mode 6 gtr_libret NAME_FOPEN ret NULL s return ret 8 9 FILE fopen_real const char path const char mode 10 FILE fopenCconst char path const char mode 11 1 12 if Clfopen real 13 fopen real dlsym void 11
21. cto 5 Requisitos de diseno 5 1 Librer a de interposici n 5 2 Utilidad de tracing 6 Planificaci n 7 Productos obtenidos 8 Composici n de la memoria Capitulo Il Tracing y profiling 1 Instrumentalizacion del codigo fuente 1 1 GCC opciones de compilacion 1 2 API en lenguajes de alto nivel 1 3 API de bajo nivel LT Tng 2 Emulacion binaria 3 Muestreo 4 Instrumentalizacion dinamica Cap tulo Ill Interposicion de bibliotecas compartidas 1 Introduccion a las bibliotecas compartidas 2 El cargador de Linux 2 1 Dynamic Loading API Plataforma GNU Linux Trabajo final de carrera h A h mb Y JO Gh 5 5 W ND O O O O O ONNO N N N O O O TFC Plataforma GNU Linux 3 Interposici n con LD PRELOAD 3 1 Como se interceptan llamadas a funciones 3 2 Compatibilidad 3 2 1 Mac OS X 4 Ventajas de la interposici n Capitulo IV Librer a gtrace 1 Arquitectura 1 1 Mensajes 1 2 IPC 1 2 1 Estructura de la memoria compartida 1 2 2 Sincronizaci n 2 Implementaci n de la librer a 2 1 Definici n de funciones interpuestas 2 2 Bloqueo de senales as ncronas 3 Implementaci n del profiler 4 Rendimiento 5 Limitaciones Capitulo V Conclusiones Bibliografia Glosario Anexo 1 Archivo dyld interposing h Anexo 2 Utilidad para ejecutar programas setuid con LD PRELOAD Anexo 3 Ayuda del comando gtrace y fichero README Plataforma GNU Linux Trabajo final
22. de carrera 21 22 23 23 24 25 26 26 27 28 28 29 29 30 31 31 32 33 34 36 38 42 TFC Plataforma GNU Linux indice de tablas y figuras e Tabla 1 Lista de tareas e Tabla 2 Distinci n entre Logging y Software Tracing e Tabla 3 Comparativa de frameworks e Tabla 4 Lista de mensajes gtrace e Figura 1 Diagrama de Gantt e Figura 2 Icov Interfaz gr fico de gcov e Figura 3 Declaraci n de funciones de instrumentalizaci n e Figura 4 Benchmark del programa de prueba pystone con hotshot e Figura 5 LLTng Markers y tracepoints e Figura 6 Visualizaci n de trazas con LTTV e Figura 7 Ejemplo de muestreo e Figura 8 Librer as est ticas vs Librer as compartidas e Figura 9 Secciones de una imagen ELF e Figura 10 Ldd Listado de dependencias e Figura 11 Llamadas a funciones con librer a interpuesta e Figura 12 Archivo rainbow c e Figura 13 Ejemplo de interposici n con rainbow so e Figura 14 Visi n general de los componentes de gtrace e Figura 15 Atributos de la memoria compartida e Figura 16 Estructura del buffer circular e Figura 17 Primitivas at micas disponibles en GCC e Figura 18 DEFINE INTERPOSE fdopen e Figura 19 Fragmento de la funci n gtr write e Figura 20 Salida del comando gtrace e Figura 21 Inicializaci n del proceso hijo Plataforma GNU Linux Trabajo final de carrera 12 18 27 10 14 14 15 15 16 17 19 20 20 22 23 23 26 27 28 28 29
23. e UOC Universitat Oberta de Catalunya WWW uoc edu Librer a para an lisis din mico de programas Oscar Mira S nchez Ingenier a T cnica en Inform tica de Sistemas Joaquin L pez S nchez Monta s 13 de junio de 2011 Plataforma GNU Linux Trabajo final de carrera Resumen El presente documento recoge la memoria del Proyecto de Final de Carrera en adelante TFC titulado Libreria para analisis dinamico de programas Este proyecto consiste en el diseno y desarrollo de una librer a de interposici n de prop sito general en lenguaje C para la plataforma GNU Linux as como de un prototipo para demostrar la utilidad de la librer a La idea es que dicha librer a se pueda utilizar en aquellos programas que necesiten modificar el comportamiento de otros programas interceptar las llamadas al sistema y en un sentido amplio obtener informaci n sobre las actividades de otros procesos en tiempo real Por tanto se tratar de disenar un marco adecuado para futuros proyectos relacionados con el an lisis de software oe pretende tambi n realizar un estudio que permita conocer las diferentes t cnicas de depuraci n diagn stico y optimizaci n de aplicaciones y el software libre existente para realizar dichas tareas Plataforma GNU Linux Trabajo final de carrera TFC Plataforma GNU Linux indice de contenido Capitulo I Introducci n 1 Experiencia previa 2 Terminolog a 3 Objetivos 4 Enfoque del proye
24. foobar wrapper setuid wrapper c Note that when compiling the values of REAL PROG and PRELOAD LIB needs to be enclosed in single quotes as shown above 7 Copy this new wrapper program foobar wrapper into the directory originally containing foobar This will replace the existing i foobar program j Make sure this directory and its parent directories are protected so i only root is able to make changes to files in the directory t Use the information found in step 3 and set the same owner group permissions and privileges on the new foobar program For example i cp foobar wrapper usr bin foobar j cd usr bin chown root foobar chgrp bin foobar l chmod 4555 foobar Libreria para analisis dinamico de programas 40 de 42 TFC Plataforma GNU Linux Check that the owner group permissions and privileges exactly match those noted in step 3 ls L usr bin foobar Users will not be able to use the foobar program during the time when the wrapper 1S copied into place until the chmod command has been executed Check that foobar still works incLude lt stdio h gt incLude lt stdlib h gt This wrapper will run REAL PROG setting LD PRELOAD to PRELOAD LIB int mainCint argc char argv putenv LD_PRELOAD PRELOAD LIB set up the environment execve REAL_PROG argv perror execve failed exit 1 Librer a para an lisis
25. fopen 14 gtr libcall 0x55642948 path s mode s path mode T5 FILE ret fopen real path mode 16 gtr libret 0x55642948 ret CCvoid Q 17 return ret 18 Figura 18 DEFINE_INTERPOSE fdopen Libreria para analisis dinamico de programas 29 de 42 TFC Plataforma GNU Linux En la linea 14 se pueden ver la constante de la funci n fopen y como se pasan los par metros path y mode a la funci n gtr_libcall para registrarlos en la memoria compartida Tambi n en la linea 15 y 16 se observa como se guarda el valor de retorno de fopen para devolverlo despu s a la aplicaci n 2 2 Bloqueo de se ales asincronas Linux utiliza se ales para informar a los procesos sobre alguna condici n particular realizar esperas entre procesos etc Cuando llega una se al a un proceso el sistema interrumpe la ejecuci n normal del proceso o de cualquier llamada al sistema que se este realizando y pasa el control a la rutina de gesti n de la se al Por tanto la funci n gtr_write que se utiliza para escribir en la memoria compartida tambi n puede ser interrumpida tras adquirir el acceso en exclusiva a la memoria compartida pero antes de liberarlo Esta circunstancia puede causar dos condiciones de deadlock que detienen el funcionamiento de la librer a y el profiler En concreto e Si se recibe una se al de interrupci n SIGTERM SIGQUIT la aplicaci n puede finalizar sin liberar el acceso a memoria compartida
26. ing changing the arguments value open path flags mode do stuff after open including changing the return value s return value d DYLD INTERPOSE my open open T Zdefine DYLD INTERPOSEC replacement replacee attribute Cused static struct const void replacement const void replacee interpose Z replacee __attribute__ section DATA amp replacement const void unsigned long amp replacee 1 interpose Cconst void Cunsigned long 5 Hend1f Librer a para an lisis din mico de programas 38 de 42 TFC Plataforma GNU Linux Anexo 2 Utilidad para ejecutar programas setuid con LD PRELOAD setuid wrapper c wrap programs to run under LD PRELOAD This wrapper is designed to run privileged programs with a preloaded dynamic library T The original setuid or setgid program is replaced by this wrapper The original program is being moved to another 2 location and its permissions restricted This wrapper set ups the environment variable LD_PRELOAD before executing the original program Author lt xoms uoc edu DISCLAIMER The use of this program is at your own risk It is designed to combat a particular vulnerability and may not combat other vulnerabilities either past or future The decision to use this program is yours as are the consequences of its use Installation instructions su to root Determine the loc
27. iones en el formato M s ca tico No causa impacto en el rendimiento de la aplicaci n El impacto en el rendimiento de la aplicaci n puede ser notable 1 syslog 3 es el est ndar de facto para el env o de mensajes de registro Por syslog se conoce tanto al servidor como al protocolo de red Librer a para an lisis din mico de programas 12 de 42 TFC Plataforma GNU Linux Ademas de la depuracion de errores de software las tecnicas de tracing tambien se utilizan en otras areas como e Monitorizaci n de sistemas e Optimizaci n de software Lo que t cnicamente se conoce como profiling e Seguridad y prevenci n de intrusiones Una traza es una secuencia de eventos ordenada en el tiempo Puede contener informaci n a nivel de sistema operativo como eventos del planificador de tareas entradas y salidas de syscalls gesti n de IRQs o puede contener eventos de cualquier otra aplicaci n Se puede generar de forma continua y grabar a petici n seg n las necesidades de forma peri dica o cuando se sospeche de alg n problema Se puede almacenar de forma permanente en un archivo del disco o transmitirlo por la red a otro ordenador para su procesamiento en tiempo real Las posibilidades son variadas pero se pueden resumir en los siguientes aspectos e Que mecanismos permiten determinar el comportamiento del programa identificar los eventos relevantes y capturarlos e Como se transportan y se almacenan dichos datos Que opci
28. ions y fno instrument function Cada vez que se entra y se sale de una funci n se llama a las funciones de instrumentalizaci n con la direcci n de la funci n actual como par metro void cyg profile func enter void this fn void caller void cyg profile func exit void this fn void caller Figura 3 Declaraci n de funciones de instrumentalizaci n 1 2 API en lenguajes de alto nivel La mayor a de lenguajes de programaci n de alto nivel implementan mecanismos para tracing y profiling e Java con la API JVMPI JVM Profiling Interface e Python y el m dulo hotshot GNU Compiler Collection es el compilador est ndar en el mundo Unix Librer a para an lisis din mico de programas 14 de 42 TFC Plataforma GNU Linux gt gt gt import hotshot hotshot stats test pystone gt gt gt prof hotshot Profile stones prof benchtime stones prof runcall test pystone pystones prof close stats hotshot stats load stones prof stats strip dirs gt gt gt stats sort stats time calls stats print stats 20 850004 function calls in 10 090 CPU seconds Ordered by internal time call count ncalls tottime percall cumtime percall filename lineno function 1 3 295 3 295 10 090 10 090 pystone py 79 Proc0 150000 Levao 0 000 1 315 0 000 pystone py 203 Proc7 50000 1 313 0 000 1 463 0 000 pystone py 229 Func2 Figura 4 Benchmark del programa de prueba pysto
29. la ejecuci n la librer a recoge la informaci n de llamadas a funciones par metros etc y la encapsula en una estructura apropiada para transmitir la informaci n por IPC al profiler Este ltimo recibe los mensajes los agrupa en eventos y los pasa finalmente a la ultima etapa del sistema donde se tratan segun la funcionalidad que se quiera obtener 1 1 Mensajes Los mensajes son registros con contienen la siguiente informaci n e gtr pid Identificador del proceso PID que origina el mensaje e gtr time Marca de tiempo timestamp e gtr type Valor que identifica el tipo de mensaje ver tabla 4 e gtr value Valor num rico que depende del tipo de mensaje Librer a para an lisis din mico de programas 26 de 42 TFC Plataforma GNU Linux e gtr_len Tamano en bytes del siguiente campo e gtr_buffer Datos adicionales de tamano variable Para hacer los mensajes mas compactos los nombres de funciones se identifican con una constante de 32 bits en lugar de con una cadena de texto Por ejemplo a la funci n fopen le corresponde el valor 0x55642948 Tabla 4 Lista de mensajes gtrace gtr type gtr value gtr buffer GTR LIBCALL Llamada a funci n Identificador de funci n GTR LIBRET Hetorno de funci n Identificador de funci n C digo de retorno de la funci n Valor de errno GTR GENIO Descriptor del archivo FD Flag lectura escritura 1 2 IPC Para la transmisi n de mensajes entre la librer a y el profiler
30. ld com print 35352 Lu Hongjiu 1995 ELF From The Programmer s Perspective NYNEX Science amp Technology Inc GNU Project GCC online documentation Free Software Foundation FSF Runtime Linking Programming Interface Linker and Libraries Guide Oracle htto download oracle com docs cqd E19082 01 819 0690 6n33n7f8b index html Izik Reverse Engineering with LD_PRELOAD http www exploit db com papers 13233 Wheeler David A 2003 Program Library HOWTO The Linux Documentation Project LT Tng TracingBook http Ittng org tracingwiki index php TracingBook R ck Harald 2007 Survey of Dynamic Instrumentation of Operating Systems Department of Computer Sciences University of Salzburg Austria Fournier Pierre Marc Desnoyers Mathieu Dagenais Michel R Combined Tracing of the Kernel and Applications with LT Tng cole Polytechnique de Montr al Signal Handling The GNU C Library Wikipedia en Dynamic program analysis Librer a para an lisis din mico de programas 34 de 42 TFC Plataforma GNU Linux 18 Wikipedia en Semaphore programming 19 Wikipedia en Profiling computer programming 20 Wikipedia en Shared memory 21 Wikipedia en Non blocking algorithm 22 mij 2005 A tutorial for porting to autoconf amp automake http mij oltrelinux com devel autoconf automake 23 GNU Project Autoconf
31. ls Plugins Help OOF 0060 AQIQ arx ED xm B X M d Traceset E epe gear d Statisti r Tr S istics Traceset statistics Statistic for Iraceset statistics gt mode types statistics summed 1 ieu ae event types cpu time 65 495830804 events count 1994693 v home x0129185 tracel elapsed time includes per process waiting time 1003 526752178 E MU ed cumulative cpu time includes nested routines and modes 16 318190440 processes v cpu 0 los 195 195 ve rtic al 187915621ns 204126757ns 220337893ns 43 0 vertical 21 5 vertical 0 Resource v Trace O i CPUO c IRQ 37 gp timer P SOFTIRQ 1 pes SOFTIRQ 6 SOFTIRQ 9 Process Brand PID TGID PPID CPU Birth sec Birth nsec D modem manager 506 506 1 0 0 331177016 0 console kit dae S22 1922 al 0 0 331185492 0 usr sbin gdm binary 16610 16610 1 0 18 720745954 0 usr lib gdm gdm simple slave 16614 16614 16610 0 18 910856978 0 usr bin Xorg 16616 16616 16614 0 19 103704608 usr sbin gdm binary 16617 16617 16610 O0 19 217090070 D Trace Tracefile CPUID Event Time s Time ns home x0129185 tracel rcu 0 tree callback 19 205643352 506 rcu tree callback 19 205643352 home x0129185 tracel rcu 0 506 506 modem manager 1 home x0129185 tracel rcu 0 tree callback 19 205645978 506 rcu tree callback 19 205645978 home x0129185 tracel rcu 0 506 506 modem manager 1 0 home x0129185 tracel rcu 0 tree callback 19 205649096 506 rcu tree callba
32. lusiones Evaluaci n de rendimiento Valoraci n general Documentaci n Redacci n Memoria Memoria y Producto Presentaci n d Y Entrevista virtual Fin del proyecto Lo Figura 1 Diagrama de Gantt Librer a para an lisis din mico de programas 10 de 42 TFC Plataforma GNU Linux 7 Productos obtenidos El codigo fuente de la libreria y la utilidad de tracing se suministraran en un archivo comprimido gtrace 0 1 tar gz junto con los archivos necesarios para su puesta en marcha Siguiendo el estandar en Linux los programas se compilaran e instalaran con los comandos configure y make oe incluir tambien un manual de usuario en un fichero README Anexo 3 y una gu a de instalaci n en un fichero INSTALL 8 Composici n de la memoria El resto de cap tulos de esta memoria est estructurado de la siguiente forma e Cap tulo Il Se introducen los conceptos de tracing y profiling y se compara el software existente e Cap tulo III Se analiza el prop sito de las bibliotecas compartidas su funcionamiento y se describe la t cnica de interposici n e Capitulo IV Se detalla el desarrollo pr ctico de la librer a de interposici n e Cap tulo V Recoge las conclusiones del autor con respecto al TFC Librer a para an lisis din mico de programas 11 de 42 TFC Plataforma GNU Linux Cap tulo Il Tracing y profiling La traza de aplicaciones o software tracing es una t cnica com n utilizada en la dep
33. n minimizar el tiempo que tarda en ponerse en marcha una aplicaci n cuando es ejecutada Parte de la funcionalidad de las aplicaciones est implementada en bibliotecas o librer as Cuando una aplicaci n se enlaza con una librer a est tica el c digo de la librer a se copia en el cuerpo de la aplicaci n y se convierte en parte del archivo ejecutable resultante Esto produce algunas desventajas como archivos ejecutables muy grandes y obliga a volver a compilar el programa para beneficiarse de las futuras mejoras en las librer as Una alternativa para las aplicaciones es utilizar la flexibilidad de las bibliotecas compartidas de enlace din mico Stack Heap Application file EN Static linker Application code Source files Static Static libraries Static libraries libraries Source files Dynamic libraries Static linker Application file Dynamic library references Figura 8 Librerias estaticas vs Librerias compartidas Libreria para analisis dinamico de programas libraries Dynamic Application code Dynamic library references 19 de 42 TFC Plataforma GNU Linux 1 Introduccion a las bibliotecas compartidas En Linux los programas ejecutables est n contenidos en una imagen de archivo con el formato ELF Cuando se inicia un programa el Kernel carga el c digo
34. ne con hotshot 1 3 API de bajo nivel LTTng Las API de bajo nivel se centran en reducir el impacto en el rendimiento de la aplicaci n reduciendo la latencia que producen las llamadas a las funciones de tracing y mejorando la eficiencia en la gesti n de los buffers internos donde se guardan los eventos Esto es especialmente importante cuando se utilizan en aplicaciones como el Kernel donde el rendimiento es un factor critico En el caso de LT Tng del que hablaremos mas adelante se han desarrollado algoritmos de buffer circular muy optimizados que ya han sido incluido en el Kernel reemplazando proyectos anteriores como DTI Driver Tracing Infrastructure La librer a UST Userspace Tracer es la versi n de LT Tng para aplicaciones de usuario y ofrece dos interfaces para instrumentalizar c digo makers y tracepoints Cada vez que se alcanza un marcador o tracepoint se genera un evento El proceso ustd se encarga entonces de recoger los eventos y guardarlos de forma eficiente en el disco duro Zinclude lt ust marker h gt int main int argc char argv Un marcardor trace mark main inicio programa s llamado con d argumentos argv 0 argc return 0 j Figura 5 LLTng Markers y tracepoints Librer a para an lisis din mico de programas 15 de 42 TFC Plataforma GNU Linux Estos eventos se pueden analizar con el interfaz gr fico LTTV gul X Linux Trace Toolkit Viewer v 0 x File View Too
35. olicita el interfaz de ayuda con el comando correspondiente Para cargar librer as compartidas en tiempo de ejecuci n las aplicaciones deben interactuar con el cargador el cual siempre forma parte de la memoria del proceso El mecanismo es el mismo que el descrito en el apartado anterior pero ahora el inkage se realiza a petici n de la aplicaci n mediante las funciones definidas en lt dlfnc h gt e dlopen abre una biblioteca compartida La aplicaci n llama a esta funci n antes de utilizar los s mbolos exportados por la librer a Devuelve un manipulador o handle para referirse a la biblioteca abierta en las llamadas a dlsym y diclose e disym devuelve la direcci n de memoria de un s mbolo exportado Esta funci n toma como par metros el handle de la librer a obtenido con dlopen una constante que define el mbito de busqueda del s mbolo y el nombre del s mbolo o funci n que se desea obtener e diclose cierra una biblioteca compartida e dlerror devuelve una cadena que describe una condici n de error durante la ultima llamada a dlopen dlsym o diclose 3 Interposici n con LD PRELOAD La interposici n es el proceso por el cual se instala una librer a din mica diferente entre la aplicaci n y la biblioteca original de referencia Se puede interceptar las llamadas a funciones en librer as compartidas instando al dynamic linker a enlazar primero con la librer a interpuesta antes de buscar la librer a original en
36. ones tenemos para dejar estos datos a disposici n del siguiente nivel de procesamiento e Como se analizan dichos datos Que m tricas se utilizan y como se extrae valor de los datos obtenidos e Y por ultimo como se visualizan e interpretan los resultados Es en esta fase donde el usuario interact a con el sistema Existe multitud de software para realizar tracing en sistemas operativos compatibles con POSIX como Linux De hecho a lo largo de los ltimos anos ha habido un desarrollo considerable de nuevos componentes y frameworks centrados en el Kernel de Linux que de forma complementaria facilitan el tracing a las aplicaciones de usuario A continuaci n nos centraremos en los primeros eslabones de la cadena la adquisici n de datos y su almacenamiento Estos ser n los dos aspectos m s relevantes para el desarrollo de esta memoria y nos permitir comentar algunas de las herramientas m s representativas disponibles en Linux 1 Instrumentalizaci n del c digo fuente La instrumentalizaci n consiste en anadir instrucciones al c digo fuente del programa para expl citamente calcular tiempos de ejecuci n o utilizar componentes que provean los mecanismos de tracing Esto puede hacerse de manera autom tica o manual En la instrumentalizaci n autom tica un parser se encarga de leer el c digo fuente de la aplicaci n e insertar en lugares apropiados como son el comienzo y el final del cuerpo de las funciones el c digo de instrumen
37. orrectamente sincronizados se pueden producir corrupci n de datos y en ltima instancia vulnerar un sistema 36 de 42 TFC Plataforma GNU Linux Socket Define un concepto abstracto por el cual dos programas pueden intercambiar flujos de datos de forma ordenada Hay sockets de dominio Unix para comunicaci n IPC entre procesos y sockets TCP IP para la transmisi n de paquetes por Internet Stream En Unix es el origen de una secuencia de bytes Puede ser un fichero un dispositivo de entrada como el teclado o de salida como un terminal Hay como m nimo tres disponibles para cualquier programa stdin stdout y stderr Librer a para an lisis din mico de programas Syscall Abreviatura de system call o llamada al sistema Es el mecanismo por el cual una aplicaci n solicita un servicio al sistema operativo Thread En programaci n un thread es un hilo de ejecuci n que permite a un proceso llevar a cabo varias tareas de forma concurrente Los distintos hilos de un proceso comparten los recursos del proceso como el espacio de memoria y los archivos abiertos 37 de 42 TFC Plataforma GNU Linux Anexo 1 Archivo dyld interposing h Copyright c 2005 2008 Apple Computer Inc All rights reserved Ef H1f defined _DYLD_INTERPOSING_H_ define _DYLD_INTERPOSING_H_ Example static int my open const char path int flags mode t mode od 6 int value i do stuff before open includ
38. ribuye en formato binario y no se dispone del c digo fuente o ste es demasiado extenso Tambi n sucede con frecuencia que la documentaci n si existe no est actualizada Y que los ficheros de registro son incompletos o poco rigurosos La idea de este proyecto es estudiar las diferentes herramientas que dan soluci n a estas dificultades y desarrollar una librer a propia capaz de registrar y analizar esta actividad en tiempo real sin necesidad de disponer del c digo fuente del programa ni de la informaci n previa sobre el mismo Librer a para an lisis din mico de programas 6 de 42 TFC Plataforma GNU Linux 1 Experiencia previa Trabajando como administrador de sistemas y tecnico de redes en diferentes empresas he adquirido una experiencia notable en la plataforma Linux y BSD En la actualidad me he especializado en el analisis forense informatico La motivaci n de este proyecto nace de la necesidad de dise ar una librer a de interposici n completa que pueda formar parte de una suite de an lisis de vulnerabilidades para Linux en la que estoy trabajando 2 Terminologia Para facilitar la comprensi n de este primer cap tulo se incluye a continuaci n una breve descripci n de los t rminos tecnol gicos m s relevantes Una librer a de enlace din mico consiste en un conjunto de funciones que son compiladas y enlazadas en archivos independientes con objeto de ser compartidas por diferentes procesos simult ne
39. rma GNU Linux 4 Ventajas de la interposicion Una parte importante de la funcionalidad de las aplicaciones esta implementada en bibliotecas compartidas Interceptando el acceso a estos objetos se podria obtener una valiosa fuente de informacion de tracing en las aplicaciones de usuario En una librer a con funciones prototipo se pueden registrar las llamadas a funciones y sus par metros Eventualmente tambi n ser a posible alterar el contenido de dichos par metros antes o despu s de la lamada a la funci n real Al ser una librer a externa a la aplicaci n se puede crear sin tener que recompilar la aplicaci n y por tanto no har a falta disponer del c digo fuente El nivel de detalle del registro as como el lugar donde almacenarla y en que formato se podr a controlar dinamicamente en multiples procesos en ejecuci n Adem s una librer a de interposici n s lo actuar a sobre una colecci n de funciones interesantes definidas previamente sin afectar al resto del sistema as que tendr a un impacto m nimo en el rendimiento Estas ventajas tambi n las podemos encontrar en muchas de las utilidades que hemos examinado en el capitulo Il La utilidad trace por ejemplo que utiliza el mecanismo ptrace del Kernel para interceptar las llamadas al sistema ofrece esta misma funcionalidad aunque con un rendimiento bastante malo En conclusi n utilizar la t cnica de interposici n puede suponer una ventaja en algunos aspecto
40. rollo de proyectos Por ejemplo ahora que el proyecto ha finalizado me doy cuenta de lo importante que es seguir fielmente la planificaci n establecida al inicio del proyecto para lograr cumplir todos los objetivos propuestos sin sobresaltos Es evidente entonces que una buena organizaci n es indispensable para que el trabajo resulte agradable y fruct fero Librer a para an lisis din mico de programas 33 de 42 TFC Plataforma GNU Linux oioliograt a Curry Timothy W 1994 Profiling and Tracing Dynamic Library Usage Via Interposition USENIX Summer 1994 Technical Conference Kuperman Benjamin A Spafford Eugene 1999 Generation of Application Level Audit Data via Library Interposition COAST Laboratory Purdue University Garfinkel Tal Traps and Pitfalls Practical Problems in System Call Interposition Based Security Tools Computer Science Department Stanford University Myers Daniel S Bazinet Adam L 2004 Intercepting Arbitrary Functions on Windows UNIX and Macintosh OS X Platforms Institute for Advanced Computer Studies University of Maryland Jones M Tim 2008 Anatomy of Linux Dynamic Libraries IBM developerWorks http www ibm com developerworks linux library l dynamic libraries Grover Sandeep 2002 Linkers and Loaders Linux Journal htto www linuxjournal com article 6463 Nakhimovsky Greg 2001 Building library interposers for fun and profit Tworld http www itwor
41. rzando la inicializaci n en fork DEFINE_INTERPOSECpid_t fork void i LOAD SYMCfork pid t pid REALCfork Q if Clpid libgtrace_init gtr_wait gtr_libret NAME_FORK pid return pid Figura 21 Inicializaci n del proceso hijo Librer a para an lisis din mico de programas 31 de 42 TFC Plataforma GNU Linux Sin embargo para obtener en el analisis un timestamp de suficiente precision es inevitable saber la hora del sistema en cada llamada En la librer a se usa gettimeofday de libc que puede tener un retardo del orden de milisegundos en algunos sistema Para futuras versiones de la librer a ser a interesante buscar una alternativa y programar un reloj de tiempo real como los que se usan en las aplicaciones multimedia 5 Limitaciones No todos los programas y librer as pueden ser analizados con gtrace Por la documentaci n consultada parece ser que las librer as programadas en C son especialmente dif cil de interponer aunque no se han realizado pruebas en este sentido La dificultad se presenta a la hora de obtener las definiciones de funciones por la utilizaci n en C de operadores sobrecargados constructores etc Otra excepci n son los programas privilegiados es decir aquellos que se ejecutan como root porque tienen activado los bits setuid o setgid En este caso el sistema ignora la variable LD_PRELOAD por razones de seguridad y no pueden ser traceados con gtrace Aun as si se quiere analiz
42. s Desarrolladores usuarios sysadmins usuarios sysadmins usuarios sysadmins sysadmins Depuraci n tracing Depuraci n tracing Depuraci n tracing Tracing profiling profiling profiling Sistema operativo Linux Linux oolaris Mac OSX Linux soportado BSD QNX Linux Desarrollado por Comunidad abierta Comunidad abierta Comunidad abierta kml Estilo Lenguaje C Scripting Scripting Utilidad de linea de comandos Analisis realizado Offline post mortem Online Impacto en el Bajo Alto Alto Bajo rendimiento Tracing de binarios Si y Tracing de En desarrollo Si Si No programas Java Tracing de scripts Si interfaz con C Si No Tracepoints en el Cientos funciones Millones statements Cientos funciones Millones funciones Q 5 E profiling monitorizaci n 5 D 0 O kernel tracepoints markers tracepoints markers markers tracepoints statements Tracepoints en Cientos markers Millones statements Millones funciones Ninguno user space funciones makers Tipo de ejecuci n C digo nativo C digo nativo Bytecodes Integrado en el kernel Librer a para an lisis din mico de programas 18 de 42 TFC Plataforma GNU Linux Cap tulo Ill interposici n de ololiotecas compartidas Las bibliotecas compartidas son una caracter stica esencial de Linux Permiten reducir el tamano de los archivos ejecutables y el consumo de memoria y por tanto mejorar el rendimiento Tambi n logra
43. s pues a n no se ha desarrollado ninguna herramienta universal de tracing Librer a para an lisis din mico de programas 24 de 42 TFC Plataforma GNU Linux Cap tulo IV Librer a gtrace Una vez establecido el marco te rico podemos comenzar a abordar el objetivo principal del proyecto el desarrollo de la librer a de la interposici n teniendo en cuenta los requisitos de diseno plantando en la introducci n de la memoria Primero echaremos un vistazo general a la arquitectura prevista para despu s comentar algunos detalles de la implementaci n Librer a para an lisis din mico de programas 25 de 42 TFC Plataforma GNU Linux 1 Arquitectura Librer as compartidas llamada a funci n Aplicaci n MY libgtrace retorno de funci n shm_write env Q shm_read setenv LD_PRELOAD Profiler vy Figura 14 Visi n general de los componentes de gtrace El esquema propuesto se puede ver en la figura 14 Se distinguen dos componentes principales en el esquema la librer a libgtrace y el profiler Para operar con este sistema el primer paso consiste en ejecutar el profiler el cual configura el mecanismo de comunicaci n IPC para recibir los mensajes de la librer a gtrace El profiler puede recibir mensajes de m ltiples instancias de la librer a Despu s se ejecutan las aplicaciones que se desean auditar indicando al cargador que interponga la librer a libgtrace Durante
44. se ha optado por utilizar la memoria compartida SHM como mecanismo de comunicaci n Linux provee otros mecanismo IPC como archivos sockets pipes o colas de mensajes pero la memoria compartida parece la mejor opci n teniendo en cuenta los requisitos de diseno e Es el m todo m s r pido de comunicaci n entre procesos 9 e Puede ser compartido por mas de dos procesos de forma simult nea y sin necesidad de que exista un proceso ancestro com n como sucede con las pipes Para usar la memoria compartida se dispone de cuatro llamadas al sistema shmget shmctl shmat y shmat El profiler se encarga de crearla e inicializarla con shmget Despu s los procesos que usen la librer a se conectan v a shmat Ambos comparten una llave o key elegida al azar que sirve como identificador nico de la memoria Si lanzamos el profiler se puede ver el tama o y la clave ejecutando el comando pcs xoms Hideo gtrace 0 1 ipcs ID Shared Memory Segments key shmid owner perms bytes nattch status 0x67747221 1376257 xoms 600 524312 1 Figura 15 Atributos de la memoria compartida 6 Otra opci n es mmap que es muy similar y ofrece las misma funcionalidad que shm Ambos son mecanismos POSIX compatible Librer a para an lisis din mico de programas 27 de 42 TFC Plataforma GNU Linux 1 2 1 Estructura de la memoria compartida La memoria compartida se organiza en una buffer circular cuya cabecera se muestra a continuaci n
45. stema Otros t rminos como log o tracing se desarrollar n en profundidad en el capitulo Il Librer a para an lisis din mico de programas de 42 TFC Plataforma GNU Linux 3 Objetivos Los objetivos generales del proyecto son los siguientes e Estudiar las herramientas y mecanismos de tracing existentes en GNU Linux a nivel del Kernel y de la aplicacion e Analizar la t cnica de interposicion y su uso en herramientas de monitorizaci n y auditoria e Desarrollar una librer a de interposici n en C y una utilidad que demuestre su uso e Evaluar la funcionalidad y el rendimiento de la librer a 4 Enfoque del proyecto Para cubrir los objetivos establecidos la realizaci n del proyecto se divide en dos partes La primera parte ser una introducci n te rica a las diferentes tecnolog as de tracing Primero se realizar una comparativa de las tecnolog as disponibles en Linux para realizar trazas de las aplicaciones y del Kernel Despu s analizar el entorno sobre el que se pretende desarrollar la librer a Durante el an lisis de la t cnica de interposici n est previsto desarrollar una pequena prueba de concepto que permita tener una visi n previa de la librer a y poder as verificar su funcionamiento Terminado el estudio te rico se plantear el diseno de la librer a que se desea desarrollar En este punto se definir la estructura y la funcionalidad de la librer a La parte pr ctica del proyecto continu
46. talizaci n En la instrumentalizaci n manual es el programador quien realiza esta tarea especificando los lugares donde insertar las instrucciones de trazabilidad en el c digo fuente Librer a para an lisis din mico de programas 13 de 42 TFC Plataforma GNU Linux 1 1 GCC opciones de compilacion El compilador GCC incorpora varias extensiones para instrumentalizar el c digo fuente Una herramienta llamada gcov integrada en el compilador se puede utilizar para obtener informaci n sobre la cobertura de ejecuci n de una aplicaci n Esta herramienta es lo que se conoce como un profiler y nos permite averiguar e Que lineas del c digo fuente se ejecutan realmente e Cuantas veces se ejecutan e Y que tiempo ha consumido cada secci n del c digo Para activar esta funcionalidad hay que compilar el programa con las opciones fprofile arcs y ftest coverage Al ejecutar un programa con gcov se crean autom ticamente varios ficheros con extensiones gcno y gcda que contienen la informaci n de cobertura De este modo el an lisis se efectua despu s de ejecutar la aplicaci n 1 include lt stdio h gt 2 int main void 3 E int i total 5 1 total 6 6 IL 3 for i 0 i lt 10 i 7 10 total i 8 Ld if total 45 90 printf Failure 18 else 13 1 printf Success n 12 E return 8 13 Figura 2 Icov Interfaz gr fico de gcov Otras opciones posibles son finstrument funct
47. uraci n y diagnostico de aplicaciones Consiste b sicamente en la detecci n y grabaci n del flujo de eventos producidos durante la ejecuci n de un programa para su inmediato o posterior an lisis La idea es conocer que esta sucediendo dentro del programa o sistema para mejorarlo o mantenerlo monitorizado El termino tracing es muy similar al conocido concepto de ogging y de hecho se puede considerar un subtipo de este No es f cil hacer una clara distinci n entre ambos t rminos pues en muchos aspectos las tecnolog as se solapan y se complementan En general solemos hablar de logging cuando el registro y la grabaci n de los eventos forma parte de la funcionalidad de la aplicaci n Por ejemplo el registro de actividad del servidor web Apache o la infraestructura syslog incluida en Linux formar an parte de la categor a de logging En cambio es m s correcto hablar de tracing cuando nos referimos a macros insertadas en el c digo fuente por un desarrollador para depurar un error o cuando utilizamos herramientas de monitorizaci n como LLTng o DTrace Tabla 2 Distinci n entre Logging y Software Tracing Logging Software Tracing Enfocado a crear informes de uso y errores Enfocado al tratamiento sistematizado Genera poca informaci n de alto nivel Genera mucha informaci n de bajo nivel F cil lectura Omite duplicados Gran nivel de detalle Ruidoso Eventos categorizados Suelen seguir un est ndar Sin limitac
48. verflows e Fuzzer e Sistema de Prevenci n de Intrusos IPS oin embargo dado que el tiempo asignado al proyecto no es suficiente queda excluida la posibilidad de desarrollar cualquiera de estas herramientas en el TFC 6 Planificaci n En la tabla 1 se representan las tareas del proyecto y la agenda prevista para realizarlas Tabla 1 Lista de tareas H T tulo de la tarea Comparativa herramientas existentes An lisis de interposici n din mica en Linux o EM 8 EN Emm Eo Ae 19 Implementaci n a Jf ou Jf uo N OO Ol Librer a para an lisis din mico de programas pred Comienzo EE 02 03 2011 02 03 201 1 02 03 201 1 02 03 201 1 30 03 201 1 28 03 201 1 29 10 2011 29 03 2011 05 04 2011 12 04 2011 12 04 2011 14 04 2011 20 04 2011 25 04 2011 21 04 2011 21 04 2011 22 04 2011 02 05 2011 23 05 2011 23 11 2010 IN 9 de 42 TFC Plataforma GNU Linux Titulo de la tarea Duraci n pred Comienzo Desarrollo codigo libreria 09 05 2011 Desarrollo c digo utilidad 20 25 05 2011 Depuraci n y juego de pruebas 2199 25 05 2011 Empaquetado Producto 22 03 06 2011 n lisis y conclusiones a 06 06 2011 Evaluaci n de rendimiento 2 d as 06 06 2011 Valoraci n general 08 06 2011 ocumentaci n 10 03 2011 Redacci n Memoria 10 03 2011 Memoria y Producto 13 06 2011 Presentaci n 17 06 2011 Entrevista virtual 20 06 2011 Fin del proyecto 23 06 2011 No Oi w o gt Zim No
49. xto const char colors x1b 3 31m XxIb 3 32m0 x1b 3 33m x1b 3 34m WxIbIS 35m TAX1Ib 3 i 30m XxlIbIS 5 7m Color predeterminado const char clr_reset Ax1b 0m Puntero a la funci n interpuesta size_t real fwrite const void size_t size t void size t fwrite const void ptr size t size size t nmemb void stream Static int 1 size t ret RTLD NEXT significa buscar el simbolo en las siguientes librerias if Clreal fwrite real fwrite dlsym RTLD NEXT fwrite Escribimos el codigo para cambiar el color y luego el texto real fwrite Ccolors i1 strlen Ccolors i 1 stream ret real fwrite ptr size nmemb stream Librer a para an lisis din mico de programas ud 22 de 42 TFC Plataforma GNU Linux real fwrite clr reset strlen clr reset 1 stream Alternar los colores 1 1 1 7 return ret Figura 12 Archivo rainbow c Compilamos la funci n en una librer a compartida Las opciones de gcc para producir librer as compartidas son fPIC y shared Por ltimo ejecutamos un programa t pico que haga uso de fwrite por ejemplo el comando date y comprobamos el resultado xoms Hideo rainbow gcc fPIC shared o rainbow so rainbow c 1dl xoms Hideo rainbow date Mon May 23 00 58 10 CEST 2011 xoms Hideo rainbow LD PRELOAD rainbow so date Mon May 23 00 58 21 2011 xoms Hideo rainbow Figura 13 Ejemplo
50. y los datos del programa en la memoria de un nuevo proceso Una secci n del ELF llamada interp informa al Kernel que cargador o dynamic linker se debe utilizar El Kernel procede entonces de copiar el cargador al proceso para pasarle el control de la ejecuci n xoms Hideo readelf 1 bin sh Elf file type is EXEC Executable file Entry point 0x415b90 There are 8 program headers starting at offset 64 Program Headers Type Offset VirtAddr PhysAddr FileSiz MemSiz Flags Align PHDR 0x0000000000000040 0x0000000000400040 0x0000000000400040 0x00000000000001c0 0x00000000000001C0 RE 8 INTERP 0x0000000000000200 0x0000000000400200 0x0000000000400200 0x000000000000001a 0x000000000000001a R 1 LOAD 0x0000000000000000 0x0000000000400000 0x0000000000400000 0x00000000000a23e4 0x00000000000a23e4 RE 200000 Figura 9 Secciones de una imagen ELF 2 El cargador de Linux El programa Id linux so es a la vez el int rprete de archivos ELF y el enlazador din mico Su funci n es encontrar y vincular al programa las librer as compartidas que el programa necesita es decir las dependencias e iniciar el programa una vez inicializado Este proceso de vinculaci n o linkage se llama relocation y consiste en reemplazar las referencias a s mbolos en librer as por direcciones de memoria reales xoms Hideo ldd bin sh linux vdso so 1 gt 0x00007fff3e944000 libreadline so 6 gt lib libreadline so 6 0x00007f19d7adf000 libdl so 2 gt

Download Pdf Manuals

image

Related Search

Related Contents

- POF Netzwerkkomponenten  JVC M4S3 Camcorder User Manual  Oricom ECO5100 User's Manual  LOCALIZZATORE GPS/GSM-GPRS CON BATTERIA  S.H.Figuarts キュアビューティ 取扱説明書 515.6 KB  Fujitsu XG700 User's Manual  

Copyright © All rights reserved.
Failed to retrieve file