Delen via


Bufferoverschrijdingen voorkomen

Een bufferoverschrijding is een van de meest voorkomende bronnen van beveiligingsrisico's. Een bufferoverschrijding wordt in wezen veroorzaakt door het behandelen van niet-gecontroleerd, externe invoer als betrouwbare gegevens. De handeling van het kopiëren van deze gegevens met behulp van bewerkingen zoals CopyMemory, strcat, strcpyof wcscpy, kan onverwachte resultaten maken, waardoor systeembeschadiging mogelijk is. In het beste geval wordt uw toepassing afgebroken met een kerndump, segmentatiefout of toegangsfout. In het ergste geval kan een aanvaller de bufferoverschrijding misbruiken door andere schadelijke code in uw proces in te voeren en uit te voeren. Het kopiëren van niet-ingeschakelde invoergegevens in een stack-buffer is de meest voorkomende oorzaak van exploiteerbare fouten.

Bufferoverschrijdingen kunnen op verschillende manieren optreden. De volgende lijst bevat een korte inleiding tot een aantal soorten bufferoverschrijdingssituaties en biedt enkele ideeën en resources waarmee u nieuwe risico's kunt voorkomen en bestaande risico's kunt beperken:

statische bufferoverschrijdingen

Een statische bufferoverschrijding treedt op wanneer een buffer, die op de stack is gedeclareerd, wordt beschreven met meer gegevens dan waarvoor hij was toegewezen om te bewaren. De minder zichtbare versies van deze fout treden op wanneer niet-geverifieerde invoergegevens van gebruikers rechtstreeks naar een statische variabele worden gekopieerd, waardoor potentiële stackbeschadiging ontstaat.

Heap-overschrijdingen

Heap-overschrijdingen, zoals statische bufferoverschrijdingen, kunnen leiden tot geheugen- en stackbeschadiging. Omdat heap-overschrijdingen optreden in heap-geheugen in plaats van op de stack, beschouwen sommige mensen het als minder in staat om ernstige problemen te veroorzaken; niettemin vereisen heap-overschrijdingen echte programmeerzorg en kunnen systeemrisico's evenzeer toestaan als statische bufferoverschrijdingen.

fouten bij het indexeren van arrays

Matrixindexeringsfouten zijn ook een bron van geheugenoverschrijdingen. Zorgvuldige controle van grenzen en indexbeheer helpt dit type geheugenoverschrijding te voorkomen.

Het voorkomen van bufferoverschrijdingen gaat voornamelijk over het schrijven van goede code. Valideer altijd al uw invoer en handel fouten soepel af wanneer dat nodig is. Zie de volgende bronnen voor meer informatie over het schrijven van beveiligde code:

  • Maguire, Steve [1993], Writing Solid Code, ISBN 1-55615-551-4, Microsoft Press, Redmond, Washington.
  • Howard, Michael and LeBlanc, David [2003], Writing Secure Code, 2d ed., ISBN 0-7356-1722-8, Microsoft Press, Redmond, Washington.

Notitie

Deze resources zijn mogelijk niet beschikbaar in sommige talen en landen.

 

Veilige verwerking van tekenreeksen is een langstaand probleem dat nog steeds wordt aangepakt door goede programmeerprocedures te volgen en vaak door bestaande systemen met veilige, tekenreeksverwerkingsfuncties te gebruiken en opnieuw aan te passen. Een voorbeeld van een dergelijke set functies voor de Windows-shell begint met StringCbCat-.