Už delší dobu přemýšlím jak je možný na i386 architektuře buffer overflow útok. Vžfyť datové segmenty mohou mít důsledně zakázáno spouštění kódu. V čem je problém? Proč to tak není?
Nějaký problém v tom asi bude.,Ještě jsem neslyšel o systému, kde tento způsob útoků neexistuje.
Segmentacia sa totiz vobec nepouziva vo win ani v linuxe, pretoze koli kompatibilite s velkym mnozstvom procesorov musi byt jadro naprogramovane tak aby bezalo aj na najhorsom procesore. A myslim ze niekolko podporovanych procesorov segmenty nepodporuje, len stranky, tak sa aj na x86 pouziva len strankovanie
Problem je v tom, ze ve vetsine pripadu existuje prekryv mezi obsahem datovych a kodovych segmentu, nejcasteji o velikosti 4GB. Hlavnim duvodem je, ze vetsina prekladacu predpoklada flat memory model (a napr. sizeof(void *)==sizeof(int)) a neni schopna generovat kod pouzitelny pro jine situace.
Nektera bezpecnostni vylepseni (non-executable stack) segmenty pouzivaji. Novejsi procesory obsahuji i bit non-executable ve strankovani, coz je mnohem praktictejsi metoda ochrany.
Ne vsechny buffer overflow jsou ovsem ciste spusteni dat (jen vetsina). Existuji i slozitejsi okliky.