LaunchAgents y daemons en OS X

Hay dos tipos de archivos en OS X que gestionan proceso del sistema: son los launchAgents y los daemons, gestionados por launchd, un sistema unificado de gestión de servicios open source diseñado para iniciar, parar y gestionar daemons, aplicaciones, procesos y scripts. Launchd fue diseñado y escrito por Dave Zarzycki para Apple, y fue introducido por vez primera en Mac OS X 10.4 Tiger además de estar disponible para otros sistemas operativos bajo la licencia Apache. Pero volvamos a los launchAgents y los daemons.

Los launchAgents son dependientes de un usuario. Así, es necesario que OS X inicie una cuenta de usuario para que los launchAgents de ese usuario se pongan en marcha e inicien los procesos a los que hacen referencia. Estos procesos se ejecutan en segundo plano y son capaces de interactuar con el interfaz del sistema, cosa que los daemons no pueden hacer. A daemons no se les permite conectar con el servidor de ventanas (por lo que no tienen interfaz) y no dependen de un usuario sino que se arrancan con el propio sistema.

Ambos dos, como hemos visto antes, están gestionados por launchd que obliga a ejecutar esos procesos bajo unos parámetros que están almacenados en unos archivos plist en tres ubicaciones del disco duro concretas: una de ellas específica del sistema, una segunda para todos los usuarios del ordenador y una tercera (que pueden ser varias) por cada usuario que tiene una cuenta en el Mac.

Así nos vamos a encontrar con dos carpetas por cada uno de estos niveles, almacenadas en la correspondiente Librería: éstas carpeta LaunchAgents y LaunchDaemons y están ubicadas en:

  • Para el sistema en /System/Library/
  • Para todos los usuarios en /Library/
  • Para cada usuario en ~/Library/

Por defecto, ninguna aplicación debería poder acceder o instalar ni daemons ni launchAgents en la Librería del Sistema como medida de seguridad. De hecho, los permisos para ambas carpetas para lectura y escritura solo pertenecen al sistema, mientras que wheel y el resto de los usuarios pueden leerlas. Evidentemente, es factible modificar el sistema para instalar allí tanto las aplicaciones que dependen de los archivos plist como los propios archivos plist, pero ni es recomendable ni en ocasiones, necesario salvo que queramos que el sistema ejecute servicios “antes” de que se cargue el propio interfaz e incluso una cuenta de usuario.

Los archivos plist, por otra parte, no son más que archivos de configuración con una estructura XML concreta, destinada a pasar una serie de parámetros o instrucciones a realizar por aplicaciones. Al ser archivos de texto, es sencillo poder escribir nuestros propios servicios o modificar los existentes (siempre sabiendo lo que tenemos entre manos). Lo más importante que debes saber al respecto de estos archivos plist es que hacen referencia a las aplicaciones que van a ejecutar, lo que es muy interesante sobre todo para hacer un seguimiento forense de seguridad.

Cuando inspeccionamos un plist para ambos tipos de carpeta, podemos encontrar un <string> que suele hacer referencia a la aplicación (que no tiene por qué ser una aplicación “de escritorio” tal como la conocemos) que se arrancará al inicio o de una forma puntual  se ejecutará como un proceso más que podemos controlar en el Monitor de Actividad.

Muchas aplicaciones que instalamos crean este tipo de archivos plist, especialmente aquellas que gestionan o sobrepasan servicios del sistema, como por ejemplo drivers para hardware específico (ratones, teclados, servicios de red, aplicaciones que monitorizan el comportamiento de OS X o esperan órdenes del mismo, etc.) y cuando desinstalamos éstas aplicaciones, generalmente estos archivos plist se suelen quedar atrás. Adicionalmente, el malware suele utilizar este tipo de archivos para lanzar launchAgents y que las aplicaciones dependientes del malware se ejecuten a plazos regulares para recopilar información y enviarla a los servidores que la recogen o para recibir órdenes de los mismos.

Es, por esto, una buena idea mantener controlados los plist que se instalan en las correspondientes carpetas y adicionalmente, controlar a las aplicaciones a las que referencian en busca no solo de malware, sino de información para la completa desinstalación de un driver o de una aplicación. Especialmente críticas son las propias carpetas de usuario y la librería general para todos los usuarios, que serán posiblemente el destino para esos archivos plist.

También es el caso de que te puedes encontrar en los ítems de arranque con un daemon o aplicación que se ejecuta cada vez que arrancas tu usuario: la retiras utilizando el interfaz pero al volver a arrancar el ordenador o a iniciar sesión vuelve a estar allí, y aparentemente no hay forma de eliminarla: el proceso es buscar el archivo plist correspondiente (cuyo nombre debería identificar fácilmente el daemon o aplicación al que hace referencia el ítem de arranque dentro del archivo de texto), recuperar la ruta para luego poder eliminarla junto con el archivo plist.

Hay diferentes maneras de mantener controladas estas carpetas, pero para una gestión inmediata de las mismas, es factible utilizar las Acciones de Carpeta para que generen un aviso cuando se añada un nuevo plist a a cada una de ellas. La forma de realizar esto es muy sencilla; navega por la estructura de archivos hasta las correspondientes carpetas de la lista:

  • /Library/LaunchAgents
  • /Library/LaunchDaemons
  • /System/Library/LaunchAgents
  • /System/Library/LaunchDaemons
  • ~/Library/LaunchAgents

invoca el menú contextual para acceder a los Servicios y selecciona la opción Configuración de Acciones de Carpeta. Añade una acción del tipo “add-new ítem alert.scpt» y así, cuando se añada algún tipo de archivo a esas carpetas (deberás repetir esta acción para cada una de ellas) se te notificará con un cuadro de diálogo en el que se te indica en qué carpeta se ha añadido y si quieres acceder a la misma para verificar el contenido de la carpeta e inspeccionar el archivo.

10 Comments

  1. Alquimista

    – Abro el artículo,
    – Leo el artículo,
    – Clico en ‘Agradecer al autor’,
    – Guardo artículo en mi almacén de artículos interesantes.

    Para gustos e intereses los colores :mrgreen:

    Por cierto gorgioesponja, el libro se agradecerá porque siempre se puede aprender algo nuevo o [i]simplemente[/i] comprender cómo funciona pero, para el común de los mortales, ¿merece la pena cuando el Server cuesta 17,99€? Con eso no se paga ni una hora de mi tiempo…

  2. chupacabras

    #3 Pues si que vale la pena. Primero porque lo has montado tu, segundo porque sabes donde se toca cada cosa (y si falla sabes donde tocar y arreglar) y tercero, porque veras cuando te quieren meter dinero por cosas que son gratis (aunque sea 1 euro, me da igual no es dinero, es que te quieran tomar el pelo) como los amigos que usan el XMAPP, lo pagan y luego van a un servidor de explotación encontrandose con problemas.

  3. chupacabras

    #5 es una aplicación muy curiosa para cuando te montas el XML no se te olvide cerrar o al cerrarlo, como todo el mundo escribimos mal, nos equivocamos.

    Siempre se agradecen esas cosas.

Deja una respuesta