Кіріспе
Бағдарламалық аномалия
Жинаққа шабуыл, үйіндіге шабуыл немесе үйіндінің бұзылуы – бұл үйінді деректер аймағында пайда болатын буферлік ағып кету түрі. Жинақталған ағып кетулер стекке негізделген ағып кетулерден өзгеше жолмен пайдаланылады. Жинақтағы жад орындалу кезінде динамикалық түрде бөлінеді және әдетте бағдарлама деректерін қамтиды. Пайдалану осы деректерді белгілі бір жолдармен бұрмалау арқылы жүзеге асырылады, нәтижесінде қосымша ішкі құрылымдарды, мысалы, тізімдегі сілтемелерді қайта жазады. Стандартты жинақталған шабуыл әдісі динамикалық жадты бөлу байланысын (мысалы, malloc метадеректері) жазады және бағдарлама функциясының меңзерін жаза үшін алынған меңзер алмасуын пайдаланады. Мысалы, Linux-тың ескі нұсқаларында, жинақта бір-біріне жақын орналасқан екі буфердің біріншісі екінші буфердің метадеректерін жаза алуы мүмкін. Екінші буфердің қолданылып жатқан битін нөлге орнату және ұзындығын нөлдік байттарды көшіруге мүмкіндік беретін кішкентай теріс мәнге орнату арқылы, бағдарлама бірінші буферді босатуды шақырғанда, бұл екі буферді біріктіруге тырысады. Бұл орын алғанда, босатылған деп есептелетін буферде бұрын бөлінген буфердің алғашқы 8 байтында FD және BK екі меңзері болады деп күтіледі. BK, FD-ге жазылады және меңзерді жаза үшін қолданылуы мүмкін.
A heap overflow, heap overrun, or heap smashing is a type of buffer overflow that occurs in the heap data area. Heap overflows are exploitable in a different manner to that of stack based overflows. Memory on the heap is dynamically allocated at runtime and typically contains program data. Exploitation is performed by corrupting this data in specific ways to cause the application to overwrite internal structures such as linked list pointers. The canonical heap overflow technique overwrites dynamic memory allocation linkage (such as malloc metadata) and uses the resulting pointer exchange to overwrite a program function pointer. For example, on older versions of Linux, two buffers allocated next to each other on the heap could result in the first buffer overwriting the second buffer's metadata. By setting the in use bit to zero of the second buffer and setting the length to a small negative value which allows null bytes to be copied, when the program calls free on the first buffer it will attempt to merge these two buffers into a single buffer. When this happens, the buffer that is assumed to be freed will be expected to hold two pointers FD and BK in the first 8 bytes of the formerly allocated buffer. BK gets written into FD and can be used to overwrite a pointer.
Салдарлар
Кездейсоқ ағып кету салдарынан әсер еткен жад аймағына қол жеткізетін кез келген процестің деректері бұзылуы немесе күтпеген әрекеттерге ұшырауы мүмкін. Жадты қорғау механизмі жоқ операциялық жүйелерде, бұл жүйедегі кез келген процесс болуы мүмкін. Мысалы, Microsoft JPEG GDI+ буферлік ағып кетуінің осалдығы зардап шеккен құрылымда кодты қашықтан орындауға мүмкіндік береді. iOS құрылғысын jailbreak арқылы бұзу көбінесе кез келген кодты орындау үшін үйінділік ағып кетулерді пайдаланады.