Как работает атака методом кучи?

Я прочитал две статьи о кучном распылении: Wikiepdia и эта запись в блоге. Я понимаю, как код оболочки вводится в память программы. Но как заставить программу переходить / обращаться к адресной памяти, расположенной в куче?

Какой сбой вызывает вызов кучи?

Нужно ли проводить такую ​​атаку с помощью атаки переполнения буфера?

Есть ли какое-нибудь золотое правило, подобное правилу с переполнением буфера, т.е. использовать n версию функций (strncpy вместо strcpy)?


person Piotr Czapla    schedule 05.11.2010    source источник
comment
См. darkreading.com/vulnerabilities --- угрозы / и corelan.be/index.php/2011/12/31/   -  person Pacerier    schedule 05.01.2015


Ответы (1)


Если я правильно понимаю,

Обычно они пользуются преимуществом того факта, что эти блоки кучи будут находиться примерно в одном и том же месте каждый раз, когда запускается распыление кучи. Поток выполнения может быть перенаправлен на распылители кучи через переполнение буфера или ошибки переполнения кучи.

Они говорят о такой ситуации:

char buffer[10];
FuncPtr p;

И когда вы читаете в buffer, нет защиты от переполнения, и вы можете записывать прямо в область памяти для p. Позже, когда ваш код попытается вызвать p, он перейдет туда, куда злоумышленник хочет, чтобы он перескочил, предположительно туда, где они внедрили исполняемый код в ваше приложение.

Простое исправление: не используйте статические буферы (предпочитайте классы коллекции std::) и всегда проверяйте наличие переполнения.

person Blindy    schedule 05.11.2010
comment
Похоже, я пропустил это предложение в Википедии :) Спасибо! - person Piotr Czapla; 06.11.2010