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

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

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

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

Специальные структуры Safe Pointer (безопасный указатель),

Таблицы объектов (C Range Error Detector)

Достоинства

Выявляет все виды уязвимостей кроме переполнения на один байт

Недостаток

накладные расходы до 325%

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

Безопасный cтек для хранения адресов возврата

(Secure Return Address Stack)

Дополнительный флаг процессора (NX-флаг)

Недостаток

Накладные расходы до 65%

Несовместим с непоследовательными вызовами функций, такие как обработка прерывания С++

Блокиратор переполнения буфера

SigFree [Wang et al.]

Достоинства

•Прозрачный подход, который работает на уровне приложений

•Может выявлять неизвестный тип атак

Недостаток

•Не предотвращает переполнения буфера

Уязвимости в управлении кучей

Червь Linux/Slapper

Используемая уязвимость:

пакет OpenSSL - библиотека libssl

Используется в модуле mod-ssl сервера Apache 1.3

Структура протокола SSL

Схема установления соединения по протоколу SSL

Структура SSL_SESSION

struct ssl_session_st {

 

 

int ssl_version;

/* SSL версия протокола */

unsigned int key_arg_length; /* используется только в версии 2 */

unsigned char key_arg[SSL_MAX_KEY_ARG_LENGTH];

/*ключ*/

int master_key_length;

/* The pre-master secret */

unsigned char master_key[SSL_MAX_MASTER_KEY_LENGTH];

 

unsigned int session_id_length;

/* длина поля session id, которое

зависит от версии SSL, (в случае с червем 36 байт)*/ unsigned char session_id[SSL_MAX_SSL_SESSION_ID_LENGTH];

struct cert_st *cert;

/* сертификат, используемый для

 

установления соединения */

SSLCERT *peer;

 

….

 

….SSL_CIPHER *cipher; /* указатель на шифр, выделяется в куче! */ unsigned long cipher_id;

………}

Алгоритм атаки

I. Типирование сервера Запрос GET червя Linux/Slapper

GET / HTTP/1.1\r\n\r\n

Ответ сервера Apache

HTTP/1.1 400 Bad Request

Date: Mon, 23 Feb 2004 23:43:42 GMT

Server: Apache/1.3.19 (UNIX) (Red-Hat/Linux) mod_ssl/2.8.1 OpenSSL/0.9.6 DAV/1.0.2 PHP/4.0.4pl1 mod_perl/1.24_01

Connection: close Transfer-Encoding: chunked

Content-Type: text/html; charset=iso-8859-1

Код червя Slapper

struct archs { char *os;

char *apache; int func_addr;}

architectures[] = {{"Gentoo", "", 0x08086c34}, {"Debian", "1.3.26", 0x080863cc},

{"Red-Hat", "1.3.6", 0x080707ec}, {"Red-Hat", "1.3.9", 0x0808ccc4}, {"Red-Hat", "1.3.12", 0x0808f614}, {"Red-Hat", "1.3.12", 0x0809251c},

{"Red-Hat", "1.3.19", 0x0809af8c}, {"Red-Hat", "1.3.20", 0x080994d4}, {"Red-Hat", "1.3.26", 0x08161c14}, {"Red-Hat", "1.3.23", 0x0808528c}, {"Red-Hat", "1.3.22", 0x0808400c}, {"SuSE", "1.3.12", 0x0809f54c}, {"SuSE", "1.3.17", 0x08099984}, {"SuSE", "1.3.19", 0x08099ec8}, {"SuSE", "1.3.20", 0x08099da8}, {"SuSE", "1.3.23", 0x08086168}, {"SuSE", "1.3.23", 0x080861c8}, {"Mandrake", "1.3.14", 0x0809d6c4},

{"Mandrake", "1.3.19", 0x0809ea98}, {"Mandrake", "1.3.20", 0x0809e97c}, {"Mandrake", "1.3.23", 0x08086580}, {"Slackware", "1.3.26", 0x083d37fc}, {"Slackware", "1.3.26", 0x080b2100} };

где волшебное число – это адрес таблицы GOT

Алгоритм атаки

II. Установка рукопожатия

1.Slapper → “hello”, поддерживаю 8 различных шифров(на деле -> RSA-128 c MD5)

2.Сервер → сертификат.

3.Slapper → мастер ключ, длина которого превышает

значение SSL_MAX_KEY_ARG_LENGTH (56 байт вместо 8 байт)

4.Сервер выделяет в памяти структуру SSL_Section и копирует ключ в структуру key_arg[]

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