Практика эксплуатации уязвимостей в прикладных...
TRANSCRIPT
КТО МЫ?
• ФГАНУ НИИ «Спецвузавтоматика»
Научно-исследовательский институт, работающий в сфере информационной безопасности
• «Солерция» — наш студенческий проект, в котором мы передаем свои знания и опыт, пытаясь заинтересовать будущих специалистов близкими к нам тематиками
• Наша цель: помощь студентам в профориентации в интересных 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 1\n");
• printf("\nx is 0\n\n");
• }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 “ABCD\x49\x84\x04\x08”
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
•Пересылается по почте для «целевых атак»
•Обычно содержит в себе вредоносный JavaScript или встроенный объект, некорректно обрабатываемый Acrobat Reader
•Основная причина обилия уязвимостей –реализация Adobe собственного менеджера памяти
27
• 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