kmonticolo.ansible_os_hardening

os-hardening (Papel de Ansible)

Estado de Construcción Chat de Gitter Ansible Galaxy

Descripción

Este papel proporciona numerosas configuraciones relacionadas con la seguridad, ofreciendo una protección básica integral. Está diseñado para ser compatible con la DevSec Linux Baseline.

Configura:

  • Gestión de paquetes, es decir, permite solo paquetes firmados
  • Elimina paquetes con problemas conocidos
  • Configura el módulo pam y pam_limits
  • Configuración del conjunto de contraseñas ocultas
  • Configura permisos de ruta del sistema
  • Desactiva volcados de memoria mediante límites suaves
  • Restringe inicios de sesión de root a la consola del sistema
  • Establece SUIDs
  • Configura parámetros del núcleo a través de sysctl
  • Instala y configura auditd

No hará:

  • Actualizar paquetes del sistema
  • Instalar parches de seguridad

Requisitos

  • Ansible 2.5.0

Advertencia

Si utilizas inspec para probar tus máquinas después de aplicar este rol, asegúrate de agregar el usuario que conecta a la variable os_ignore_users. De lo contrario, inspec fallará. Para más información, consulta issue #124.

Si estás utilizando Docker / Kubernetes+Docker, necesitarás sobrescribir la configuración de reenvío de IP ipv4 en sysctl.

- hosts: localhost
  roles:
    - dev-sec.os-hardening
  vars:
    sysctl_overwrite:
      # Habilita el reenvío de tráfico IPv4.
      net.ipv4.ip_forward: 1

Variables

Nombre Valor por Defecto Descripción
os_desktop_enable false verdadero si este es un sistema de escritorio, es decir, Xorg, KDE/GNOME/Unity/etc
os_env_extra_user_paths [] agregar rutas adicionales a la variable PATH del usuario (el valor por defecto es vacío).
os_env_umask 027 establece permisos predeterminados para nuevos archivos a 750
os_auth_pw_max_age 60 edad máxima de la contraseña (establecer en 99999 para deshabilitar efectivamente)
os_auth_pw_min_age 7 edad mínima de la contraseña (antes de permitir cualquier otro cambio de contraseña)
os_auth_retries 5 el número máximo de intentos de autenticación, antes de que la cuenta se bloquee por un tiempo
os_auth_lockout_time 600 tiempo en segundos que debe pasar, si la cuenta fue bloqueada debido a demasiados intentos de autenticación fallidos
os_auth_timeout 60 tiempo de espera de autenticación en segundos, por lo que el inicio de sesión saldrá si pasa este tiempo
os_auth_allow_homeless false verdadero si se permite que usuarios sin hogar inicien sesión
os_auth_pam_passwdqc_enable true verdadero si deseas usar verificación de contraseñas seguras en PAM usando passwdqc
os_auth_pam_passwdqc_options "min=disabled,disabled,16,12,8" establece cualquier línea de opción (como una cadena) que deseas pasar a passwdqc
os_security_users_allow [] lista de acciones que un usuario puede realizar. Puede contener change_user.
os_security_kernel_enable_module_loading true verdadero si deseas permitir cambiar módulos del núcleo una vez que el sistema esté en funcionamiento (ej. modprobe, rmmod)
os_security_kernel_enable_core_dump false el núcleo está fallando o comportándose mal y se crea un volcado del núcleo
os_security_suid_sgid_enforce true verdadero si deseas reducir los bits SUID/SGID. Ya hay una lista de elementos que se buscan configurados, pero también puedes agregar los tuyos
os_security_suid_sgid_blacklist [] una lista de rutas que deberían tener sus bits SUID/SGID eliminados
os_security_suid_sgid_whitelist [] una lista de rutas que no deberían tener sus bits SUID/SGID alterados
os_security_suid_sgid_remove_from_unknown false verdadero si deseas eliminar bits SUID/SGID de cualquier archivo que no esté configurado explícitamente en una blacklist. Esto hará que cada ejecución de Ansible busque a través de los sistemas de archivos montados buscando bits SUID/SGID que no están configurados en la lista negra predeterminada y de usuario. Si encuentra un bit SUID/SGID, será eliminado, a menos que este archivo esté en tu whitelist.
os_security_packages_clean true elimina paquetes con problemas conocidos. Consulta la sección de paquetes.
ufw_manage_defaults true verdadero significa aplicar todas las configuraciones con el prefijo ufw_
ufw_ipt_sysctl '' de forma predeterminada desactiva IPT_SYSCTL en /etc/default/ufw. Si deseas sobrescribir los valores de /etc/sysctl.conf usando ufw - configúralo a tu diccionario de sysctl, por ejemplo, /etc/ufw/sysctl.conf
ufw_default_input_policy DROP establece la política de entrada predeterminada de ufw a DROP
ufw_default_output_policy ACCEPT establece la política de salida predeterminada de ufw a ACCEPT
ufw_default_forward_policy DROP establece la política de reenvío predeterminada de ufw a DROP
os_auditd_enabled true Establecer en falso para deshabilitar la instalación y configuración de auditd.

Paquetes

Eliminamos los siguientes paquetes:

  • xinetd (NSA, Capítulo 3.2.1)
  • inetd (NSA, Capítulo 3.2.1)
  • tftp-server (NSA, Capítulo 3.2.5)
  • ypserv (NSA, Capítulo 3.2.4)
  • telnet-server (NSA, Capítulo 3.2.2)
  • rsh-server (NSA, Capítulo 3.2.3)
  • prelink (open-scap)

Sistemas de archivos deshabilitados

Deshabilitamos los siguientes sistemas de archivos, porque probablemente no se utilicen:

  • "cramfs"
  • "freevxfs"
  • "jffs2"
  • "hfs"
  • "hfsplus"
  • "squashfs"
  • "udf"
  • "vfat" # solo si no se utiliza uefi

Para evitar que algunos de los sistemas de archivos sean deshabilitados, agrégales a la variable os_filesystem_whitelist.

Instalación

Instala el rol con ansible-galaxy:

ansible-galaxy install dev-sec.os-hardening

Ejemplo de Playbook

- hosts: localhost
  roles:
    - dev-sec.os-hardening

Cambiando variables de sysctl

Si deseas sobrescribir las variables de sysctl, puedes usar la variable sysctl_overwrite (en versiones más antiguas tenías que sobrescribir todo el sysctl_dict). Por ejemplo, si deseas cambiar la variable de reenvío de tráfico IPv4 a 1, hazlo así:

- hosts: localhost
  roles:
    - dev-sec.os-hardening
  vars:
    sysctl_overwrite:
      # Habilitar el reenvío de tráfico IPv4.
      net.ipv4.ip_forward: 1

Alternativamente, puedes cambiar el comportamiento de hash de Ansible a merge, entonces solo tendrás que sobrescribir el solo hash que necesitas. Pero ten en cuenta que cambiar el comportamiento de hash lo cambia para todos tus playbooks y no es recomendado por Ansible.

Pruebas Locales

La forma preferida de probar localmente el rol es usar Docker. Tendrás que instalar Docker en tu sistema. Consulta Comenzar para un paquete de Docker adecuado para tu sistema.

También puedes usar vagrant y Virtualbox o VMWare para ejecutar pruebas localmente. Tendrás que instalar Virtualbox y Vagrant en tu sistema. Consulta Descargas de Vagrant para un paquete de vagrant adecuado para tu sistema. Para todas nuestras pruebas utilizamos test-kitchen. Si no estás familiarizado con test-kitchen, consulta su guía.

A continuación, instala test-kitchen:

# Instalar dependencias
gem install bundler
bundle install

Pruebas con Docker

# prueba rápida en una máquina
bundle exec kitchen test default-ubuntu-1404

# prueba en todas las máquinas
bundle exec kitchen test

# para desarrollo
bundle exec kitchen create default-ubuntu-1404
bundle exec kitchen converge default-ubuntu-1404

Pruebas con Virtualbox

# prueba rápida en una máquina
KITCHEN_YAML=".kitchen.vagrant.yml" bundle exec kitchen test default-ubuntu-1404

# prueba en todas las máquinas
KITCHEN_YAML=".kitchen.vagrant.yml" bundle exec kitchen test

# para desarrollo
KITCHEN_YAML=".kitchen.vagrant.yml" bundle exec kitchen create default-ubuntu-1404
KITCHEN_YAML=".kitchen.vagrant.yml" bundle exec kitchen converge default-ubuntu-1404

Para más información, consulta test-kitchen.

Colaboradores + Agradecimientos

...

Este rol se basa principalmente en guías de:

¡Gracias a todos ustedes!

Contribuyendo

Consulta la guía para colaboradores.

Licencia y Autor

  • Autor:: Sebastian Gumprich

Licenciado bajo la Licencia Apache, Versión 2.0 (la "Licencia"); no puedes usar este archivo excepto en cumplimiento con la Licencia. Puedes obtener una copia de la Licencia en

http://www.apache.org/licenses/LICENSE-2.0

A menos que lo exija la ley aplicable o acordado por escrito, el software distribuido bajo la Licencia se distribuye "TAL CUAL", SIN GARANTÍAS O CONDICIONES DE NINGÚN TIPO, ya sean expresas o implícitas. Consulta la Licencia para obtener el lenguaje específico que rige los permisos y limitaciones bajo la Licencia.

Acerca del proyecto

This role provides numerous security-related configurations, providing all-round base protection.

Instalar
ansible-galaxy install kmonticolo.ansible_os_hardening
Licencia
Unknown
Descargas
72
Propietario
DevSecOps Engineer