Beth Yw Buffer Overflow? Taith Ymarferol
Dysgu sut mae buffer overflows yn gweithio mewn gwirionedd gydag enghraifft C go iawn, diagram y pentwr, a'r offer i'w weld yn digwydd eich hun.
Mae buffer overflow yn digwydd pan mae rhaglen yn ysgrifennu mwy o ddata i ddarn o atgoffa maint sefydlog nag y gall y darn hwnnw ei ddal. Mae'r bylltau ychwanegol yn gollwng i'r atgoffa cyfagos, ac yn dibynnu ar beth sydd wrth ymyl y byffer hwnnw, gallwch lygredd newidynnau, torri'r rhaglen, neu herwgipio'r llif gweithrediad yn llwyr. Mae'n un o'r dosbarth gwallau hynaf mewn diogelwch meddalwedd a dal i ymddangos mewn CTFs, CVEs, a firmware embedded heddiw.
Y patrwm bregus
Iyma enghraifft glasurol mewn C:
#include <string.h>
void greet(char *name) {
char buffer[64];
strcpy(buffer, name);
}
int main(int argc, char **argv) {
greet(argv[1]);
return 0;
}
Mae strcpy yn copïo unrhyw linyn rydych chi'n ei basio iddo i mewn buffer, heb unrhyw wirio terfynau. Os yw argv[1] yn hirach na 64 bytes, mae'r copi yn parhau i fynd heibio i ddiwedd yr arae. Ar y pentwr, mae buffer yn eistedd islaw newidynnau lleol eraill, cofrestrau wedi'u cadw, ac yn y pen draw y cyfeiriad dychwelyd sy'n dweud wrth y CPU ble i neidio ar ôl greet() yn gorffen. Dysgrifennu'r cyfeiriad dychwelyd hwnnw gyda chyfeiriad rydych chi'n ei reoli, a rydych chi'n rheoli beth sy'n rhedeg nesaf.
Pam mae hyn dal yn llunio ac yn rhedeg
Nid yw C a C++ yn gwneud gwirio terfynau awtomatig ar arae crai. Bydd swyddogaethau fel strcpy, gets, sprintf, a strcat yn hapus i ysgrifennu heibio i ddiwedd byffer oherwydd eu bod ond yn poeni am derfynydd null neu hyd y ffynhonnell, nid maint gwirioneddol y cyrchfan. Cymharwch hynny â strncpy neu snprintf, sy'n cymryd dadl maint benodol ac yn stopio yno. Nid yw'r nid ydyw gwachydwriaeth mewn gwirionedd
Ysgrifennwyd yr erthygl hon gyda chymorth AI, a'i hadolygu a'i chyhoeddi gan Michal Pilch (CISSP), Korra Studio.
Dyma un nodyn o'r gronfa wybodaeth Korra Studio — mae'r platfform yn paru pob pwnc ag 1-i-1 mentora.
Dechrau am ddimarrow_forward