Die Backport-Sicherheitsanfälligkeit in RouterOS gefährdet Hunderttausende von Geräten



Die Möglichkeit, Geräte basierend auf RouterOS (Mikrotik) remote herunterzustufen, gefährdet Hunderttausende von Netzwerkgeräten. Die Sicherheitsanfälligkeit ist mit der Vergiftung des DNS-Cache des Winbox-Protokolls verbunden und ermöglicht das Herunterladen veralteter (standardmäßig zurückgesetztes Kennwort) oder geänderter Firmware auf dem Gerät.



Sicherheitslücken Details


Das RouterOS-Terminal unterstützt einen Auflösungsbefehl für DNS-Suchvorgänge.

Bild

Diese Anforderung wird von einem binären Resolver verarbeitet. Resolver ist eine von vielen Binärdateien, die mit dem RouterOS Winbox-Protokoll verbunden sind. Auf hoher Ebene können an den Winbox-Port gesendete „Nachrichten“ basierend auf einem Array-basierten Nummerierungsschema an verschiedene Binärdateien in RouterOS weitergeleitet werden.

Standardmäßig ist bei RouterOS die DNS-Serverfunktion deaktiviert.

Bild

Selbst wenn die Serverfunktion deaktiviert ist, verwaltet der Router seinen eigenen DNS-Cache.

Bild

Wenn wir eine Anfrage mit winbox_dns_request stellen, z. B. example.com, speichert der Router das Ergebnis zwischen.

Bild

Da wir den DNS-Server angeben können, über den die Anforderung gesendet werden soll, ist die Eingabe der falschen Adressen trivial. Beispielsweise können Sie die Implementierung des DNS-Servers von Philip Klaus so konfigurieren, dass immer mit einem A-Eintrag mit der IP-Adresse 192.168.88.250 geantwortet wird.

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() 

Wenn Sie jetzt mit Winbox auf example.com nachschlagen, können Sie feststellen, dass der DNS-Cache des Routers vergiftet wurde.

Bild

Natürlich ist die Vergiftung von example.com nicht sehr nützlich, da der Router sie nicht wirklich verwendet. Der Router benötigt jedoch Zugriff auf upgrade.mikrotik.com, cloud.mikrotik.com, cloud2.mikrotik.com und download.mikrotik.com. Und dank eines weiteren Fehlers ist es möglich, sie alle auf einmal 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 fordert eine Berechtigung an, und wir geben fünf zurück. Der Router speichert alle diese Antworten falsch zwischen.

Bild

Offensichtlich ist dieser Angriff auch nützlich, wenn der Router als DNS-Server fungiert, da er das Angreifen der Clients des Routers ermöglicht.

Dieser Angriff ermöglicht auch das Ausnutzen einer schwerwiegenderen Sicherheitsanfälligkeit: Downgrade oder Backport der RouterOS-Version. Der Angreifer erstellt die Logik des Update-Servers einschließlich des Änderungsprotokolls neu und veranlasst RouterOS, die veraltete (anfällige) Version als aktuell zu akzeptieren. Die Gefahr besteht hier darin, dass beim "Aktualisieren" der Version das Administratorkennwort auf den Standardwert zurückgesetzt wird - ein Angreifer kann sich mit einem leeren Kennwort beim System anmelden!


Der Angriff funktioniert ziemlich gut, obwohl der Autor mehrere weitere Vektoren implementiert, einschließlich solcher, die sich auf das Einbetten einer Hintertür in die Firmware beziehen. Dies ist jedoch bereits eine redundante Technik und es ist illegal, sie für illegitime Zwecke zu verwenden.

Schutz


Durch einfaches Deaktivieren von Winbox wird vor diesen Angriffen geschützt. Trotz der bequemen Verwaltung über Winbox ist es besser, das SSH-Protokoll zu verwenden.

Source: https://habr.com/ru/post/de473676/


All Articles