3.5. Dos métodos de creación de perfiles

Dada la sintaxis para perfiles de Novell AppArmor detallada en la Sección 3.1, “Componentes y sintaxis de los perfiles” (↑Guía de administración de Novell AppArmor 2.0), puede crear perfiles sin utilizar las herramientas. No obstante, proceder de este modo requiere un esfuerzo considerable. Para evitar las molestias que esto supone, utilice las herramientas de Novell AppArmor para automatizar la creación y ajuste de los perfiles.

Hay dos enfoques distintos para la creación de perfiles de Novell AppArmor, así como herramientas que permiten utilizar ambos métodos.

Perfiles independientes

Este método es adecuado para crear perfiles de pequeñas aplicaciones con un tiempo de ejecución finito, como aplicaciones clientes para el usuario (como los clientes de correo). Para obtener más información, consulte la Sección 3.5.1, “Perfiles independientes” (↑Guía de administración de Novell AppArmor 2.0).

Perfiles sistemáticos

Este método resulta adecuado para generar perfiles de un gran número de programas al mismo tiempo y para crear perfiles de aplicaciones que pueden ejecutarse durante días, semanas o de forma continua en sucesivos reinicios, como las aplicaciones de servidores de red (por ejemplo, servidores Web o de correo). Para obtener más información, consulte la Sección 3.5.2, “Perfiles sistemáticos” (↑Guía de administración de Novell AppArmor 2.0).

El desarrollo automatizado de perfiles resulta más sencillo de gestionar con las herramientas de Novell AppArmor:

  1. Decida el método de creación de perfiles que mejor se adapte a sus necesidades.

  2. Lleve a cabo un análisis estático. Ejecute genprof o autodep, dependiendo del método de perfiles que haya elegido.

  3. Habilite el aprendizaje dinámico. Active el modo de aprendizaje para todos los perfiles de programas.

3.5.1. Perfiles independientes

La generación y mejora de perfiles independientes se gestiona mediante el programa genprof. Este método resulta sencillo, dado que genprof se encarga de todo, pero también limitado, ya que requiere que genprof esté en ejecución durante toda la ejecución de prueba del programa (no podrá reiniciar el equipo mientras aún se esté desarrollando el perfil).

Para utilizar genprof a fin de emplear el método de creación de perfiles independientes, consulte Sección 3.5.3.4, “genprof” (↑Guía de administración de Novell AppArmor 2.0).

3.5.2. Perfiles sistemáticos

Este método se denomina de perfiles sistemáticos porque actualiza todos los perfiles del sistema al mismo tiempo, en lugar de centrarse en uno solo o en unos pocos, como genprof o la generación de perfiles individuales.

Con la creación de perfiles sistemáticos, la creación y mejora de los perfiles resulta algo menos automática, pero más flexible. Este método es adecuado para la generación de perfiles de aplicaciones con un tiempo de ejecución prolongado, cuyo comportamiento continúa después de los sucesivos reinicios, o bien para varios programas cuyos perfiles desee crear al mismo tiempo.

Cree un perfil de Novell AppArmor para un grupo de aplicaciones mediante el siguiente método:

  1. Cree perfiles para los programas individuales que forman la aplicación.  Aunque este enfoque es sistemático, Novell AppArmor sigue supervisando únicamente los programas con perfiles y los programas secundarios de éstos. Por lo tanto, para que Novell AppArmor tenga en cuenta un programa, deberá hacer que autodep cree al menos un perfil aproximado para él. Para crear el perfil aproximado, consulte Sección 3.5.3.1, “autodep” (↑Guía de administración de Novell AppArmor 2.0).

  2. Configure los perfiles relevantes en el modo de aprendizaje o de queja.  Active el modo de aprendizaje o de queja para todos los programas cuyo perfil desee generar, introduciendo complain /etc/apparmor.d/* en una ventana de terminal después de iniciar sesión como usuario Root.

    En el modo de aprendizaje, las solicitudes de acceso no se bloquean aunque el perfil indique que deben bloquearse. De este modo, puede llevar a cabo varias pruebas (tal y como se muestra en el Paso 3 (↑Guía de administración de Novell AppArmor 2.0)) y aprender las necesidades de acceso del programa, de modo que pueda ejecutarse de forma adecuada. Con esta información, podrá decidir el nivel de seguridad que desee emplear con el perfil.

    Consulte Sección 3.5.3.2, “Modo de aprendizaje o de queja” (↑Guía de administración de Novell AppArmor 2.0) para obtener instrucciones más detalladas para utilizar el modo de aprendizaje o de queja.

  3. Utilice la aplicación.  Ejecute la aplicación y utilice sus funciones. La utilización que desee realizar del programa es totalmente voluntaria, pero deberá hacer que el programa acceda a todos los archivos que representen sus necesidades de acceso. Dado que genprof no supervisa la ejecución, este paso puede durar días o semanas y puede prolongarse a lo largo de sucesivos reinicios totales del sistema.

  4. Analice el registro.  En los perfiles sistemáticos, ejecute logprof directamente en lugar de dejar que genprof lo ejecute (como en los perfiles individuales). El formato general de logprof es:

    logprof [ -d /vía/a/perfiles ] [ -f /vía/a/archivoregistro ]

    Consulte Sección 3.5.3.5, “logprof” (↑Guía de administración de Novell AppArmor 2.0) para obtener más información sobre la utilización de logprof.

  5. Repita los pasos 3 y 4.  De este modo se generarán perfiles optimizados. Un enfoque con repeticiones permite capturar conjuntos de datos más pequeños, que pueden incluirse en la formación y volverse a cargar en el motor de directivas. Las repeticiones subsiguientes generan menos mensajes y se ejecutan más rápidamente.

  6. Edite los perfiles.  Es posible que desee revisar los perfiles generados. Puede abrir y editar los perfiles de /etc/apparmor.d/ mediante vim. Para obtener ayuda acerca de cómo aprovechar vim al máximo, consulte Sección 3.5.3.8, “apparmor.vim” (↑Guía de administración de Novell AppArmor 2.0).

  7. Vuelva al modo de “aplicación.”.  En este modo, el sistema vuelve a aplicar las reglas de los perfiles, en lugar de limitarse a registrar información. Este paso se puede llevar a cabo manualmente, eliminando el texto flags=(complain) de los perfiles; o bien automáticamente, utilizando el comando enforce, que funciona del mismo modo que el comando complain, pero establece el modo de aplicación para los perfiles.

    Para asegurarse de que todos los perfiles dejan de estar en el modo de queja y vuelven al de aplicación, escriba el comando enforce /etc/apparmor.d/*.

  8. Vuelva a explorar todos los perfiles.  Para hacer que Novell AppArmor vuelva a explorar todos los perfiles y modifique el modo de aplicación en el núcleo, escriba el comando /etc/init.d/apparmor restart.

3.5.3. Resumen de las herramientas de generación de perfiles

Todas las utilidades de generación de perfiles de Novell AppArmor están incluidas en el paquete RPM apparmor-utils, y la mayoría de ellas se almacenan en /usr/sbin. En las siguientes secciones se presentan todas las herramientas.

3.5.3.1. autodep

Crea un perfil aproximado del programa o aplicación con que se utilice. Puede generar perfiles aproximados para archivos binarios ejecutables y para programas de guiones interpretados. Los perfiles resultantes se consideran “aproximados” porque no contienen necesariamente todas las entradas de perfil que el programa necesita para estar adecuadamente limitado por Novell AppArmor. El perfil aproximado mínimo de autodep tiene al menos una directiva include básica, que contiene las entradas de perfil básicas necesarias para la mayoría de los programas. Para algunos tipos de programas, autodep genera un perfil más amplio. El perfil se genera realizando llamadas repetidas a ldd(1) en los ejecutables incluidos en la línea de comandos.

Para generar un perfil aproximado, utilice el programa autodep. Los argumentos del programa pueden ser sencillamente el nombre del programa, que autodep averigua buscando en la variable path de la shell, o bien una vía completa. El propio programa puede ser de cualquier tipo (binario ELF, guión de shell, guión Perl, etc.) y autodep genera un perfil aproximado, que puede mejorarse mediante la generación dinámica de perfiles descrita a continuación.

El perfil aproximado resultante se escribe en el directorio /etc/apparmor.d empleando la convención de nombres de perfiles de Novell AppArmor (nombrando el perfil tras la vía completa del programa y sustituyendo los caracteres de barra invertida [/] de la vía por caracteres de punto [.]. El formato general de autodep es introducir lo siguiente en una ventana de terminal después de iniciar sesión como usuario Root:

autodep [ -d /vía/a/perfiles ] [programa1 programa2...]

Si no introduce los nombres de los programas, el sistema los solicitará. /vía/a/perfiles sobrescribe la ubicación por defecto de /etc/apparmor.d.

Para empezar a generar perfiles, debe crear perfiles para cada servicio de ejecutable principal que forme parte de la aplicación (cualquier elemento que pueda iniciarse sin ser un proceso secundario de otro programa que ya disponga de perfil). El método para encontrar estos programas dependerá de la aplicación concreta. A continuación se presentan algunas estrategias para encontrar estos programas:

del volumen

Si todos los programas cuyos perfiles desea generar se encuentran en un directorio y no hay ningún otro programa en ese directorio, el comando sencillo autodep /vía/a/los/programas/* crea perfiles nominales para todos los programas de ese directorio.

Comando ps

Puede ejecutar las aplicaciones y utilizar el comando estándar de Linux ps para encontrar todos los procesos que se estén ejecutando. A continuación, deberá rastrear manualmente la ubicación de estos programas y ejecutar el programa autodep para cada uno de ellos. Si los programas están en la vía del usuario, autodep los encontrará automáticamente. Si no lo están, el comando estándar de Linux locate puede resultar útil para encontrar los programas. Si locate no funciona (no se instala por defecto en SUSE Linux), utilice find. -name '*foo*' -print.

3.5.3.2. Modo de aprendizaje o de queja

La herramienta de modo de aprendizaje o de queja detecta las violaciones de las reglas de los perfiles de Novell AppArmor, por ejemplo, cuando el programa del perfil accede a archivos no permitidos por éste. Las violaciones se permiten, pero también quedan registradas. Para mejorar el perfil, active el modo de queja, ejecute el programa mediante un conjunto de pruebas para generar eventos de registro que caractericen las necesidades de acceso del programa, y luego realice un procesamiento posterior del registro con las herramientas de Novell AppArmor para transformar los eventos del registro en perfiles mejorados.

La activación manual del modo de queja (mediante la línea de comandos) añade un indicador a la parte superior del perfil, de modo que /bin/foo se transforma en /bin/foo flags=(complain). Para utilizar el modo de queja, abra una ventana de terminal como usuario Root e introduzca una de las siguientes líneas.

  • Si el programa de ejemplo (programa1) está en su vía, utilice:

    complain [programa1 programa2 ...]
  • Si el programa no está en su vía, especifique la vía completa del modo siguiente:

    complain /sbin/programa1 
  • Si los perfiles no se encuentran en /etc/apparmor.d, escriba lo siguiente para anular la ubicación por defecto:

    complain /vía/a/perfiles/ programa1 
  • Especifique el perfil del programa1 del modo siguiente:

    complain /etc/apparmor.d/sbin.programa1

Los comandos anteriores activan el modo de queja para los perfiles o programas incluidos. El comando puede incluir programas y perfiles. Si el nombre del programa no incluye la vía completa, complain buscará el programa en $PATH. De modo que, por ejemplo, complain /usr/sbin/* encuentra perfiles asociados a todos los programas de /usr/sbin y los configura en el modo de queja, y complain /etc/apparmor.d/* configura todos los perfiles de /etc/apparmor.d en el modo de queja.

3.5.3.3. Modo de aplicación

La herramienta de modo de aplicación detecta las violaciones de las reglas de los perfiles de Novell AppArmor, por ejemplo, cuando el programa del perfil accede a archivos no permitidos por éste. Las violaciones quedan registradas y no se permiten. El modo activado por defecto es el de aplicación. Active el modo de aplicación cuando desee que los perfiles de Novell AppArmor controlen el acceso del programa incluido en el perfil. El modo de aplicación se activa al desactivar el de queja y viceversa.

La activación manual del modo de aplicación (mediante la línea de comandos) añade un indicador a la parte superior del perfil, de modo que /bin/foo se transforma en /bin/foo flags=(enforce). Para utilizar el modo de aplicación, abra una ventana de terminal como usuario Root e introduzca una de las siguientes líneas.

  • Si el programa de ejemplo (programa1) está en su vía, utilice:

    enforce [programa1 programa2 ...]
  • Si el programa no está en su vía, especifique la vía completa del modo siguiente:

    enforce /sbin/programa1
  • Si los perfiles no se encuentran en /etc/apparmor.d, escriba lo siguiente para redefinir la ubicación por defecto:

    enforce /vía/a/perfiles/ programa1
  • Especifique el perfil del programa1 del modo siguiente:

    enforce /etc/apparmor.d/sbin.programa1

Los comandos anteriores activan el modo de aplicación para los perfiles o programas incluidos.

Si no introduce los nombres de los programas o perfiles, el sistema los solicitará. /vía/a/perfiles redefine la ubicación por defecto de /etc/apparmor.d.

El argumento puede ser una lista de programas o una lista de perfiles. Si el nombre del programa no incluye la vía completa, enforce buscará el programa en $PATH. De modo que, por ejemplo, enforce /usr/sbin/* encuentra perfiles asociados a todos los programas de /usr/sbin y los configura en el modo de aplicación, y enforce /etc/apparmor.d/* configura todos los perfiles de /etc/apparmor.d en el modo de aplicación.

3.5.3.4. genprof

genprof (abreviatura en inglés de "generador de perfiles";) es la utilidad de generación de perfiles de Novell AppArmor. Ejecuta autodep para el programa especificado, creando un perfil aproximado (si no existe ya uno), establece el modo de queja, vuelve a cargarlo en Novell AppArmor, marca el registro del sistema (syslog) y solicita al usuario que ejecute el programa y utilice sus funciones. La sintaxis es la siguiente:

genprof [ -d /vía/a/perfiles ]  programa

Por ejemplo, si desea crear un perfil para el programa del servidor Web Apache httpd2-prefork, lleve a cabo los siguientes pasos desde una shell de usuario Root:

  1. Introduzca el comando rcapache2 stop.

  2. A continuación, escriba genprof httpd2-prefork.

    A continuación, genprof hará lo siguiente:

    • Resolverá la vía completa de httpd2-prefork basándose en las variables de path de la shell. También es posible especificar una vía completa. En SUSE Linux, la vía completa es /usr/sbin/httpd2-prefork.

    • Comprueba si hay un perfil existente para httpd2-prefork. Si lo hay, lo actualiza. Si no, crea uno empleando el programa autodep, descrito en la Sección 3.5.3, “Resumen de las herramientas de generación de perfiles” (↑Guía de administración de Novell AppArmor 2.0).

      [Note]Nota

      Existe una convención de nombres que relaciona la vía completa de un programa con el nombre de archivo de su perfil, a fin de que las diferentes herramientas de perfiles de Novell AppArmor puedan manipularlos de forma coherente. La convención consiste en sustituir las barras invertidas (/) por puntos (.), de modo que el perfil de /usr/sbin/httpd2-prefork se almacene en /etc/apparmor.d/usr.sbin.httpd2-prefork.

    • Configura el perfil del programa en el modo de aprendizaje o queja, de modo que las violaciones del perfil queden registradas, pero se permitan. Un evento del registro tendría el aspecto siguiente:

      Oct  9 15:40:31 AppArmor: PERMITTING r access to /etc/apache2/httpd.conf (httpd2-prefork(6068) profile /usr/sbin/httpd2-prefork active /usr/sbin/httpd2-prefork)
    • Marca el registro del sistema (syslog) con un marcador de inicio de los eventos de registro que debe tener en cuenta. Ejemplo:

      Sep 13 17:48:52 h2o root: GenProf: e2ff78636296f16d0b5301209a04430d
  3. Cuando la herramienta lo solicite, ejecute la aplicación cuyo perfil esté generando en otra ventana de terminal y lleve a cabo tantas funciones de la aplicación como sea posible, a fin de que el modo de aprendizaje pueda registrar los archivos y directorios a los que debe acceder el programa para funcionar correctamente. Por ejemplo, introduzca rcapache2 start en una nueva ventana de terminal.

  4. Entre las siguientes opciones, seleccione las que se podrán utilizar después de ejecutar las funciones del programa:

    • S ejecuta logprof con el registro del sistema a partir del punto en el que se incluyó la marca al iniciar genprof y vuelve a cargar el perfil.

      Si existen eventos de sistema en el registro, Novell AppArmor procesa los archivos de registro del modo de aprendizaje. De este modo se generará una serie de preguntas a las que deberá responder para guiar a genprof durante el proceso de generación del perfil de seguridad.

    • F sale de la herramienta y vuelve al menú principal.

  5. Responderá a dos tipos de preguntas:

    Cada una de estas categorías genera una serie de preguntas a las que deberá responder para añadir el recurso o el programa al perfil. Las dos figuras siguientes muestran un ejemplo de cada caso. Los pasos subsiguientes describen las opciones para responder a estas preguntas.

    Ejemplo 3.1. Excepción del modo de aprendizaje: control de acceso a recursos específicos

    Leyendo entradas de registro de /var/log/messages.
    Actualizando perfiles de apparmor en /etc/apparmor.d.
    
    Perfil: /usr/sbin/xinetd
    Ejecutar: /usr/sbin/vsftpd
    
    [(H)eredar] / (P)erfil / (N)o limitado / (D)enegar / A(b)ortar / (F)inalizar)
    

    La gestión de los accesos de ejecución es compleja. Deberá decidir cuáles de los tres tipos de permisos de ejecución desea otorgar al programa:

    heredar (ix)

    El elemento secundario hereda el perfil del principal, ejecutándose con los mismos controles de acceso que éste. Este modo resulta útil cuando un programa limitado necesita llamar a otro programa limitado sin obtener los permisos del perfil del destino o perder los permisos del perfil actual. Este modo suele utilizarse a menudo cuando el programa secundario es una aplicación de ayuda, como el cliente /usr/bin/mail, que utiliza el programa inferior como un programa que divide en páginas o el navegador Web Mozilla, que utiliza el programa Acrobat para mostrar los archivos PDF.

    perfil (px)

    El elemento secundario se ejecuta utilizando su propio perfil, que debe cargarse en el núcleo. Si el perfil no se encuentra presente, los intentos de ejecutar el elemento secundario no se efectúan correctamente, ya que se deniega el permiso. Resulta útil si el programa principal invoca a un servicio global, como la búsqueda en servidores DNS o el envío por correo mediante el MTA del sistema.

    no limitado (ux)

    El elemento secundario se ejecuta completamente sin limitación, sin que se aplique ningún perfil de Novell AppArmor al recurso ejecutado.

    Ejemplo 3.2. Excepción del modo de aprendizaje: definición de permisos de ejecución para una entrada

    Añadiendo /bin/ps ix al perfil.
    
    Perfil:  /usr/sbin/xinetd Vía:     /etc/hosts.allow Nuevo modo: r
    
     [1 - /etc/hosts.allow]
    
    [(P)ermitir] / (D)enegar / (N)uevo / (G)lobal / Global con (e)xt. / A(b)ortar / (F)inalizar 

    El menú anterior muestra a Novell AppArmor sugiriendo entradas de vía de directorios a las que ha accedido la aplicación cuyo perfil está creando. Es posible que también requiera la definición de permisos de ejecución para las entradas.

    Novell AppArmor proporciona uno o varios nombres de vías o entradas include. Haciendo clic en el número de opción, seleccione una o varias de las siguientes opciones y diríjase al paso siguiente.

    [Note]Nota

    No siempre aparecen todas estas opciones en el menú de Novell AppArmor.

    #include

    Es la sección del perfil de Novell AppArmor que hace referencia a un archivo include, que proporciona permisos de acceso a los programas. Utilizando una declaración include, puede proporcionar al programa acceso a las vías de directorios o archivos que también necesiten otros programas. Al utilizar este tipo de declaraciones, podrá reducir el tamaño de los perfiles. Es recomendable seleccionar las entradas include cuando el sistema lo sugiera.

    Versión global

    Se accede haciendo clic en Global, tal y como se describe en el siguiente paso. Para obtener más información acerca de la sintaxis global, consulte la Sección 3.6, “Nombres de vías y englobamiento” (↑Guía de administración de Novell AppArmor 2.0).

    Nombre real de vía

    Vía literal a la que el programa debe acceder para ejecutarse correctamente.

  6. Después de seleccionar un nombre de vía o un archivo include, deberá procesarlos como una entrada del perfil de Novell AppArmor haciendo clic en Permitir o en Denegar. Si no está satisfecho con la entrada de vía de directorio tal y como aparece, también puede utilizar las opciones Global o Editar.

    Las opciones disponibles para procesar las entradas del modo de aprendizaje y crear el perfil son las siguientes:

    Pulse Intro

    Permite acceder a la vía de directorio seleccionada.

    Permitir

    Permite acceder a la vía de directorio seleccionada. Novell AppArmor sugiere el acceso a los permisos de archivos. Para obtener más información, consulte la Sección 3.7, “Modos de permiso de acceso a archivos” (↑Guía de administración de Novell AppArmor 2.0).

    Denegar

    Impide que el programa acceda a las entradas de vías de directorio especificadas. Novell AppArmor se mueve a continuación al evento siguiente.

    Nuevo

    Solicita introducir una regla personalizada para el evento, lo que permite especificar el tipo de expresión regular que desee. Si la expresión introducida no se adapta realmente el evento que ha solicitado la pregunta, Novell AppArmor solicita confirmación y permite volver a introducir la expresión.

    Global

    Al hacer clic en esta opción se modifica la vía de directorio (empleando comodines) para que incluya todos los archivos del directorio de entrada sugerido. Si hace doble clic se proporcionará acceso a todos los archivos y subdirectorios situados bajo el mostrado.

    Para obtener más información acerca de la sintaxis global, consulte la Sección 3.6, “Nombres de vías y englobamiento” (↑Guía de administración de Novell AppArmor 2.0).

    Global con ext.

    Modifica la vía de directorio original conservando la extensión del nombre de archivo. Por ejemplo, /etc/apache2/file.ext se convierte en /etc/apache2/*.ext, añadiendo el comodín (asterisco) en lugar del nombre de archivo. De este modo el programa puede acceder a todos los archivos de los directorios sugeridos que acaben con la extensión .ext. Si hace doble clic se proporcionará acceso a todos los archivos (con la extensión indicada) y subdirectorios bajo el mostrado.

    Editar

    Permite editar la línea seleccionada. La nueva línea editada aparecerá al final de la lista.

    Abortar

    Cancela logprof, desechando todos los cambios de reglas introducidos hasta el momento y dejando intactos todos los perfiles, sin modificarlos.

    Finalizar

    Cierra logprof, guardando todos los cambios de reglas introducidos hasta el momento y modificando todos los perfiles en consecuencia.

  7. Para ver y editar el perfil utilizando vim, introduzca vim /etc/apparmor.d/nombredelperfil en una ventana de terminal. Para habilitar los colores de sintaxis al editar un perfil de Novell AppArmor en vim, utilice los comandos :syntax on y, a continuación, :set syntax=apparmor. Para obtener más información acerca de vim y los colores de sintaxis, consulte Sección 3.5.3.8, “apparmor.vim” (↑Guía de administración de Novell AppArmor 2.0).

3.5.3.5. logprof

logprof es una herramienta interactiva que se emplea para revisar los resultados del modo de queja o aprendizaje encontrados en las entradas de syslog y, a continuación, generar nuevas entradas en los perfiles de seguridad de Novell AppArmor.

Cuando logprof se ejecuta, comienza a explorar los archivos de registro producidos en el modo de queja o aprendizaje y, si hay nuevos eventos de seguridad no cubiertos por el conjunto de perfiles existente, proporciona sugerencias para modificar el perfil. El modo de queja o aprendizaje rastrea el comportamiento del programa y lo introduce en el registro del sistema. logprof utiliza esta información para observar el comportamiento del programa.

Si un programa limitado se bifurca y ejecuta otro programa, logprof lo observa y pregunta al usuario qué modo de ejecución debe emplearse al iniciar el proceso secundario. Los siguientes modos de ejecución son opciones para iniciar el proceso secundario: ix, px y ux. Si existe un perfil distinto para el proceso secundario, la selección por defecto es px. Si no existe, el valor por defecto del perfil es ix. Los procesos secundarios con perfiles distintos han sido analizados por autodep y se cargan en Novell AppArmor si se está ejecutando.

Cuando logprof se cierra, los perfiles se actualizan con los cambios. Si el módulo AppArmor se está ejecutando, los perfiles actualizados vuelven a cargarse y si algún proceso que haya generado eventos de seguridad sigue ejecutándose en el perfil null-complain-profile, pasan a estar controlados por los perfiles adecuados.

Para ejecutar logprof, escriba logprof en una ventana de terminal tras iniciar sesión como usuario Root. También puede emplear las siguientes opciones con logprof:

logprof -d /vía/a/directorio/perfiles/

Especifica la vía completa a la ubicación de los perfiles, si no están almacenados en el directorio estándar: /etc/apparmor.d/.

logprof -f /vía/a/archivoregistro/

Especifica la vía completa a la ubicación del archivo de registro, si no se encuentra en el directorio por defecto: /var/log/messages.

logprof -m "marcador de cadena en el archivo de registro"

Marca el punto de inicio en el que logprof debe empezar a buscar en el registro del sistema. logprof hace caso omiso de todos los eventos del sistema antes de encontrar la marca especificada. Si la marca contiene espacios, debe estar entre comillas para que funcione correctamente. Ejemplo: logprof -m e2ff78636296f16d0b5301209a04430d

logprof explora el registro, preguntando al usuario cómo desea gestionar cada evento registrado. Cada pregunta presenta una lista numerada de reglas de Novell AppArmor que pueden añadirse pulsando el número del elemento en la lista.

logprof busca por defecto los perfiles en /etc/apparmor.d/ y explora el registro de /var/log/messages, de modo que, en la mayoría de los casos, ejecutar logprof como usuario Root basta para crear el perfil.

No obstante, es posible que en ocasiones necesite realizar búsquedas en archivos de registro almacenados, por ejemplo si el periodo de ejecución del programa supera a la ventana de rotación del registro (momento en el que se almacena el archivo de registro y se inicia uno nuevo). Si se da el caso, puede introducir zcat -f `ls -1tr /var/log/messages*` | logprof -f -.

3.5.3.6. logprof (ejemplo 1)

A continuación encontrará un ejemplo de cómo logprof gestiona el acceso de httpd2-prefork al archivo /etc/group. El ejemplo utiliza corchetes [] para indicar la opción por defecto.

En este ejemplo, el acceso a /etc/group forma parte del acceso de httpd2-prefork a los servicios de nombres. La respuesta adecuada es 1, que activa un conjunto predefinido de reglas de Novell AppArmor. Al seleccionar 1 para utilizar la declaración #include, el paquete de servicios de nombres resuelve todas las futuras preguntas relacionadas con búsquedas DNS y también hace que el perfil sea más sólido, al lograr que cualquier cambio en la configuración DNS y en el paquete de perfiles de servicios de nombres asociado pueda realizarse en un solo paso, sin necesidad de revisar muchos perfiles.

Perfil:  /usr/sbin/httpd2-prefork 
Vía:     /etc/group 
Nuevo modo: r

[1 - #include <abstractions/nombredelservicio>]
 2 - /etc/group 
[(P)ermitir] / (D)enegar / (N)uevo / (G)lobal / Global con (e)xt. / A(b)ortar / (F)inalizar

Seleccione una de las siguientes respuestas:

Pulse Intro

Permite acceder a la vía de directorio seleccionada.

Permitir

Permite acceder a la vía de directorio seleccionada. Novell AppArmor sugiere el acceso a los permisos de archivos. Para obtener más información acerca de este tema, consulte la Sección 3.7, “Modos de permiso de acceso a archivos” (↑Guía de administración de Novell AppArmor 2.0).

Denegar

Impide que el programa acceda a las entradas de vías de directorio especificadas. Novell AppArmor se mueve a continuación al evento siguiente.

Nuevo

Solicita introducir una regla personalizada para el evento, lo que permite especificar el tipo de expresión regular que desee. Si la expresión introducida no se adapta realmente el evento que ha solicitado la pregunta, Novell AppArmor solicita confirmación y permite volver a introducir la expresión.

Global

Al hacer clic en esta opción se modifica la vía de directorio (empleando comodines) para que incluya todos los archivos del directorio de entrada sugerido. Si hace doble clic se proporcionará acceso a todos los archivos y subdirectorios situados bajo el mostrado.

Para obtener más información acerca de la sintaxis de englobamiento, consulte la Sección 3.6, “Nombres de vías y englobamiento” (↑Guía de administración de Novell AppArmor 2.0).

Global con ext.

Modifica la vía de directorio original conservando la extensión del nombre de archivo. Por ejemplo, /etc/apache2/file.ext se convierte en /etc/apache2/*.ext, añadiendo el comodín (asterisco) en lugar del nombre de archivo. De este modo el programa puede acceder a todos los archivos de los directorios sugeridos que acaben con la extensión .ext. Si hace doble clic se proporcionará acceso a todos los archivos (con la extensión indicada) y subdirectorios bajo el mostrado.

Editar

Permite editar la línea seleccionada. La nueva línea editada aparecerá al final de la lista.

Abortar

Cancela logprof, desechando todos los cambios de reglas introducidos hasta el momento y dejando intactos todos los perfiles, sin modificarlos.

Finalizar

Cierra logprof, guardando todos los cambios de reglas introducidos hasta el momento y modificando todos los perfiles en consecuencia.

3.5.3.7. logprof (ejemplo 2)

En un ejemplo de generación de perfil para vsftpd, observamos esta pregunta:

Perfil:  /usr/sbin/vsftpd 
Vía:     /y2k.jpg 
Nuevo modo: r

[1 - /y2k.jpg]

(P)ermitir / [(D)enegar] / (N)uevo / (G)lobal / Global con (e)xt. / A(b)ortar / (F)inalizar 

En esta pregunta aparecen varios elementos de interés. En primer lugar, tenga en cuenta que vsftpd está solicitando una entrada de vía en la parte superior del árbol, aunque vsftpd en SUSE Linux sirve archivos FTP desde /srv/ftp por defecto. Esto se debe a que httpd2-prefork utiliza chroot y, para la parte de código dentro de chroot, Novell AppArmor observa acceso a archivos en el entorno de chroot en lugar de en la vía completa global.

El segundo elemento de interés es que es posible que desee conceder acceso de lectura FTP a todos los demás archivos JPEG del directorio, por lo que puede utilizar Global con ext. y emplear la vía sugerida de /*.jpg. Al hacerlo se contraen las reglas anteriores, proporcionando acceso a archivos .jpg individuales e impidiendo cualquier pregunta futura relacionada con el acceso a los archivos .jpg.

Finalmente, es posible que desee proporcionar un acceso más general a los archivos del FTP. Si selecciona Global en la última entrada, logprof sustituye la vía sugerida de /y2k.jpg por /*. O bien es posible que desee proporcionar un acceso aún mayor a todo el árbol de directorios, en cuyo caso podría utilizar la opción de vía Nuevo e introducir /**.jpg (que normalmente proporcionaría acceso a todos los archivos .jpg en todo el árbol de directorios) o bien /** (que proporcionaría acceso a todos los archivos del árbol de directorios).

Los pasos descritos anteriormente se refieren al acceso de lectura. Los accesos de escritura son similares, excepto por el hecho de que es recomendable ser más conservador en el uso de expresiones regulares para dicho tipo de acceso.

La gestión de los accesos de ejecución es más compleja. Deberá decidir cuáles de los tres tipos de permisos de ejecución desea otorgar:

heredar (ix)

El elemento secundario hereda el perfil del principal, ejecutándose con los mismos controles de acceso que éste. Este modo resulta útil cuando un programa limitado necesita llamar a otro programa limitado sin obtener los permisos del perfil del destino o perder los permisos del perfil actual. Este modo suele utilizarse a menudo cuando el programa secundario es una aplicación de ayuda, como el cliente /usr/bin/mail, que utiliza el programa inferior como un programa que divide en páginas o el navegador Web Mozilla, que utiliza el programa Acrobat para mostrar los archivos PDF.

perfil (px)

El elemento secundario se ejecuta utilizando su propio perfil, que debe cargarse en el núcleo. Si el perfil no se encuentra presente, los intentos de ejecutar el elemento secundario no se efectúan correctamente, ya que se deniega el permiso. Resulta útil si el programa principal invoca a un servicio global, como la búsqueda en servidores DNS o el envío por correo mediante el MTA del sistema.

no limitado (ux)

El elemento secundario se ejecuta completamente sin limitación, sin ningún perfil de Novell AppArmor aplicado al recurso ejecutado.

En el siguiente ejemplo, se está generando el perfil del cliente de correo /usr/bin/mail y logprof ha detectado que /usr/bin/mail ejecuta /usr/bin/less, una aplicación de ayuda que “divide en páginas” los mensajes de correo largos. En consecuencia, presenta el siguiente indicador:

/usr/bin/nail -> /usr/bin/less
(H)eredar / (P)erfil / (N)o limitado / (D)enegar
[Tip]Sugerencia

El archivo ejecutable real de /usr/bin/mail resulta ser /usr/bin/nail (no es un error tipográfico).

El programa /usr/bin/less parece ser un programa sencillo para desplazarse por el texto que tiene más de una pantalla de largo (y de hecho, es para lo que emplea /usr/bin/mail). No obstante, less es en realidad un programa grande y potente que hace uso de muchas otras aplicaciones de ayuda, como tar y rpm.

[Tip]Sugerencia

Ejecute less con un archivo tarball o un archivo RPM y accederá al inventario de estos contenedores.

No desea que rpm se ejecute automáticamente al leer mensajes de correo (esto conduciría directamente a ataques de virus similares a los de Microsoft* Outlook, dado que rpm puede instalar y modificar programas en el sistema) por lo que, en este caso, la mejor elección es Heredar. De este modo, el programa less se ejecuta en este contexto con el perfil de /usr/bin/mail. Esto tiene dos consecuencias:

  • Deberá añadir todos los accesos a archivos básicos para /usr/bin/less al perfil de /usr/bin/mail.

  • Podrá evitar añadir las aplicaciones de ayuda, como tar y rpm, al perfil de /usr/bin/mail, de modo que cuando /usr/bin/mail ejecute /usr/bin/mail/less en este contexto, el programa less sea menos peligroso de lo que resultaría sin la protección de Novell AppArmor.

En otras circunstancias, puede que sea preferible emplear la opción Perfil. Esto tiene dos efectos en logprof:

  • La regla escrita en el perfil es px, lo que fuerza la transición al perfil propio del elemento secundario.

  • logprof construye un perfil para el elemento secundario y empieza a construirlo, del mismo modo que construye el perfil principal, atribuyendo eventos del proceso secundario al perfil secundario y haciendo preguntas como las anteriores al usuario de logprof.

Finalmente, es posible que desee proporcionar al proceso secundario un gran nivel acceso especificando No limitado. De esta forma se escribe ux en el perfil principal, de modo que, cuando el programa secundario se ejecute, lo hará sin que se aplique ningún perfil de Novell AppArmor en absoluto. Esto implica una ejecución sin protección, y sólo debe emplearse cuando sea absolutamente necesario.

3.5.3.8. apparmor.vim

Un archivo de coloreado de sintaxis para el editor de texto vim destaca con colores las distintas funciones de un perfil de Novell AppArmor. Mediante vim y el modo de sintaxis de Novell AppArmor, podrá ver las implicaciones semánticas de los perfiles gracias a los colores destacados. Utilice vim para ver y editar los perfiles, escribiendo vim en una ventana de terminal.

Para habilitar los colores de sintaxis al editar un perfil de Novell AppArmor en vim, utilice los comandos :syntax on y, a continuación, :set syntax=apparmor. Si lo desea, puede incluir estas líneas en el archivo ~/.vimrc:

syntax on
set modeline
set modelines=5

Al habilitar esta función, vim aplicará colores a las líneas del perfil:

Azul

Líneas #include que activan otras reglas y comentarios de Novell AppArmor, que comienzan por #.

Blanco

Líneas normales de acceso de lectura.

Marrón

Declaraciones de capacidad e indicadores de queja.

Amarillo

Líneas que proporcionan acceso de escritura.

Verde

Líneas que proporcionan permiso de ejecución (ix o px).

Rojo

Líneas que proporcionan acceso sin limitación (ux).

Fondo rojo

Errores de sintaxis que no se cargarían correctamente en los módulos de AppArmor.

[Note]Nota

Existe un riesgo de seguridad al emplear estas líneas en el archivo .vimrc, dado que harían que vim confiase en el modo de sintaxis presentado en los archivos que está editando. Un atacante podría enviar un archivo de vim diseñado para llevar a cabo acciones peligrosas al abrirse.

Utilice las páginas Man sobre apparmor.vim y vim y la sintaxis :help desde el editor vim para obtener ayuda adicional sobre la función para destacar la sintaxis. La sintaxis de Novell AppArmor se almacena en /usr/share/vim/current/syntax/apparmor.vim.

3.5.3.9. Unconfined

El comando unconfined examina los puertos de red abiertos del sistema, los compara con el conjunto de perfiles cargados en el sistema y emite un informe sobre los servicios de red que no disponen de perfiles de Novell AppArmor. Requiere privilegios de usuario Root y no estar limitado por un perfil de Novell AppArmor.

El comando unconfined debe ejecutarse como usuario Root para recuperar el enlace al ejecutable del proceso desde el sistema de archivos de procesos. Este programa es susceptible a las siguientes limitaciones de ejecución:

  • Gestión incorrecta de los ejecutables no enlazados.

  • Los ejecutables iniciados antes de que se cargara su perfil de Novell AppArmor no aparecen en los resultados, aunque se estén ejecutando sin limitación.

  • Los procesos finalizados entre netstat(8) y las comprobaciones sucesivas no se gestionan.

[Note]Nota

El programa sólo registra los procesos que utilizan los protocolos TCP y UDP. En resumen, este programa no es adecuado para usos forenses y sólo se proporciona como ayuda para aplicar perfiles a todos los procesos que acceden a la red.

Para obtener más información sobre los fundamentos científicos y la seguridad de Novell AppArmor, consulte los siguientes documentos:

SubDomain: Parsimonious Server Security (SubDomain: Seguridad austera para servidores) de Crispin Cowan, Steve Beattie, Greg Kroah-Hartman, Calton Pu, Perry Wagle y Virgil Gligor.

Describe el diseño y la implementación iniciales de Novell AppArmor. Publicado en las actas de la conferencia USENIX LISA (diciembre de 2000, Nueva Orleans, Luisiana).

Este documento no está actualizado y describe una sintaxis y funciones que se diferencian del producto Novell AppArmor actual. Este documento sólo debe utilizarse como material científico y no como documentación técnica.

Defcon Capture the Flag: Defending Vulnerable Code from Intense Attack (Defcon, capturar la bandera: defensa de código vulnerable ante ataques intensivos) de Crispin Cowan, Seth Arnold, Steve Beattie, Chris Wright y John Viega.

Una buena guía para el uso táctico y estratégico de Novell AppArmor para resolver programas de seguridad serios en un breve período de tiempo. Publicado en las actas de la conferencia y exposición de supervivencia de la información de DARPA (DISCEX III), en abril de 2003 (Washington, DC).