Transfer von Windows Benutzerkonten in Samba Benutzerdatenbank
Accounts aus Windows SAM-Datenbank extrahieren:
Um Benutzer- sowie Computerkonten im laufenden Betrieb aus der Windows SAM-Datenbank auszulesen kann beispielsweise das Programm fgdump verwendet werden. fgdump muss dabei mit Administrator-Privilegien gestartet werden um die Datenbank auslesen zu können. Das Programm erstellt dabei eine simple ASCII Textdatei die beliebig weiter verwendet werden kann.
fgdump lässt sich unter folgender Adresse herunterladen:
http://www.foofus.net/~fizzgig/fgdump/fgdump-usage.htm
Nach einem Doppelklick auf die ausführbare Datei wird im selben Verzeichnis eine einfache Textdatei mit den enthaltenen Kennwort-Hashes erstellt, z.B. 127.0.0.1-fgdump. Diese Datei müssen wir nun auf unseren Linux Server kopieren
Ergebnis in die Datei smbpasswd eintragen
Ein Zeilenumbruch in Microsoft Betriebssystemen wird mit Carriage Return/Linefeed dargestellt. Auf UNIX bzw. Linux Systemen wird dieser jedoch nur mit Linefeed dargestellt, daher entfernen wir nun das für uns unnötige Carriage Return aus unserer Textdatei und legen die nun konvertierte Datei in /var/lib/samba/private/smbpasswd ab. Dies ist der default-Speicherort für die Datei smbpasswd in CentOS 6.
tr -d "\r" < 127.0.0.1-pwdump > /var/lib/samba/private/smbpasswd
Benutzer lokal anlegen und Heimatverzeichnis erstellen
Da für einen Betrieb eines Samba Servers in den meisten Fällen Benutzerkonten auch lokal angelegt sein müssen legen wir für jeden angeführten Benutzer in der Datei smbpasswd ein Konto samt Heimatverzeichnis an. Dabei sollten vorher nicht benötigte Zeilen aus der Datei entfernt werden, z.B. Maschinenaccounts (enden mit „$), falls der Samba Server nicht als Domain Controller arbeiten soll.
for line in `cat smbpasswd`; do useradd -u `echo line | cut -d: -f 2` -m `echo line | cut -d: -f 1`; done
Dabei wird der im ersten Feld angeführte Benutzer erstellt und mit der im zweiten Feld angegebenen User-ID versehen. Da die User-IDs bei Microsoft Betriebssystemen recht hoch sind sollte es normalerweise zu keinen Konflikten beim Erstellen der Accounts kommen, falls jedoch eine User-ID im System bereits vergeben ist muss diese in smbpasswd von Hand geändert werden.
Benutzer aus smbpasswd in tdbsam übertragen:
Der Import der Benutzer aus der Datei smbpasswd in das Samba Backend ist sehr einfach:
pdbedit -i smbpasswd -e tdbsam
Vorraussetzung ist dabei natürlich dass in smb.conf tdbsam als Backend gewählt ist, was dem default Wert entspricht. Es ist also in den meisten Fällen keine Änderung dieses Parameters in smb.conf erforderlich. Natürlich kann auch ein Import in andere Backends, wie zum Beispiel ldap erfolgen. Die manpage zu pdbedit gibt hierzu weiterführende Informationen.
Account Control Block Flag X hinzufügen
Durch Hinzufügen des X-Control Block Flags wird ein Ablaufen des Kennwortes verhindert, das heißt dass das Kennwort für unbeschränkte Zeit gültig ist.
for i in `cut -d: -f 1 smbpasswd`; do pdbedit -c "[X]" -u $i; done
Weiter Informationen zu Control Block Flags sind auf der Website des Samba-Projekts zu finden:
http://www.samba.org/samba/docs/man/Samba-HOWTO-Collection/passdb.html
Nach einem Neustart des Samba-Servers sollten nun die importierten Benutzer- sowie Maschinenaccounts problemlos verwendbar sein.
LM/NT-hashes extrahieren
Benutzerpassworte werden bei Windows verschlüsselt in einer Datei gespeichert – entschlüsseln Sie die Inhalte dieser Datei, haben Sie die Passworte. Bei Systemen bis Windows XP SP2 ist eine Entschlüsselung aller möglichen Passworte innerhalb weniger Sekunden bis Minuten möglich (LM-Hash), bei neueren Windows-Versionen (NT-Hash) kann sich diese Zeitspanne bei Verwendung eines sicheren Passworts auf mehrere Stunden/Tage/Wochen ausdehnen.
Der LM- bzw. NT-hash befindet sich unter
%systemroot%\system32\config
%systemroot%\repair (falls rdisk verwendet wurde)
in der registry unter HKEY_LOCAL_MACHINE => SAM
Mit dem Programm samdump2 das auf sourceforge.net unter dem ophcrack-Projekt zu finden ist, lässt sich die SAM-Datei auslesen. Entweder direkt unter Windows (Sie brauchen dafür zumindest NT-Authority Rechte), oder durch Booten eines anderen Betriebssystems (z.B. Linux). Sie können auch fgdump verwenden (zu finden auf foofus.net), das die hashes auch über das Netzwerk extrahieren kann. Ausserdem existieren noch mehrere Varianten von pwdump für diese Aufgabe. Last but not least, sehr bequem und mit grafischer Oberfläche: Cain&Abel, das die Hashes auch problemlos aus dem Netzwerkverkehr mitschneiden kann.
Hier die Anwendung von samdump2 unter Linux auf einem Windows Vista 64 Ultimate SP1 System:
cd /Windows/System32/config samdump2 SYSTEM SAM > /tmp/hash.txt cat /tmp/hash.txt Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0::: Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0::: slacker:1000:aad3b435b51404eeaad3b435b51404ee:8846f7eaee8fb117ad06bdd830b7586c:::
Zur Erläuterung :
LM aad3b435b51404eeaad3b435b51404ee
NT 31d6cfe0d16ae931b73c59d7e0c089c0
sind sie Hashwerte für ein leeres Passwort. Einzig relevanter Passworthash ist hier also
8846f7eaee8fb117ad06bdd830b7586c
pwdump / fgdump auf Windows Server 2003 SP2 und Windows XP:
pwdump.exe -o hash.txt [Netbios Name]
pwdump2.exe > hash.txt
pwdump7.exe > hash.txt
fgdump.exe (schreibt ergebnis in die Datei „127.0.0.1.pwdump“)
Hier ein Auszug eines Windows Server 2003 SP2 samdumps :
Guest:501:NO PASSWORD*********************:NO PASSWORD*********************::: SUPPORT_388945a0:1001:NO PASSWORD*********************:0A1681FF64C4F28A0987CA00538F4698::: Administrator:500:E52CAC67419A9A224A3B108F3FA6CB6D:8846F7EAEE8FB117AD06BDD830B7586C:::
Der LM-Hash ist um einiges leichter zu knacken ist als der NT-Hash, deaktivieren Sie daher unbedingt die Speicherung eines LM-hashes (siehe unten).
Security ?
Microsoft stellt einige mehr oder weniger effektive Lösungsansätze bereit um das Dilemma unsicherer Kennworthashes zu beheben:
Verwenden Sie ausschliesslich Passworte die länger als 14 Zeichen sind.
Deaktivieren Sie das Speichern von LM hashes in den Sicherheitsrichtlinien wenn Sie ein System neuer als NT 4 betreiben (Achtung: Windows-95 und Samba Clients < 3.0 können sich danach nicht mehr einloggen/authentifizieren). Ändern Sie Ihre Passworte oft genug, um eine Attacke auf den NT-hash unwirksam zu machen.
Sie können die Deaktivierung der Speicherung von LM-Hashes auch durch einen Registry-Key setzen. Am Besten eine einfache Textdatei mit folgendem Inhalt erstellen:
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa] "nolmhash"=dword:00000001
Diese dann als Datei mit der Endung „.reg“ abspeichern und durch Doppelklick in die Registry importieren. Da unsichere LM-Hashes nach deaktivieren der Speicherung nicht automatisch gelöscht werden ist eine Neuerstellung des Kennwortes notwendig!
Dies kann manuell oder mit Hilfe eines kleinen Batch-Skripts erfolgen:
net user Benutzer Kennwort /passwordchg:no /passwordreq:yes
Hier würde zum Beispiel das Passwort des Benutzers „Benutzer“ neu gesetzt. Das neue Passwort des Benutzers lautet „Kennwort“. Die zusätzlichen Optionen besagen dass der Benutzer das Kennwort nicht ändern darf und ein leeres Passwort nicht akzeptiert wird.
Referenzen :
http://support.microsoft.com/?scid=kb%3Bde%3B299656&x=10&y=12
http://technet.microsoft.com/de-de/magazine/2006.08.securitywatch(en-us).aspx