29
ПЕРЕПОЛНЕНИЕ БУФЕРА И ДРУГИЕ УЯЗВИМОСТИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ: ТЕОРИЯ И ПРАКТИКА ЗАЩИТЫ Роман Олейников [email protected] http://www.slideshare.net/oliynykov

Buffer overflow and other software vulnerabilities: theory and practice of protection

Embed Size (px)

Citation preview

Page 1: Buffer overflow and other software vulnerabilities: theory and practice of protection

ПЕРЕПОЛНЕНИЕ БУФЕРА И ДРУГИЕ УЯЗВИМОСТИ

ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ: ТЕОРИЯ И ПРАКТИКА ЗАЩИТЫ

Роман Олейников

[email protected]

http://www.slideshare.net/oliynykov

Page 2: Buffer overflow and other software vulnerabilities: theory and practice of protection

План доклада

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

●базовые типы уязвимостей программного обеспечения (системный уровень)

●переполнение буфера: пример атаки●методы защиты и способы их обхода●примеры широко распространенных критичных уязвимостей, их особенности и последствия использования

Page 3: Buffer overflow and other software vulnerabilities: theory and practice of protection

Коротко о докладчике

●доктор технических наук (симметричная криптография)●начальник отдела научных исследований АО "Институт информационных технологий" (Харьков)

●профессор кафедры безопасности информационных систем и технологий (ХНУ им. В.Н.Каразина) и кафедры безопасности информационных технологий (ХНУРЭ)

●visiting professor at Samsung Advanced Technology Training Institute (Suwon, South Korea)

● invited professor at the Selmer Center, Crypto and Security Research Group, University of Bergen (Norway)

●ответственный исполнитель (технический руководитель разработки), соавтор национальных криптографических стандартов ДСТУ 7624:2014 и ДСТУ 7564:2014 (блочный шифр “Калина” и функция хэширования “Купина”)

Page 4: Buffer overflow and other software vulnerabilities: theory and practice of protection

Количество опубликованных критичных уязвимостей в браузерах

Источник: Symantec Internet Security Threat report, 2015

Page 5: Buffer overflow and other software vulnerabilities: theory and practice of protection

Соотношение количества уязвимых Android-устройств (опубликованные уязвимости)

Источник: D.R.Thomas, A.R. Beresford. Security Metrics for the Android Ecosystem. University of Cambridge, United KingdomАктуальное состояние (октябрь 2015): подавляющее большинство устройств имеет незакрытую уязвимость Stagefright.

Page 6: Buffer overflow and other software vulnerabilities: theory and practice of protection

Результаты конкурса Pwn2Own 2015 (демонстрация уязвимостей нулевого дня)

● 5 bugs in the Windows operating system● 4 bugs in Internet Explorer 11● 3 bugs in Mozilla Firefox● 3 bugs in Adobe Reader● 3 bugs in Adobe Flash● 2 bugs in Apple Safari● 1 bug in Google Chrome (75,000 USD)

Итог: исследователям в общей сложности выплачено 557 500 USD за два дня проведения конкурса

NB: компании, целенаправленно занимающиеся обнаружением 0-day, как правило, в таких конкурсах не участвуют (из-за низких выплат)

Источник: HP Security Research Blog

Page 7: Buffer overflow and other software vulnerabilities: theory and practice of protection

Последствия киберпреступности для глобальной экономики

Источник: Norton/Symantec Cybercrime Report, 2013

Page 8: Buffer overflow and other software vulnerabilities: theory and practice of protection

Базовые типы уязвимостей программного обеспечения (системный уровень)

● переполнение буфера (buffer overflow) - прямой захват потока исполнения, возможен через:– стек; – динамическую память (heap); – сегмент данных;

● некорректные форматные строки (uncontrolled format string):– чтение локальных переменных (стек);– чтение любого блока данных в адресном пространстве процесса;– модификация значения в адресном пространстве процесса;

● целочисленные переполнения (integer oveflows):– выход за пределы допустимого диапазона значений

(предварительный этап захвата потока исполнения);– некорректные значения выходных данных модуля;– неверное ветвление при исполнении и пр.

● etc.

Page 9: Buffer overflow and other software vulnerabilities: theory and practice of protection

Переполнение буфера

Page 10: Buffer overflow and other software vulnerabilities: theory and practice of protection

Пример кода (С/С++) без проверки дипазона

Page 11: Buffer overflow and other software vulnerabilities: theory and practice of protection

Результат компиляции

Page 12: Buffer overflow and other software vulnerabilities: theory and practice of protection

Что будет, если копируемая строка окажется длиннее приемного буфера?

strcpy( &dst, &src ) , в отличие от strncpy( &dst, &src, sizeof (dst) ) , учитывает только длину копируемой строки (перезапись идет до нахождения завершающего нулевого символа), без учета размера приемного буфера

Page 13: Buffer overflow and other software vulnerabilities: theory and practice of protection

Стек потока (thread) при атаке: переполнение специально сформированным блоком (shellcode)

Page 14: Buffer overflow and other software vulnerabilities: theory and practice of protection

Практическая демонстрация

●netcalcd – уязвимый сетевой демон (сервис) для Linux (x86), разработанный для демонстрации переполнения буфера–прием и обработка текстовых запросов по сети

–печать отладочной информации в консоль

●утилита для атаки (exploit)–соединение с удаленным сервером

–отправка блока с кодом для переполнения буфера (exploitation)

Page 15: Buffer overflow and other software vulnerabilities: theory and practice of protection

netcalcd: нормальная работа

Page 16: Buffer overflow and other software vulnerabilities: theory and practice of protection

Запуск злоумышленного кода для атаки netcalcd

Page 17: Buffer overflow and other software vulnerabilities: theory and practice of protection

Переполнение буфера в стеке netcalcd

Page 18: Buffer overflow and other software vulnerabilities: theory and practice of protection

Linux-сервер: открытые порты до и после проведения атаки

Page 19: Buffer overflow and other software vulnerabilities: theory and practice of protection

Подключение к только что открытому порту на Linux-сервере

Page 20: Buffer overflow and other software vulnerabilities: theory and practice of protection

Утилита для реализации атаки

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

●блок данных, вызывающий переполнение, содержить исполнимый код, выполняющийся на атакованном компьютере (и запускающий дополнительный web-сервер)

Page 21: Buffer overflow and other software vulnerabilities: theory and practice of protection

Утилита для реализации атаки: клиентское приложение под Windows

открытие сетевого соединения

Page 22: Buffer overflow and other software vulnerabilities: theory and practice of protection

Блок данных, отправляемый на сервер: исполнимый код

Page 23: Buffer overflow and other software vulnerabilities: theory and practice of protection

Базовые рекомендации для защиты от переполнения буфера

●основная: писать безопасный код, делать вызовы только защищенных функций с верификацией всех входных данных; проводить независимый аудит кода;

●применение ASLR (Address Space Layout Randomization) в операционной системе;

●обязательное использование бита NX (XD) для процессоров х86/х86_64 (уровень операционной системы);

●применение компилятором canary words; ●запуск процессов/потоков с наименьшими привилегиями, необходимыми для нормальной работы.

Page 24: Buffer overflow and other software vulnerabilities: theory and practice of protection

ASLR: пример работы

Page 25: Buffer overflow and other software vulnerabilities: theory and practice of protection

Методы обхода ASLR

●прямой подбор верного адреса (старшие биты не меняются; слово выровнено по определенной границе; вероятность успеха рассчитываем на основе парадокса дней рождения);–метод эффективно работает и для обхода canary words

●возврат в код, находящийся в нерандомизированной памяти;

● jmp *esp●etc.

Источник (часть): Tio Muller, ASLR Smack & Laugh Reference

Page 26: Buffer overflow and other software vulnerabilities: theory and practice of protection

Бит NX: обход через return­to­libc

● нет исполнения кода в стеке (и исключения процессора)

● адрес возврата перезаписывается и указывает на существующий код

● атакующий выбирает нужную функцию и аргументы для нее

● в Windows возможно сделать цепочку вызовов (для _stdcall_ вызываемая функция очищает стек)

Page 27: Buffer overflow and other software vulnerabilities: theory and practice of protection

Защита компилятора: canary words

NB: вероятность успеха обхода метода защиты на 32-битовой платформе примерно равна ½ для 216 попыток (математика: парадокс дней рождения)

Page 28: Buffer overflow and other software vulnerabilities: theory and practice of protection

Примеры широко распространенных критичных уязвимостей

● Heartbleed – уязвимость OpenSSL:–возможность получить доступ на чтение данных за пределами буфера по запросу из сети ;

–уязвимыми оказались сотни тысяч web-серверов, использующих библиотеку OpenSSL;

–похищены криптографические ключи и скомпрометированы данные миллионов пользователей;

● GotoFail – уязвимость реализации TLS (SSL) для OSX и iOS:–лишний оператор goto блокировал проверку подлинности сертификатов;

–злоумышленик получил возможность перехватывать трафик (man­in­the­middle) и/или организовывать фишинг через TLS-соединения (отображаемые как доверенные);

● Stagefright – уязвимость Android:–мультимедийная библиотека, написанная на С++ (нет sandbox-защиты, как у java-приложений);

–используется во всех версиях Android (2.2-5.1), для большинства версий нет исправления безопасности (security update) и в октябре 2015;

–работает как привилегированный и автоматически перезапускаемый системный процесс;

–автоматическая обработка полученного видео, изображений, MMS, до отправки уведомления пользователю;

–использование целочисленного переполнения, ведущего к разрушению структуры динамической памяти и последующему захвату управления.

Page 29: Buffer overflow and other software vulnerabilities: theory and practice of protection

ИТ-безопасность: не существует “гарантированно защищенных” решений (“серебряной пули”)

Если система включена и работает, возможно только лишь состояние с закрытыми уязвимостями ПО,

известными на текущий момент

Безопасность – процесс, а не состоние системы