Pretečenie bufra

Zdroj
ručne priradené
Pridané

Pozrieť na YouTube →

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.

Otvoriť AI: ChatGPT · Claude · Gemini

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.