kmonticolo.ansible_os_hardening

os-hardening (Rôle Ansible)

Statut de Construction Gitter Chat Ansible Galaxy

Description

Ce rôle fournit de nombreuses configurations liées à la sécurité, offrant une protection de base complète. Il a été conçu pour être conforme à la DevSec Linux Baseline.

Il configure :

  • La gestion des paquets, par exemple, n'autorise que les paquets signés
  • Supprime les paquets ayant des problèmes connus
  • Configure le module pam et pam_limits
  • Configuration de la suite de mots de passe en mode Shadow
  • Configure les permissions du chemin système
  • Désactive les core dumps via des limites douces
  • Restreint les connexions root à la console système
  • Définit les SUID
  • Configure les paramètres du noyau via sysctl
  • Installe et configure auditd

Il ne fera pas :

  • Mettre à jour les paquets système
  • Installer des correctifs de sécurité

Exigences

  • Ansible 2.5.0

Avertissement

Si vous utilisez inspec pour tester vos machines après avoir appliqué ce rôle, veuillez vous assurer d'ajouter l'utilisateur de connexion à la variable os_ignore_users. Sinon, inspec échouera. Pour plus d'informations, voir problème #124.

Si vous utilisez Docker / Kubernetes+Docker, vous devrez remplacer le paramètre sysctl de transfert IP v4.

- hosts: localhost
  roles:
    - dev-sec.os-hardening
  vars:
    sysctl_overwrite:
      # Activer le transfert de trafic IPv4.
      net.ipv4.ip_forward: 1

Variables

Nom Valeur par Défaut Description
os_desktop_enable false vrai si c'est un système de bureau, c'est-à-dire Xorg, KDE/GNOME/Unity/etc
os_env_extra_user_paths [] ajouter des chemins supplémentaires à la variable PATH de l'utilisateur (par défaut vide).
os_env_umask 027 définir les permissions par défaut pour les nouveaux fichiers à 750
os_auth_pw_max_age 60 âge maximal du mot de passe (mettre à 99999 pour désactiver efficacement)
os_auth_pw_min_age 7 âge minimal du mot de passe (avant de permettre un autre changement de mot de passe)
os_auth_retries 5 nombre maximum de tentatives d'authentification, avant que le compte ne soit verrouillé pendant un certain temps
os_auth_lockout_time 600 temps en secondes à passer, si le compte a été verrouillé en raison de trop de tentatives d'authentification échouées
os_auth_timeout 60 délai d'authentification en secondes, donc la connexion sera fermée si ce délai est dépassé
os_auth_allow_homeless false vrai pour permettre aux utilisateurs sans domicile de se connecter
os_auth_pam_passwdqc_enable true vrai si vous souhaitez utiliser un contrôle de mot de passe fort dans PAM avec passwdqc
os_auth_pam_passwdqc_options "min=disabled,disabled,16,12,8" définir sur toute option que vous souhaitez passer à passwdqc
os_security_users_allow [] liste des actions qu'un utilisateur est autorisé à effectuer. Peut contenir change_user.
os_security_kernel_enable_module_loading true vrai si vous souhaitez autoriser le changement de modules du noyau une fois le système en cours d'exécution (ex. modprobe, rmmod)
os_security_kernel_enable_core_dump false le noyau plante ou se comporte mal et un core dump de noyau est créé
os_security_suid_sgid_enforce true vrai si vous voulez réduire les bits SUID/SGID. Il y a déjà une liste d'éléments configurés, mais vous pouvez également ajouter vos propres éléments
os_security_suid_sgid_blacklist [] liste des chemins dont les bits SUID/SGID doivent être supprimés
os_security_suid_sgid_whitelist [] liste des chemins dont les bits SUID/SGID ne devraient pas être modifiés
os_security_suid_sgid_remove_from_unknown false vrai si vous souhaitez supprimer les bits SUID/SGID de tout fichier qui n'est pas explicitement configuré dans une blacklist. Cela fera que chaque exécution d'Ansible recherche à travers les systèmes de fichiers montés les bits SUID/SGID qui ne sont pas configurés dans la blacklist par défaut et utilisateur. Si un bit SUID/SGID est trouvé, il sera supprimé, sauf si ce fichier est dans votre whitelist.
os_security_packages_clean true supprime les paquets ayant des problèmes connus. Voir la section paquets.
ufw_manage_defaults true vrai signifie appliquer tous les réglages avec le préfixe ufw_
ufw_ipt_sysctl '' par défaut, il désactive IPT_SYSCTL dans /etc/default/ufw. Si vous voulez remplacer les valeurs de /etc/sysctl.conf en utilisant ufw - définissez-le sur votre dictionnaire sysctl, par exemple /etc/ufw/sysctl.conf
ufw_default_input_policy DROP définir la politique d'entrée par défaut de ufw sur DROP
ufw_default_output_policy ACCEPT définir la politique de sortie par défaut de ufw sur ACCEPT
ufw_default_forward_policy DROP définir la politique de transfert par défaut de ufw sur DROP
os_auditd_enabled true Mettre à false pour désactiver l'installation et la configuration d'auditd.

Paquets

Nous supprimons les paquets suivants :

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

Systèmes de fichiers désactivés

Nous désactivons les systèmes de fichiers suivants, car ils ne sont probablement pas utilisés :

  • "cramfs"
  • "freevxfs"
  • "jffs2"
  • "hfs"
  • "hfsplus"
  • "squashfs"
  • "udf"
  • "vfat" # seulement si uefi n'est pas utilisé

Pour empêcher certains des systèmes de fichiers d'être désactivés, ajoutez-les à la variable os_filesystem_whitelist.

Installation

Installez le rôle avec ansible-galaxy :

ansible-galaxy install dev-sec.os-hardening

Exemple de Playbook

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

Changer les variables sysctl

Si vous souhaitez remplacer les variables sysctl, vous pouvez utiliser la variable sysctl_overwrite (dans les anciennes versions, vous deviez remplacer tout le sysctl_dict). Ainsi, par exemple, si vous souhaitez changer la variable de transfert de trafic IPv4 à 1, faites-le ainsi :

- hosts: localhost
  roles:
    - dev-sec.os-hardening
  vars:
    sysctl_overwrite:
      # Activer le transfert de trafic IPv4.
      net.ipv4.ip_forward: 1

Alternativement, vous pouvez changer le comportement des hachages d'Ansible à merge, dans ce cas, vous n'aurez qu'à remplacer le seul hachage dont vous avez besoin. Mais veuillez noter que le changement du comportement des hachages le change pour tous vos playbooks et n'est pas recommandé par Ansible.

Tests Locaux

La façon préférée de tester localement le rôle est d'utiliser Docker. Vous devez installer Docker sur votre système. Consultez Commencer pour obtenir un package Docker adapté à votre système.

Vous pouvez également utiliser vagrant et Virtualbox ou VMWare pour exécuter des tests localement. Vous devrez installer Virtualbox et Vagrant sur votre système. Consultez Téléchargements de Vagrant pour obtenir un package vagrant adapté à votre système. Pour tous nos tests, nous utilisons test-kitchen. Si vous n'êtes pas familier avec test-kitchen, veuillez consulter leur guide.

Ensuite, installez test-kitchen :

# Installer les dépendances
gem install bundler
bundle install

Tests avec Docker

# test rapide sur une machine
bundle exec kitchen test default-ubuntu-1404

# tester sur toutes les machines
bundle exec kitchen test

# pour le développement
bundle exec kitchen create default-ubuntu-1404
bundle exec kitchen converge default-ubuntu-1404

Tests avec Virtualbox

# test rapide sur une machine
KITCHEN_YAML=".kitchen.vagrant.yml" bundle exec kitchen test default-ubuntu-1404

# tester sur toutes les machines
KITCHEN_YAML=".kitchen.vagrant.yml" bundle exec kitchen test

# pour le développement
KITCHEN_YAML=".kitchen.vagrant.yml" bundle exec kitchen create default-ubuntu-1404
KITCHEN_YAML=".kitchen.vagrant.yml" bundle exec kitchen converge default-ubuntu-1404

Pour plus d'informations, consultez test-kitchen

Contributeurs + Remerciements

...

Ce rôle est principalement basé sur des guides de :

Merci à vous tous !

Contribution

Voir directives de contributeurs.

Licence et Auteur

  • Auteur:: Sebastian Gumprich

Sous licence de la Licence Apache, Version 2.0 (la "Licence") ; vous ne pouvez pas utiliser ce fichier sauf en conformité avec la Licence. Vous pouvez obtenir une copie de la Licence à

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

À moins que la loi applicable n'exige ou que ce soit convenu par écrit, le logiciel distribué sous la Licence est distribué sur une base "EN L'ÉTAT", SANS GARANTIES OU CONDIITIONS D'AUCUNE SORTE, explicites ou implicites. Voir la Licence pour la langue spécifique régissant les permissions et limitations sous la Licence.

À propos du projet

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

Installer
ansible-galaxy install kmonticolo.ansible_os_hardening
Licence
Unknown
Téléchargements
72
Propriétaire
DevSecOps Engineer