
Die Möglichkeit, GerĂ€te mit RouterOS (Mikrotik) remote downgraden zu können, stellt eine Bedrohung fĂŒr Hunderttausende von NetzwerkgerĂ€ten dar. Die Schwachstelle ist mit der DNS-Cache-Vergiftung des Winbox-Protokolls verbunden und ermöglicht das Laden einer veralteten (mit ZurĂŒcksetzen des Passworts auf âStandardâ) oder modifizierten Firmware auf das GerĂ€t.

Details zur Schwachstelle
Das RouterOS-Terminal unterstĂŒtzt den Befehl zur Auflösung fĂŒr die DNS-Suche.

Diese Anfrage wird von einer binĂ€ren Datei mit dem Namen resolver verarbeitet. Der Resolver ist eine von vielen binĂ€ren Dateien, die mit dem Winbox-Protokoll von RouterOS verbunden sind. Auf hoher Ebene können die âNachrichtenâ, die an den Winbox-Port gesendet werden, je nach Schemenummerierung auf verschiedene binĂ€re Dateien in RouterOS geroutet werden.
StandardmĂ€Ăig ist die DNS-Serverfunktion in RouterOS deaktiviert.

Selbst wenn die Serverfunktion deaktiviert ist, behÀlt der Router jedoch seinen eigenen DNS-Cache.

Wenn wir eine Anfrage stellen, zum Beispiel mit winbox_dns_request fĂŒr example.com, wird der Router das Ergebnis cachen.

Da wir den DNS-Server angeben können, ĂŒber den die Anfrage laufen soll, ist es trivial, falsche Adressen einzugeben. Zum Beispiel kann man den DNS-Server von , so konfigurieren, dass er immer mit einem A-Eintrag antwortet, der die IP-Adresse 192.168.88.250 enthĂ€lt.
def dns_response(data):
request = DNSRecord.parse(data)
reply = DNSRecord(DNSHeader(
id=request.header.id, qr=1, aa=1, ra=1), q=request.q)
qname = request.q.qname
qn = str(qname)
reply.add_answer(RR(qn,ttl=30,rdata=A("192.168.88.250")))
print("---- Reply:n", reply)
return reply.pack()Jetzt, wenn man mit Winbox nach example.com sucht, sieht man, dass der DNS-Cache des Routers vergiftet ist.

NatĂŒrlich ist die Vergiftung von example.com nicht besonders nĂŒtzlich, da der Router sie faktisch nicht verwenden wird. Dennoch muss der Router auf upgrade.mikrotik.com, cloud.mikrotik.com, cloud2.mikrotik.com und download.mikrotik.com zugreifen. Und dank eines weiteren Fehlers besteht die Möglichkeit, sie alle gleichzeitig zu vergiften.
def dns_response(data):
request = DNSRecord.parse(data)
reply = DNSRecord(DNSHeader(
id=request.header.id, qr=1, aa=1, ra=1), q=request.q)
qname = request.q.qname
qn = str(qname)
reply.add_answer(RR(qn,ttl=30,rdata=A("192.168.88.250")))
reply.add_answer(RR("upgrade.mikrotik.com",ttl=604800,
rdata=A("192.168.88.250")))
reply.add_answer(RR("cloud.mikrotik.com",ttl=604800,
rdata=A("192.168.88.250")))
reply.add_answer(RR("cloud2.mikrotik.com",ttl=604800,
rdata=A("192.168.88.250")))
reply.add_answer(RR("download.mikrotik.com",ttl=604800,
rdata=A("192.168.88.250")))
print("---- Reply:n", reply)
return reply.pack()Der Router fragt eine Genehmigung an, und wir geben fĂŒnf zurĂŒck. Der Router cached all diese Antworten falsch.

Es ist offensichtlich, dass dieser Angriff auch nĂŒtzlich ist, wenn der Router als DNS-Server fungiert, da er es ermöglicht, die Benutzer des Routers anzugreifen.
Zudem ermöglicht dieser Angriff, eine schwerwiegendere Schwachstelle auszunutzen: die Downgrade- oder Backportierung der RouterOS-Version. Der Angreifer rekreiert die Logik des Update-Servers, einschlieĂlich des Changelogs, und zwingt RouterOS dazu, eine veraltete (anfĂ€llige) Version als aktuell zu betrachten. Die Gefahr hierbei liegt darin, dass beim "Update" der Version das Administratorpasswort auf "Standard" zurĂŒckgesetzt wird â ein Angreifer kann mit einem leeren Passwort ins System einsteigen!

Der Angriff funktioniert gut, obwohl noch mehrere Angriffsvektoren implementiert, die auch mit zu tun haben, aber das ist bereits ĂŒberflĂŒssige Technik und ihre Anwendung zu illegalen Zwecken ist strafbar.
Schutz
Ein einfaches Deaktivieren von Winbox kann vor diesen Angriffen schĂŒtzen. Trotz der Bequemlichkeit der Verwaltung ĂŒber Winbox ist es besser, das SSH-Protokoll zu nutzen.
Quelle: habr.com
