In den Cisco-Kursen zeigt sich oft, daß die verschiedenen Typen der Password-Verschlüsselung durcheinandergebracht werden. Dieser Beitrag geht dabei im speziellen auf den Typ 7 ein, der durch “service password-encryption” erreicht wird.
Die heute gebräuchlichen Password-Typen im IOS sind 0, 5, 6 und 7:
Typ 0:
gibt an, daß es sich um ein unverschlüsseltes Passwort handelt. Mit dem Typ 0 wird auch das Plain-Text-Password eingegeben.
Typ 5:
Dieser Typ bezeichnet kryptografisch gesicherte Passwörter. Diese werden durch MD5-Hash-Verfahren berechnet und können nicht zurückgerechnet werden. Verwendet werden sie z.B. beim enable secret oder username … secret:
ki-router(config)#enable secret ?
0 Specifies an UNENCRYPTED password will follow
5 Specifies an ENCRYPTED secret will follow
LINE The UNENCRYPTED (cleartext) 'enable' secret
ki-router(config)#username test secret ?
0 Specifies an UNENCRYPTED secret will follow
5 Specifies a HIDDEN secret will follow
LINE The UNENCRYPTED (cleartext) user secret
Bei letzterem ist zu beachten, daß diese Form nicht für ppp-chap verwendet werden kann, da der Router dabei das Klartext-Kennwort wissen muß.
Eine Beispiel-Implementierung in Python um diese Passwörter zu generieren ist hier zu finden.
Typ 6:
Dieser Typ kommt z.B. bei der Verschlüsselung von Pre-Shared-Keys bei IPSec zum Einsatz:
ki-router(config)#crypto isakmp key ?
0 Specifies an UNENCRYPTED password will follow
6 Specifies an ENCRYPTED password will follow
Diese Passwörter werden durch eine AES-Verschlüsselung gebildet.
Typ 7:
Dies ist der Typ, der durch service password-encryption zusammen mit “normalen” Passwörtern (enable password, username … password, Line-Passwörter) gebildet wird:
ki-router(config)#enable password ?
0 Specifies an UNENCRYPTED password will follow
7 Specifies a HIDDEN password will follow
LINE The UNENCRYPTED (cleartext) 'enable' password
ki-router(config)#username test password ?
0 Specifies an UNENCRYPTED password will follow
7 Specifies a HIDDEN password will follow
LINE The UNENCRYPTED (cleartext) user password
Der Algorithmus, der hinter dieser Methode steht, ist zum einen trivial, zum anderen kann das Passwort zurückgerechnet werden. Desweiteren kann von der Länge des verschlüsselten Passwortes auf die Länge des Klartext-Passwort geschlossen werden:
ki-router(config)#enable password c
ki-router(config)#do sh run | i enable password
enable password 7 0508
ki-router(config)#enable password ci
ki-router(config)#do sh run | i enable password
enable password 7 045802
ki-router(config)#enable password cis
ki-router(config)#do sh run | i enable password
enable password 7 13061E01
ki-router(config)#enable password cisc
ki-router(config)#do sh run | i enable password
enable password 7 0822455D0A
ki-router(config)#enable password cisco
ki-router(config)#do sh run | i enable password
enable password 7 14141B180F0B
ki-router(config)#
Man kann sehr schön erkennen, daß dieser Typ immer einen “Startwert” von zwei Zeichen hat und sich das verschlüsselte Password mit jedem Buchstaben um zwei Hex-Zeichen verlängert.
In einem Beispiel soll das folgende Typ 7-verschlüsselte Password zurückgerechnet werden:
enable password 7 14141B180F0B
Das Typ7-Password ist 12 Zeichen lang, das Klartext-Password muß also (12-2)/2=5 Zeichen lang sein.
Zerlegung des Type7-Passwords:
Das Password wird in Blöcke à zwei Zeichen zerlegt:
14 - der XOR-Offset
14 - das erste Zeichen
1B - das zweite Zeichen
18 - das dritte Zeichen
0F - das vierte Zeichen
0B - das fünfte Zeichen
Ermittlung der XOR-Werte:
Die Entschlüsselung enthält eine Reihe von xor-Operationen (exclusiv oder). Diese werden mit Werten der folgenden (im IOS vorgegebenen) xor-Tabelle ausgeführt:
0x64, 0x73, 0x66, 0x64, 0x3b, 0x6b, 0x66, 0x6f,
0x41, 0x2c, 0x2e, 0x69, 0x79, 0x65, 0x77, 0x72,
0x6b, 0x6c, 0x64, 0x4a, 0x4b, 0x44, 0x48, 0x53,
0x55, 0x42, 0x73, 0x67, 0x76, 0x63, 0x61, 0x36,
0x39, 0x38, 0x33, 0x34, 0x6e, 0x63, 0x78, 0x76,
0x39, 0x38, 0x37, 0x33, 0x32, 0x35, 0x34, 0x6b,
0x3b, 0x66, 0x67, 0x38, 0x37
Die erste Zahl im Typ7-Password ist 14, an der 15. Stelle (die Zählweise beginnt bei 0) beginnen die 5 xor-Werte: 0x77, 0x72, 0x6b, 0x6c, 0x64
Ermittlung des ersten Zeichens des Passwords:
Die nächsten zwei Zeichen nach dem XOR-Startwert sind 14.
Diese Zahl wird per exklusiv-oder mit dem ersten xor-Wert (0x77) verknüpft:
0x14 xor 0x77 = 0x63
0x63 entspricht in der ASCII-Tabelle dem “c”.
Ermittlung des zweiten Zeichens des Passwords:
Die nächsten zwei Zeichen sind 1b. Diese Zahl wird mit dem zweiten xor-Wert (0x72) verknüpft:
0x1b xor 0x72 = 0x69
0x69 entspricht in der ASCII-Tabelle dem “i”.
Ermittlung des dritten Zeichens des Passwords:
Die nächsten zwei Zeichen sind 18. Diese Zahl wird mit dem dritten xor-Wert (0x6b) verknüpft:
0x18 xor 0x6b = 0x73
0x73 entspricht in der ASCII-Tabelle dem “s”.
Ermittlung des vierten Zeichens des Passwords:
Die nächsten zwei Zeichen sind 0f. Diese Zahl wird mit dem vierten xor-Wert (0x6c) verknüpft:
0x0f xor 0x6c = 0x63
0x63 entspricht in der ASCII-Tabelle dem “c”.
Ermittlung des fünften Zeichens des Passwords:
Die nächsten zwei Zeichen sind 0b. Diese Zahl wird mit dem fünften xor-Wert (0x64) verknüpft:
0x0b xor 0x64 = 0x6f
0x6F entspricht in der ASCII-Tabelle dem “o”.
Damit ist das Klartext-Password “cisco” ermittelt.
One Reply to “Der Schutz hinter “service password-encryption” im Cisco IOS”