Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Firmware-analyse identificeert mogelijk onveilige functieaanroepen in ondersteunde uitvoerbare bestanden die zijn uitgepakt uit firmwareimages. Deze resultaten kunnen je helpen implementatiepatronen te vinden die extra beveiligingscontrole vereisen en om binaire bestanden te prioriteren op basis van hun potentiële blootstelling.
Dit artikel legt de onveilige functie-aanroepsignalen uit die je kunt zien in firmware-analyseresultaten. Het beschrijft ondersteunde bestanden, dekkingsbeperkingen en hoe bevindingen te evalueren in de context van het uitvoerbare bestand en apparaat.
Note
De aanwezigheid van een onveilige functieaanroep betekent niet per se dat een uitvoerbaar bestand of apparaat kwetsbaar is. Het daadwerkelijke risico hangt af van hoe de functie wordt gebruikt, of onbetrouwbare invoer deze kan bereiken, en hoe het uitvoerbare bestand wordt blootgesteld en beschermd.
Onveilige functie-aanroepsignalen in firmware-analyse
De analyse Unsafe Function Calls voert een statische analyse uit op ondersteunde Executable and Linkable Format (ELF)-uitvoerbare bestanden. Het identificeert verwijzingen naar functies die kunnen bijdragen aan beveiligingsproblemen wanneer ze worden gebruikt zonder passende invoervalidatie, boundschecking, buffer-grootte validatie of andere veilige coderingscontroles.
Sommige geheugenverwerkingsfuncties kunnen bijdragen aan buffer-overflow of andere geheugencorruptie-omstandigheden als ze verkeerd worden gebruikt. Afhankelijk van het getroffen codepad en beschikbare mitigaties kan een aanvaller deze omstandigheden gebruiken om het apparaat te verstoren of ongeautoriseerde code uit te voeren.
Elk resultaat vertegenwoordigt een signaal in plaats van een kwetsbaarheidsbepaling. Evalueer de signalen samen en in de context van de rol van het uitvoerbare bestand in de firmware.
Potentieel onveilige functies
Sommige bibliotheekfuncties kunnen risicovol zijn omdat ze niet inherent de omvang of betrouwbaarheid van de data die ze verwerken waarborgen. Zo kunnen functies zoals strcpy en strcat bijvoorbeeld bijdragen aan buffer-overflows als een programma te grote of niet-vertrouwde invoer naar een bestemmingsbuffer kopieert.
Een gerapporteerde referentie geeft aan dat firmware-analyse een gevolgde functie in het uitvoerbare bestand heeft geïdentificeerd. Het bewijst niet dat de functie verkeerd wordt gebruikt. De functie kan worden gebruikt met beveiligingen, zoals het controleren van de invoerlengte, het bieden van voldoende bestemmingsruimte, of het beperken van invoer tot vertrouwde data.
Bij het wijzigen van broncode gebruik je string-handling functies die de grootte van de bestemmingsbuffer accepteren en de invoerlengtes valideren voordat data wordt gekopieerd of samengevoegd. Zorg ervoor dat het resultaat null-beëindigd is en ga om met afkapping of fouten. Begrensde functies zoals strncpy en strncat kunnen het risico verminderen in vergelijking met onbegrensde alternatieven, maar ze moeten nog steeds worden gebruikt met correcte buffergrootteberekeningen.
De set van getrackte functies kan veranderen naarmate deze functie zich ontwikkelt. Interpreteer de functienaam en telling als startpunt voor codereview in plaats van als een volledige inventaris van alle geheugenveiligheids- of commando-uitvoeringsrisico's.
Informatie over netwerkaanroepen
Firmware-analyse geeft ook aan wanneer netwerkgerelateerde functieaanroepen worden geïdentificeerd in een geanalyseerd uitvoerbaar bestand. Gebruik dit signaal om uitvoerbare bestanden te prioriteren voor verdere beoordeling. Het bepaalt niet of het uitvoerbare bestand externe verbindingen accepteert, buiten het apparaat communiceert, of bereikbaar is in de geïnstalleerde omgeving.
Bij het prioriteren van bevindingen kun je overwegen om uitvoerbare bestanden te bekijken die zowel onveilige functieaanroepen als netwerkgerelateerde aanroepen bevatten. Deze uitvoerbare bestanden kunnen gegevens verwerken die van een netwerk worden ontvangen en kunnen eerder onderzoek vereisen.
Uitvoerbare paden en aanroepentellingen
De resultaten zijn gekoppeld aan het uitvoerbare pad dat uit de firmware-image is gehaald. Het aantal functieaanroepen geeft aan hoeveel verwijzingen naar een bijgehouden functie in dat uitvoerbare bestand zijn geïdentificeerd. Een hoger aantal kan meer locaties aangeven om te controleren, maar op zichzelf betekent het niet dat het zwaarder of meer exploiteerbaar is.
Hetzelfde uitvoerbare bestand kan op meerdere geëxtraheerde locaties verschijnen, en verschillende uitvoerbare bestanden kunnen verwijzingen naar dezelfde functie bevatten. Gebruik het extractorpad en de firmwareversie om het juiste broncomponent of leveranciersartefact te identificeren.
Ondersteunde bestanden en dekking
De analyse van Unsafe Function Calls is als preview beschikbaar en is van toepassing op ondersteunde ELF-uitvoerbare bestanden in de gebruikersruimte die zijn geëxtraheerd uit Linux-gebaseerde firmware-images.
Linux-kernelmodulebestanden (.ko) zijn niet opgenomen omdat de preview zich beperkt tot analyse van uitvoerbare bestanden in de gebruikersruimte.
De preview ondersteunt de volgende processorarchitecturen:
- AMD64 of x86-64
- ARM64 of AArch64
- ARM32
Binaire vereisten
Het uitvoerbare bestand moet informatie behouden die firmware-analyse mogelijk maakt om de functies die het gebruikt te identificeren. Een statisch gekoppelde of gestripte binaire vorm levert mogelijk geen resultaten op wanneer functienamen of andere benodigde informatie niet beschikbaar zijn.
Een firmware-image kan andere analyseactiviteiten succesvol uitvoeren zonder resultaten van Unsafe Function Calls te produceren. Elke firmware-analyzer heeft zijn eigen bestands-, architectuur- en metadatavereisten.
Onveilige functie-aanroepgegevens samen gebruiken
Elk signaal biedt een ander perspectief op potentieel risico:
| Signaal | Wat het je helpt begrijpen |
|---|---|
| Uitvoerbaar pad | Welke exacheerde uitvoerbare bestanden bevat de geïdentificeerde aanroepen. |
| Aantal onveilige functieaanroepen | Het totale aantal onveilige functieaanroepen dat in het uitvoerbare bestand is geïdentificeerd. |
| Aantal netwerkgesprekken | Of netwerkgerelateerd gedrag het mogelijk rechtvaardigt om het uitvoerbare bestand te prioriteren voor verdere beoordeling. De telling stelt geen afstandsbereik vast. |
Aantal oproepen <function name> |
Hoeveel referenties naar de benoemde functie werden geïdentificeerd in het uitvoerbare bestand. Gebruik de functie-specifieke telling om verdere controle te richten op de toepasselijke beveiligingsmaatregelen, zoals buffer-dimensionering, invoervalidatie, formaatstringsbehandeling, geheugenrechten of commando-invoervalidatie. |
Functie-specifieke tellingen worden gegeven voor de volgende functies:
strcpystrcatprintffprintfsprintfsystemmmappopen
In plaats van op één veld te vertrouwen, evalueer je deze signalen samen om te begrijpen welke uitvoerbare bestanden het meest direct beoordeeld moeten worden.
Belangrijke overwegingen
Nul- en lege resultaten interpreteren
Resultaten kunnen een nul aantal voor een uitvoerbaar bestand tonen of een uitvoerbaar bestand volledig weglaten. Een nul telling betekent dat het uitvoerbare bestand is geanalyseerd, maar dat er geen getraceerde aanroepen voor dat veld zijn geïdentificeerd.
Als een uitvoerbaar bestand niet in de resultaten verschijnt, ga er dan niet van uit dat het geen onveilige functieaanroepen bevat. Firmware-analyse kon het mogelijk niet analyseren omdat het uitvoerbare bestand een niet-ondersteunde architectuur gebruikt of niet de informatie bevat die nodig is om functiereferenties te identificeren.
Een lege resultatenlijst betekent dat er geen resultaten van Unsafe Function Calls beschikbaar zijn voor de firmware-image. Dat betekent niet dat de firmware geen onveilige functieaanroepen bevat.
Er kunnen geen resultaten verschijnen wanneer:
- Er werden geen uitvoerbare bestanden uit ELF-gebruikersruimte geëxtraheerd.
- De geëxtraheerde uitvoerbare bestanden gebruiken niet-ondersteunde architecturen.
- Een statisch of gestript binair systeem bevat niet genoeg identificerende informatie.
- Het geëxtraheerde bestand is een uitgesloten Linux-kernelmodule.
- De firmware-image werd geanalyseerd voordat Unsafe Function Calls-analyse beschikbaar kwam.
- Extractie of analyse is niet succesvol afgerond.
Note
Een leeg resultaat bevestigt niet dat de firmware geen onveilige functieaanroepen bevat. Om actuele analyses te ontvangen van een afbeelding die is verwerkt voordat de Unsafe Function Calls preview beschikbaar werd, upload je de firmware-afbeelding opnieuw.
Om te leren hoe je een afbeelding uploadt en de resultaten kunt bekijken, zie Een firmware-image analyseren met de firmware-analyseservice. Om gerelateerde compiler- en linkerbeschermingen te evalueren, bekijk het tabblad Binary Hardening voor hetzelfde uitvoerbare bestand.