6.5 KiB
6.5 KiB
CIS/STIG-Mapping der os_hardening-Rolle
Diese Rolle deckt eine bewusst ausgewählte, für einen dedizierten Jumphost
(Debian/Ubuntu-Familie) relevante Teilmenge der CIS Debian/Ubuntu Linux
Benchmarks sowie einzelner DISA-STIG-typischer Controls ab. Sie ist kein
vollständiger, zertifizierter Benchmark-Lauf — dafür fehlt ein automatisiertes
Compliance-Scanning-Tool. Empfehlung: nach dem Rollout zusätzlich mit
oscap xccdf eval (OpenSCAP) gegen das jeweils zutreffende Profil prüfen und
diese Tabelle bei Abweichungen als Startpunkt für die Nacharbeit nutzen.
Referenz-Control-IDs folgen der CIS-Nummerierung sinngemäß (Benchmark-Version kann je nach Debian/Ubuntu-Release leicht abweichen); wo passend ist zusätzlich vermerkt, wenn ein Control STIG-typisch, aber nicht CIS-nummeriert ist.
| Bereich | CIS-Control (sinngemäß) | Umsetzung | Status |
|---|---|---|---|
| Unsichere Legacy-Dienste | 2.1.x | tasks/packages.yml |
Implementiert |
| Automatische Sicherheitsupdates | 1.9 | tasks/packages.yml |
Implementiert |
| Deaktivierung seltener Dateisystemtreiber | 1.1.1.1–1.1.1.8 | tasks/kernel_modules.yml |
Implementiert |
| Deaktivierung seltener Netzwerkprotokolle | 3.4.1–3.4.4 | tasks/kernel_modules.yml |
Implementiert |
| USB-Speichermedien deaktivieren | 1.1.23 | tasks/kernel_modules.yml |
Implementiert |
| Netzwerk-/Kernel-sysctl-Härtung | 3.x, 1.5.x | tasks/sysctl.yml |
Implementiert |
| Core Dumps deaktivieren | 1.5.1 | tasks/sysctl.yml |
Implementiert |
/tmp, /dev/shm mit noexec/nosuid/nodev |
1.1.2.x | tasks/mounts.yml |
Best-Effort — nur wirksam, wenn bereits eigene Mountpoints existieren (siehe unten) |
| Passwortqualität (Länge/Komplexität) | 5.4.1 | tasks/pam_password_policy.yml |
Implementiert (lokale OS-Konten) |
| Account-Lockout (pam_faillock) | 5.3.1 | tasks/pam_password_policy.yml |
Implementiert, siehe Einschränkung unten |
| Passwort-Historie | 5.4.2 | tasks/pam_password_policy.yml |
Implementiert |
Passwort-Ablauf (login.defs) |
5.4.1.1–5.4.1.4 | tasks/pam_password_policy.yml |
Implementiert |
| Erweiterte auditd-Regeln (Identität, Zeit, Netzwerk, Logins, Kernelmodule) | 4.1.3–4.1.14 | tasks/auditd.yml |
Implementiert |
| auditd-Log-Handling (keep_logs, space_left_action) | 4.1.2.3, 4.1.2.4 | tasks/auditd.yml |
Implementiert |
auditd unveränderlich (-e 2) |
4.1.1.4 (STIG) | tasks/auditd.yml |
Implementiert, standardmäßig deaktiviert (Opt-in os_hardening_auditd_immutable, da Reboot zum Ändern nötig) |
| Datei-Integritäts-Monitoring (AIDE) | 1.4.1, 1.4.2 | tasks/aide.yml |
Implementiert |
| Rootkit-Scanner (rkhunter, ergänzend) | STIG-typisch, nicht CIS-nummeriert | tasks/rootkit_scan.yml |
Implementiert |
| Anmelde-Banner | STIG-typisch (Legal Notice) | tasks/banners.yml, tasks/sshd.yml |
Implementiert |
| cron/at auf autorisierte Nutzer beschränken | 2.4.1.x | tasks/cron_at.yml |
Implementiert |
Berechtigungen kritischer Dateien (/etc/shadow etc.) |
6.1.x | tasks/file_permissions.yml |
Implementiert |
sudo-Logging (log_input, log_output, use_pty) |
STIG-typisch | tasks/file_permissions.yml |
Implementiert |
su auf Gruppe sudo beschränken |
5.6 | tasks/file_permissions.yml |
Implementiert |
| SSH-Daemon-Härtung (Ciphers/KEX/MACs, kein Root-Login, etc.) | 5.2.x | tasks/sshd.yml |
Implementiert |
| IPv6 deaktivieren | 3.1.1 | tasks/sysctl.yml |
Implementiert, Opt-in (os_hardening_disable_ipv6, Default aus) |
Bewusst nicht automatisiert (mit Begründung)
| Bereich | CIS-Control (sinngemäß) | Warum nicht automatisiert |
|---|---|---|
Getrenntes Partitionslayout (/tmp, /var, /var/log, /var/log/audit, /home als eigene Partitionen) |
1.1.1–1.1.1.30 | Erfordert eine Neupartitionierung der Festplatte — nur zum Zeitpunkt der OS-Installation sinnvoll setzbar, nicht nachträglich per Ansible auf ein laufendes System ohne Datenverlustrisiko. Empfehlung: beim Erstellen des Basis-Images/der VM-Vorlage bereits mit diesem Layout provisionieren. |
| Bootloader-Passwort (GRUB) | 1.4.1 (ältere CIS-Nummerierung) | Erfordert physischen/Konsolen-Zugriff zum Testen und ist bei Cloud-/Hypervisor-Images oft irrelevant oder sogar kontraproduktiv (verhindert automatisierten Neustart). Bewusst dem jeweiligen Betreiber überlassen. |
| Volltext-Festplattenverschlüsselung | Nicht CIS-nummeriert, STIG-typisch | Muss bei der OS-Installation eingerichtet werden (LUKS o.ä.), nicht nachträglich per Ansible. In Cloud-Umgebungen häufig durch Provider-seitige Verschlüsselung (z.B. verschlüsselte Volumes) abgedeckt — separat prüfen. |
| Physische Sicherheit / BIOS-UEFI-Passwort | Nicht CIS-nummeriert | Außerhalb der Reichweite von Ansible; organisatorische/physische Maßnahme. |
| Zentrales Log-Forwarding an SIEM/Syslog-Server | Nicht CIS-nummeriert, aber im Jumphost-Konzept Kap. 6.9 gefordert | Erfordert Kenntnis der Ziel-SIEM-Infrastruktur (Empfänger-Host, Protokoll, TLS-Zertifikate) — als eigener Konfigurationspunkt vorgesehen, aber nicht Teil dieser Rolle (siehe Konzept Kap. 6.9, Erweiterungspunkt). |
| Netzwerksegmentierung / Firewalling zwischen Zielsystemen | Außerhalb des Jumphost-Scopes | Betrifft die Netzwerkinfrastruktur rund um den Jumphost, nicht den Jumphost selbst — Bestandteil des übergeordneten Netzwerkkonzepts. |
Bekannte Einschränkungen
pam_faillock-Einbindung (tasks/pam_password_policy.yml) fügt einen Block direkt in/etc/pam.d/common-authein. Auf Systemen, diepam-auth-update --forceals Teil eines anderen Automatisierungsschritts laufen lassen, kann dieser Block überschrieben werden. Für produktive Systeme mit häufigen PAM-Änderungen wird empfohlen, stattdessen ein eigenespam-auth-update-Profil unter/usr/share/pam-configs/zu pflegen (sauberer, upgrade-fest) — hier aus Gründen der Nachvollziehbarkeit als direkter Block-Insert gehalten./tmp//dev/shm-Remount wirkt nur, wenn diese Pfade bereits eigene Mountpoints sind. Ist das nicht der Fall, gibt die Rolle eine Debug-Meldung aus, ändert aber nichts automatisch am Partitionslayout (siehe Tabelle oben).- Diese Rolle wurde in dieser Session nicht gegen ein reales
Debian/Ubuntu-System ausgeführt (kein Root-/Zielsystem verfügbar) — nur
ansible-playbook --syntax-checksowie YAML-/Jinja2-Parsing wurden verifiziert (siehe README, Abschnitt „Was bewusst noch offen ist"). Ein--check-Lauf (Dry-Run) und ein realer Rollout-Test in einer Staging-Umgebung stehen vor dem Produktivbetrieb noch aus.