Pretečenie bufra
Preber si túto prednášku so svojou AI
Skopíruj pripravený podklad a vlož ho do ChatGPT, Claude alebo inej AI — bude ťa učiť alebo skúšať len z tejto prednášky.
Zhrnutie prednášky
Prednáška ukazuje problém pretečenia bufra (buffer overflow) v jazyku C na príklade programu, ktorý overuje heslo manažera do Areny. Funkcie štandardnej knižnice nekontrolujú, či sa so pridelenou pamäťou pracuje v rámci jej hraníc, takže zápis alebo čítanie mimo nej môže program zhodiť (segmentation fault) alebo ho nechať bežať s nepredvídateľným správaním. V ukážke funkcia scanf načíta do 8-bajtového poľa password dlhší reťazec, prepíše susednú premennú pass a program akceptuje nesprávne heslo, napríklad „generator“. Pomocou debuggera sa overí rozloženie premenných v pamäti a vidno, že písmeno „R“ (ASCII 114) sa dostalo do premennej pass. Pri ešte dlhšom vstupe program po čase skončí so segmentation fault, čo ilustruje nebezpečenstvo práce s pamäťou v C.
- - Funkcie ako malloc či scanf nekontrolujú, či program zapisuje alebo číta mimo vyhradenej pamäte.
- - Pretečenie bufra môže skončiť pádom programu (segmentation fault) alebo skrytým nepredvídateľným správaním.
- - Funkcia scanf pri načítaní reťazca nehlási limit dĺžky a prepisuje pamäť za poľom.
- - Dlhé heslo prepíše susednú premennú pass (napr. na hodnotu 114 = „R“), čím sa obíde overenie hesla.
- - Debugger (GDB vo VSCode) umožňuje zistiť adresy premenných a odhaliť, ktorá pamäť bola prepísaná.
- - Pri rôznych dĺžkach vstupu (10, 15, 20 znakov) program najprv beží ďalej a až neskôr spadne.
Zhrnutie pripravené s pomocou AI z prepisu videa.
nechodím na prednášky