Puskurin ylivuotovirhe

Puskurin ylivuotovirhe on tietokoneohjelmassa tapahtuva virhetilanne, jossa ohjelma tallentaa saamansa syötteen osittain sille varatun muistialueen ulkopuolelle. Virhe saattaa aiheuttaa merkittäviä vahinkoja ohjelman ja sitä suorittavan tietokonejärjestelmän toiminnalle. Puskurin ylivuotovirheet ovat olleet tärkein yksittäinen tekninen syy ohjelmissa ja käyttöjärjestelmissä esiintyville tietoturvaongelmille.

Puskurin ylivuoto tapahtuu silloin, kun ohjelma kasvattaa tai vähentää muistialueeseen osoittavaa indeksiä niin suureksi tai pieneksi, että indeksi ei enää osoitakaan puskurille varatulle muistialueelle, vaan tallennettavat tietoalkiot ikään kuin vuotavat sen yli edellä tai jäljessä oleviin, muuhun käyttöön varattuihin muistipaikkoihin.

Puskurin ylivuotovirhe aiheuttaa tietoturvaongelmia useimmin ohjelmissa, jotka on toteutettu suhteellisen matalan tason ohjelmointikielillä. Näissä ei useinkaan ole huomioitu muistialueiden suojaustarvetta ohjelman omilta, mutta asiaankuulumattomilta muokkauksilta. Näitä kieliä ovat muun muassa C ja C++. Useat kielet, kuten Java ja Lisp huolehtivat sisäisesti muistinhallinnasta ja ovat immuuneja puskurin ylivuotovirheille. Joskus kuitenkin nämä immuunitkin ohjelmointikielet saattavat altistua tälle ongelmalle, joko ajoympäristössä itsessään olevan ongelman takia (monet virtuaalikoneet on kirjoitettu C:llä tai C++:lla) tai C:llä tai C++:lla kirjoitettujen ulkoisten rutiinien kautta.

Katso myös

 Muistivuoto
 Ohjelmistosodankäynti
 NX-bitti
 Stack Smashing Protection

Lähteet

Aiheesta muualla

David A. Wheeler: Secure Programming for Linux and Unix HOWTO: Avoid Buffer Overflow 
Secure programmer: Countering buffer overflows 
Smashing The Stack For Fun And Profit by Aleph One  
"Buffer Overflows: Attacks and Defenses for the Vulnerability of the Decade" Crispin Cowanin, Perry Waglen, Calton Pun, Steve Beattien ja Jonathan Walpolen julkaisu  

Ohjelmointivirheet
Turvallisuushaavoittuvuudet