Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

2015_лекции / Переполнение буфера

.pdf
Скачиваний:
89
Добавлен:
22.03.2016
Размер:
2.71 Mб
Скачать

Переполнение буфера 3-его поколение

Форматирование строки

Уязвимые функции

printf – форматированная запись в стандартный поток

fprintf – форматированная запись в поток (в файл)

sprint – форматированный вывод в строку

vprintf - запись в стандартный поток с помощью

указателей на данные

Используемые параметры форматирования

%s - строка

%d - десятичное число

%x - шестнадцатеричное число

Пример корректного использования:

printf(\format %s%d", s, i)

Пример уязвимого кода

int vuln(char buffer[256]){

 

int nReturn=0

 

printf(buffer);

//вывод в командную строку

// printf("%s",buffer);

// правильное решение

return(nReturn);}

 

void main(int argc,char *argv[])

{

char buffer[256]="";

 

// выделить буфер

if (argc == 2){

 

 

strncpy(buffer,argv[1],255);

// скопировать

// второй аргумент из командной строки

}

 

 

vuln(buffer);

// передать буфер «плохой» функции

}

Переполнение буфера 3-его поколение

Управление кучей

Различные реализации управления кучей

древовидная структура

одно/двухнаправленный список

Указатель на следующий блок в цепочке

 

 

Блок

Указатель на предыдущий блок в

цепочке

памяти1

 

 

 

Размер

 

 

 

Статус(free/busy)

 

 

 

Память, выделяемая блоку.

 

 

 

Склейка блоков:

указатель на следующий блок := указатель на предыдущий блок в цепочке

Механизмы предотвращения переполнения буфера

решения на основе стека

инструментальные решения

аппаратные решения

статические методы

решения на уровне операционной системы

анализ данных, фильтрация пакетов на наличие shell-кода.

Общие недостатки применения

механизмов, предотвращающих переполнение буфера

не существуют никаких надежных методик автоматического (или хотя бы полуавтоматического) поиска переполняющихся буферов

Статический поиск по шаблону PREfix, PREfast, АК-ВС, UCA,

FlawFinder, ITS4, RATS, FxCop. невозможность обнаружения уязвимостей, для которых отсутствуют сигнатуры.

фаззинг (fuzzing) OWASP JBroFuzz, Bunny the Fuzzer, SPIKE, PFF (Php Fuzzing Framework), ProxyFuzz

все разработанные методики борьбы с переполняющимися буферами снижают производительность, но не исключают возможность переполнения полностью, хотя и портят атакующему жизнь;

Решения на основе стека

StackGuard

Схематическое изображение стека с использование StackGuard

Решения на основе стека

LibSafe & LibVerify

Принцип работы LibSafe

Решения на основе стека

LibSafe & LibVerify

Принцип работы LibVerify

Решения на основе стека

Достоинства

Классическое переполнение стека

Недостатки

Пропускают все остальные виды узявимостей

Дополнительные вычислительные расходы до 125%

Соседние файлы в папке 2015_лекции