Вводная лекция. О том, что такое эксплойты, как уязвимости в программах используются для распространения вирусов, о черных, белых и серых «шляпах» и о других хакерских темах.
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”
15. К ЧЕМУ ПРИВОДЯТ ОШИБКИ
• Записываем в память шелл-код и другую
«полезную нагрузку»
• Переписываем адрес возврата функции и
вызываем ошибку в обработке данных
• После нештатного завершения работы функции
управление передается на шелл-код, который,
используя «полезную нагрузку», выполняет
зловредные действия
15
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
27. PDF
• Пересылается по почте для «целевых атак»
• Обычно содержит в себе вредоносный JavaScript
или встроенный объект, некорректно
обрабатываемый Acrobat Reader
• Основная причина обилия уязвимостей –
реализация Adobe собственного менеджера
памяти
27
28. PDF
• JavaScript часто используется для записи шелл-кода
в память, а не для экплойта
28
29. SWF
• Используются для атак на веб-браузеры и программы,
поддерживающие встраивание SWF-объектов
• Чаще всего базируется на функциях ActionScript, вызывающих
обработку сторонних объектов (картинки, видео)
29
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