Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

1,109 views

Published on

Overview of software security. Slides to my short talk on HackIT-2015 conference in Kharkov, Ukraine
(in Russian)

Published in: Internet
  • Be the first to comment

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

  1. 1. ПЕРЕПОЛНЕНИЕ БУФЕРА И ДРУГИЕ УЯЗВИМОСТИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ: ТЕОРИЯ И ПРАКТИКА ЗАЩИТЫ Роман Олейников roliynykov@gmail.com http://www.slideshare.net/oliynykov
  2. 2. План доклада ● краткое представление ● уязвимости ПО: универсальный вектор реализации атаки ● базовые типы уязвимостей программного обеспечения (системный уровень) ● переполнение буфера: пример атаки ● методы защиты и способы их обхода ● примеры широко распространенных критичных уязвимостей, их особенности и последствия использования
  3. 3. Коротко о докладчике ● доктор технических наук (симметричная криптография) ● начальник отдела научных исследований АО "Институт информационных технологий" (Харьков) ● профессор кафедры безопасности информационных систем и технологий (ХНУ им. В.Н.Каразина) и кафедры безопасности информационных технологий (ХНУРЭ) ● 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 (блочный шифр “Калина” и функция хэширования “Купина”)
  4. 4. Количество опубликованных критичных уязвимостей в браузерах Источник: Symantec Internet Security Threat report, 2015
  5. 5. Соотношение количества уязвимых Android- устройств (опубликованные уязвимости) Источник: D.R.Thomas, A.R. Beresford. Security Metrics for the Android Ecosystem. University of Cambridge, United Kingdom Актуальное состояние (октябрь 2015): подавляющее большинство устройств имеет незакрытую уязвимость Stagefright.
  6. 6. Результаты конкурса 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
  7. 7. Последствия киберпреступности для глобальной экономики Источник: Norton/Symantec Cybercrime Report, 2013
  8. 8. Базовые типы уязвимостей программного обеспечения (системный уровень) ● переполнение буфера (buffer overflow) - прямой захват потока исполнения, возможен через: – стек; – динамическую память (heap); – сегмент данных; ● некорректные форматные строки (uncontrolled format string): – чтение локальных переменных (стек); – чтение любого блока данных в адресном пространстве процесса; – модификация значения в адресном пространстве процесса; ● целочисленные переполнения (integer oveflows): – выход за пределы допустимого диапазона значений (предварительный этап захвата потока исполнения); – некорректные значения выходных данных модуля; – неверное ветвление при исполнении и пр. ● etc.
  9. 9. Переполнение буфера
  10. 10. Пример кода (С/С++) без проверки дипазона
  11. 11. Результат компиляции
  12. 12. Что будет, если копируемая строка окажется длиннее приемного буфера? strcpy( &dst, &src ) , в отличие от strncpy( &dst, &src, sizeof (dst) ) , учитывает только длину копируемой строки (перезапись идет до нахождения завершающего нулевого символа), без учета размера приемного буфера
  13. 13. Стек потока (thread) при атаке: переполнение специально сформированным блоком (shellcode)
  14. 14. Практическая демонстрация ● netcalcd – уязвимый сетевой демон (сервис) для Linux (x86), разработанный для демонстрации переполнения буфера –прием и обработка текстовых запросов по сети –печать отладочной информации в консоль ● утилита для атаки (exploit) –соединение с удаленным сервером –отправка блока с кодом для переполнения буфера (exploitation)
  15. 15. netcalcd: нормальная работа
  16. 16. Запуск злоумышленного кода для атаки netcalcd
  17. 17. Переполнение буфера в стеке netcalcd
  18. 18. Linux-сервер: открытые порты до и после проведения атаки
  19. 19. Подключение к только что открытому порту на Linux-сервере
  20. 20. Утилита для реализации атаки ● клиентское приложение под Windows ● открытие сетевого соединения с уязвимым сервером и отправить блок данных, вызывающий переполнение буфера ● блок данных, вызывающий переполнение, содержить исполнимый код, выполняющийся на атакованном компьютере (и запускающий дополнительный web-сервер)
  21. 21. Утилита для реализации атаки: клиентское приложение под Windows открытие сетевого соединения
  22. 22. Блок данных, отправляемый на сервер: исполнимый код
  23. 23. Базовые рекомендации для защиты от переполнения буфера ● основная: писать безопасный код, делать вызовы только защищенных функций с верификацией всех входных данных; проводить независимый аудит кода; ● применение ASLR (Address Space Layout Randomization) в операционной системе; ● обязательное использование бита NX (XD) для процессоров х86/х86_64 (уровень операционной системы); ● применение компилятором canary words; ● запуск процессов/потоков с наименьшими привилегиями, необходимыми для нормальной работы.
  24. 24. ASLR: пример работы
  25. 25. Методы обхода ASLR ● прямой подбор верного адреса (старшие биты не меняются; слово выровнено по определенной границе; вероятность успеха рассчитываем на основе парадокса дней рождения); –метод эффективно работает и для обхода canary words ● возврат в код, находящийся в нерандомизированной памяти; ● jmp *esp ● etc. Источник (часть): Tio Muller, ASLR Smack & Laugh Reference
  26. 26. Бит NX: обход через return­to­libc ● нет исполнения кода в стеке (и исключения процессора) ● адрес возврата перезаписывается и указывает на существующий код ● атакующий выбирает нужную функцию и аргументы для нее ● в Windows возможно сделать цепочку вызовов (для _stdcall_ вызываемая функция очищает стек)
  27. 27. Защита компилятора: canary words NB: вероятность успеха обхода метода защиты на 32-битовой платформе примерно равна ½ для 216 попыток (математика: парадокс дней рождения)
  28. 28. Примеры широко распространенных критичных уязвимостей ● 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, до отправки уведомления пользователю; –использование целочисленного переполнения, ведущего к разрушению структуры динамической памяти и последующему захвату управления.
  29. 29. ИТ-безопасность: не существует “гарантированно защищенных” решений (“серебряной пули”) Если система включена и работает, возможно только лишь состояние с закрытыми уязвимостями ПО, известными на текущий момент Безопасность – процесс, а не состоние системы

×