AVM-Recovery bei 7490
Nur der Vollständigkeit halber als Ergänzung zu dem vor einigen Tagen von mir geschriebenen:
Ich habe bisher nirgendwo etwas zum Flash-Vorgang bei AVM-Recovery für die 7490 hier gefunden, vielleicht bin ich aber auch nur zu blöd zum Suchen.
Das AVM-Recovery-Programm schreibt (ich habe es allerdings nur zweimal getestet, einmal mit jeder Einstellung von "linux_fs_start") immer in die
aktive Partition, anders als beim Flashen über das GUI; dabei kommt ja dann das install-Skript aus dem Firmware-Image zum Einsatz und das schreibt in die inaktive. Die Entscheidung fällt bei Recovery auch nicht einfach die EVA ... das ist wohl schon "more sophisticated", da die EVA mit dem Restaurieren des "Systems" (also des Kernels und des Wrapper-FS) eigentlich gar nichts mehr zu tun hat.
Beim Flashen wird - wie bei den anderen Modellen auch - der FTP-Server in EVA verwendet, soweit keine Überraschung, das
Auslesen der Box-Infos ist im ruKT ja auch schon implementiert. Zu meiner Überraschung funktioniert aber nicht einmal das "Halten in ADAM2-FTP" bei einer 7490, da skyteddy wohl vorsichtshalber eine "komplette" Sperre für die 7490 eingebaut hat.
Wenigstens die Umschaltung zwischen den beiden Systemen der 7490 sollte aber problemlos auch für das ruKT machbar sein, mal sehen, ob sich da etwas in der Richtung tun wird.
Der Vorgang der "Erkennung" der Box (nachdem die IP-Adresse mit UDP-BC an 192.168.178.255 auf Port 5035 versucht wurde zu ermitteln, bei mir war ein paralleles ARP dann wohl doch schneller) läuft folgendermaßen ab:
Code:
220 ADAM2 FTP Server ready
USER adam2
331 Password required for adam2
PASS adam2
230 User adam2 successfully logged in
SYST
215 AVM EVA Version 1.1964 0x0 0x740D
TYPE I
200 Type set to BINARY
MEDIA SDRAM
200 Media set to MEDIA_SDRAM
P@SW
227 Entering Passive Mode (192,168,178,1,12,8)
RETR env
150 Opening BINARY data connection
226 Transfer complete
USER adam2
331 Password required for adam2
PASS adam2
230 User adam2 successfully logged in
SYST
215 AVM EVA Version 1.1964 0x0 0x740D
TYPE I
200 Type set to BINARY
MEDIA SDRAM
200 Media set to MEDIA_SDRAM
P@SW
227 Entering Passive Mode (192,168,178,1,12,3)
RETR count
150 Opening BINARY data connection
226 Transfer complete
BYE
221 Thank you for using the FTP service on ADAM2
221 Goodbye.
Warum sich das AVM-Recovery-Programm nach dem "RETR env" noch einmal neu anmeldet, würde mich schon interessieren ... in erster Linie, ob das ein Workaround für ein bestehendes Problem ist oder nur eine Frage der Programmierung, weil beim "RETR count" nichts über den aktuellen Status der FTP-Verbindung bekannt ist (und ein USER-Kommando beim FTP auf dem Kommando-Channel sogar mittendrin eigentlich immer erlaubt ist).
Der FTP-Server bleibt jedenfalls nach dem "BYE" weiterhin aktiv, ob es da ein Timeout gibt, nach dem er die Box von sich aus neu startet, weiß ich nicht, ist aber meines Erachtens eher unwahrscheinlich.
Ob die bei "RETR count" geholten Stände des "Betriebsstundenzählers" (irgendwelche ansonsten unerreichbaren Zellen in NOR, die im laufenden Betrieb wohl von "run_clock" beschrieben werden) wirklich stimmig sind, würde ich angesichts dieser Werte
Code:
reboot_major 0
reboot_minor 1
run_hours 2
run_days 20
run_mounths 0
run_years 15
allerdings bezweifeln. Wenn AVM da nicht schon irgendetwas Spezielles "codiert" hinterlegt und "run_clock" da gar nichts mehr hineinschreibt, wäre doch der IV für die Berechnung des Kennworts zur Verschlüsselung des privaten Key-Files mal eine "nette" Idee. Vielleicht ist es aber auch nur ein weiterer "Blinddarm".
Nachdem die Daten der Box gesammelt wurden, werden die MTD-Partitionen 3 und 4 (das sind nur die Nummern für die EVA, das FRITZ!OS vergibt seine eigenen) mit einem aufbereiteten Inhalt - da werden die vorher von der Box ermittelten Daten wieder verwendet - überschrieben:
Code:
220 ADAM2 FTP Server ready
USER adam2
331 Password required for adam2
PASS adam2
230 User adam2 successfully logged in
SYST
215 AVM EVA Version 1.1964 0x0 0x740D
TYPE I
200 Type set to BINARY
MEDIA FLSH
200 Media set to MEDIA_FLASH
P@SW
227 Entering Passive Mode (192,168,178,1,12,6)
STOR mtd3
150 Opening BINARY data connection
226 Transfer complete
BYE
221 Thank you for using the FTP service on ADAM2
221 Goodbye.
mtd4 ist dann noch einmal (im Kommandokanal und auch der komplette Dateninhalt der übertragenen Datei bis aufs Byte) identisch. Die übertragenen Daten umfassen offenbar die komplette NOR-Partition für das TFFS (Größe 0x60000 Byte). Ich habe keine Ahnung, ob das beim AVM-Recovery für frühere Modelle auch schon so war ... ansonsten wurden da die Daten im TFFS wohl wenigstens teilweise (was das Urlader-Environment angeht) auch bei ungültigem TFFS-Inhalt aus MTD2 (das Environment ist ja nach den Treiberquellen zu urteilen auch ein "kleines" TFFS) restauriert.
Jedenfalls bestehen die übertragenen Daten aus der kompletten Index-Liste (und den Namen der Variablen) inkl. der (ja getrennt gespeicherten) Werte, netterweise wird sogar der "crash"-Eintrags aus dem Environment wieder restauriert. Am Ende befinden sich dann natürlich jede Menge gesetzte Bits, wie es sich für einen gelöschten NOR-Flash gehört. Ob da auch die einfachere Variante mit einer 0-Byte-Datei als "Upload" funktioniert wie bei früheren Modellen, habe ich nicht getestet.
Aber egal, denn jetzt weicht es definitiv von anderen Modellen ab (zumindest von dem, was ich früher bei AVM-Recovery gesehen habe):
Code:
220 ADAM2 FTP Server ready
USER adam2
331 Password required for adam2
PASS adam2
230 User adam2 successfully logged in
SYST
215 AVM EVA Version 1.1964 0x0 0x740D
SETENV memsize 0xe8a1a00
200 SETENV command successful
SETENV kernel_args_tmp mtdram1=0x8e8a1a00,0x90000000
200 SETENV command successful
TYPE I
200 Type set to BINARY
MEDIA SDRAM
200 Media set to MEDIA_SDRAM
P@SW
227 Entering Passive Mode (192,168,178,1,12,12)
STOR 0x8e8a1a00 0x90000000
150 Opening BINARY data connection
226 Transfer complete
Offenbar wird also kein "Dateisystem" oder "Image" in eine MTD-Partition geschrieben, es wird ein komplettes lauffähiges System in den RAM der Box übertragen (vorher die Größe des verfügbaren Speichers im Environment so gesetzt, daß das System sich im RAM nicht selbst überschreibt) und anschließend mit temporären Einstellungen (kernel_args_tmp) dieser Stub gestartet. Da in der Konversation kein "REBOOT" zu sehen ist, wird wohl beim Schließen der FTP-Verbindung auf das Vorhandensein von kernel_args_tmp getestet oder einfach nach einem STOR in das RAM automatisch immer ein "Neustart" ausgeführt seitens der EVA.
Die generelle Möglichkeit des Starts eines "externen" Systems nach dem Speichern im RAM der Box war ja bereits bekannt, meines Wissens aber die korrekte Vorgehensweise zum Starten eines solchen Systems nicht (bzw. ich habe nichts dazu gefunden). Das öffnet aber wieder einem Angreifer aus dem LAN Tür und Tor auf der Box, da braucht er nicht einmal das System der Box zu verändern. Es genügt vollkommen ein Relay im LAN ... und solange die EVA weiterhin ohne besondere Maßnahmen ansprechbar ist, ist das wohl auch nicht sinnvoll zu verteidigen.
Wenn das auch bei Boxen mit NOR-Flash so funktionieren sollte, ist wohl für einen Angreifer aus dem LAN auch dort ein ganz simpler Angriff in der Form möglich, daß er beim Neustart der Box per EVA-FTP-Server sein eigenes System-Image in den Speicher schreibt und dieses dann ausführen läßt.
Das Auslesen von Daten aus dem TFFS (notfalls des kompletten MTD) und das "Schieben" ins LAN (ggf. per Broadcast, wenn man sich den Aufwand einer Netzwerk-Konfiguration sparen will) ist schnell erledigt, einen Zugriff auf das installierte FRITZ!OS benötigt man dafür gar nicht erst und auch ein "modifiziertes" Firmware-Image braucht man dafür nicht flashen. Wenn sich ein Neustart der Box mal um 10-15 Sekunden (das ist eine eher konservative
Schätzung) verzögert, wird das wohl den Wenigsten auffallen.
Anschließend kann man die Daten aus dem erbeuteten TFFS (da die "Schlüsseldaten" auch gleich immer noch mit dabei sind) in aller Ruhe auseinandernehmen und dann später damit die Box übernehmen, auch wenn der Besitzer ansonsten alles richtig macht und selbst die Credentials im Klartext (also ohne TLS) weder im GUI noch im FTP-Server oder wo auch immer eingibt.