A RouterOS (Mikrotik) alapú eszközök távoli leminősítésének lehetősége több százezer hálózati eszközt tesz veszélybe. A biztonsági rés a Winbox protokoll DNS-gyorsítótárának mérgezésével kapcsolatos, és lehetővé teszi elavult (alapértelmezett jelszó-visszaállítással) vagy módosított firmware-ek betöltését az eszközre.
A sebezhetőség részletei
A RouterOS terminál támogatja a resolution parancsot a DNS-kereséshez.
Ezt a kérést egy megoldó nevű bináris kezeli. A Resolver egyike annak a sok binárisnak, amely a RouterOS Winbox protokolljához csatlakozik. Magas szinten a Winbox portra küldött "üzenetek" egy tömb alapú számozási séma alapján a RouterOS különböző binárisaiba irányíthatók.
Alapértelmezés szerint a RouterOS le van tiltva a DNS-kiszolgáló funkció.
Azonban még akkor is, ha a szerver funkció le van tiltva, az útválasztó fenntartja a saját DNS-gyorsítótárát.
Amikor a winbox_dns_request használatával kérünk, például example.com, az útválasztó gyorsítótárba helyezi az eredményt.
Mivel meg tudjuk határozni azt a DNS-kiszolgálót, amelyen keresztül a kérés menjen, a helytelen címek megadása triviális. Például konfigurálhat egy DNS-kiszolgáló megvalósítását innen
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()
Ha most az example.com webhelyre keres a Winbox használatával, láthatja, hogy az útválasztó DNS-gyorsítótára meg van mérgezve.
Természetesen az example.com megmérgezése nem túl hasznos, mivel a router valójában nem fogja használni. Az útválasztónak azonban hozzá kell férnie az upgrade.mikrotik.com, a cloud.mikrotik.com, a cloud2.mikrotik.com és a download.mikrotik.com webhelyekhez. És egy másik hibának köszönhetően lehetséges egyszerre megmérgezni őket.
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()
A router egy engedélyt kér, mi pedig ötöt visszaadunk. Az útválasztó nem gyorsítótárazza ezeket a válaszokat megfelelően.
Nyilvánvalóan ez a támadás akkor is hasznos, ha az útválasztó DNS-kiszolgálóként működik, mivel lehetővé teszi az útválasztó klienseinek megtámadását.
Ez a támadás egy komolyabb sebezhetőség kihasználását is lehetővé teszi: a RouterOS verziójának leminősítését vagy backportálását. A támadó újra létrehozza a frissítési kiszolgáló logikáját, beleértve a változásnaplót is, és arra kényszeríti a RouterOS-t, hogy az elavult (sebezhető) verziót aktuálisnak tekintse. A veszély itt abban rejlik, hogy a verzió „frissítésekor” a rendszergazdai jelszó visszaáll az alapértelmezett értékre - a támadó üres jelszóval jelentkezhet be a rendszerbe!
A támadás ennek ellenére jól működik
védelem
A Winbox egyszerű letiltása lehetővé teszi, hogy megvédje magát ezekkel a támadásokkal szemben. A Winboxon keresztüli adminisztráció kényelme ellenére jobb az SSH protokoll használata.
Forrás: will.com