Wat is een stackbufferoverloop?
Een stapelbufferoverloop is wat er gebeurt wanneer een programma een invoer in het geheugen van een computer maakt die langer is dan de toegewezen ruimte. In sommige omstandigheden kan dit andere gegevens in het geheugen beschadigen en problemen veroorzaken bij het uitvoeren van de computer. In andere gevallen kan een stapelbufferoverloop worden misbruikt door een kwaadwillende toepassing om de controle over andere delen van de computer over te nemen.
De naam van een stapelbufferoverloop komt eerst van de stapel, wat in feite een actieve lijst is waarin gegevens zijn georganiseerd: de term komt van de analogie van het opstapelen van fysieke items. Een versie hiervan, de call-stack, is de lijst die een computerprogramma gebruikt om de verschillende delen van het programma bij te houden, de subroutines, die op een bepaald moment actief zijn. Omdat de oproepstapel tijdelijk werkt en snel toegankelijk moet zijn, bevindt deze zich in het geheugen van de computer in plaats van in permanente opslag zoals de harde schijf.
Omdat moderne besturingssystemen ervoor zorgen dat meerdere programma's tegelijkertijd kunnen worden uitgevoerd, moet de manier worden bepaald waarop geheugen wordt toegewezen, ook om stacks aan te roepen. Dit wordt efficiënt gedaan door buffers toe te wijzen, een ruimte in het geheugen die groot genoeg is om de maximale ruimte voor een bepaalde buffer aan te kunnen. In de meeste gevallen zal een deel van de ruimte niet worden gebruikt, dus het fungeert als een buffer tussen de gegevens van verschillende toepassingen, waardoor er ruimte is om te gaan als er plotseling extra ruimte nodig is. Een manier om het te visualiseren, is door te denken aan een bibliotheek die een bepaalde hoeveelheid ruimte aan elk onderwerpgebied heeft toegewezen, waardoor er wat extra ruimte overblijft om het hoofd te bieden als, bijvoorbeeld, alle boeken over één onderwerp in de bibliotheek in de tegelijkertijd, in plaats van dat ze worden uitgecheckt.
Een stapelbufferoverloop treedt op wanneer een programma oproepstapeldata naar de buffer schrijft op een manier die de toegewezen ruimte overschrijdt. Dit kan per ongeluk gebeuren, meestal via een bug in een programma. Als een toepassing bijvoorbeeld is ontworpen om de gebruiker een telefoonnummer te laten typen, maar geen beperking heeft voor het aantal tekens dat kan worden ingevoerd, kan een hacker mogelijk het onbeperkte veld gebruiken om opzettelijk een stapelbufferoverloop te veroorzaken . Afhankelijk van de manier waarop het besturingssysteem werkt, kan de hacker hierdoor indirect toegang krijgen tot een andere applicatie of het besturingssysteem zelf.
Er zijn verschillende manieren om de effecten van een stapelbufferoverloop te verminderen. Eén staat bekend als randomisatie van adresruimte-indeling. Dit rangschikt de belangrijkste gegevensgebieden op de computer op een willekeurige manier. Het idee is dat zelfs als een hacker een stapelbufferoverloop veroorzaakt of exploiteert, hij de inbreuk niet op een betrouwbare manier kan exploiteren.