SlideShare a Scribd company logo
1 of 36
КТО МЫ? 
• ФГАНУ НИИ «Спецвузавтоматика» 
Научно-исследовательский институт, работающий в сфере 
информационной безопасности 
• «Солерция» — наш студенческий проект, в котором мы передаем свои 
знания и опыт, пытаясь заинтересовать будущих специалистов близкими 
к нам тематиками 
• Наша цель: помощь студентам в профориентации в интересных IT- 
специальностях 
2
ОРГ. ВОПРОСЫ 
Цель – популяризация практической информационной 
безопасности 
Что планируется: 
• Лекции и доклады приглашенных специалистов ИБ и 
участников 
• Семинарские практические занятия и домашняя 
работа 
• Поощрения для участников 
• Разработка и оформление индивидуальных проектов 
3
ИНДИВИДУАЛЬНЫЕ ПРОЕКТЫ 
• Будем кодить фаззер 
• Поищем 0day экплойты 
• Съездим на PHDays или другую хорошую 
конференцию 
• Опубликуем результаты 
• Результаты можно будет использовать для 
дипломных проектов 
• Особо отличившихся возьмем к себе в команду 
4
x00.ВВЕДЕНИЕ 
5
УК РФ 
• Статья 272. Неправомерный доступ к 
компьютерной информации 
Наказывается лишением свободы на срок до пяти 
лет 
• Статья 273. Создание, использование и 
распространение вредоносных программ 
Наказывается лишением свободы на срок от трех до 
семи лет 
6
HATS 
• White Hats – специалисты в информационной 
безопасности, осуществляющие 
санкционированные тестирования на 
проникновение защищенных систем 
• Black Hats – хакеры, использующие уязвимости 
программ в незаконных целях 
• Gra(e)y Hats – независимые специалисты, ищущие 
дыры в информационной безопасности и 
публикующие информацию о найденных 
уязвимостях 
7
ТЕРМИНОЛОГИЯ 
• Зараженный файл – файл обычного формата, внутри 
которого лежит сплойт 
• Эксплойт – вредоносный код, активирующий уязвимость в 
программе 
• Уязвимость – ошибка в программе, приводящая к 
некорректной обработке входных данных 
• SHELL – оболочка для загрузки основной функциональности 
• Мы будем рассматривать только локальные, файловые 
эксплойты, используемые злоумышленниками для атак на 
персональные компьютеры 
8
x01. ПРИЧИНЫ ВОЗНИКНОВЕНИЯ 
УЯЗВИМОСТЕЙ 
9
ОШИБКИ В ПРОГРАММНОМ КОДЕ 
• Уязвимости «Переполнение буфера» 
• Возникают при неосторожном использовании 
функций работы с памятью: strcpy, memcpy, 
strncat…. 
• Пример 
char dst[10]; 
char src[1000]; 
strcpy_s (dst, 1000, src); 
10
ОШИБКИ В ПРОГРАММНОМ КОДЕ 
• Уязвимости «форматной строки» 
• Использование функций: fprintf, fscanf, 
printf с неверными параметрами 
• Без должной обработки приводят к 
возникновению переполнения буфера 
• Ошибки целочисленных вычислений возникают 
при отсутствии проверки на попадание в диапазон 
значений 
11
К ЧЕМУ ПРИВОДЯТ ОШИБКИ 
• #include<stdio.h> 
• #include<string.h> 
• void func(char *str) 
• { 
• char buffer[4]; 
• int *ret; 
• strcpy(buffer,str); 
• } 
• int main(int argc,char **argv) 
• { 
• int x; 
• x=0; 
• func(argv[1]); 
• x=1; 
• printf("nx is 1n"); 
• printf("nx is 0nn"); 
• } 
12
К ЧЕМУ ПРИВОДЯТ ОШИБКИ 
13 
• .... 
• 0x08048431 <main+35>: call 0x80483f4 <func> // obvious call to func 
• 0x08048436 <main+40>: movl $0x1,-0x8(%ebp) // x = 1; 
• 0x0804843d <main+47>: movl $0x8048520,(%esp) // pushing "x is 1" to the stack 
• 0x08048444 <main+54>: call 0x804832c <puts@plt> // 1st printf call 
• 0x08048449 <main+59>: movl $0x8048528,(%esp) // pushing "x is 0" to the stack 
• 0x08048450 <main+66>: call 0x804832c <puts@plt> // 2nd printf call 
• 0x08048455 <main+71>: add $0x24,%esp 
• 0x08048458 <main+74>: pop %ecx 
• 0x08048459 <main+75>: pop %ebp 
• 0x0804845a <main+76>: lea -0x4(%ecx),%esp 
• 0x0804845d <main+79>: ret 
• .... 
> prog.exe “ABCDx49x84x04x08”
14
К ЧЕМУ ПРИВОДЯТ ОШИБКИ 
• Записываем в память шелл-код и другую 
«полезную нагрузку» 
• Переписываем адрес возврата функции и 
вызываем ошибку в обработке данных 
• После нештатного завершения работы функции 
управление передается на шелл-код, который, 
используя «полезную нагрузку», выполняет 
зловредные действия 
15
x02. ПРАКТИКА СОВРЕМЕННЫХ 
УЯЗВИМОСТЕЙ 
16
ПРОТИВОСТОЯНИЕ 
• Создаются средства контроля памяти 
• Обновляются библиотеки стандартных функций 
• Для защиты от атак переполнения буфера в 
Windows реализованы технологии DEP и ASLR 
17
DEP 
• DEP (Data Execution Prevention) – страницы памяти 
помечаются как «исполнимые» и «неисполнимые» 
• Эксплойт может писать только в неисполнимую 
часть, следовательно шелл-код, лежащий в 
области данных, не запустится 
18
ROP 
• ROP (Return-oriented programming) – техника использования 
частей уже имеющихся в памяти функций для реализации 
вредоносного кода 
• Устанавливаем адреса нужных функций библиотек, которые уже 
находятся в памяти при открытии зараженного файла 
• Нет необходимости использовать функции целиком, достаточно 
использовать их части 
• Нужные нам куски функций называются “gadget” 
• Например: 
VirtualAlloc 0x7c809ae1 [ kernel32.dll] 
SetProcessDEPPolic 0x7C8622A4 [ kernel32.dll] 
… 
19
ROP-chain 
20
ROP-chain 
• Перейдя на адрес гаджета, мы можем выполнить 
нужную нам функцию с заданными параметрами 
• В конце работы гаджет должен передать управление 
на адрес следующего гаджета 
• И так по цепочке (ROP-chain) из гаджетов, взятых в 
сторонних библиотеках, реализуется 
функциональность, необходимая для запуска шелл- 
кода 
• Существуют средства автоматической генерации ROP-chain, 
например, в пакете Metasploit 
21
ASLR 
• ASLR (Address Space Layout Randomization) – 
обеспечивает случайное расположение библиотек 
и их функций в памяти 
• Заранее невозможно зашить адрес нужных 
гаджетов в памяти 
22
ASLR-bypass 
• Встречаются приложения, собираемые без поддержки 
технологии ASLR, их функции можно использовать для 
обхода DEP. Например, msvcr71.dll в версии 1.6 JRE и 
другие «частные случаи» 
• «Brute force» возможных адресов размещения библиотек 
• С помощью переполнения буфера записываются 
сигнатуры, затем ищется необходимая страница в памяти и 
вычисляется относительный адрес библиотеки в памяти 
• В общем случае задача обхода ASLR не решается! 
23
x03. КАК ВЫГЛЯДЯТ ЭКПЛОЙТЫ? 
24
HTML 
• Размещаются на сайтах и эксплуатируют уязвимости веб- 
браузеров 
Реальная атака с использованием CVE-2010-0806 
25
HTML 
• Декодированные данные 
26
PDF 
• Пересылается по почте для «целевых атак» 
• Обычно содержит в себе вредоносный JavaScript 
или встроенный объект, некорректно 
обрабатываемый Acrobat Reader 
• Основная причина обилия уязвимостей – 
реализация Adobe собственного менеджера 
памяти 
27
PDF 
• JavaScript часто используется для записи шелл-кода 
в память, а не для экплойта 
28
SWF 
• Используются для атак на веб-браузеры и программы, 
поддерживающие встраивание SWF-объектов 
• Чаще всего базируется на функциях ActionScript, вызывающих 
обработку сторонних объектов (картинки, видео) 
29
SWF 
30
x04. КАК СТАТЬ 
НАСТОЯЩИМ ХАКЕРОМ? 31
ВРЕДОНОС СВОИМИ РУКАМИ 
• Ставим Metasploit 
• Создаем зараженный файл, например, 
adobe_cool_type (CVE-2010-2883) 
• Добавляем стандартную боевую нагрузку 
(payload), например, удаленный доступ к машине 
• Пересылаем другу под видом признания в любви 
• Ты – настоящий хакер! 
32
НЕ ПОЛУЧИЛОСЬ? 
• Есть три основные причины: 
1. Ваши друзья не верят в настоящую любовь 
2. Антивирусы обнаруживают эксплойты в 
зараженных файлах 
3. Софт обновляется, уязвимости устраняются 
33
ЧТО ДЕЛАТЬ? 
1. Ваши друзья не верят в настоящую любовь 
• Пробовать альтернативные методы 
«социальной инженерии» 
• Использовать самозапускающиеся эксплойты 
• Использовать «тихие» эксплойты, после 
запуска которых программа продолжает 
работать 
34
ЧТО ДЕЛАТЬ? 
2. Антивирусы обнаруживают эксплойты в 
зараженных файлах 
• Обфускация кода 
• Встроенные интерпретаторы 
• Усложнения потока управления 
• Динамический анализатор памяти 
• … 
35
ЧТО ДЕЛАТЬ? 
3. Уязвимости устраняются 
• Использовать «связки» эксплойтов для разных 
версий софта 
• Искать собственные 0day! 
Чем мы и займемся на следующих занятиях 
36

More Related Content

What's hot

Web осень 2013 лекция 9
Web осень 2013 лекция 9Web осень 2013 лекция 9
Web осень 2013 лекция 9Technopark
 
Лекция 11. Тестирование.
Лекция 11. Тестирование.Лекция 11. Тестирование.
Лекция 11. Тестирование.Roman Brovko
 
Криптология в анализе защищённости
Криптология в анализе защищённостиКриптология в анализе защищённости
Криптология в анализе защищённостиbeched
 
Формальная верификация кода на языке Си
Формальная верификация кода на языке СиФормальная верификация кода на языке Си
Формальная верификация кода на языке СиPositive Development User Group
 
Positive Hack Days. Олексюк. Автоматический поиск уязвимостей в программах бе...
Positive Hack Days. Олексюк. Автоматический поиск уязвимостей в программах бе...Positive Hack Days. Олексюк. Автоматический поиск уязвимостей в программах бе...
Positive Hack Days. Олексюк. Автоматический поиск уязвимостей в программах бе...Positive Hack Days
 
Лекция 6. Классы 1.
Лекция 6. Классы 1.Лекция 6. Классы 1.
Лекция 6. Классы 1.Roman Brovko
 
Опыт разработки эффективного SPA
Опыт разработки эффективного SPAОпыт разработки эффективного SPA
Опыт разработки эффективного SPAEugene Abrosimov
 
Лекция 13. Многопоточность и GIL
Лекция 13. Многопоточность и GILЛекция 13. Многопоточность и GIL
Лекция 13. Многопоточность и GILRoman Brovko
 
Web осень 2013 лекция 2
Web осень 2013 лекция 2Web осень 2013 лекция 2
Web осень 2013 лекция 2Technopark
 
Web осень 2013 лекция 8
Web осень 2013 лекция 8Web осень 2013 лекция 8
Web осень 2013 лекция 8Technopark
 
Подходы к сигнатурному статическому анализу
Подходы к сигнатурному статическому анализуПодходы к сигнатурному статическому анализу
Подходы к сигнатурному статическому анализуPositive Development User Group
 
Лекция 5. Встроенные коллекции и модуль collections.
Лекция 5. Встроенные коллекции и модуль collections.Лекция 5. Встроенные коллекции и модуль collections.
Лекция 5. Встроенные коллекции и модуль collections.Roman Brovko
 
Максим Щепелин. "Unittesting. Как?"
Максим Щепелин. "Unittesting. Как?"Максим Щепелин. "Unittesting. Как?"
Максим Щепелин. "Unittesting. Как?"Python Meetup
 
SPA инструменты
SPA инструментыSPA инструменты
SPA инструментыRoman Dvornov
 
Лекция 2. Всё, что вы хотели знать о функциях в Python.
Лекция 2. Всё, что вы хотели знать о функциях в Python.Лекция 2. Всё, что вы хотели знать о функциях в Python.
Лекция 2. Всё, что вы хотели знать о функциях в Python.Roman Brovko
 
Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3Яковенко Кирилл
 
Basis.js – «под капотом»
Basis.js – «под капотом»Basis.js – «под капотом»
Basis.js – «под капотом»Roman Dvornov
 
Лекция 9. Модули, пакеты и система импорта.
Лекция 9. Модули, пакеты и система импорта.Лекция 9. Модули, пакеты и система импорта.
Лекция 9. Модули, пакеты и система импорта.Roman Brovko
 

What's hot (19)

Трущобы Application Security
Трущобы Application SecurityТрущобы Application Security
Трущобы Application Security
 
Web осень 2013 лекция 9
Web осень 2013 лекция 9Web осень 2013 лекция 9
Web осень 2013 лекция 9
 
Лекция 11. Тестирование.
Лекция 11. Тестирование.Лекция 11. Тестирование.
Лекция 11. Тестирование.
 
Криптология в анализе защищённости
Криптология в анализе защищённостиКриптология в анализе защищённости
Криптология в анализе защищённости
 
Формальная верификация кода на языке Си
Формальная верификация кода на языке СиФормальная верификация кода на языке Си
Формальная верификация кода на языке Си
 
Positive Hack Days. Олексюк. Автоматический поиск уязвимостей в программах бе...
Positive Hack Days. Олексюк. Автоматический поиск уязвимостей в программах бе...Positive Hack Days. Олексюк. Автоматический поиск уязвимостей в программах бе...
Positive Hack Days. Олексюк. Автоматический поиск уязвимостей в программах бе...
 
Лекция 6. Классы 1.
Лекция 6. Классы 1.Лекция 6. Классы 1.
Лекция 6. Классы 1.
 
Опыт разработки эффективного SPA
Опыт разработки эффективного SPAОпыт разработки эффективного SPA
Опыт разработки эффективного SPA
 
Лекция 13. Многопоточность и GIL
Лекция 13. Многопоточность и GILЛекция 13. Многопоточность и GIL
Лекция 13. Многопоточность и GIL
 
Web осень 2013 лекция 2
Web осень 2013 лекция 2Web осень 2013 лекция 2
Web осень 2013 лекция 2
 
Web осень 2013 лекция 8
Web осень 2013 лекция 8Web осень 2013 лекция 8
Web осень 2013 лекция 8
 
Подходы к сигнатурному статическому анализу
Подходы к сигнатурному статическому анализуПодходы к сигнатурному статическому анализу
Подходы к сигнатурному статическому анализу
 
Лекция 5. Встроенные коллекции и модуль collections.
Лекция 5. Встроенные коллекции и модуль collections.Лекция 5. Встроенные коллекции и модуль collections.
Лекция 5. Встроенные коллекции и модуль collections.
 
Максим Щепелин. "Unittesting. Как?"
Максим Щепелин. "Unittesting. Как?"Максим Щепелин. "Unittesting. Как?"
Максим Щепелин. "Unittesting. Как?"
 
SPA инструменты
SPA инструментыSPA инструменты
SPA инструменты
 
Лекция 2. Всё, что вы хотели знать о функциях в Python.
Лекция 2. Всё, что вы хотели знать о функциях в Python.Лекция 2. Всё, что вы хотели знать о функциях в Python.
Лекция 2. Всё, что вы хотели знать о функциях в Python.
 
Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3
 
Basis.js – «под капотом»
Basis.js – «под капотом»Basis.js – «под капотом»
Basis.js – «под капотом»
 
Лекция 9. Модули, пакеты и система импорта.
Лекция 9. Модули, пакеты и система импорта.Лекция 9. Модули, пакеты и система импорта.
Лекция 9. Модули, пакеты и система импорта.
 

Similar to Практика эксплуатации уязвимостей в прикладных программах

Информационная безопасность в веб - основы
Информационная безопасность в веб - основыИнформационная безопасность в веб - основы
Информационная безопасность в веб - основыAlex Chistyakov
 
Информационная Безопасность. Современные угрозы и области компетенций
Информационная Безопасность. Современные угрозы и области компетенцийИнформационная Безопасность. Современные угрозы и области компетенций
Информационная Безопасность. Современные угрозы и области компетенцийSerghei Epifantsew
 
Бинарные уязвимости и эксплойты: технологии и перспективы
Бинарные уязвимости и эксплойты: технологии и перспективыБинарные уязвимости и эксплойты: технологии и перспективы
Бинарные уязвимости и эксплойты: технологии и перспективыd_olex
 
PHP libevent Daemons. A high performance and reliable solution. Practical exp...
PHP libevent Daemons. A high performance and reliable solution. Practical exp...PHP libevent Daemons. A high performance and reliable solution. Practical exp...
PHP libevent Daemons. A high performance and reliable solution. Practical exp...Arvids Godjuks
 
SmartOS/Solaris app tuning tools/technologies on HL++ 2013
SmartOS/Solaris app tuning tools/technologies on HL++ 2013SmartOS/Solaris app tuning tools/technologies on HL++ 2013
SmartOS/Solaris app tuning tools/technologies on HL++ 2013Alex Chistyakov
 
Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013Serguei Gitinsky
 
Valentin Simonov “Who cracks our games and how that is done”
Valentin Simonov “Who cracks our games and how that is done”Valentin Simonov “Who cracks our games and how that is done”
Valentin Simonov “Who cracks our games and how that is done”DevGAMM Conference
 
Software Analytics in frontend
Software Analytics in frontendSoftware Analytics in frontend
Software Analytics in frontendDenis Kolesnikov
 
Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...
Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...
Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...Ontico
 
[DagCTF 2015] Hacking motivation
[DagCTF 2015] Hacking motivation[DagCTF 2015] Hacking motivation
[DagCTF 2015] Hacking motivationbeched
 
Практическое создание крупного масштабируемого web 20 c нуля, Дмитрий Бородин
Практическое создание крупного масштабируемого web 20 c нуля, Дмитрий БородинПрактическое создание крупного масштабируемого web 20 c нуля, Дмитрий Бородин
Практическое создание крупного масштабируемого web 20 c нуля, Дмитрий БородинFuenteovejuna
 
Devconf 2014 Трассировка событий при логировании
Devconf 2014 Трассировка событий при логированииDevconf 2014 Трассировка событий при логировании
Devconf 2014 Трассировка событий при логированииAlex Popov
 
BlackBox testing
BlackBox testingBlackBox testing
BlackBox testingbeched
 
Компьютерная графика. Введение в Processing
Компьютерная графика. Введение в ProcessingКомпьютерная графика. Введение в Processing
Компьютерная графика. Введение в ProcessingTatiana Volkova
 
Сергей Житинский, Александр Чистяков (Git in Sky)
Сергей Житинский, Александр Чистяков (Git in Sky)Сергей Житинский, Александр Чистяков (Git in Sky)
Сергей Житинский, Александр Чистяков (Git in Sky)Ontico
 
И снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел ТайкалоИ снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел ТайкалоStanfy
 
What's new in Visual Studio 2012
What's new in Visual Studio 2012What's new in Visual Studio 2012
What's new in Visual Studio 2012InTRUEdeR
 
Программирование как способ выражения мыслей.
Программирование как способ выражения мыслей. Программирование как способ выражения мыслей.
Программирование как способ выражения мыслей. Levon Avakyan
 
Alexei Sintsov - "Between error and vulerability - one step"
Alexei Sintsov - "Between error and vulerability - one step"Alexei Sintsov - "Between error and vulerability - one step"
Alexei Sintsov - "Between error and vulerability - one step"Andrew Mayorov
 

Similar to Практика эксплуатации уязвимостей в прикладных программах (20)

Информационная безопасность в веб - основы
Информационная безопасность в веб - основыИнформационная безопасность в веб - основы
Информационная безопасность в веб - основы
 
Информационная Безопасность. Современные угрозы и области компетенций
Информационная Безопасность. Современные угрозы и области компетенцийИнформационная Безопасность. Современные угрозы и области компетенций
Информационная Безопасность. Современные угрозы и области компетенций
 
Бинарные уязвимости и эксплойты: технологии и перспективы
Бинарные уязвимости и эксплойты: технологии и перспективыБинарные уязвимости и эксплойты: технологии и перспективы
Бинарные уязвимости и эксплойты: технологии и перспективы
 
PHP libevent Daemons. A high performance and reliable solution. Practical exp...
PHP libevent Daemons. A high performance and reliable solution. Practical exp...PHP libevent Daemons. A high performance and reliable solution. Practical exp...
PHP libevent Daemons. A high performance and reliable solution. Practical exp...
 
SmartOS/Solaris app tuning tools/technologies on HL++ 2013
SmartOS/Solaris app tuning tools/technologies on HL++ 2013SmartOS/Solaris app tuning tools/technologies on HL++ 2013
SmartOS/Solaris app tuning tools/technologies on HL++ 2013
 
Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013
 
RuSIEM
RuSIEMRuSIEM
RuSIEM
 
Valentin Simonov “Who cracks our games and how that is done”
Valentin Simonov “Who cracks our games and how that is done”Valentin Simonov “Who cracks our games and how that is done”
Valentin Simonov “Who cracks our games and how that is done”
 
Software Analytics in frontend
Software Analytics in frontendSoftware Analytics in frontend
Software Analytics in frontend
 
Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...
Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...
Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...
 
[DagCTF 2015] Hacking motivation
[DagCTF 2015] Hacking motivation[DagCTF 2015] Hacking motivation
[DagCTF 2015] Hacking motivation
 
Практическое создание крупного масштабируемого web 20 c нуля, Дмитрий Бородин
Практическое создание крупного масштабируемого web 20 c нуля, Дмитрий БородинПрактическое создание крупного масштабируемого web 20 c нуля, Дмитрий Бородин
Практическое создание крупного масштабируемого web 20 c нуля, Дмитрий Бородин
 
Devconf 2014 Трассировка событий при логировании
Devconf 2014 Трассировка событий при логированииDevconf 2014 Трассировка событий при логировании
Devconf 2014 Трассировка событий при логировании
 
BlackBox testing
BlackBox testingBlackBox testing
BlackBox testing
 
Компьютерная графика. Введение в Processing
Компьютерная графика. Введение в ProcessingКомпьютерная графика. Введение в Processing
Компьютерная графика. Введение в Processing
 
Сергей Житинский, Александр Чистяков (Git in Sky)
Сергей Житинский, Александр Чистяков (Git in Sky)Сергей Житинский, Александр Чистяков (Git in Sky)
Сергей Житинский, Александр Чистяков (Git in Sky)
 
И снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел ТайкалоИ снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел Тайкало
 
What's new in Visual Studio 2012
What's new in Visual Studio 2012What's new in Visual Studio 2012
What's new in Visual Studio 2012
 
Программирование как способ выражения мыслей.
Программирование как способ выражения мыслей. Программирование как способ выражения мыслей.
Программирование как способ выражения мыслей.
 
Alexei Sintsov - "Between error and vulerability - one step"
Alexei Sintsov - "Between error and vulerability - one step"Alexei Sintsov - "Between error and vulerability - one step"
Alexei Sintsov - "Between error and vulerability - one step"
 

Практика эксплуатации уязвимостей в прикладных программах

  • 1.
  • 2. КТО МЫ? • ФГАНУ НИИ «Спецвузавтоматика» Научно-исследовательский институт, работающий в сфере информационной безопасности • «Солерция» — наш студенческий проект, в котором мы передаем свои знания и опыт, пытаясь заинтересовать будущих специалистов близкими к нам тематиками • Наша цель: помощь студентам в профориентации в интересных IT- специальностях 2
  • 3. ОРГ. ВОПРОСЫ Цель – популяризация практической информационной безопасности Что планируется: • Лекции и доклады приглашенных специалистов ИБ и участников • Семинарские практические занятия и домашняя работа • Поощрения для участников • Разработка и оформление индивидуальных проектов 3
  • 4. ИНДИВИДУАЛЬНЫЕ ПРОЕКТЫ • Будем кодить фаззер • Поищем 0day экплойты • Съездим на PHDays или другую хорошую конференцию • Опубликуем результаты • Результаты можно будет использовать для дипломных проектов • Особо отличившихся возьмем к себе в команду 4
  • 6. УК РФ • Статья 272. Неправомерный доступ к компьютерной информации Наказывается лишением свободы на срок до пяти лет • Статья 273. Создание, использование и распространение вредоносных программ Наказывается лишением свободы на срок от трех до семи лет 6
  • 7. HATS • White Hats – специалисты в информационной безопасности, осуществляющие санкционированные тестирования на проникновение защищенных систем • Black Hats – хакеры, использующие уязвимости программ в незаконных целях • Gra(e)y Hats – независимые специалисты, ищущие дыры в информационной безопасности и публикующие информацию о найденных уязвимостях 7
  • 8. ТЕРМИНОЛОГИЯ • Зараженный файл – файл обычного формата, внутри которого лежит сплойт • Эксплойт – вредоносный код, активирующий уязвимость в программе • Уязвимость – ошибка в программе, приводящая к некорректной обработке входных данных • SHELL – оболочка для загрузки основной функциональности • Мы будем рассматривать только локальные, файловые эксплойты, используемые злоумышленниками для атак на персональные компьютеры 8
  • 10. ОШИБКИ В ПРОГРАММНОМ КОДЕ • Уязвимости «Переполнение буфера» • Возникают при неосторожном использовании функций работы с памятью: strcpy, memcpy, strncat…. • Пример char dst[10]; char src[1000]; strcpy_s (dst, 1000, src); 10
  • 11. ОШИБКИ В ПРОГРАММНОМ КОДЕ • Уязвимости «форматной строки» • Использование функций: fprintf, fscanf, printf с неверными параметрами • Без должной обработки приводят к возникновению переполнения буфера • Ошибки целочисленных вычислений возникают при отсутствии проверки на попадание в диапазон значений 11
  • 12. К ЧЕМУ ПРИВОДЯТ ОШИБКИ • #include<stdio.h> • #include<string.h> • void func(char *str) • { • char buffer[4]; • int *ret; • strcpy(buffer,str); • } • int main(int argc,char **argv) • { • int x; • x=0; • func(argv[1]); • x=1; • printf("nx is 1n"); • printf("nx is 0nn"); • } 12
  • 13. К ЧЕМУ ПРИВОДЯТ ОШИБКИ 13 • .... • 0x08048431 <main+35>: call 0x80483f4 <func> // obvious call to func • 0x08048436 <main+40>: movl $0x1,-0x8(%ebp) // x = 1; • 0x0804843d <main+47>: movl $0x8048520,(%esp) // pushing "x is 1" to the stack • 0x08048444 <main+54>: call 0x804832c <puts@plt> // 1st printf call • 0x08048449 <main+59>: movl $0x8048528,(%esp) // pushing "x is 0" to the stack • 0x08048450 <main+66>: call 0x804832c <puts@plt> // 2nd printf call • 0x08048455 <main+71>: add $0x24,%esp • 0x08048458 <main+74>: pop %ecx • 0x08048459 <main+75>: pop %ebp • 0x0804845a <main+76>: lea -0x4(%ecx),%esp • 0x0804845d <main+79>: ret • .... > prog.exe “ABCDx49x84x04x08”
  • 14. 14
  • 15. К ЧЕМУ ПРИВОДЯТ ОШИБКИ • Записываем в память шелл-код и другую «полезную нагрузку» • Переписываем адрес возврата функции и вызываем ошибку в обработке данных • После нештатного завершения работы функции управление передается на шелл-код, который, используя «полезную нагрузку», выполняет зловредные действия 15
  • 16. x02. ПРАКТИКА СОВРЕМЕННЫХ УЯЗВИМОСТЕЙ 16
  • 17. ПРОТИВОСТОЯНИЕ • Создаются средства контроля памяти • Обновляются библиотеки стандартных функций • Для защиты от атак переполнения буфера в Windows реализованы технологии DEP и ASLR 17
  • 18. DEP • DEP (Data Execution Prevention) – страницы памяти помечаются как «исполнимые» и «неисполнимые» • Эксплойт может писать только в неисполнимую часть, следовательно шелл-код, лежащий в области данных, не запустится 18
  • 19. ROP • ROP (Return-oriented programming) – техника использования частей уже имеющихся в памяти функций для реализации вредоносного кода • Устанавливаем адреса нужных функций библиотек, которые уже находятся в памяти при открытии зараженного файла • Нет необходимости использовать функции целиком, достаточно использовать их части • Нужные нам куски функций называются “gadget” • Например: VirtualAlloc 0x7c809ae1 [ kernel32.dll] SetProcessDEPPolic 0x7C8622A4 [ kernel32.dll] … 19
  • 21. ROP-chain • Перейдя на адрес гаджета, мы можем выполнить нужную нам функцию с заданными параметрами • В конце работы гаджет должен передать управление на адрес следующего гаджета • И так по цепочке (ROP-chain) из гаджетов, взятых в сторонних библиотеках, реализуется функциональность, необходимая для запуска шелл- кода • Существуют средства автоматической генерации ROP-chain, например, в пакете Metasploit 21
  • 22. ASLR • ASLR (Address Space Layout Randomization) – обеспечивает случайное расположение библиотек и их функций в памяти • Заранее невозможно зашить адрес нужных гаджетов в памяти 22
  • 23. ASLR-bypass • Встречаются приложения, собираемые без поддержки технологии ASLR, их функции можно использовать для обхода DEP. Например, msvcr71.dll в версии 1.6 JRE и другие «частные случаи» • «Brute force» возможных адресов размещения библиотек • С помощью переполнения буфера записываются сигнатуры, затем ищется необходимая страница в памяти и вычисляется относительный адрес библиотеки в памяти • В общем случае задача обхода ASLR не решается! 23
  • 24. x03. КАК ВЫГЛЯДЯТ ЭКПЛОЙТЫ? 24
  • 25. HTML • Размещаются на сайтах и эксплуатируют уязвимости веб- браузеров Реальная атака с использованием CVE-2010-0806 25
  • 27. PDF • Пересылается по почте для «целевых атак» • Обычно содержит в себе вредоносный JavaScript или встроенный объект, некорректно обрабатываемый Acrobat Reader • Основная причина обилия уязвимостей – реализация Adobe собственного менеджера памяти 27
  • 28. PDF • JavaScript часто используется для записи шелл-кода в память, а не для экплойта 28
  • 29. SWF • Используются для атак на веб-браузеры и программы, поддерживающие встраивание SWF-объектов • Чаще всего базируется на функциях ActionScript, вызывающих обработку сторонних объектов (картинки, видео) 29
  • 31. x04. КАК СТАТЬ НАСТОЯЩИМ ХАКЕРОМ? 31
  • 32. ВРЕДОНОС СВОИМИ РУКАМИ • Ставим Metasploit • Создаем зараженный файл, например, adobe_cool_type (CVE-2010-2883) • Добавляем стандартную боевую нагрузку (payload), например, удаленный доступ к машине • Пересылаем другу под видом признания в любви • Ты – настоящий хакер! 32
  • 33. НЕ ПОЛУЧИЛОСЬ? • Есть три основные причины: 1. Ваши друзья не верят в настоящую любовь 2. Антивирусы обнаруживают эксплойты в зараженных файлах 3. Софт обновляется, уязвимости устраняются 33
  • 34. ЧТО ДЕЛАТЬ? 1. Ваши друзья не верят в настоящую любовь • Пробовать альтернативные методы «социальной инженерии» • Использовать самозапускающиеся эксплойты • Использовать «тихие» эксплойты, после запуска которых программа продолжает работать 34
  • 35. ЧТО ДЕЛАТЬ? 2. Антивирусы обнаруживают эксплойты в зараженных файлах • Обфускация кода • Встроенные интерпретаторы • Усложнения потока управления • Динамический анализатор памяти • … 35
  • 36. ЧТО ДЕЛАТЬ? 3. Уязвимости устраняются • Использовать «связки» эксплойтов для разных версий софта • Искать собственные 0day! Чем мы и займемся на следующих занятиях 36