Es kommt bei einigen Usern gelegentlich schon mal vor, dass sie das Admin-Passwort für das Router Webinterface ihres Draytek Vigor Routers vergessen.
Bisher war es dafür immer erforderlich, den Router per Hardware-Reset auf Werkseinstellungen zurück zu setzen und man hat damit dann aber auch alle seine Einstellungen verloren.
Was aber noch tragischer dabei ist, ist die Tatsache, dass man dann auch alle seine gesicherten Konfigurationen des Routers nicht weiter verwenden kann, da auch hier das Passwort jeweils mit gesichert wird. Somit wird nach Aufspielen einer Sicherung immer auch das alte Passwort wieder hergestellt (was man ja leider vergessen hat). "Ein Teufelskreis, meine Damen und Herren" (Zitat Martin Zuhr aka T.V. Kaiser)
Josef (http://www.bec.at) stand nun vor dem selben Problem und hat die Sicherungsdatei der Konfiguration mal in die Mangel genommen. Er hat dabei festgestellt, dass das Passwort zumindest teilweise aus der Konfig-Datei ausgelesen werden kann.
Und zwar ist er dabei folgendermaßen vorgegangen:
Sicherung der Konfig mit bekanntem Routerpasswort (Datei_1)
Änderung des Passwortes und Sicherung der Konfig (Datei_2)
usw., usw....
Anschliessend erfolgt ein binärer Vergleich der Konfig-Dateien mittels eines HEX-Editors.
Er hat dann dabei festgestellt, dass das Passwort sich zumindest großteils per Übersetzungstabelle rückübersetzen läßt und zu diesem Zweck ein php-Skript erstellt, das sowohl online als auch offline (wenn man lokal einen php-Interpreter installiert hat) verwendbar ist.
Bisherige Erkenntnisse:
Das Passwort beginnt entweder an Postion 64 oder 136.
Die ersten 8 Stellen des Passwortes folgen immer ab dieser Position.
Bei mehr als 8 Stellen kann der Rest des Passwortes je nach Konfigurationseinstellungen an unterschiedlichen Positionen in der Konfig stehen oder auch im Anschluss an die ersten 8 Zeichen stehen.
Die Übersetzungstabelle (zu erkennen in der Datei "decryptvigor.inc") enthält derzeit die Zeichen a-z und die Ziffern 0-9; es fehlen also die Großbuchstaben und Sonderzeichen.
Probleme bei der Übersetzung gibt es derzeit auch noch mit den Buchstaben "u", "v" und "w". Diese werden teilweise nicht korrekt erkannt bzw. rückübersetzt.
Benutzt man erst ein Passwort mit z.B. 8 Zeichen und dann eines mit z.B. 4 Zeichen, dann verbleiben die Zeichen 6-8 in der Konfigdatei (und werden auch rückübersetzt); sie werden aber vom Vigor nicht mehr ausgewertet.
Der Source-Code
Der Source-Code der benötigten Dateien kann hier heruntergeladen werden und wird aber auch in der aktuellen Version immer hier im Klartext veröffentlicht.
Datei: decryptvigor.inc (wird für online- und offline-Version benötigt)
Datei: decryptvigor-online.php (wird für online-Version benötigt)
Datei: decryptvigor-offline.php (wird für offline-Version benötigt)
Die Online-Version
Für alle, denen es aktuell passiert ist, dass sie ihr Passwort vergessen haben, bieten wir hier die Möglichkeit das jeweils aktuelle Skript zur eigenen Passwort-Wiederherstellung zu nutzen.
Es ist dazu natürlich erforderlich, dass ihr eure Konfig-Datei auf unseren Server übertragt!
Auch wenn noch kleine Fehler enthalten sind, kann es auch bei unvollständiger Rückübersetzung helfen, sich an das eigene Passwort wieder zu "erinnern".
Wir versichern ausdrücklich, dass die von euch übertragene Datei weder von uns gespeichert noch in irgend einer Form weiter verwendet oder analysiert wird. Es wird (bis auf die Anpassung des Layouts) original das hier veröffentlichte Skript verwendet!
Der Anfang ist gemacht - jetzt sind die "Vigor-User" gefragt!
Es fehlt noch die Übersetzung der Sonderzeichen und Grossbuchstaben (Fleissarbeit!)
Lässt sich statt der Übersetzungstabelle vielleicht ein Algorythmus zur Berechnung des Passwortes erkennen?
Warum besteht das Problem mit den Buchstaben "u", "v", "w" bzw. wie lässt es sich lösen?
Wie kommt man an die Platzierung des Restpasswortes nach den ersten 8 Zeichen?
Lassen sich auch andere Erkenntnisse (Passwörter) aus der Konfig extrahieren?
Wir hoffen hier auf rege Beteiligung und vielleicht erhalten wir irgendwann mit eurer Hilfe eine vollständige "Passwort-Recovery-Funktion"?!
Für den Meinungsaustausch und die Weiterentwicklung des Scriptes (oder auch eines Standalone-Programms) habe ich ein separates Forum eröffnet. Ich bitte darum, hier nur zu diesem Topic bzw. Skript relevante Postings zu erstellen - alle anderen Postings werden kommentarlos gelöscht.
Desweiteren bitten wir darum, von Mails zu diesem Thema abzusehen und nur im Forum eventuelle Fragen zu stellen und Lösungsansätze zu diskutieren. direkt zum Forum des Projekts zur Passwortwiederherstellung aus der Konfig-Datei
Schlußwort und das Thema Sicherheit
Was bedeuten also die bisherigen (und hoffentlich folgenden) Erkenntnisse für den Vigor-User?
Na klar: Die Konfig-Datei ist an geeigneter Stelle zu sichern und sollte nicht öffentlich zugänglich sein. Ansonsten sehe ich die Möglichkeit, das Passwort aus der Konfig-Datei zu extrahieren nicht als Sicherheitslücke. Es ist eher eine Chance, trotzdem an sein Passwort heran zu kommen, wenn man im Besitz einer Konfigurationssicherung ist.
Wer die Routerkonfiguration wirklich sicher schützen will, der sollte den Zugriff auf das Webinterface auf 2 Rechner begrenzen. Diese beiden Rechner müssen eine "feste IP per DHCP" durch den Router erhalten (per telnet: srv dhcp fixip add <IP Addr> <MAC Addr XX-XX-XX-XX-XX-XX> <Host ID>).
Zwei Rechner deswegen, weil bei Berechtigung nur eines Rechners und eventuellem Defekt der Netzwerkkarte ansonsten kein Zugriff auf den Router mehr möglich ist, ohne diesen auf Werkseinstellung zurück zu setzen.
Nur mit definierten "Wartungsrechnern" kann man sich zuverlässig auch vor "Einbrechern" schützen, die im eigenen LAN sitzen und das Passwort kennen (aus dem Internet kommt keiner in den Router, solange die Fernwartung deaktiviert ist). Weiterhin wird der Router so vor einem "Brute-Force-Angriff" geschützt (ein Skript hierfür ist eigentlich kein grösseres Problem - wurde aber bisher nicht veröffentlicht).
Die beiden Konfigurationsrechner müssen natürlich auch entsprechend abgesichert werden, sonst macht das alles keinen grossen Sinn ;-)