kmonticolo.ansible_os_hardening
os-härtung (Ansible Rolle)
Beschreibung
Diese Rolle bietet zahlreiche sicherheitsrelevante Konfigurationen und sorgt für umfassenden Basisschutz. Sie soll mit den DevSec Linux Baseline konform sein.
Sie konfiguriert:
- Paketmanagement, z.B. nur signierte Pakete erlauben
- Entfernen von Paketen mit bekannten Sicherheitsproblemen
- Konfiguration des
pam
undpam_limits
Moduls - Konfiguration der Shadow-Passwort-Suite
- Berechtigungen für Systempfade konfigurieren
- Deaktivieren von Core Dumps über weiche Limits
- Eingeschränkte Root-Logins auf die Systemkonsole
- SUIDs setzen
- Kernelparameter über sysctl konfigurieren
- Installieren und Konfigurieren von auditd
Es wird nicht:
- Systempakete aktualisieren
- Sicherheitsupdates installieren
Voraussetzungen
- Ansible 2.5.0
Warnung
Wenn Sie Inspec verwenden, um Ihre Maschinen nach der Anwendung dieser Rolle zu testen, stellen Sie bitte sicher, dass der verbindende Benutzer zur Variable os_ignore_users
hinzugefügt wird. Ansonsten wird Inspec fehlschlagen. Weitere Informationen finden Sie in Issue #124.
Wenn Sie Docker / Kubernetes+Docker verwenden, müssen Sie die sysctl-Einstellung für IPv4-Weiterleitung überschreiben.
- hosts: localhost
roles:
- dev-sec.os-hardening
vars:
sysctl_overwrite:
# Aktivieren Sie die IPv4-Weiterleitung.
net.ipv4.ip_forward: 1
Variablen
Name | Standardwert | Beschreibung |
---|---|---|
os_desktop_enable |
false | true, wenn es sich um ein Desktop-System handelt, z.B. Xorg, KDE/GNOME/Unity/etc. |
os_env_extra_user_paths |
[] | zusätzliche Pfade zur PATH -Variable des Benutzers hinzufügen (standardmäßig leer). |
os_env_umask |
027 | standardmäßige Berechtigungen für neue Dateien auf 750 setzen |
os_auth_pw_max_age |
60 | maximale Passwortgültigkeit (auf 99999 setzen, um sie effektiv zu deaktivieren) |
os_auth_pw_min_age |
7 | minimale Passwortgültigkeit (bevor eine andere Passwortänderung erlaubt ist) |
os_auth_retries |
5 | maximale Anzahl von Authentifizierungsversuchen, bevor das Konto für einige Zeit gesperrt wird |
os_auth_lockout_time |
600 | Zeit in Sekunden, die vergehen muss, wenn das Konto aufgrund zu vieler fehlgeschlagener Authentifizierungsversuche gesperrt wurde |
os_auth_timeout |
60 | Authentifizierungs-Timeout in Sekunden, damit die Anmeldung abgebrochen wird, wenn diese Zeit abläuft |
os_auth_allow_homeless |
false | true, wenn Benutzer ohne Heimatverzeichnis sich anmelden dürfen |
os_auth_pam_passwdqc_enable |
true | true, wenn Sie starke Passwortprüfung in PAM mit passwdqc verwenden möchten |
os_auth_pam_passwdqc_options |
"min=disabled,disabled,16,12,8" | Optionen für passwdqc festlegen |
os_security_users_allow |
[] | Liste der Dinge, die ein Benutzer tun darf. Kann change_user enthalten. |
os_security_kernel_enable_module_loading |
true | true, wenn es erlaubt sein soll, Kernelmodule während des Betriebs zu ändern (z.B. modprobe , rmmod ) |
os_security_kernel_enable_core_dump |
false | Kernel stürzt ab oder verhält sich sonst falsch und ein Kernel-Core-Dump wird erstellt |
os_security_suid_sgid_enforce |
true | true, wenn SUID/SGID-Bits reduziert werden sollen. Es gibt bereits eine Liste von Elementen, die gesucht werden, aber Sie können auch Ihre eigenen hinzufügen |
os_security_suid_sgid_blacklist |
[] | Liste von Pfaden, bei denen die SUID/SGID-Bits entfernt werden sollen |
os_security_suid_sgid_whitelist |
[] | Liste von Pfaden, bei denen die SUID/SGID-Bits nicht geändert werden dürfen |
os_security_suid_sgid_remove_from_unknown |
false | true, wenn Sie SUID/SGID-Bits von Dateien entfernen möchten, die nicht ausdrücklich in einer blacklist konfiguriert sind. Dies lässt jede Ansible-Ausführung durch die gemounteten Dateisysteme suchen, um konfigurationsunterstützende SUID/SGID-Bits zu finden. |
os_security_packages_clean |
true | entfernt Pakete mit bekannten Problemen. Siehe Abschnitt Pakete. |
ufw_manage_defaults |
true | true bedeutet, dass alle Einstellungen mit dem ufw_ -Präfix angewendet werden |
ufw_ipt_sysctl |
'' | Deaktiviert standardmäßig IPT_SYSCTL in /etc/default/ufw. Wenn Sie Werte in /etc/sysctl.conf mit ufw überschreiben möchten, setzen Sie es auf Ihr sysctl-Dictionary, z.B. /etc/ufw/sysctl.conf |
ufw_default_input_policy |
DROP | Setzt die Standard-Eingabepolitik von ufw auf DROP |
ufw_default_output_policy |
ACCEPT | Setzt die Standard-Ausgabepolitik von ufw auf ACCEPT |
ufw_default_forward_policy |
DROP | Setzt die Standard-Weiterleitungsrichtlinie von ufw auf DROP |
os_auditd_enabled |
true | Auf false setzen, um die Installation und Konfiguration von auditd zu deaktivieren. |
Pakete
Wir entfernen die folgenden Pakete:
- xinetd (NSA, Kapitel 3.2.1)
- inetd (NSA, Kapitel 3.2.1)
- tftp-server (NSA, Kapitel 3.2.5)
- ypserv (NSA, Kapitel 3.2.4)
- telnet-server (NSA, Kapitel 3.2.2)
- rsh-server (NSA, Kapitel 3.2.3)
- prelink (open-scap)
Deaktivierte Dateisysteme
Wir deaktivieren die folgenden Dateisysteme, da sie höchstwahrscheinlich nicht verwendet werden:
- "cramfs"
- "freevxfs"
- "jffs2"
- "hfs"
- "hfsplus"
- "squashfs"
- "udf"
- "vfat" # nur wenn UEFI nicht verwendet wird
Um zu verhindern, dass einige der Dateisysteme deaktiviert werden, fügen Sie sie zur Variable os_filesystem_whitelist
hinzu.
Installation
Die Rolle mit ansible-galaxy installieren:
ansible-galaxy install dev-sec.os-hardening
Beispiel-Playbook
- hosts: localhost
roles:
- dev-sec.os-hardening
Ändern von Sysctl-Variablen
Wenn Sie Sysctl-Variablen überschreiben möchten, können Sie die Variable sysctl_overwrite
verwenden (in früheren Versionen mussten Sie das gesamte sysctl_dict
überschreiben). Wenn Sie beispielsweise die IPv4-Weiterleitungsvariable auf 1
ändern möchten, machen Sie es so:
- hosts: localhost
roles:
- dev-sec.os-hardening
vars:
sysctl_overwrite:
# Aktivieren der IPv4-Weiterleitung.
net.ipv4.ip_forward: 1
Alternativ können Sie das Hash-Verhalten von Ansible auf merge
ändern, dann müssen Sie nur den einzelnen Hash überschreiben, den Sie benötigen. Bitte beachten Sie jedoch, dass sich eine Änderung des Hash-Verhaltens auf alle Ihre Playbooks auswirkt und von Ansible nicht empfohlen wird.
Lokale Tests
Die bevorzugte Methode, um die Rolle lokal zu testen, besteht darin, Docker zu verwenden. Sie müssen Docker auf Ihrem System installieren. Siehe Erste Schritte für ein passendes Docker-Paket für Ihr System.
Sie können auch Vagrant und Virtualbox oder VMWare verwenden, um Tests lokal auszuführen. Sie müssen Virtualbox und Vagrant auf Ihrem System installieren. Siehe Vagrant Downloads für ein passendes Vagrant-Paket für Ihr System. Für all unsere Tests verwenden wir test-kitchen
. Wenn Sie mit test-kitchen
nicht vertraut sind, schauen Sie sich bitte ihren Leitfaden an.
Installieren Sie anschließend test-kitchen:
# Abhängigkeiten installieren
gem install bundler
bundle install
Tests mit Docker
# schneller Test auf einer Maschine
bundle exec kitchen test default-ubuntu-1404
# Test auf allen Maschinen
bundle exec kitchen test
# für die Entwicklung
bundle exec kitchen create default-ubuntu-1404
bundle exec kitchen converge default-ubuntu-1404
Tests mit Virtualbox
# schneller Test auf einer Maschine
KITCHEN_YAML=".kitchen.vagrant.yml" bundle exec kitchen test default-ubuntu-1404
# Test auf allen Maschinen
KITCHEN_YAML=".kitchen.vagrant.yml" bundle exec kitchen test
# für die Entwicklung
KITCHEN_YAML=".kitchen.vagrant.yml" bundle exec kitchen create default-ubuntu-1404
KITCHEN_YAML=".kitchen.vagrant.yml" bundle exec kitchen converge default-ubuntu-1404
Für weitere Informationen siehe test-kitchen
Mitwirkende + Dank
...
Diese Rolle basiert hauptsächlich auf Leitfäden von:
- Arch Linux Wiki, Sysctl-Härtung
- NSA: Leitfaden zur sicheren Konfiguration von Red Hat Enterprise Linux 5
- Ubuntu Sicherheit/Funktionen
- Deutsche Telekom, Gruppen-IT-Sicherheit, Sicherheitsanforderungen (Deutsch)
Danke an alle!
Mitwirken
Siehe Mitwirkendenrichtlinie.
Lizenz und Autor
- Autor:: Sebastian Gumprich
Lizenziert unter der Apache License, Version 2.0 (die "Lizenz"); Sie dürfen diese Datei nicht verwenden, es sei denn, dies geschieht im Einklang mit der Lizenz. Sie können eine Kopie der Lizenz unter folgender Adresse erhalten:
http://www.apache.org/licenses/LICENSE-2.0
Sofern nicht gesetzlich vorgeschrieben oder in schriftlicher Vereinbarung vorgesehen, wird die unter der Lizenz vertriebene Software "WIE BESEHEN" bereitgestellt, OHNE GARANTIEN ODER BEDINGUNGEN IRGENDEHER, weder ausdrücklich noch stillschweigend. Siehe die Lizenz für die spezifischen Rechte und Einschränkungen.
This role provides numerous security-related configurations, providing all-round base protection.
ansible-galaxy install kmonticolo.ansible_os_hardening