Skip to content

Latest commit

 

History

History
187 lines (141 loc) · 8.44 KB

apparmor-opensuse.md

File metadata and controls

187 lines (141 loc) · 8.44 KB
Curso       : 202021, 201920, 201819, 201718
Area        : Sistemas operativos, monitorización, seguridad.
Descripción : Configuración de AppArmor en modo monitorización.
              Configuración de AppArmor en modo seguridad.
Requisitos  : GNU/Linux OpenSUSE Leap 15
              Es recomendable trabajar antes la actividad de
              "Audit" (eventos locales).
Tiempo      : 5 sesiones

AppArmor (OpenSUSE)

Para esta práctica vamos a usar una MV con SO OpenSUSE.

1. AppArmor: Teoría/explicación

Enlaces de interés:

1.1 Modos de trabajo

La herramienta AppArmor tiene dos modos de trabajo. Estos son:

  • complain/learning: Modo de queja/aprendizaje.
  • enforce: Fuerza la aplicación de las políticas/reglas.

Para controlar el servicio AppArmor tenemos los siguientes comandos:

  • systemctl status apparmor, ver el estado del servicio
  • systemctl start apparmor, iniciar el servicio
  • systemctl stop apparmor, parar el servicio
  • systemctl enable apparmor, activar inicio automático
  • systemctl disable apparmor, desactivar inicio automático

Otras herramientas CLI de AppArmor

  • autodep, Guess basic AppArmor profile requirements.
  • enforce, Set an AppArmor profile to enforce mode from complain mode.
  • logprof, Manage AppArmor profiles.
  • unconfined, Output a list of processes with open tcp or udp ports that do not have AppArmor profiles loaded.

1.2 Yast

  • Gestión de los perfiles AppArmor la podemos hacer también con Yast: Yast -> Configuración AppArmor.
  • Yast Permite
    1. Cambiar la configuración de AppArmor.
    2. Gestionar los perfiles existentes.
    3. Crear un perfil manualmente.

1.3 Los perfiles

El perfil es una configuración de seguridad que establece que permisos tiene un determinado ejecutable.

Herramientas como aa-genprof, nos pueden ayudar a crear el perfil:

Enlaces de interés:


2. AppArmor: Práctica

Ver el siguiente vídeo de 9min, que explica cómo usar el comando aa-genprof de AppArmor para crear un perfil de seguridad a un programa concreto.

Durante la práctica vamos a trabajar con dos terminales al mismo tiempo:

Terminal Usuario Directorio de trabajo
terminal 1 nombre-del-alumno /home/nombre-alumno/aa
terminal 2 root /etc/apparmor.d

2.1 Preparativos

  • Abrimos una sesión de comandos ("terminal1") con nuestro usuario nombre-alumno.
  • Crear el directorio /home/nombre-alumno/aa/.
  • Copiar el programa(fichero) /usr/bin/cp con el nuevo nombre /home/nombre-alumno/aa/mycopy.
  • Crear lo siguiente:
    • Crear directorio DIRNAME1 (/home/nombre-alumno/aa/elhalcon/)
    • DIRNAME1/han.txt: Escribir en el contenido "nombre-del-alumnoXX".
    • DIRNAME1/chewaka.txt: Escribir en el contenido "nombre-del-alumnoXX".
    • DIRNAME1/leia.txt: Escribir en el contenido "nombre-del-alumnoXX".
    • Crear directorio DIRNAME2 (/home/nombre-alumno/aa/ciudad-nube/)
  • Probamos a copiar archivos con nuestro comando mycopy.
    • cd /home/nombre-alumno/aa/
    • ./mycopy DIRNAME1/* DIRNAME2
    • tree, comprobamos el resultado.
  • rm DIRNAME2/*, limpiamos el directorio.

2.2 Generar el perfil

  • Abrimos una sesión de comandos ("terminal 2") con el usuario root.
    • cd /etc/apparmor.d, nos movemos al directorio donde se guardan los perfiles.
    • ls, para ver los perfiles que hay.
    • aa-genprof /home/nombre-alumno/aa/mycopy, para iniciar la generación de un perfil. Este programa se queda en espera.

Volvemos a la "terminal 1":

  • Ejecutamos el comando de copia ./mycopy DIRNAME1/* DIRNAME2. Mientras hacemos esta acción, se está registrando toda su actividad.

El objetivo es hacer las acciones con este programa, mientras está siendo auditado por aa-genprof.

Vamos a la "terminal2".

  • Pulsamos "S" para comenzar el Scan.
  • Permitir acceso de lectura a la ruta DIRNAME1/*
  • Permitir acceso de escritura a la ruta DIRNAME2/*
  • Pulsamos S para grabar el perfil.
  • ls, debemos ver el nuevo perfil creado. Esto es, debemos tener el fichero home.aa.nombre-alumno.mycopy como un perfil más de AppArmor.

2.3 Comprobamos

Estamos en el "terminal 2" (como root).

  • Estamos en la ruta /etc/apparmor.d, donde se guardan los perfiles.
  • cat home.nombre-alumno.aa.mycopy, veamos el contenido del fichero para ver el contenido del perfil. El perfil es un fichero de texto que se puede modificar si es necesario. Lo importante tener las siguientes reglas:
    1. Permitir ejecución de mycopy (mr).
    2. Permitir lectura DIRNAME1/* (r).
    3. Permitir escritura en DIRNAME2/* (w).

2.4 Revisar Audit

Revisar la configuración de audit para que permita registrar eventos.

  • Editar /etc/audit/rules.d/audit.rules.
  • Comentar la línea -a never,task.
  • systemctl restart auditd, reiniciamos el servicio "auditd", para que detecte el cambio realizado.

3. Forzamos el perfil

3.1 Preparativos

Seguimos en la "terminal 2".

  • aa-enforce home.nombre-alumno.aa.mycopy, para forzar el cumplimiento del perfil para el programa mycopy.

Volvemos a la "terminal 1"

  • rm DIRNAME2/*; tree, para limpiar y comprobar.
  • ./mycopy DIRNAME1/* DIRNAME2. Se supone que el perfil permite realizar esta acción.
  • tree, comprobamos el resultado.
  • Comprobamos que todo funciona igual de bien que siempre.
  • Crear directorio DIRNAME3 (/home/nombre-alumno/aa/nave-imperial)
  • ./mycopy DIRNAME1/* DIRNAME3, debemos tener un problema de permisos. Esto es correcto, porque nuestro perfil de seguridad no lo permite.
  • tree, comprobamos que no se han copiado los archivos.

3.2 Comprobamos

Vamos a "terminal 2".

  • apparmor_status | grep "profiles are in" -A 6 para consultar el estado de los perfiles.
  • ausearch -x mycopy | grep DENIED | wc -l, este comando cuenta todas las líneas del fichero de log (eventos) denegados de "mycopy".
  • ausearch -x mycopy | grep ALLOWED | wc -l, este comando cuenta todas las líneas del fichero de log (eventos) permitidos de "mycopy".

NOTA:

  • ausearch -c mycopy | aureport -u, consultamos los eventos registrados asociados a nuestro ejecutable.
  • La opción -c (--comm comm-name) significa: Search for an event based on the given comm name. The comm name is the executable's name from the task structure.
  • La opción -x (--executable executable) significa: Search for an event matching the given executable name.

4. Modo queja

4.1 Perfil en modo queja

Vamos a "terminal 2".

  • aa-complain home.nombre-alumno.aa.mycopy, ponemos el perfil en modo queja. De esta forma no se prohíbe ninguna acción, pero sí se quedan registradas (auditoría).

Volvemos a la "terminal 1".

  • tree, comprobamos el contenido de los directorios.
  • ./mycopy DIRNAME1/* DIRNAME3, ahora sí debe funcionar el ejecutable.
  • tree, comprobamos que se han copiado los archivos.

4.2 Comprobamos

Vamos a "terminal 2".

  • apparmor_status | grep "profiles are in" -A 6 para consultar el estado de los perfiles.
  • ausearch -x mycopy | grep DENIED | wc -l, este comando cuenta todas las líneas del fichero de log (eventos) denegados de "mycopy".
  • ausearch -x mycopy | grep ALLOWED | wc -l, este comando cuenta todas las líneas del fichero de log (eventos) permitidos de "mycopy".
  • ausearch -c mycopy | aureport -u, consultamos los eventos registrado asociados a nuestro ejecutable.

ANEXO