Unix-, shadow- und md5- Passwörter, PAM Geschichte und Überlick über Authentifizierungsmechanismen unter UNIX Thomas Glanzmann (sithglan@stud.uni-erlangen.de) Lehrstuhl 4 Informatik - FAU Erlangen-Nürnberg 5. Mai 2002 p.1/17
Fortschritt in der Vortragsreihe Einführung in das Themengebiet, Allgemeines zur Vortragstechnik Grundlagen Symmetrische Verschlüsselung (DES, 3DES, AES)... Asymmetrische Verschlüsselung, digitale Signatur... Authentifizierung Unix-Passwörter, shadow, PAM Kerberos Anwendungen IPsec, inkl. Schlüsselverwaltung (ISAKMP/IKE, Photuris)... Angriffsmöglichkeiten und deren Vermeidung: Denial of Service-Attacken, Firewalltechniken... 5. Mai 2002 p.2/17
Gliederung (1) Authentifizierung via crypt(), einer Shadowpasswort-datei und md5 Passwörtern Geschichte und Grundlagen Der DES Algorithmus als Grundlage für crypt() Modifikation am DES Algorithmus: Der Salt Der crypt() Algorithmus in der Praxis Schwachstellen des crypt() Algorithmus und Angriffe Der nächste Entwicklungsschritt: Die Shadow Passwort Datei /etc/shadow Eine Alternative zum crypt() Algorithmus: der md5 Algorithmus Weitere spezielle Alternativen Wie schnell ist der crypt() bzw. md5 Algorithmus entschlüsselbar? 5. Mai 2002 p.3/17
Gliederung (2) Pluggable Authentication Module Einsatzgebiete: Wofür benötigt man PAM? Exkurs: Kereberos und Single Sign On Wie funktioniert PAM? Ein Anwendungsbeispiel für PAM PAM Konfigurationsdateien 5. Mai 2002 p.4/17
Geschichte und Grundlagen Passwörter werden als Prüfsumme in /etc/passwd aufbewahrt Prüfsumme wird bei Authentifizierung erneut gebildet und mit der bereits gespeicherten verglichen Prüfsummenfunktion crypt() basiert auf DES Algorithmus crypt() Algorithmus wurde in 70er Jahren für PDP 11 entwickelt crypt() ist bis heute die am weitesten verbreitete Prüfsummenfunktion 5. Mai 2002 p.5/17
Der DES Algorithmus als Grundlage für den crypt() Algorithmus DES DES Algorithmus wurde vom National Institute of Technology entwickelt DES Algorithmus benutzt einen 56 bit Schlüssel (entspricht acht 7 bit ASCII Zeichen) DES Algorithmus kodiert 64 bit Blöcke Chiffretext in 64 bit Blöcke Klartext DES Algorithmus als Prüfsummenfunktion Ein Block von Nullen wird mit dem Passwort als Schlüssel kodiert Kodierung wird 25 mal hintereinander angewendet um den Prozess zu verlangsamen 5. Mai 2002 p.6/17
Modifikation am DES Algorithmus: Der Salt 12 bit Zahl ( 0-4095 ) dient zur Variation des Chiffretextes Klartext Passwort Salt Chiffretext Haebo5hi 0K u7pri3xplgw Haebo5hi 4K FeQoWwAzsDg Haebo5hi 8K FP0U2KY48DI Schnelle DES Hardwareimplementierungen waren dadurch lange Zeit inkompatibel Möglichkeit zur Wiederverwendung des Passwortes auf verschiedenen Systemen Mehraufwand beim Angriff auf die Passwortdatei 5. Mai 2002 p.7/17
Der crypt() Algorithmus in der Praxis Beim Setzen wird Passwort als Prüfsumme in /etc/passwd gespeichert Passwort wird bei Authentifizierung erneut kodiert und mit der bereits gespeicherten verglichen Format: 2 ( Salt ) + 11 ( Prüfsumme ) druckbare Zeichen Jedes druckbare Zeichen trägt 6 bit Salt wird beim Setzen nach der Zeit des Tages a gewählt druckbare Zeichen:., /, 0-9, a-z, A-Z Beispiel für eine Passwortdatenbank root:0ku7pri3xplgw:0:0:root:/root:/bin/bash tgam:4kfeqowwazsdg:1:1:tgam:/tgam:/bin/bash mban:8kfp0u2ky48di:2:2:mban:/mban:/bin/bash a gettimeofdate() 5. Mai 2002 p.8/17
Schwachstellen des crypt() Algorithmus und Angriffe Schwachstellen Salt Länge auf 12 bit beschränkt Passwortlänge auf 8 Zeichen beschränkt Mittlerweile sind 109 132 Passwörter pro Sekunde kodierbar Schwache Passwörter innerhalb von Stunden entschlüsselt Bruteforce - Angriffe Wörterbuch - Angriffe Tabellen - Angriffe Angriffe Spezialrechner entschlüsseln gesamten Schlüsselraum in 4 Stunden 5. Mai 2002 p.9/17
Der nächste Entwicklungsschritt: Die Shadow Passwort Datei /etc/shadow Notwendigkeit: Benutzer wählen schwache Passwörter Idee: Zugriff nur für privilegierte Benutzer Umsetzung: Speicherung der Passwörter in /etc/shadow Nachteile oft nicht realisierbar (NIS) verifizierende Programme müssen privilegiert laufen 5. Mai 2002 p.10/17
Eine Alternative zum crypt() Algorithmus: der md5 Algorithmus Länge des Salt steigt auf 48 bit keine Passwortlängenbegrenzung 128 bit Prüfsumme 1966 Passwörter pro Sekunde kodierbar Beispiel für eine Shadow Passwort Datei mit md5 Passwörtern root:$1$50bqchn4$qsvgpkvl04u46tn7jc8by0:11794:0:... tgam:$1$l9xpil/x$c1..gsz9ejap9avl4trar1:11794:0:... mban:$1$ocm/c2qz$j227x3/vcphgexwl5oocz1:11795:0:... 5. Mai 2002 p.11/17
Weitere spezielle Alternativen Blowfish (OpenBSD) [117 Prüfsummen pro Sekunde kodierbar] DES (BSDI) [3932 Prüfsummen pro Sekunde kodierbar] Überblick: Prüfsummen pro Sekunde Algorithmus Prüfsummen pro Sekunde NT LM DES 861171 DES 109132 BSDI DES 3932 FreeBSD MD5 1966 OpenBSD Blowfish 117 5. Mai 2002 p.12/17
Wie schnell ist der crypt() bzw. md5 Algorithmus zu entschüsseln? crypt() Algorithmus Länge 26 36 62 95 128 klein klein + Ziffer alphanum. druckbar ASCII 5 117 s 9 m 2 h 21 h 3 d 6 50 m 6 h 6,5 d 84 d 1,3 y 7 22 h 8 d 1,1 y 21 y 176 y 8 23 d 323 d 68,5 y 2082,8 y 22623,1 y md5 Algorithmus Länge 26 36 62 95 128 klein klein + Ziffer alphanum. druckbar ASCII 5 110 m 8,5 h 5 d 45 d 202 d 6 2 d 123 d 334 d 11 y 71 y 7 47 d 1,2 y 57 y 1126 y 9078 y 8 3,3 y 45 y 3522 y 116354 y y 5. Mai 2002 p.13/17
Einsatzgebiete: Wofür benötigt man PAM? keine Privilegien für authentifizierende Programme problemlose Änderung von Authentifizierungsstrategien bestimmte Funktionen nur von bestimmten Benutzern nutzbar baut auf beliebiger Datenbank auf Authentifizierung über externe Geräte 5. Mai 2002 p.14/17
Wie funktioniert PAM? Abstraktionsschicht durch in Programme gebundene Bibliotheken +----------------+ application: X +----------------+ / +--------+ +================+ authentication-[->--\--] Linux- <- PAM config file + [-<--/--] PAM ================ [conversation()][-+ \ X auth.. a.so +----------------+ / +-n--n---+ X auth.. b.so service user A / +----------------+ V A +------- -- ----------+ ----+-----+ +----------------+ +----u--u------+ auth -[ a ]-[ b ]-[ c ] This space acctount -[ b ]-[ d ] intentionally password -[ b ]-[ c ] left blank. session -[ e ]-[ c ] +----------------+ +--------------+ 5. Mai 2002 p.15/17
Anwendungsbeispiel Beispeil für /etc/pam.d/su auth required pam_wheel.so group=root auth sufficient pam_wheel.so trust auth required pam_wheel.so deny group=nosu auth sufficient pam_rootok.so auth required pam_unix.so account requisite pam_time.so account required pam_unix.so session required pam_unix.so session required pam_limits.so 5. Mai 2002 p.16/17
Abschliessender Kommentar. Noch Fragen? 5. Mai 2002 p.17/17