kmonticolo.ansible_os_hardening
os-hardening (Papel de Ansible)
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
ypam_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:
- Arch Linux wiki, Endurecimiento de Sysctl
- NSA: Guía para la Configuración Segura de Red Hat Enterprise Linux 5
- Seguridad/Funciones de Ubuntu
- Deutsche Telekom, Seguridad del Grupo de TI, Requisitos de Seguridad (Alemán)
¡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.
This role provides numerous security-related configurations, providing all-round base protection.
ansible-galaxy install kmonticolo.ansible_os_hardening