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

36

Upload: solertia

Post on 20-Jul-2015

158 views

Category:

Technology


3 download

TRANSCRIPT

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

КТО МЫ?

• ФГАНУ НИИ «Спецвузавтоматика»

Научно-исследовательский институт, работающий в сфере информационной безопасности

• «Солерция» — наш студенческий проект, в котором мы передаем свои знания и опыт, пытаясь заинтересовать будущих специалистов близкими к нам тематиками

• Наша цель: помощь студентам в профориентации в интересных IT-специальностях

2

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

ОРГ. ВОПРОСЫЦель – популяризация практической информационной

безопасности

Что планируется:• Лекции и доклады приглашенных специалистов ИБ и

участников• Семинарские практические занятия и домашняя

работа• Поощрения для участников• Разработка и оформление индивидуальных проектов

3

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

ИНДИВИДУАЛЬНЫЕ ПРОЕКТЫ

•Будем кодить фаззер

•Поищем 0day экплойты

•Съездим на PHDays или другую хорошую конференцию

•Опубликуем результаты

•Результаты можно будет использовать для дипломных проектов

•Особо отличившихся возьмем к себе в команду

4

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

x00.ВВЕДЕНИЕ5

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

УК РФ

•Статья 272. Неправомерный доступ к компьютерной информации

Наказывается лишением свободы на срок до пяти лет

•Статья 273. Создание, использование и распространение вредоносных программ

Наказывается лишением свободы на срок от трех до семи лет

6

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

HATS•White Hats – специалисты в информационной

безопасности, осуществляющие санкционированные тестирования на проникновение защищенных систем•Black Hats – хакеры, использующие уязвимости

программ в незаконных целях•Gra(e)y Hats – независимые специалисты, ищущие

дыры в информационной безопасности и публикующие информацию о найденных уязвимостях

7

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

ТЕРМИНОЛОГИЯ• Зараженный файл – файл обычного формата, внутри

которого лежит сплойт• Эксплойт – вредоносный код, активирующий уязвимость в

программе• Уязвимость – ошибка в программе, приводящая к

некорректной обработке входных данных• SHELL – оболочка для загрузки основной функциональности

• Мы будем рассматривать только локальные, файловые эксплойты, используемые злоумышленниками для атак на персональные компьютеры

8

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

x01. ПРИЧИНЫ ВОЗНИКНОВЕНИЯ

УЯЗВИМОСТЕЙ9

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

ОШИБКИ В ПРОГРАММНОМ КОДЕ

•Уязвимости «Переполнение буфера»

•Возникают при неосторожном использовании функций работы с памятью: strcpy, memcpy, strncat….

•Пример

char dst[10];

char src[1000];

strcpy_s (dst, 1000, src);

10

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

ОШИБКИ В ПРОГРАММНОМ КОДЕ

•Уязвимости «форматной строки»

•Использование функций: fprintf, fscanf,printf с неверными параметрами

•Без должной обработки приводят к возникновению переполнения буфера

•Ошибки целочисленных вычислений возникают при отсутствии проверки на попадание в диапазон значений

11

Page 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 1\n");

• printf("\nx is 0\n\n");

• }12

Page 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 “ABCD\x49\x84\x04\x08”

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

14

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

К ЧЕМУ ПРИВОДЯТ ОШИБКИ

• Записываем в память шелл-код и другую «полезную нагрузку»

•Переписываем адрес возврата функции и вызываем ошибку в обработке данных

•После нештатного завершения работы функции управление передается на шелл-код, который, используя «полезную нагрузку», выполняет зловредные действия

15

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

x02. ПРАКТИКА СОВРЕМЕННЫХ

УЯЗВИМОСТЕЙ16

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

ПРОТИВОСТОЯНИЕ

•Создаются средства контроля памяти

•Обновляются библиотеки стандартных функций

•Для защиты от атак переполнения буфера в Windows реализованы технологии DEP и ASLR

17

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

DEP

•DEP (Data Execution Prevention) – страницы памяти помечаются как «исполнимые» и «неисполнимые»

•Эксплойт может писать только в неисполнимую часть, следовательно шелл-код, лежащий в области данных, не запустится

18

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

ROP

• ROP (Return-oriented programming) – техника использования частей уже имеющихся в памяти функций для реализации вредоносного кода

• Устанавливаем адреса нужных функций библиотек, которые уже находятся в памяти при открытии зараженного файла

• Нет необходимости использовать функции целиком, достаточно использовать их части

• Нужные нам куски функций называются “gadget”• Например:

VirtualAlloc 0x7c809ae1 [ kernel32.dll]SetProcessDEPPolic 0x7C8622A4 [ kernel32.dll]

19

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

ROP-chain

20

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

ROP-chain

• Перейдя на адрес гаджета, мы можем выполнить нужную нам функцию с заданными параметрами• В конце работы гаджет должен передать управление

на адрес следующего гаджета• И так по цепочке (ROP-chain) из гаджетов, взятых в

сторонних библиотеках, реализуется функциональность, необходимая для запуска шелл-кода

• Существуют средства автоматической генерации ROP-chain, например, в пакете Metasploit

21

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

ASLR

•ASLR (Address Space Layout Randomization) –обеспечивает случайное расположение библиотек и их функций в памяти

• Заранее невозможно зашить адрес нужных гаджетов в памяти

22

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

ASLR-bypass

• Встречаются приложения, собираемые без поддержки технологии ASLR, их функции можно использовать для обхода DEP. Например, msvcr71.dll в версии 1.6 JRE и другие «частные случаи»

• «Brute force» возможных адресов размещения библиотек

• С помощью переполнения буфера записываются сигнатуры, затем ищется необходимая страница в памяти и вычисляется относительный адрес библиотеки в памяти

• В общем случае задача обхода ASLR не решается!

23

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

x03. КАК ВЫГЛЯДЯТ ЭКПЛОЙТЫ?24

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

HTML• Размещаются на сайтах и эксплуатируют уязвимости веб-

браузеров

Реальная атака с использованием CVE-2010-0806

25

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

HTML

•Декодированные данные

26

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

PDF

•Пересылается по почте для «целевых атак»

•Обычно содержит в себе вредоносный JavaScript или встроенный объект, некорректно обрабатываемый Acrobat Reader

•Основная причина обилия уязвимостей –реализация Adobe собственного менеджера памяти

27

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

PDF

• JavaScript часто используется для записи шелл-кода в память, а не для экплойта

28

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

SWF

• Используются для атак на веб-браузеры и программы, поддерживающие встраивание SWF-объектов

• Чаще всего базируется на функциях ActionScript, вызывающихобработку сторонних объектов (картинки, видео)

29

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

SWF

30

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

x04. КАК СТАТЬ

НАСТОЯЩИМ ХАКЕРОМ? 31

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

ВРЕДОНОС СВОИМИ РУКАМИ

•Ставим Metasploit

•Создаем зараженный файл, например, adobe_cool_type (CVE-2010-2883)

•Добавляем стандартную боевую нагрузку (payload), например, удаленный доступ к машине

•Пересылаем другу под видом признания в любви

• Ты – настоящий хакер!

32

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

НЕ ПОЛУЧИЛОСЬ?

• Есть три основные причины:

1. Ваши друзья не верят в настоящую любовь

2. Антивирусы обнаруживают эксплойты в зараженных файлах

3. Софт обновляется, уязвимости устраняются

33

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

ЧТО ДЕЛАТЬ?

1. Ваши друзья не верят в настоящую любовь

•Пробовать альтернативные методы «социальной инженерии»•Использовать самозапускающиеся эксплойты•Использовать «тихие» эксплойты, после

запуска которых программа продолжает работать

34

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

ЧТО ДЕЛАТЬ?

2. Антивирусы обнаруживают эксплойты в зараженных файлах

•Обфускация кода•Встроенные интерпретаторы

•Усложнения потока управления•Динамический анализатор памяти

•…

35

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

ЧТО ДЕЛАТЬ?

3. Уязвимости устраняются

•Использовать «связки» эксплойтов для разных версий софта

•Искать собственные 0day!

Чем мы и займемся на следующих занятиях

36