Was sind Passwörter?
Das Passwort ist die am weitesten verbreitete Methode um Benutzer auf Computern zu Authentifizieren und zusammen mit einem Benutzernamen zu Identifizieren. Dabei hängt die Sicherheit des Passwortes und damit die der Authentifizierung von der Länge des Passworts, von der Anzahl aller möglichen Zeichen und der Gültigkeitsdauer des Passworts ab. Das heißt, am sichersten sind Passwörter die aus möglichst vielen Zeichen bestehen können (das Alphabet mit Groß und Kleinschreibung, Zahlen, Sonderzeichen), die möglichst lang sind und die nur einmal gültig sind (Einwegpasswörter). Aber auch die Auswahl der Zeichen des Passworts ist von großer Bedeutung, bekannte Namen, Wörter, Sätze können leicht mit Wörterbuchangriffen gefunden werden.
In diesem Zusammenhang wurde im Dezember 2009 die Webseite „rockyou.com“ gehackt und dabei die Passwörter von über 32 Millionen Benutzern ausgelesen und veröffentlich. (vgl. [2]) Eine Analyse der Passwörter ergab, dass das am meisten verwendete Passwort (fast 300.000) ist „123456“. Das am zweit (fast 80.000) und dritt (76.000) häufigsten verwendete Passwort ist „12345“ und „123456789“. Außerdem benutzten fast die Hälfte aller User ein Passwort das mit einem Wörterbuchangriff leicht zu finden ist.
Hier eine Liste mit den 20 am häufigsten verwendeten Passwörtern auf „rockyou.com“: (vgl. [1])
Rank | Num of Occurrences | Password
————————————————————–
- 1 290729 123456
- 2 79076 12345
- 3 76789 123456789
- 4 59462 password
- 5 49952 iloveyou
- 6 33291 princess
- 7 21725 1234567
- 8 20901 rockyou
- 9 20553 12345678
- 10 16648 abc123
- 11 16227 nicole
- 12 15308 daniel
- 13 15163 babygirl
- 14 14726 monkey
- 15 14331 lovely
- 16 14103 jessica
- 17 13984 654321
- 18 13981 michael
- 19 13488 ashley
- 20 13456 qwerty
Wie verwalte ich meine Passwörter?
Heutzutage braucht man für fast jede Internetseite, für deinen eigenen PC, für das E-Mail Konto, für die Arbeit ein Passwort. Bei so einer Menge an Passwörtern ist es schwierig die Übersicht zu behalten. Auch sollte man auf keinen Fall für alles dasselbe Passwort verwenden. Eine gute Möglichkeit all diese Passwörter zu behalten und zu verwalten ist ein Passwort Manager. Ein solches Programm ist „KeePass“ (vgl. [4]). Das Programm speichert alle Passwörter in einer Datenbank dir von dem User mit einem Masterkey verschlüsselt und geschützt wird. Somit braucht sich der Anwender nur ein Passwort statt dutzende merken. Die Datenbank kann auch bequem auf einem USB Stick mitgenommen werden und somit hat mein seine wichtigsten Passwörter immer dabei. „KeePass“ bietet eine Reihe von Sicherheitsfeatures wie einen Zufallszahlengenerator, einen Schutz gegen Wörterbuchangriffe sowie eine Sicherung der Programmdaten im RAM. Um die sensiblen Daten im Arbeitsspeicher zu schützen werden diese dort nur verschlüsselt gespeichert und vor dem beenden überschrieben und somit gelöscht.
Wie werden Passwörter gespeichert?
Um ein Passwort sicher zu speichern verwendet man meist eine Einwegfunktion (Hashfunktion) die auf das eingegebene Passwort angewendet wird. Somit werden keine Passwörter in Klartext gespeichert und ein Angreifer kann selbst mit den gespeicherten Passwörtern (Hashwert) das System nur schwer kompromittieren. Um die Sicherheit dieses Verfahrens noch zu erhöhen werden mit Passwörter noch bevor sie mit der Einwegfunktion behandelt werden um eine bekannte Zeichenkette (Salt) verlängert. Das Salt wird dabei in Klartext mit dem Passwort abgespeichert um ein eingegebenes Passwort mit dem gespeicherten vergleichen zu können. Damit wird Sicherheit der Einwegfunktion um ein vielfaches erhöht und selbst einfache Passwörter die mit dem Salt künstlich verlängert werden können nur sehr schwer aus den Hashwerten errechnet werden.
Was sind kryptologische Hashfunktionen und welche gibt es? (vgl. [7])
Hashfunktionen bilden eine Zeichenkette von beliebiger Länge auf eine Zeichenkette von fester Länge und bestimmten Zeichen ab. Kryptologische Hashfunktionen sind eine Untergruppe die zusätzlich noch Einwegfunktionen sind. Somit kann aus dem Ergebnis nicht auf die Eingabe geschlossen werden. Eine weitere wichtige Eigenschaft von kryptologischen Hashfunktionen ist es, dass man nur sehr schwer zu einer bekannten Eingabe eine zweite (aber unterschiedliche) Eingabe finden kann die dasselbe Ergebnis wie die Erste hat (oder schwächer, dass man nur sehr schwer zwei beliebige Eingaben finden kann die das gleiche Ergebnis haben).
Hier sind nun einige Bekannte Hashfunktionen mit wichtigen Eigenschaften aufgelistet: (vgl. [5])
Funktionsname | Digest size | Max. message length | Compression function | best known collision attack
- MD5 128 bits 264 bits 512-bit block 128-bit chaining variable 229
- SHA-1 160 bits 264 bits 512-bit block 160-bit chaining variable 269
- SHA-256 256 bits 264 bits 512-bit block 256-bit chaining variable –
- SHA-512 512 bits 128 bits 1024-bit block 512-bit chaining variable –
- Whirlpool 512 bits 264 bits 512-bit block 512-bit chaining variable –
Was sind Rainbow Tables und wie funktionieren sie? (vgl. [6])
Die „einfachste“ Möglichkeit ein Passwort das mit einer kryptologischen Hashfunktion gespeichert wurde wiederherzustellen ist, alle möglichen Kombinationen von Eingabewörtern durch zu probieren und den Hashwert mit dem gesuchten zu vergleichen. Da diese Methode sehr Zeitaufwendig ist, wenn man für jedes Passwort von vorne zu rechnen beginnt, und sehr Speicheraufwendig wenn man jedes Klartext, Hashwert Paar abspeichert wurden Methoden entwickelt mit der der Zeitaufwand durch Speicherplatz bzw. der Speicherbedarf durch Laufzeit reduziert werden kann.
Eine dieser Methoden ist die Rainbow Table (Regenbogentabelle) das Suchfeld für die Hashfunktion einzugrenzen. Dabei werden Ketten, die mit einem Passwort beginnen, durch das ein Hashwert berechnet wird, der wieder in ein mögliches Passwort umgewandelt wird, usw. Von diesen Ketten werden nur der der Anfangs- und Endwert gespeichert.
Um nun ein Klartextkennwort zu einem Hashwert zu erhalten, werden auf den Hashwert die selben Funktionen wie zum generieren der Ketten angewendet. Stimmt nun eines der Zwischenergebnisse mit einem Endeintrag in der Tabelle überein kann die gefundene Kette durchgegangen werden und das Klartextkennwort zu dem Hashwert gefunden werden.
Wie und Wo werden in Betriebssystemen Passwörter gespeichert? (vgl. [14])
In modernen Betriebssystemen werden Benutzerkonten standardmäßig mit einem Passwort geschützt. Alle Betriebssysteme verwenden dabei das gleiche Konzept, das Passwort wird geschützt durch eine Einwegfunktion auf der Festplatte abgelegt. Wenn der User sein Passwort eingeben soll, wird das eingegebene Passwort, auf das wieder die Einwegfunktion angewendet wird, mit dem gespeicherten verglichen und bei Übereinstimmung der Zugriff gewährt.
GNU/Linux (vgl. [8])
Linux, hier am Beispiel CentOS, speichert seine Benutzerdaten in die Datei „/etc/passwd“. Diese Datei kann von jedem User auf dem System gelesen werden. Darin befinden sich die Benutzernamen aller am System vorhanden User, optional das Passwort, die User ID, die Gruppen ID, das Heimatverzeichnis, die verwendete Shell und optional noch zusätzliche Informationen wie zum Beispiel der volle Name das Users. Da die Datei „/etc/passwd“ von jedem gelesen werden muss ist es nicht besonders sicher darin die Passwörter zu speichern, daher verwenden mit meisten Linux Systeme und auch CentOS die Datei „/etc/shadow“ um für jeden User das Passwort abzuspeichern. Wird die Datei „/etc/shadow“ zum Speichern für das Passwort verwendet steht an der Stelle des Passworts ein kleines „x“ um zu kennzeichnen das das Passwort in der shadow Datei ist.
Hier einige Einträge aus einem passwd File:
- postfix:x:89:89::/var/spool/postfix:/sbin/nologin
- mailman:x:41:41:GNU Mailing List Manager:/usr/lib/mailman:/sbin/nologin
- postgres:x:26:26:PostgreSQL Server:/var/lib/pgsql:/bin/bash
- dovecot:x:97:97:dovecot:/usr/libexec/dovecot:/sbin/nologin
- clamav:x:100:101:Clamav database update user:/var/lib/clamav:/sbin/nologin
- user1:x:500:501:User1:/home/ user1:/bin/bash
- user2:x:501:502:Benutzer Eins:/home/ user2:/bin/sh
- user3:x:503:502::/home/ user3:/bin/false
- user4:x:506:506::/home/ user4:/bin/bash
- user5:x:507:501::/home/ user1/homes/ user5:/dev/null
- user6:x:508:501:Benutzer Sechs:/home/ user1/homes/ user6:/dev/null
- user7:x:509:501: Benutzer Sieben:/home/ user1/homes/ user7:/dev/null
- user8:x:510:501: Benutzer Acht:/home/ user1/homes/ user8:/dev/null
- user9:x:511:501: Benutzer Neun:/home/ user1/homes/ user9:/dev/null
- user10:x:512:501: Benutzer Zehn:/home/ user1/homes/ user10:/dev/null
Die Datei „/etc/shadow“ kann nur vom User root gelesen werden und somit können darin Passwörter sicher gespeichert werden. Die Datei einhält den Benutzernamen zu dem das Passwort gehört, das Passwort in verschlüsselter Form (geschützt meist durch einen Hash Algorithmus, hier MD5) , das Datum an dem das Passwort das letzte Mal geändert wurde und noch einige weitere Felder die in der Literaturquelle [8] genauer erklärt werden. Das Feld in dem das Passwort gespeichert wird, wird noch in weitere Felder unterteilt, die mit einem $-Zeichen getrennt sind. Zur verarbeitung des Passwortfeldes wird die Funktion crypt verwendet, für genauere Erklärungen siehe die Manpage von crypt(5) im Literaturverzeichniss [9]. Beginnt der Passwortstring mit einem $ wurde ein anderen Algorithmus als DES verwendet. Die Zeichen „$1$“ am Anfang geben zum Beispiel an das der MD5 Algorithmus verwendet wurde. Wird MD5 verwendet folgen anschließend 8 bytes die einen Salt für das Passwort darstellen. Anschließend, getrennt durch ein „$“ folgt das verschlüsselte Passwort mit 22 bytes.
Hier einige Einträge aus einem shadow File:
- user1:$1$64940791$fmqrzRd1sdssntS580grd0:14640::::::
- user2:$1$65116444$C4NnRGHGeuhfSDg2MOU9l1:14642::::::
- user3:$1$65202459$K3.7WDplFcGp2rYjH4irU1:14650::::::
- user4:$1$ehYkbFVR$hVYycGCtO7yNIsek6wEPy.:14653:0:99999:7:::
- user5:$1$66238589$dMlbYZ/EN0wlUWRA7Hv001:14655::::::
- user6:$1$66488849$FIl6aIv2VZnsg.dNMjJhJ/:14658::::::
- user7:$1$66603118$QwTb1n5gpftJHDiSx5uyj0:14659::::::
- user8:$1$66603171$APje/DqNfFFLISORcPrUx/:14659::::::
- user9:$1$66603284$3MavUXyEUrNp8YcxaqMil0:14659::::::
- user10:$1$66603362$U.kQCom4sVzeJ0KRW7wE..:14815::::::
- user11:$1$66603488$U/L2G3d9Nl8sA1WlnCuJa1:14659::::::
- user12:$1$66603553$zMODEUpIaa3yG2j9wxoXw/:14659::::::
- user13:$1$66603630$PeLFLUnO/B7NCcDjBeKTL1:14659::::::
- user14:$1$66603781$yh7oHN9W54.oZv8T4nN8e0:14659::::::
- user15:$1$66606855$EzrUC.dlCX6glV9hRx.sf0:14659::::::
Jeder Benutzer gehört auch einer Gruppe an. Informationen über Gruppen werden in der Datei „/etc/group“ gespeichert. Für jede Gruppe werden folgende Informationen gespeichert: der Gruppenname, optional das Passwort, die Gruppen ID und eine Liste mit den Benutzernamen die Mitglied in der Gruppe sind. Auch für Gruppen kann das Passwort in einer zweiten Datei gespeichert werden. Die Datei „/etc/gshadow“ enthält dann den Gruppennamen, das verschlüsselte Passwort, den Gruppenadministrator und die Mitglieder der Gruppe.
Hier einige Einträge aus einer group Datei:
- root::0:root
- bin::1:root,bin,daemon
- daemon::2:root,bin,daemon
- sys::3:root,bin,adm
- adm::4:root,adm,daemon
- tty::5:
- disk::6:root
- lp::7:daemon,lp
- mem::8:
- kmem::9:
- wheel::10:root
- mail::12:mail,postfix
- news::13:news
- uucp::14:uucp
- man::15:
- games::20:
- gopher::30:
- dip::40:
- ftp::50:
- lock::54:
- nobody::99:
Windows XP (vgl. [12])
Windows speichert die Benutzerinformationen in dem „Security Accounts Manager“ der die Daten als Registry Datei meist unter %windir%/system32/config/SAM ablegt. Die Passwörter werden als „LM hash“ und „NTML hash“ abgespeichert. Da der LM hash ein großes Sicherheitsrisiko birgt kann optional abgeschaltet werden, in neueren Windows Versionen, ab Windows Vista, ist dies Standard. Um die Sicherheit der Passwörter noch zu erhöhen wird die Datenbank mit der SysKey-Funktion (vgl. [13]) verschlüsselt.
Offline Angriffe auf Benutzerpasswörter
Da man als normaler User unter Linux normalerweise nicht das Passwortfile auslesen kann und unter Windows der Zugriff auf die Datenbank im laufenden Betrieb nicht möglich ist, gibt es mehrere Möglichkeiten, wenn man physikalischen Zugriff auf das System hat, die Passwörter bzw. die Passworthashwerte einfach auszulesen. Mit verschiedenen Boot-CDs kann der Rechner durch ein sich auf der CD befindliches Betriebssystem gebootet werden und über diese das Passwortfile ausgelesen und kopiert werden. Auch gibt es spezielle CDs die darauf ausgelegt sind die Passwörter auszulesen und das Originalpasswort aus dem Hashwert zu errechnen. Auch bieten viele solche CDs die Möglichkeit das Passwort das Systems zu ändern oder löschen um somit ein einloggen beim nächsten Start des Betriebssystems zu ermöglichen.
Hat man einen Passworthash oder eine Datei mit Hashes (zum Beispiel die Linux shadow oder das Windows SMA File) vor sich gibt es verschiedene Möglichkeiten um ihn wieder das Anfangspasswort umzuwandeln. Für Windows kann dafür zum Beispiel das Programm „Cain and Abel“ (vgl. [10]) verwendet werden unter Linux gibt es das bekannte Programm „John the Ripper“ (vgl. [11]) verwendet werden. Es gibt noch viele gewerbliche Programme die Zusatzfeatures anbieten wie das Benutzen der Grafikkartenrechenleistung oder verteiltes rechnen auf mehreren PCs.
Literaturverzeichnis:
- [1] http://reusablesec.blogspot.com/2009/12/rockyou-32-million-password-list-top.html, Besucht am 25. November 2010
- [2] http://www.scmagazineus.com/rockyou-hack-reveals-most-common-password-123456/article/162071/, Besucht am 25. November 2010
- [3] http://www.scmagazineus.com/rockyou-hack-compromises-32-million-passwords/article/159676/, Besucht am 25. November 2010
- [4] http://keepass.info/, Besucht am 25. November 2010
- [5] http://ehash.iaik.tugraz.at/wiki/The_Hash_Function_Zoo, Besucht am 25. November 2010
- [6] http://kestas.kuliukas.com/RainbowTables/, Besucht am 25. November 2010
- [7] http://www.wi.uni-muenster.de/pi/lehre/ws0708/seminar/Abgaben/Kryptografische%20Hashfunktionen.pdf, Besucht am 25. November 2010
- [8] http://www.centos.org/docs/4/html/rhel-isa-en-4/s1-acctsgrps-rhlspec.html, Besucht am 25. November 2010
- [9] http://linux.die.net/man/3/crypt, Besucht am 25. November 2010
- [10] http://www.oxid.it/cain.html, Besucht am 25. November 2010
- [11] http://www.openwall.com/john/, Besucht am 25. November 2010
- [12] http://technet.microsoft.com/en-us/library/bb457114.aspx, Besucht am 25. November 2010
- [13] http://support.microsoft.com/kb/310105/EN-US, Besucht am 25. November 2010
- [14] http://www.usenix.org/publications/login/2004-06/pdfs/alexander.pdf, Besucht am 25. November 2010