Vad är en Stack Buffer Overflow?

Ett stackbuffertspill är vad som händer när ett program gör en inmatning i en dators minne som är längre än det tilldelade utrymmet. I vissa fall kan detta förstöra andra data i minnet och orsaka problem med datorns drift. I andra fall kan ett stackbuffertspill utnyttjas av ett skadligt program för att ta kontroll över andra delar av datorn.

Namnet från ett stackbuffertspill kommer först från stacken, som i praktiken är en aktiv lista där data är organiserad: termen kommer från analogin med att stapla upp fysiska föremål. En version av detta, anropsstacken, är listan som ett datorprogram använder för att hålla reda på de olika delarna av programmet, subrutinerna, som är i drift vid ett visst tillfälle. Eftersom samtalsstacken fungerar på tillfällig basis och måste nås snabbt, finns den i datorns minne snarare än i permanent lagring som hårddisken.

Eftersom moderna operativsystem tillåter att flera program körs samtidigt, finns det ett behov av att organisera hur minnet allokeras, inklusive anropsstackar. Detta görs effektivt genom att tilldela buffertar, ett utrymme i minnet utformat för att vara tillräckligt stort för att klara av det maximala utrymme som krävs av en viss buffert. I de flesta fall kommer en del av utrymmet att vara oanvänt, så det fungerar som en buffert mellan data från olika applikationer, vilket ger utrymme att hantera om man plötsligt behöver extra utrymme. Ett sätt att visualisera det skulle vara att tänka på ett bibliotek som tilldelade ett visst utrymme till varje ämnesområde, och se till att lämna lite extra utrymme att orka med om till exempel alla böcker om ett ämne fanns i biblioteket på samtidigt, snarare än att någon av dem checkas ut.

Ett stackbuffertspill inträffar när ett program skriver anropsstackdata till bufferten på ett sätt som överskrider det tilldelade utrymmet. Detta kan ske av misstag, vanligtvis genom en bugg i ett program. Till exempel, om en applikation är utformad för att tillåta användaren att skriva in ett telefonnummer, men inte har någon gräns för antalet tecken som kan anges, kan en hackare kunna använda det gränslösa fältet för att avsiktligt orsaka ett stackbuffertspill . Beroende på hur operativsystemet fungerar kan detta tillåta hackaren att indirekt komma åt antingen en annan applikation eller själva operativsystemet.

Det finns flera tillvägagångssätt för att mildra effekterna av ett stackbuffertspill. En är känd som randomisering av adressutrymmeslayout. Detta ordnar de viktigaste dataområdena på datorn på ett slumpmässigt sätt. Tanken är att även om en hacker orsakar eller utnyttjar ett stackbuffertspill, kommer han inte att kunna utnyttja intrånget på ett tillförlitligt sätt.