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

Weitere ähnliche Inhalte

Was ist angesagt?

Nedospasov defcon russia 23
Nedospasov defcon russia 23Nedospasov defcon russia 23
Nedospasov defcon russia 23DefconRussia
 
цсноп 2 11_3_проект памяти
цсноп 2 11_3_проект памятицсноп 2 11_3_проект памяти
цсноп 2 11_3_проект памятиIrina Hahanova
 
Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...a15464321646213
 
Нейролингвистический анализатор для распознавания голосовых данных на основе ИНН
Нейролингвистический анализатор для распознавания голосовых данных на основе ИНННейролингвистический анализатор для распознавания голосовых данных на основе ИНН
Нейролингвистический анализатор для распознавания голосовых данных на основе ИННKonstantin Zavarov, ICP
 
присяжный Root Conf2009 Beta 1
присяжный Root Conf2009 Beta 1присяжный Root Conf2009 Beta 1
присяжный Root Conf2009 Beta 1Liudmila Li
 
Векторизация кода (семинар 1)
Векторизация кода (семинар 1)Векторизация кода (семинар 1)
Векторизация кода (семинар 1)Mikhail Kurnosov
 
Лекция 3. Векторизация кода (Code vectorization: SSE, AVX)
Лекция 3. Векторизация кода (Code vectorization: SSE, AVX)Лекция 3. Векторизация кода (Code vectorization: SSE, AVX)
Лекция 3. Векторизация кода (Code vectorization: SSE, AVX)Mikhail Kurnosov
 
Семинар 8. Параллельное программирование на MPI (часть 1)
Семинар 8. Параллельное программирование на MPI (часть 1)Семинар 8. Параллельное программирование на MPI (часть 1)
Семинар 8. Параллельное программирование на MPI (часть 1)Mikhail Kurnosov
 
Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...a15464321646213
 
Функциональные сети на основе библиотеки SynapseGrid
Функциональные сети на основе библиотеки SynapseGridФункциональные сети на основе библиотеки SynapseGrid
Функциональные сети на основе библиотеки SynapseGridАрсений Жижелев
 
Семинар 12. Параллельное программирование на MPI (часть 5)
Семинар 12. Параллельное программирование на MPI (часть 5)Семинар 12. Параллельное программирование на MPI (часть 5)
Семинар 12. Параллельное программирование на MPI (часть 5)Mikhail Kurnosov
 
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...Mikhail Kurnosov
 
Modern neural net architectures - Year 2019 version
Modern neural net architectures - Year 2019 versionModern neural net architectures - Year 2019 version
Modern neural net architectures - Year 2019 versionGrigory Sapunov
 

Was ist angesagt? (13)

Nedospasov defcon russia 23
Nedospasov defcon russia 23Nedospasov defcon russia 23
Nedospasov defcon russia 23
 
цсноп 2 11_3_проект памяти
цсноп 2 11_3_проект памятицсноп 2 11_3_проект памяти
цсноп 2 11_3_проект памяти
 
Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...
 
Нейролингвистический анализатор для распознавания голосовых данных на основе ИНН
Нейролингвистический анализатор для распознавания голосовых данных на основе ИНННейролингвистический анализатор для распознавания голосовых данных на основе ИНН
Нейролингвистический анализатор для распознавания голосовых данных на основе ИНН
 
присяжный Root Conf2009 Beta 1
присяжный Root Conf2009 Beta 1присяжный Root Conf2009 Beta 1
присяжный Root Conf2009 Beta 1
 
Векторизация кода (семинар 1)
Векторизация кода (семинар 1)Векторизация кода (семинар 1)
Векторизация кода (семинар 1)
 
Лекция 3. Векторизация кода (Code vectorization: SSE, AVX)
Лекция 3. Векторизация кода (Code vectorization: SSE, AVX)Лекция 3. Векторизация кода (Code vectorization: SSE, AVX)
Лекция 3. Векторизация кода (Code vectorization: SSE, AVX)
 
Семинар 8. Параллельное программирование на MPI (часть 1)
Семинар 8. Параллельное программирование на MPI (часть 1)Семинар 8. Параллельное программирование на MPI (часть 1)
Семинар 8. Параллельное программирование на MPI (часть 1)
 
Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...
 
Функциональные сети на основе библиотеки SynapseGrid
Функциональные сети на основе библиотеки SynapseGridФункциональные сети на основе библиотеки SynapseGrid
Функциональные сети на основе библиотеки SynapseGrid
 
Семинар 12. Параллельное программирование на MPI (часть 5)
Семинар 12. Параллельное программирование на MPI (часть 5)Семинар 12. Параллельное программирование на MPI (часть 5)
Семинар 12. Параллельное программирование на MPI (часть 5)
 
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
 
Modern neural net architectures - Year 2019 version
Modern neural net architectures - Year 2019 versionModern neural net architectures - Year 2019 version
Modern neural net architectures - Year 2019 version
 

Andere mochten auch

Cryptocurrency with central bank regulations: the RSCoin framework
Cryptocurrency with central bank regulations: the RSCoin frameworkCryptocurrency with central bank regulations: the RSCoin framework
Cryptocurrency with central bank regulations: the RSCoin frameworkRoman Oliynykov
 
Kalyna block cipher presentation in English
Kalyna block cipher presentation in EnglishKalyna block cipher presentation in English
Kalyna block cipher presentation in EnglishRoman Oliynykov
 
Next generation block ciphers
Next generation block ciphersNext generation block ciphers
Next generation block ciphersRoman Oliynykov
 
AES effecitve software implementation
AES effecitve software implementationAES effecitve software implementation
AES effecitve software implementationRoman Oliynykov
 
Connect.Tech- Enhancing Your Workflow With Xcode Source Editor Extensions
Connect.Tech- Enhancing Your Workflow With Xcode Source Editor ExtensionsConnect.Tech- Enhancing Your Workflow With Xcode Source Editor Extensions
Connect.Tech- Enhancing Your Workflow With Xcode Source Editor Extensionsstable|kernel
 
A Hypervisor IPS based on Hardware Assisted Virtualization Technology
A Hypervisor IPS based on Hardware Assisted Virtualization TechnologyA Hypervisor IPS based on Hardware Assisted Virtualization Technology
A Hypervisor IPS based on Hardware Assisted Virtualization TechnologyFFRI, Inc.
 
Purchasing power parity a unit root, cointegration and var analysis in emergi...
Purchasing power parity a unit root, cointegration and var analysis in emergi...Purchasing power parity a unit root, cointegration and var analysis in emergi...
Purchasing power parity a unit root, cointegration and var analysis in emergi...Giwrgos Loukopoulos
 
EQUITY MARKET INTEGRATION IN SELECTED MARKETS: EVIDENCE FROM UNIT ROOT AND CO...
EQUITY MARKET INTEGRATION IN SELECTED MARKETS: EVIDENCE FROM UNIT ROOT AND CO...EQUITY MARKET INTEGRATION IN SELECTED MARKETS: EVIDENCE FROM UNIT ROOT AND CO...
EQUITY MARKET INTEGRATION IN SELECTED MARKETS: EVIDENCE FROM UNIT ROOT AND CO...akjsk10
 
How to create a jQuery Modal Window
How to create a jQuery Modal WindowHow to create a jQuery Modal Window
How to create a jQuery Modal WindowLikno Software
 
Creational pattern
Creational patternCreational pattern
Creational patternHimanshu
 
Representational State Transfer (REST)
Representational State Transfer (REST)Representational State Transfer (REST)
Representational State Transfer (REST)Abhay Ananda Shukla
 
1.Buffer Overflows
1.Buffer Overflows1.Buffer Overflows
1.Buffer Overflowsphanleson
 
Intrinsic Encounter - Cognitive Load Theory
Intrinsic Encounter - Cognitive Load TheoryIntrinsic Encounter - Cognitive Load Theory
Intrinsic Encounter - Cognitive Load TheoryDylan Grace
 
Web design trends for 2010
Web design trends for 2010Web design trends for 2010
Web design trends for 2010Tijs Vrolix
 

Andere mochten auch (20)

Kupyna
KupynaKupyna
Kupyna
 
Cryptocurrency with central bank regulations: the RSCoin framework
Cryptocurrency with central bank regulations: the RSCoin frameworkCryptocurrency with central bank regulations: the RSCoin framework
Cryptocurrency with central bank regulations: the RSCoin framework
 
Kalyna
KalynaKalyna
Kalyna
 
Software Security
Software SecuritySoftware Security
Software Security
 
Kalyna block cipher presentation in English
Kalyna block cipher presentation in EnglishKalyna block cipher presentation in English
Kalyna block cipher presentation in English
 
Next generation block ciphers
Next generation block ciphersNext generation block ciphers
Next generation block ciphers
 
AES effecitve software implementation
AES effecitve software implementationAES effecitve software implementation
AES effecitve software implementation
 
Software security
Software securitySoftware security
Software security
 
Connect.Tech- Enhancing Your Workflow With Xcode Source Editor Extensions
Connect.Tech- Enhancing Your Workflow With Xcode Source Editor ExtensionsConnect.Tech- Enhancing Your Workflow With Xcode Source Editor Extensions
Connect.Tech- Enhancing Your Workflow With Xcode Source Editor Extensions
 
A Hypervisor IPS based on Hardware Assisted Virtualization Technology
A Hypervisor IPS based on Hardware Assisted Virtualization TechnologyA Hypervisor IPS based on Hardware Assisted Virtualization Technology
A Hypervisor IPS based on Hardware Assisted Virtualization Technology
 
Purchasing power parity a unit root, cointegration and var analysis in emergi...
Purchasing power parity a unit root, cointegration and var analysis in emergi...Purchasing power parity a unit root, cointegration and var analysis in emergi...
Purchasing power parity a unit root, cointegration and var analysis in emergi...
 
Design patterns
Design patternsDesign patterns
Design patterns
 
EQUITY MARKET INTEGRATION IN SELECTED MARKETS: EVIDENCE FROM UNIT ROOT AND CO...
EQUITY MARKET INTEGRATION IN SELECTED MARKETS: EVIDENCE FROM UNIT ROOT AND CO...EQUITY MARKET INTEGRATION IN SELECTED MARKETS: EVIDENCE FROM UNIT ROOT AND CO...
EQUITY MARKET INTEGRATION IN SELECTED MARKETS: EVIDENCE FROM UNIT ROOT AND CO...
 
Lampiran unit root test
Lampiran unit root testLampiran unit root test
Lampiran unit root test
 
How to create a jQuery Modal Window
How to create a jQuery Modal WindowHow to create a jQuery Modal Window
How to create a jQuery Modal Window
 
Creational pattern
Creational patternCreational pattern
Creational pattern
 
Representational State Transfer (REST)
Representational State Transfer (REST)Representational State Transfer (REST)
Representational State Transfer (REST)
 
1.Buffer Overflows
1.Buffer Overflows1.Buffer Overflows
1.Buffer Overflows
 
Intrinsic Encounter - Cognitive Load Theory
Intrinsic Encounter - Cognitive Load TheoryIntrinsic Encounter - Cognitive Load Theory
Intrinsic Encounter - Cognitive Load Theory
 
Web design trends for 2010
Web design trends for 2010Web design trends for 2010
Web design trends for 2010
 

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

Технологии анализа бинарного кода приложений: требования, проблемы, инструменты
Технологии анализа бинарного кода приложений: требования, проблемы, инструментыТехнологии анализа бинарного кода приложений: требования, проблемы, инструменты
Технологии анализа бинарного кода приложений: требования, проблемы, инструментыPositive Development User Group
 
Operating Systems Hardening
Operating Systems HardeningOperating Systems Hardening
Operating Systems HardeningVasily Sartakov
 
Лекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPЛекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPMikhail Kurnosov
 
Formal verification of operating system kernels
Formal verification of operating system kernelsFormal verification of operating system kernels
Formal verification of operating system kernelsDenis Efremov
 
Теория языков программирования некоторые слайды к лекциям
Теория языков программирования некоторые слайды к лекциямТеория языков программирования некоторые слайды к лекциям
Теория языков программирования некоторые слайды к лекциямSergey Staroletov
 
Ловим шеллкоды под ARM
Ловим шеллкоды под ARMЛовим шеллкоды под ARM
Ловим шеллкоды под ARMPositive Hack Days
 
Павел Довгалюк, Обратная отладка
Павел Довгалюк, Обратная отладкаПавел Довгалюк, Обратная отладка
Павел Довгалюк, Обратная отладкаSergey Platonov
 
Tech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSU
 
Как приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVMКак приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVMTech Talks @NSU
 
Бинарный анализ с декомпиляцией и LLVM
Бинарный анализ с декомпиляцией и LLVMБинарный анализ с декомпиляцией и LLVM
Бинарный анализ с декомпиляцией и LLVMSmartDec
 
Бинарный анализ с декомпиляцией и LLVM
Бинарный анализ с декомпиляцией и LLVMБинарный анализ с декомпиляцией и LLVM
Бинарный анализ с декомпиляцией и LLVMPositive Hack Days
 
Современный статический анализ кода: что умеет он, чего не умели линтеры
Современный статический анализ кода: что умеет он, чего не умели линтерыСовременный статический анализ кода: что умеет он, чего не умели линтеры
Современный статический анализ кода: что умеет он, чего не умели линтерыcorehard_by
 
«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...
«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...
«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...Mail.ru Group
 
курсовой проект
курсовой проекткурсовой проект
курсовой проектGulnaz Shakirova
 
Развитие технологий генерации эксплойтов на основе анализа бинарного кода
Развитие технологий генерации эксплойтов на основе анализа бинарного кодаРазвитие технологий генерации эксплойтов на основе анализа бинарного кода
Развитие технологий генерации эксплойтов на основе анализа бинарного кодаPositive Hack Days
 
Лекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPЛекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPMikhail Kurnosov
 
Современные подходы к SAST
Современные подходы к SASTСовременные подходы к SAST
Современные подходы к SASTVladimir Kochetkov
 
20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonovComputer Science Club
 

Ähnlich wie Buffer overflow and other software vulnerabilities: theory and practice of protection. (20)

Технологии анализа бинарного кода приложений: требования, проблемы, инструменты
Технологии анализа бинарного кода приложений: требования, проблемы, инструментыТехнологии анализа бинарного кода приложений: требования, проблемы, инструменты
Технологии анализа бинарного кода приложений: требования, проблемы, инструменты
 
Operating Systems Hardening
Operating Systems HardeningOperating Systems Hardening
Operating Systems Hardening
 
Лекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPЛекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMP
 
Formal verification of operating system kernels
Formal verification of operating system kernelsFormal verification of operating system kernels
Formal verification of operating system kernels
 
Теория языков программирования некоторые слайды к лекциям
Теория языков программирования некоторые слайды к лекциямТеория языков программирования некоторые слайды к лекциям
Теория языков программирования некоторые слайды к лекциям
 
Ловим шеллкоды под ARM
Ловим шеллкоды под ARMЛовим шеллкоды под ARM
Ловим шеллкоды под ARM
 
Павел Довгалюк, Обратная отладка
Павел Довгалюк, Обратная отладкаПавел Довгалюк, Обратная отладка
Павел Довгалюк, Обратная отладка
 
Tech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVM
 
Как приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVMКак приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVM
 
Бинарный анализ с декомпиляцией и LLVM
Бинарный анализ с декомпиляцией и LLVMБинарный анализ с декомпиляцией и LLVM
Бинарный анализ с декомпиляцией и LLVM
 
Бинарный анализ с декомпиляцией и LLVM
Бинарный анализ с декомпиляцией и LLVMБинарный анализ с декомпиляцией и LLVM
Бинарный анализ с декомпиляцией и LLVM
 
Современный статический анализ кода: что умеет он, чего не умели линтеры
Современный статический анализ кода: что умеет он, чего не умели линтерыСовременный статический анализ кода: что умеет он, чего не умели линтеры
Современный статический анализ кода: что умеет он, чего не умели линтеры
 
«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...
«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...
«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...
 
курсовой проект
курсовой проекткурсовой проект
курсовой проект
 
Lab5
Lab5Lab5
Lab5
 
Развитие технологий генерации эксплойтов на основе анализа бинарного кода
Развитие технологий генерации эксплойтов на основе анализа бинарного кодаРазвитие технологий генерации эксплойтов на основе анализа бинарного кода
Развитие технологий генерации эксплойтов на основе анализа бинарного кода
 
Лекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPЛекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMP
 
Современные подходы к SAST
Современные подходы к SASTСовременные подходы к SAST
Современные подходы к SAST
 
20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov
 
Multithreading in go
Multithreading in goMultithreading in go
Multithreading in go
 

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

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