Crypto-Policies¶
Siehe auch
- Verwandte Artikel
- Offizielle Dokumentation
man 7 crypto-policies,man 8 update-crypto-policies
- Linuxfabrik
RHEL 8+ unterstützt systemweite Crypto-Policies: einmal festgelegt, werden die gewählten Verschlüsselungsalgorithmen, Ciphers, MACs usw. von einer steigenden Zahl an Bibliotheken und damit Programmen verwendet. Die Einrichtung ist zudem denkbar einfach und ohne Spezial-KnowHow mit nur einem Kommando machbar. Damit entfällt in vielen Teilen die unterschiedliche Crypto-Konfiguration einzelner Server-Prozesse. Steigen die Anforderungen an die Sicherheit, bringt ein Kommando das gesamte System auf einen neuen Stand.
Der Befehl dafür lautet update-crypto-policies. Er generiert Konfigurations-Snippets in /etc/crypto-policies/back-ends, die unter anderem von diesen Bibliotheken gelesen werden:
BIND
GnuTLS
Java (OpenJDK)
Kerberos (libkrb5)
Libreswan
NSS
OpenSSH
OpenSSL
Anwendungen und Sprachen, die eine dieser Bibliotheken verwenden, folgen damit automatisch der System-Policy. Beispiele dafür sind Apache httpd, nginx und PHP.
Begriffe¶
- Back-End
Konfigurations-Snippet in
/etc/crypto-policies/back-ends/für eine konkrete Bibliothek (OpenSSL, OpenSSH, GnuTLS etc.). Wird beim Aufruf vonupdate-crypto-policiesaus der aktiven Policy generiert.- Bit-Security
Konservative Schätzung, wie teuer ein Brute-Force-Angriff auf einen Schlüssel in Bits wäre. LEGACY liefert mindestens 80 Bit, DEFAULT und FIPS mindestens 112 Bit, FUTURE mindestens 128 Bit.
- Policy
Vollständige Definition aller erlaubten Algorithmen, Protokolle und Schlüssellängen. Dateiendung
.pol. Wird in/usr/share/crypto-policies/policies/(Distributions-Policies) oder/etc/crypto-policies/policies/(eigene Policies) abgelegt. Der Dateiname muss in Grossbuchstaben geschrieben sein.- Sub-Policy
Modifier, der eine Policy ergänzt oder einschränkt. Dateiendung
.pmod. Wird an die Hauptpolicy mit Doppelpunkten angehängt, z.B.DEFAULT:NO-SHA1:NO-SSHCBC. Auch hier müssen Dateinamen in Grossbuchstaben vorliegen.
Vordefinierte Policies¶
Unter RHEL 8+ sind vier Policies vordefiniert:
- LEGACY
Maximale Kompatibilität zu Altsystemen. Erlaubt TLS 1.2 und 1.3, IKEv2, SSH2, RSA und Diffie-Hellman ab 2048 Bit, DSA ist deaktiviert. Liefert mindestens 80 Bit Sicherheit. Für produktive Systeme nicht mehr empfehlenswert, da aus Kompatibilitätsgründen auch in RFC 7457 dokumentierte Schwächen mitschleppt.
- DEFAULT
Kompromiss zwischen Sicherheit und Kompatibilität. SHA-1 in Signaturalgorithmen ist abgeschaltet, Diffie-Hellman-Parameter müssen mindestens 2048 Bit haben. Liefert mindestens 112 Bit Sicherheit.
- FIPS
Compliant zu FIPS 140. Wird automatisch aktiviert, wenn der Kernel mit
fips=1bootet. Liefert mindestens 112 Bit Sicherheit.- FUTURE
Aktuell höchste Sicherheitsstufe und enthält eine Vorbereitung auf Post-Quantum-Kryptografie in Form von 256-Bit-Symmetric-Encryption. RSA und Diffie-Hellman verlangen mindestens 3072 Bit. Liefert mindestens 128 Bit Sicherheit. Ältere Clients werden sich unter Umständen nicht mehr verbinden können.
Diese Policies sind „one-size-fits-all“. Eine feinere Anpassung ist über Sub-Policies möglich, alternativ lässt sich eine eigene Policy auf der grünen Wiese erstellen.
Folgende Ciphersuites und Protokolle sind grundsätzlich nicht mehr verfügbar:
3DES (in FUTURE, DEFAULT und FIPS entfernt)
All binary field ECC curves (seit RHEL 6)
All ECC curves < 224 bits (seit RHEL 6)
All export grade cipher suites (seit RHEL 7)
DES (seit RHEL 7)
MD5 in signatures (seit RHEL 7)
SSLv2 (seit RHEL 7)
SSLv3 (seit RHEL 8)
Noch möglich, aber in allen Policies abgeschaltet:
AES-CCM8
All ECC curves incompatible with TLS 1.3, including secp256k1
ARIA
Camellia
DH with parameters < 1024 bits
IDEA
IKEv1 (seit RHEL 8)
Integrity-only cipher suites
RSA with key size < 1024 bits
SEED
TLS CBC mode cipher suites using SHA-384 HMAC
Tipp
Crypto-Policies für SSH werden durch ein Include-File bereitgestellt. Bei der Konfiguration des SSH-Daemons ist dies zwecks Reihenfolge der Parameter zu berücksichtigen.
Crypto-Policies im Vergleich¶
LEGACY |
DEFAULT |
FIPS |
FUTURE |
|
|---|---|---|---|---|
3DES |
yes |
no |
no |
no |
CBC mode ciphers |
yes |
yes |
yes |
no |
DH |
min. 1024-bit |
min. 2048-bit |
min. 2048-bit |
min. 3072-bit |
DSA |
yes |
no |
no |
no |
IKEv1 |
no |
no |
no |
no |
RC4 |
yes |
no |
no |
no |
RSA |
min. 1024-bit |
min. 2048-bit |
min. 2048-bit |
min. 3072-bit |
SHA-1 and SHA-224 signatures in certificates |
yes |
yes |
yes |
no |
SHA-1 in digital signatures |
yes |
yes |
no |
no |
Symmetric ciphers with keys < 256 bits |
yes |
yes |
yes |
no |
TLS v1.0 |
yes |
no |
no |
no |
TLS v1.1 |
yes |
no |
no |
no |
Crypto-Policy setzen¶
Welche Crypto-Policy wird gerade verwendet?
update-crypto-policies --show
Crypto-Policy auf FUTURE setzen:
update-crypto-policies --set FUTURE
reboot
update-crypto-policies --show
Crypto-Policy auf FIPS setzen:
fips-mode-setup --enable
# Kernel initramdisks are being regenerated. This might take some time.
reboot
fips-mode-setup --check
Achtung
Das EPEL-Repository funktioniert Stand 2020-12 unter der FUTURE Crypto-Policy nicht. Fehlermeldung: SSL certificate problem: CA certificate key too weak. Das Problem ist, dass RSA-Keys > 3072 Bit verlangt werden. Das Zertifikat auf https://download.fedoraproject.org erfüllt dies, dessen Intermediate-Zertifikate von digicert jedoch nicht (diese sind bei 2048 Bit).
Die einzelnen Crypto-Settings lassen sich in den Policy-Dateien einsehen:
cat /usr/share/crypto-policies/policies/FUTURE.pol
Crypto-Policy anpassen¶
Um eine bestehende Crypto-Policy anzupassen, werden sogenannte Modifier-Dateien mit der Endung .pmod und einem Dateinamen in Grossbuchstaben in /etc/crypto-policies/policies/modules abgelegt. Zum Deaktivieren von Einstellungen wird ein Minuszeichen (-), zum Aktivieren/Hinzufügen ein Pluszeichen (+) vorangestellt.
Im Beispiel sollen in der DEFAULT-Policy die Key-Exchange-Mechanismen RSA und PSK abgeschaltet werden, da sie keine Perfect-Forward-Secrecy unterstützen. Zusätzlich werden noch weitere Veränderungen an der Crypto-Policy vorgenommen:
key_exchange = -RSA -PSK
sha1_in_certs = 0
min_rsa_size = 3072
cipher = -CAMELLIA-256-GCM -CAMELLIA-256-CBC -CAMELLIA-128-GCM -CAMELLIA-128-CBC
update-crypto-policies --show
# DEFAULT
update-crypto-policies --set DEFAULT:NO-PFS-KEX:MYCRYPTO1:NO-CAMELLIA-CIPHER
reboot
update-crypto-policies --show
Tipp
Am nachvollziehbarsten ist es, beispielsweise /usr/share/crypto-policies/policies/FUTURE.pol nach /etc/crypto-policies/policies/modules/LINUXFABRIK-FUTURE.pmod zu kopieren, anzupassen und diese per update-crypto-policies --set FUTURE:LINUXFABRIK-FUTURE zu verwenden.
Härtung gemäss CIS-Benchmark¶
Der CIS-Benchmark für RHEL 10 empfiehlt auf Basis der DEFAULT-Policy mehrere Sub-Policies zu kombinieren, um typische Schwachstellen flächendeckend abzudecken:
- NO-SHA1
Schaltet SHA-1 in Hash- und Signaturalgorithmen sowie in Zertifikaten ab (
hash = -SHA1,sign = -*-SHA1,sha1_in_certs = 0). HMAC-SHA1 bleibt bewusst aktiv, da HMAC nicht auf Kollisionsresistenz angewiesen ist.- NO-WEAKMAC
Entfernt schwache Message-Authentication-Codes mit 128-Bit Output (
mac = -*-128).- NO-SSHCBC
Deaktiviert CBC-Ciphers speziell für SSH (
cipher@SSH = -*-CBC). Adressiert die in CVE-2008-5161 dokumentierte Schwachstelle, bei der aus einem CBC-Chiffratblock unter Umständen bis zu 32 Bit Klartext rekonstruiert werden können.
Eine typische Kombination lautet damit:
update-crypto-policies --set DEFAULT:NO-SHA1:NO-WEAKMAC:NO-SSHCBC
reboot
Weitere vom CIS-Benchmark empfohlene Sub-Policies ausschliesslich für SSH:
- NO-SSHCHACHA20
Deaktiviert ChaCha20-Poly1305 für SSH.
- NO-SSHETM
Deaktiviert Encrypt-then-MAC-Varianten älterer MACs für SSH.
- NO-SSHWEAKCIPHERS
Deaktiviert 3DES-CBC und AES-CBC-Varianten für SSH.
- NO-SSHWEAKMACS
Deaktiviert HMAC-MD5 und UMAC-64/128 für SSH.
Die Sub-Policies werden mit Doppelpunkten aneinandergereiht. Die Reihenfolge der Modifier ist relevant: ein späterer --Eintrag überschreibt einen früheren +-Eintrag. Nicht referenzierte .pmod-Dateien werden ignoriert.
Best Practices¶
Eigene Policies und Sub-Policies ausschliesslich unter
/etc/crypto-policies/policies/bzw./etc/crypto-policies/policies/modules/ablegen, nie unter/usr/share/crypto-policies/. Letzteres wird durch Paket-Updates überschrieben..pol- und.pmod-Dateinamen immer in Grossbuchstaben (NO-SHA1.pmod, nichtno-sha1.pmod).update-crypto-policieswandelt den übergebenen Namen vor dem Suchen auf dem Filesystem um.Nach dem Wechsel der Policy ist ein Reboot (oder zumindest ein Neustart sämtlicher betroffenen Dienste) notwendig, damit bereits laufende Prozesse die neue Konfiguration übernehmen.
Wer eine eigene Policy zusammenstellt, kopiert am besten eine vorhandene
.polaus/usr/share/crypto-policies/policies/nach/etc/…/und passt sie dort an, statt auf der grünen Wiese zu starten. Das Ergebnis lässt sich mitcat /etc/crypto-policies/state/CURRENT.poljederzeit verifizieren.Das Deployment über die LFOps-Rolle
linuxfabrik.lfops.crypto_policysorgt dafür, dassPolicyundSub-Policieskonsistent über alle Systeme hinweg gesetzt werden.
Unterschiede RHEL / Debian¶
Systemweite Crypto-Policies sind eine RHEL-Eigenschaft. Debian und Ubuntu liefern das Paket
crypto-policiesderzeit nicht mit.Unter Debian und Ubuntu erfolgt die Konfiguration weiterhin pro Dienst, etwa über
/etc/ssl/openssl.cnf(OpenSSL 3[provider_sect]/MinProtocol) und dienstspezifische Konfigurationsdateien (sshd_config, ApacheSSLProtocol/SSLCipherSuite, nginxssl_protocols/ssl_ciphers).Für FIPS-Betrieb unterstützt Debian 12+ ein separates, kommerziell betreutes FIPS-Paketset; Ubuntu bietet dies über Ubuntu Pro an.