"86% всех сайтов имеют хотя бы одну серьезную уязвимость" WhiteHat Security
Уязвимости приложений относящиеся к управлению сессиями занимают 2ое место в десятке самых распространенных уязвимостей. Уязвимые к атаке сессии позволяют злоумышленнику перехватить сессию пользователя, получить его логин-пароль , тем самым полностью завладеть данными пользователя в веб-приложении. •рассмотрим, как вообще устроена сессия в веб-приложении
•на живых примерах изучим распространенные в уязвимости веб-сессий
•разберем рекоммендации по устранению данных уязвимостей
•рассмотрим несколько инструменты необходимых при тестировании безопасности веб-сессий
Будут рассмотрены следующие уязвимости: Session Fixation, Session Hijacking, Cross-Site Request Forgery.
Данный доклад позволит вам не только ознакомиться с теорией, как тестировать безопасность веб-сессии, но и даст "стартовые" знания для того, чтобы попробовать это тестирование на своем проекте.
3. Что такое веб-сессия?
“HTTP - это протокол без состояний. Сессии решают эту проблему.”
Веб-сессия – это структура данных конкретного пользователя, которую
приложение использует для хранения временных данных, полезных только в
течение того времени, которое пользователь взаимодействует с приложением.
Атрибуты сессии:
• ID сессии
Например: PHPSESSID=a2pdlk7jreml0u1m3bccd12551;
• Время действия (Expiry date)
Например: EXPIRES 18.03.2014 16:52:22
11/4/2014 / 3
4. Передача ID сессии
11/4/2014 / 4
• http://www.example.com/index.php?PHPSESSID=a2pdlk7jre
ml0u1m3bccd12551
• http://www.example.com/s(lit3py55t21z5v55vlm
25s55)/orderform.aspx
В URL адресе
• Session-token: SID=lit3py55t21z5v55vlm25s55
• Cookies: PHPSESSID=a2pdlk7jreml0u13bccd12551
В поле
заголовка
запроса (header)
• Login=Username&password=Password&
SessionID=12345678
В теле POST
запроса
5. Хранение ID сессии
11/4/2014 / 5
В cookies
браузера
Скрытое поле
(HTML код)
• ID сессии может храниться в исходном коде самого
приложения на клиентской стороне во время работы
пользователя с приложением.
В самом
приложении
<form method="post" action="url">
<input type="hidden" name="sessionid" value="1111">
...
<input type="submit">
</form>
6. Когда тестировать сессии?
Приложение с веб доступом
Приложение используется большим количеством
пользователей (внутренних и/или внешних)
Приложение содержит важные персональные данные
пользователей
Пользователи в приложении имеет разные уровни доступа
Приложение интегрируется с системой, которая содержит
критические данные
11/4/2014 / 6
10. Session Hijacking. Контрмеры
• Завершение сеанса (logout) и закрытие браузера должны закрывать
сессию.
• Дополнительный токен: отпечаток браузера (хэшированный User-agent)
или другой уникальный токен
• Дополнительный токен должен передаваться другим способом, чем ID
сессии.
• Запретить одновременную работу под одной сессией с нескольких
агентов
• Шифрование данных передаваемых по сети (https протокол).
• Генерировать ID сессий сложно предсказуемыми
11/4/2014/ 10
12. Session Fixation
Вместо того, чтобы воровать ID сессии
пользователя, злоумышленник может
зафиксировать ID сессии известный
ему и передать его пользователю.
Этот тип атаки называется
фиксирование сессии.
11/4/2014/ 12
Инструменты для
перехвата запросов:
• OWASP WebScarab
• Fiddler
14. Session Fixation. Контрмеры
• Присваивать новый ID сессии после авторизации
• Проверять дополнительные параметры при авторизации пользователя,
например IP или User-Agent
• Реализовать в приложении механизм Анти-фиксации сессии
• Запретить одновременную работу под одной сессией с нескольких
агентов
• Запрашивать авторизацию при изменении уровня доступа
пользователя
11/4/2014/ 14
16. Cross-Site Request Forgery
Подделка межсайтовых
запросов (Cross-Site
Request Forgery) занимает
8ое место среди TOP-10
уязвимостей по версии
Open Web-Application
Security Project (OWASP).
Атака является успешной,
если жертва авторизована в
приложении.
11/4/2014/ 16
17. CSRF. Примеры
11/4/2014/ 17
Добавление видео в watch-later список
https://player.vimeo.com/watch_later/ID?callback=cb&
status=1
Выставлять рейтинги фильмам
http://www.kinopoisk.ru/vote.php?film=FILM_ID&film_
vote=VOTE_VALUE
Удаление презентации через GET запрос
http://www.slideshare.net/main/delete/PRESENTATION
ID?ajax=false&redirect=mypage
Добавлять дополнительный e-mail в Facebook
document.submit('<form method="post" action= "http://m.face-
book.com/a/settings.php?refid=31&__ajax__&__m_async_page_
_"> <input type="hidden" name="email"
value="test@example.com"/></form>')
18. CSRF. Контрмеры
Разработчикам:
• Использовать анти-CSRF токен
• Хранить и передавать анти-CSRF токен другим способом, чем ID
сессии (скрытое поле формы, в теле POST запроса)
11/4/2014/ 18
POST
https://www.facebook.com:443/ajax/timeline/nav_dropdown_menu/?profileid=100001537070731
HTTP/1.1
Host: www.facebook.com
…
Cookie: datr=xL8hU29G1O2TCE2-E90mpjIO; lu=SgppRetPNnE8PasL9k-pF62A;
fr=0adgb9NSy3JmTXAGc.AWWijC40TCnAprMHFxmeUZIW1DA.BTIb_Q.EK.FMh.AWUHMOUT;
locale=en_US; c_user=100001537070731;
__user=100001537070731&__dyn=7n8a9EAMCBCFUSt2ugByVbGAFpaGEVF4WpUpBw&fb_dtsg=AQDr
RHrN&ttstamp=2658168114827211478&__rev=1162685
19. CSRF. Контрмеры (cont.)
Разработчикам:
• Передавать команды (actions) и параметры для них через POST
запрос, вместо GET запроса.
• Запрашивать дополнительную авторизацию / подтверждение или
использовать CAPTCHA при выполнении важных действий.
11/4/2014/ 19
Confluence Wiki
http://wiki.itera.no/pages/
removepage.action?page
Id=41779352
20. CSRF. Контрмеры (cont.)
Пользователям:
• Выходить из системы (logout) после
окончания работы
• Не разрешать браузеру сохранять
логин/пароль (функция «remember me»)
• Не использовать один и тот же браузер для
доступа к рабочей системе и личным сайтам
11/4/2014/ 20