Zephyrnet-logo

Firmware-kwetsbaarheden die u niet in uw product wilt hebben

Datum:

Firmware-kwetsbaarheden die u niet in uw product wilt hebben
Illustratie: © IoT For All

Firmwarekwetsbaarheden verwijzen naar beveiligingszwakheden of gebreken die worden aangetroffen in de firmware van een apparaat. Firmware is een soort software die is ingebed in hardwareapparaten en die controle en functionaliteit op laag niveau biedt.

Het fungeert als een brug tussen de hardware en de software op een hoger niveau. Deze kwetsbaarheden kunnen door aanvallers worden uitgebuit om ongeautoriseerde toegang te verkrijgen en het apparaat te controleren of te manipuleren.

De afgelopen tien jaar zijn we getuige geweest van talloze inbreuken op de beveiliging die gericht waren op commerciële en industriële IoT-apparaten. Zo konden cybercriminelen bijvoorbeeld de verwarming uitschakelen in twee gebouwen in de Finse stad Lappeenranta, en andere aanvallen zoals ShamoenNew York-damEn Mirai Botnet hebben industriële IoT-apparaten zoals Deutsche Telekom Routers getroffen, wat heeft geleid tot verstoring van de dienstverlening.

Hoewel algemeen bekend was dat beveiliging een zwak punt was in IoT-apparaten, was er tot vorig jaar, toen Rusland Oekraïne aanviel, weinig vooruitgang geboekt om dit probleem aan te pakken. De aanval demonstreerde de echte kracht van cyberaanvallen, waarbij Anonymous het CCTV-systeem van het Kremlin hackte en Rusland het Oekraïense elektriciteitsnet aanviel.

Na deze incidenten hebben de VS en de Europese Unie belangstelling getoond voor het reguleren van de IoT/IIoT-cyberbeveiliging, wat een broodnodige stap is. De vraag blijft echter: waar moeten we beginnen en wat zijn de gevaarlijkste kwetsbaarheden die tot dergelijke aanvallen kunnen leiden?

Bestaat er een wondermiddel dat fabrikanten tegen deze aanvallen kan beschermen? Laten we eens kijken naar enkele van de gevaarlijkste kwetsbaarheden en hun mogelijke oplossingen.

De heilige graal van kwetsbaarheden: RCE

De meeste IT-professionals zijn bekend met het concept van Remote Code Execution (RCE), een van de meest gevreesde firmware-beveiligingsbedreigingen. Als een aanvaller een RCE-kwetsbaarheid kan misbruiken, krijgt hij volledige controle over het apparaat of de apparaten en kan hij mogelijk een botnet creëren.

Bovendien kunnen aanvallers gebruikersgegevens stelen of spionage plegen tegen verschillende fabrikanten. In wezen kan een aanvaller elk gewenst resultaat bereiken.

De vraag rijst: hoe kunnen aanvallers RCE-kwetsbaarheden in apparaten vinden, en welke typen kunnen tot RCE leiden?

Laten we de meest voorkomende bekijken.

  • Authenticatie omzeilen: Aanvallers kunnen authenticatiemechanismen omzeilen in IoT-apparaten die zwakke of standaardwachtwoorden gebruiken. Soms kunnen ze logische bugs misbruiken of specifieke beveiligingscontroles omzeilen. Verschillende technieken kunnen leiden tot het omzeilen van de authenticatie, waaronder standaardwachtwoorden, brute-force-aanvallen, netwerkkwetsbaarheden of firmwarekwetsbaarheden.
  • Bufferoverlopen: Een bufferoverloopkwetsbaarheid treedt op wanneer een programma meer gegevens in een buffer probeert op te slaan dan er ruimte is, waardoor de gegevens naar aangrenzende geheugenlocaties overstromen. Een aanvaller kan misbruik maken van dit beveiligingslek door invoergegevens te maken die de buffer overstromen en aangrenzende geheugenlocaties overschrijven met kwaadaardige code.
  • Injectiefouten: Er treden injectiefouten op wanneer een aanvaller kwaadaardige code in een IoT-apparaat kan injecteren via onbeveiligde invoer of interfaces, zoals een webformulier of API.

We zullen diep in elk van deze duiken.

Authenticatie-bypass

Authenticatie is een cruciaal aspect van de beveiliging van embedded systemen. Het zorgt ervoor dat alleen geautoriseerde personen toegang hebben tot het apparaat en de functionaliteiten ervan.

Authenticatieomzeiling verwijst naar een situatie waarin een aanvaller toegang kan krijgen tot een apparaat zonder de noodzakelijke authenticatiegegevens, zoals een gebruikersnaam en wachtwoord, op te geven. Door dit beveiligingsprobleem kunnen aanvallers controle krijgen over het apparaat en de functionaliteiten ervan, waardoor mogelijk schade aan het apparaat kan worden toegebracht of toegang kan worden verkregen tot gevoelige gegevens.

Er zijn verschillende technieken die aanvallers kunnen gebruiken om authenticatie te omzeilen. Eén standaardmethode is het misbruiken van standaard- of zwakke wachtwoorden. Veel IoT-apparaten hebben standaard inloggegevens die algemeen bekend zijn en gemakkelijk online te vinden zijn.

Aanvallers kunnen deze informatie gebruiken om toegang te krijgen tot het apparaat zonder het authenticatieproces te doorlopen. Ze kunnen ook brute-force-aanvallen gebruiken om zwakke wachtwoorden te raden.

Een andere methode om authenticatie te omzeilen is het misbruiken van kwetsbaarheden in de firmware. Dit kan bijvoorbeeld gebeuren door gebruik te maken van een kwetsbare versie van open source software of door gebruik te maken van een logische bug in de authenticatiestroom.

Bovendien kunnen netwerkkwetsbaarheden worden misbruikt om authenticatie te omzeilen. Aanvallers kunnen netwerkverkeer onderscheppen om inloggegevens te achterhalen of man-in-the-middle-aanvallen gebruiken om zich voor te doen als het apparaat en de authenticatie te omzeilen.

Verificatie-bypass-beperking

Het is essentieel om de standaard inloggegevens en het gebruik ervan te wijzigen sterke wachtwoorden. Sterke wachtwoorden moeten hoofdletters en kleine letters, cijfers en symbolen bevatten en twaalf tekens lang zijn.

Ten tweede: blijf op de hoogte van alle open source-componenten van derden die u in uw product gebruikt.

Ten derde is het beveiligen van het netwerk van cruciaal belang om het omzeilen van authenticatie tegen te gaan. Dit kan worden bereikt door veilige communicatieprotocollen te implementeren, zoals HTTPS of TLS, om het netwerkverkeer te coderen. Voer ten slotte regelmatig penetratietests uit bij elke nieuwe productrelease.

Bufferoverloop

Bufferoverflow is een van de meest bekende en meest voorkomende kwetsbaarheden in softwaresystemen. Deze kwetsbaarheden kunnen verschillende oorzaken hebben. Een veel voorkomende oorzaak is het gebrek aan invoervalidatie in een programma, waardoor een aanvaller gegevens kan invoeren die groter zijn dan de toegewezen buffergrootte.

Dit kan leiden tot een situatie waarin de overtollige gegevens aangrenzende geheugenlocaties overschrijven, wat resulteert in onverwacht gedrag of crashes. Een andere oorzaak van kwetsbaarheden in de bufferoverloop is het gebruik van onveilige functies die geen grenscontrole uitvoeren, zoals strcpy en strcat. We zullen een bufferoverflow-bug demonstreren in een realistisch scenario.

Om dit te doen, zullen we gebruiken DVRF (verdomd kwetsbare routerfirmware) als ons doelwit. Nadat de firmware op ons platform is geplaatst, zal deze de afbeelding extraheren en elk binair bestand decompileren om te zoeken naar mogelijke kwetsbaarheden.

We hebben dit doel gekozen omdat het voor iedereen toegankelijk is en we de firmware van de publiek beschikbare fabrikant niet willen compromitteren.

Zoals we hier zien, gebruikt het programma twee integer-argumenten: parameter_1 en parameter_2, en declareert een lokale variabele met de naam lokale_200 Van type ongedefinieerd2 (een geheel getal zonder teken van 2 bytes of 16 bits). Er wordt ook een array weergegeven met de naam auStack510 met een grootte van 502 bytes.

Het programma gebruikt dan de memset() functie om alle bytes in te stellen auStack510 naar nul. Daarna wordt gecontroleerd of de waarde van parameter_1 is minder dan 2. Als dit het geval is, drukt het programma een gebruiksbericht af en sluit het af met foutcode 1.

If parameter_1 groter is dan of gelijk is aan 2, drukt het programma een welkomstbericht af en kopieert de inhoud van een string waarnaar wordt verwezen door het tweede argument _(*(char)(param_2 + 4))_** in lokale_200 met de strcpy() functie. Dit is waar de kwetsbaarheid voor bufferoverflow ligt.

Als de string waarnaar het tweede argument verwijst langer is dan 16 bytes (de grootte van lokale_200), De strcpy() functie schrijft voorbij het einde van de lokale_200 buffer en overschrijf de inhoud van het aangrenzende bestand auStack510 buffer.

Dit kan leiden tot onvoorspelbaar gedrag, waaronder het laten crashen van het programma of het toestaan ​​dat een aanvaller kwaadaardige code uitvoert op basis van firmwarekwetsbaarheden.

Om dit type bufferoverflow-aanval te voorkomen, is het essentieel om functies te gebruiken die de hoeveelheid gegevens die naar een buffer wordt geschreven beperken, zoals streng() or snprintf(). Bovendien moeten programma's worden gecompileerd met bufferoverloopbeveiligingen, zoals stapel kanaries en randomisatie van adresruimte-indeling (ASLR, fASLR).

Commando-injecties

Commando-injectie is een aanval waarbij een aanvaller kwaadaardige code in een opdrachtshell injecteert om willekeurige opdrachten op het doelapparaat uit te voeren. Deze aanval kan op vele manieren worden uitgevoerd, onder meer via webinterfaces, invoervelden en API's.

In firmware wordt opdrachtinjectie vaak uitgevoerd via webinterfaces of API's, omdat dit gebruikelijke manieren zijn waarop gebruikers met het apparaat kunnen communiceren.

De gevolgen van commando-injectie in firmware kunnen ernstig zijn. Een aanvaller die met succes code in een opdrachtshell injecteert, kan willekeurige opdrachten uitvoeren op het doelapparaat.

Hierdoor kan een aanvaller toegang krijgen tot gevoelige gegevens, het apparaat besturen en zelfs aanvallen uitvoeren op andere apparaten in het netwerk. Bovendien kan het lastig zijn om commando-injectie te detecteren, omdat het vaak als legitiem verkeer lijkt.

Deze code lijkt een functie te zijn die wordt genoemd wsc_generate_pin die een Wi-Fi Protected Setup (WPS) pincode genereert. De WPS-pincode is een achtcijferig nummer dat wordt gebruikt om een ​​draadloos apparaat te verifiëren bij een Wi-Fi-netwerk.

Er is echter een potentiële kwetsbaarheid voor commando-injectie in deze code. De kwetsbaarheid ontstaat door het gebruik van de systeemfunctie, die een shell-opdracht uitvoert. In het bijzonder de sprint functie wordt gebruikt om een ​​opdrachtreeks samen te stellen die vervolgens aan het systeem wordt doorgegeven zonder de juiste validatie of opschoning van de invoer.

De kwetsbare code is de gemarkeerde regel:

Deze code construeert een shell-commando dat de waarde van schrijft lokale_18 aan de / dev / willekeurig bestand. Als een aanvaller de waarde van lokale_18, kunnen ze extra shell-opdrachten in de acStack141 buffer, wat leidt tot uitvoering van willekeurige code. Omdat deze variabele afkomstig is van de gebruiker (WPS-pin), kan dit beveiligingslek worden misbruikt.

Om dit beveiligingslek te voorkomen, is het essentieel om alle invoer die wordt gebruikt om shell-opdrachten te construeren, op de juiste manier te valideren en op te schonen. Invoervalidatie kan worden uitgevoerd met behulp van reguliere expressies of filtering op de witte lijst.

Bij het filteren op de witte lijst wordt een toegestane reeks tekens of waarden gedefinieerd die de invoer kan bevatten. Ontwikkelaars moeten ook het aantal tekens dat de invoer mag bevatten beperken om bufferoverflow-aanvallen te voorkomen, zoals hierboven besproken.

De uitdaging van IoT-beveiliging

We begrijpen dat IoT-beveiliging een grote uitdaging is en dat veel fabrikanten problemen ondervinden bij het inhuren van beveiligingsprofessionals op dit gebied. Door de bovengenoemde mitigatietechnieken te implementeren, kunt u substantiële stappen ondernemen om uw apparaten te beveiligen.

Bovendien raden we ten zeerste aan om vlaggen voor het versterken van de compilatietijd te gebruiken als de gemakkelijkste eerste stap in het traject voor beveiligingsverbetering.

Het uitvoeren van regelmatige beveiligingsaudits en -tests is ook essentieel om potentiële kwetsbaarheden te identificeren en deze onmiddellijk aan te pakken. Om dit te bereiken raden we aan om beveiligingslaboratoria van derden te gebruiken of op zijn minst firmware-analysetools te gebruiken.

spot_img

VC Café

VC Café

Laatste intelligentie

spot_img