Geschreven door: Marketing Networking4all

In samenwerking met onze pentester: Martin Knuijsting

De kwetsbaarheid van deze week gaat over small office/home office (SOHO) apparaten.

Deze apparaten heb je nodig om een klein bedrijf te runnen. Aangezien kleine kantoren of thuiskantoren gewoonlijk minder dan tien werknemers hebben, is commercieel apparatuur niet zo noodzakelijk. Dit kan dan gemakkelijk worden vervangen door apparatuur van consumentenkwaliteit. Apparaten binnen een klein kantoor/thuiskantoor variëren van alles wat wordt gebruikt voor de werking van een bedrijf. Dit kan variëren van draadloze routers, de basis van het computernetwerk, tot middelgrote laserprinters en servers. Afhankelijk van de vereisten van het kleine kantoor/thuiskantoor, hebben veel van deze apparaten geen professionele installateur nodig. Bij het ontwerpen van het netwerk voor een klein kantoor/ thuiskantoor, geven functie rijke apparaten het kantoor meer flexibiliteit. Hierbij kunt u denken aan beveiligingsinstellingen, of geavanceerde netwerkfuncties.

Analyse SOHO apparaat

De eerste stap bij het analyseren van een SOHO apparaat is het verkrijgen van de firmware. Gelukkig is de ondersteuningswebsite van Netgear de gastheer van alle firmwares voor de R7000. De Netgear R7000 versie 1.0.9.88 firmware die in deze blogpost wordt gebruikt, kan van deze website worden gedownload. Na het uitpakken van de firmware kunt u binwalk  gebruiken om het root bestandssysteem uit de firmware te halen.

In eerste instantie gaat de interesse uit naar de manier waarop de webserver (verkeerd) omgaat met gebruikersinput. De logische plaats om te beginnen met het analyseren van de webservers recv functie. De recv functie wordt gebruikt om de gebruikersinput op te halen uit een verbinding. Door te kijken naar de verwijzingen naar de recv functie in de webserver, kunt u dus zien waar de gebruikersinvoer begint. De webserver heeft twee helper functies die recv oproepen, één gebruikt de http parser en ander wordt gebruikt om de antwoorden van de Dynamic DNS-verzoeken aan oemdns.com te lezen.

Screenshot decompiler

Na de oproep tot read_content (de recv helper functie) doet de parser een foutcontrole. De foutcontrole combineert de ontvangen inhoud met alle eerder ontvangen inhoud en zoekt dan naar de strings: “mtenFWUpload” en “\r\n\r\n” in de gebruikersinvoer. Als de gebruikersinvoer deze strings bevat, wordt de rest van de gebruikersinvoer na deze strings doorgegeven aan de functie abCheckBoardID. Als de firmware van het root bestandssysteem wordt doorzocht, kunt u zien dat de string mtenFWUpload wordt verbonden aan de bestanden www/UPG_upgrade.htm en www/Modem_upgrade.htm. Hieruit kunnen we concluderen dat dit deel uitmaakt van de upgrade functionaliteit van de router.

Na de gebruikersinput bekijkt u vervolgens de abCheckBoardID functie. Deze functie, die hieronder wordt getoond, verwacht dat de gebruikersinvoer het .chk firmware bestand voor de R7000 is. Het ontleedt de gebruikersinvoer om de magische waarde te valideren (bytes 0-3), verkrijgt de header grootte (bytes 4-7) en checksum (bytes 36-49), en kopieert vervolgens de header naar een stack buffer. Deze kopie, die wordt uitgevoerd via de memcpy functie, maakt gebruik van de grootte die is opgegeven in de gebruikersinvoer. Dit maakt een stack buffer overflow mogelijk.

In de meeste moderne software zou deze kwetsbaarheid onbruikbaar zijn. Moderne software bevat meestal stack cookies die exploitatie zouden verhinderen. De R7000 gebruikt echter geen stack cookies. Van alle Netgear-producten die een gemeenschappelijke codebase delen, maken alleen de D8500 firmwareversie 1.0.3.29 en de R6300v2 firmwareversie 1.0.4.12-1.0.4.20 gebruik van stack cookies. Latere versies van de D8500 en R6300v2 zijn echter gestopt met het gebruik van stack cookies, waardoor deze kwetsbaarheid opnieuw exploiteerbaar is. Dit is slechts één voorbeeld van hoe de beveiliging van SOHO apparaten achterop is geraakt ten opzichte van andere moderne software.

Exploitatie

Naast het ontbreken van stack cookies wordt de webserver ook niet gecompileerd als een Position Independent Executable (PIE), en kan dus niet ten volle profiteren van ASLR. Het is daarom triviaal om een ROP gadget te vinden in de httpd binary, zoals hieronder weergegeven, die het systeem aanroept met een commando uit de overflown stack.

Het exploit in GRIMM’s NotQuite0DayFriday repository gebruikt deze gadget om de telnet daemon te starten als root listening op TCP poort 8888 en vereist geen wachtwoord om in te loggen.

Automatisering

Veel SOHO apparaten hebben een gemeenschappelijke software basis, vooral onder apparaten die door dezelfde fabrikant zijn gemaakt. Als zodanig kan een kwetsbaarheid in één apparaat normaal gesproken worden gevonden in soortgelijke apparaten van dezelfde fabrikant. Gezien het grote aantal firmwares is het niet mogelijk om handmatig de juiste gadgets te vinden. Dit is eerder een goede gelegenheid om de detectie van gadgets te automatiseren.

In de NotQuite0DayFriday repository van GRIMM zijn de shellscripts find_arm_gadget.sh en find_mips_gadget.sh opgenomen. Het find_arm_gadget.sh shell script gebruikt objdump en grep om te zoeken naar de benodigde gadget, zoals hieronder getoond. Terwijl de R7000 een ARM-processor heeft, gebruiken sommige andere kwetsbare apparaten een MIPS processor. In tegenstelling tot ARM kan objdump de functienamen van functies die in een MIPS binair worden aangeroepen niet gemakkelijk oplossen. Daarom gebruikt de MIPS gadget het identificatie script IDAPython om de gadgets voor een binary te identificeren.

Versie detectie

De laatste stap voordat er betrouwbaar kan worden geëxploiteerd is het op afstand detecteren van het model en de versie van de router. Gelukkig luisteren bijna alle kwetsbare versies naar verzoeken van de URL /currentsetting.htm en sturen het model en de versie van het apparaat terug. Als zodanig, is het op afstand achterhalen van de vingerafdruk van een apparaat simpel. De gepubliceerde exploit voor de kwetsbaarheid die in deze blogpost wordt beschreven, bepaalt automatisch het doelmodel en de versie aan de hand van deze methode:

Zorg dat u niet kwetsbaar bent

Routers en modems vormen vaak een belangrijke veiligheidsgrens die voorkomt dat aanvallers de computers in een netwerk direct kunnen misbruiken. Het gebrek aan grondig testen en een slechte kwaliteit van de code, heeft als gevolg dat kwetsbare SOHO apparaten misbruikt kunnen worden. Zo worden duizenden kwetsbare SOHO apparaten al meer dan tien jaar blootgesteld aan het internet.

Met een kwetsbaarheid als deze kan uw organisatie grote financiële schade oplopen. Zorg dan ook voor een goed update beleid, waarbij frequent updates worden geïnstalleerd op kritische systemen. 

Om er zeker van te zijn dat uw netwerk zo min mogelijk kwetsbaarheden bevat, is het scannen van uw systemen noodzakelijk. Tijdens deze scan worden kwetsbaarheden blootgelegd en krijgt u handvatten hoe u uw netwerk beter te beveiligen tegen incidenten. Onze pentesters hebben de juiste kennis en kunde in huis om u hierbij van dienst te zijn. Zij zullen zorgvuldig uw netwerk scannen op kwetsbaarheden en u voorzien van een duidelijk advies waarmee u direct aan de slag kunt. 

Meer weten

Wil u meer informatie over onze pentesten of vulnerability scans? Kijk dan even op onze diensten pagina. Of bel direct met onze medewerkers via: 020 7881030, we zijn u graag van dienst.

Bronnen:


Deel artikel via: