Jak to się zaczęło?
Z względu na Brute Force który miał miejsce w dniu 01-09-2021 na mój router brzegowy postawiony na platformie
RouterBoard pod kontrolą MikroTika postanowiłem zamieścić dla potomnych „instrukcję” (mimo faktu że najlepsze robi nasz kolega Arshe 🙂 ) jak skonfigurować firewall oraz kawałek historii.
Niestety z przykrością to stwierdzam, brute force udał się atakującym, przejęli kontrolę nad brzegówką. Mój ruter został wykorzystany do ataków na innych użytkowników sieci, jako proxy a tak że do masowej akcji spamu. I tu warto zwrócić uwagę że mimo kilkunaste letniego doświadczenia w zarządzaniu serwerami oraz sieciami popełniłem tak wiele podstawowych błędów. System mikrotik nie aktualizowany grubo od ponad roku, reguły firewalla wyłączone podczas testów obciążenia i już nigdy nie włączone.
No to budujemy ścianę
To wystarczyło, aby przejąć kontrolę. Jak odzyskałem swój sprzęt? Połączenie z siecią zewnętrzną zostało fizycznie odłączone (kabel wypięty z portu), łącza zapasowe też zostały fizycznie odpięte. Zacząłem od update firmware przez zrobienie „netinstall”, ale konfiguracje urządzenia przywracałem z backupu. Oprawca stworzył sobie w systemie zapasowe konto administratora aby odzyskać kontrolę nad urządzeniem 🙂
Na dodatek w scheduler dodał dwa zadania uruchamiane codziennie i pobierające z sieci skrypt pozwalający mu uzyskać ponownie kontrolę po zabezpieczeniu urządzenia 🙂 Taki cwaniak. Po odkryciu tej anomalii postanowiłem przeanalizować całą konfigurację jeszcze raz, krok po kroku.
Rozbudowałem reguły firewalla, Filter Rules (reguły filtrowania) to jeden z trzech elementów firewalla w systemie RotuerOS. Jego podstawowy cel to zapewnienie bezpieczeństwa poprzez odrzucenie ruchu niespełniającego określonych warunków. Moduł ten pełni funkcję analogiczną do reguł ACL (Access Control List) spotykanych u wielu innych producentów. Translacja poleceń CLI na operacje w interfejsie graficznym nie powinna stanowić problemu, ponieważ ścieżki w drzewie konfiguracji oraz nazwy pól są prawie zawsze niemal identyczne. Przykładowo, gałąź /ip firewall filter odpowiada oknu IP > Firewall > Filter Rules w interfejsie graficznym. Częstą praktyką jest dodanie reguł (np. ze skryptu lub kopii zapasowej) przez terminal i dalsza praca nad nimi przez WinBoxa.
Ja postanowiłem wykorzystać terminal, jest to szybsza metoda dla mnie. Podstawowy skrypt firewalla znajduje się poniżej. Możecie go wykorzystać do testów oraz podzielić się swoimi regułami w komentarzach.
Coding time ☕
/ip firewall filter
add action=drop chain=input comment="Odrzuc rekurencyjny ruch DNS" dst-port=53 protocol=tcp
add action=drop chain=input comment="BruteForce - SSH lista" dst-port=22 protocol=tcp src-address-list=ssh_blacklist
add action=add-src-to-address-list address-list=ssh_blacklist address-list-timeout=4w2d chain=input connection-state=new dst-port=22 protocol=tcp src-address-list=ssh_stage3
add action=add-src-to-address-list address-list=ssh_blacklist address-list-timeout=4w2d chain=input connection-state=new dst-port=22 protocol=tcp src-address-list=ssh_stage3
add action=add-src-to-address-list address-list=ssh_stage3 address-list-timeout=1m chain=input connection-state=new dst-port=22 protocol=tcp src-address-list=ssh_stage2
add action=add-src-to-address-list address-list=ssh_stage2 address-list-timeout=1m chain=input connection-state=new dst-port=22 protocol=tcp src-address-list=ssh_stage1
add action=add-src-to-address-list address-list=ssh_stage1 address-list-timeout=1m chain=input connection-state=new dst-port=22 protocol=tcp
add action=drop chain=input comment="BruteForce - Telnet list" dst-port=23 protocol=tcp src-address-list=telnet_blacklist
add action=add-src-to-address-list address-list=telnet_blacklist address-list-timeout=4w2d chain=input connection-state=new dst-port=23 protocol=tcp src-address-list=telnet_stage3
add action=add-src-to-address-list address-list=telnet_stage3 address-list-timeout=1m chain=input connection-state=new dst-port=23 protocol=tcp src-address-list=telnet_stage2
add action=add-src-to-address-list address-list=telnet_stage2 address-list-timeout=1m chain=input connection-state=new dst-port=23 protocol=tcp src-address-list=telnet_stage1
add action=add-src-to-address-list address-list=telnet_stage1 address-list-timeout=1m chain=input connection-state=new dst-port=23 protocol=tcp
add action=accept chain=input protocol=icmp
add action=accept chain=input connection-state=established
add action=accept chain=input connection-state=related
add action=drop chain=input in-interface=ether1 log=yes