Перехват сессий |
23.05.2019 00:00 |
Автор: Кристин Джеквони (Kristin Jackvony) Все мы знаем, что перехват сессии – это очень плохо, и от него надо защищать себя и свои приложения. Однако удобопонятную информацию о том, что это такое и как это тестировать, найти трудно. В этой статье я опишу различные виды перехвата сессий, а затем дам пошаговую инструкцию, как тестировать на эту уязвимость, используя OWASP Juice Shop и Burp Suite. Перехват сессий – это ситуация, когда злоумышленник получает доступ к авторизационной информации и использует ее, чтобы представиться другим пользователем или получить доступ к информации, которого быть не должно. Перехват бывает разных видов: Предсказуемый токен сессии. Это происходит, когда токен доступа генерируется приложением согласно определенному шаблону. К примеру, если токен авторизации первого пользователя был "APP123", а следующего – "APP124", злоумышленник может предположить, что следующим токеном будет "APP125". Это довольно очевидная уязвимость, и существует множество инструментов, генерирующих случайные последовательности для токенов, поэтому это малораспространенная атака. Отслеживание сессии. Это происходит, когда злоумышленник находит способ исследовать веб-трафик, отправляемый от пользователя к серверу и обратно, и копирует токен для личного использования. Это пассивная атака – злоумышленник не вмешивается в работу приложения или в его запросы. Атака с клиентской стороны. В этом случае злоумышленник использует XSS, чтобы заставить приложение показать пользовательский токен. Затем он копируется и используется. Атака через посредника. Похожа на отслеживание сессии – злоумышленник получает доступ к трафику. Однако это активная атака – он использует инструменты вроде Burp Suite или Fiddler, чтобы перехватить запрос и изменить его для своих нужд. Атака "Человек в браузере". Злоумышленнику удается внедрить свой код на компьютер пользователя. Этот код будет передавать ему всю информацию из запросов. Теперь попробуем протестировать на перехват сессии, используя атаку через посредника. Но прежде чем мы начнем, важно отметить, что мы будем перехватывать запросы на том же компьютере, на котором мы их создаем. В реальном мире злоумышленник будет использовать инструмент слежения за пакетами, чтобы получить доступ к запросам, отправляемым другим человеком с другого компьютера. Инструкции будут для Firefox. Я обычно работаю и пишу статьи в Chrome, поэтому использую другой браузер для перехвата запросов. Однако Burp Suite будет работать и с Chrome, и с Internet Explorer. Во-первых, нужно загрузить и установить Burp Suite. Можно воспользоваться бесплатной версией – Community Edition. Не запускайте его пока. Теперь настроим прокси в Firefox. Кликните по меню-гамбургеру (кнопка с тремя горизонтальными полосками) в верхнем правом углу браузера. Выберите "Настройки" и промотайте страницу вниз, а там нажмите "Настроить…". Выберите ручную настройку прокси и введите 127.0.0.1 в поле "HTTP прокси", а в поле "Порт" – 8080. Отметьте чекбокс "Использовать этот прокси-сервер для всех протоколов". Если в окне "не использовать прокси для" что-то есть, удалите это. Затем нажмите "ОК". Теперь стартуем Burp Suite. Нажмите "Next", а затем – "Start Burp". Затем мы установим сертификат, который разрешит Firefox доступ к перехвату запросов. Перейдите на http://burp в Firefox. Вы увидите страницу с надписью "Burp Suite Community Edition". Нажмите на ссылку в правом верхнем углу – "CA Certificate". Появится всплывающее окно – выберите "Сохранить файл." Сертификат будет скачан – возможно, в папку "Загрузки". Снова нажмите на меню-гамбургер, и выберите "Настройки". В левой части меню выберите "Приватность и защита". Проскролльте страницу в самый низ и нажмите кнопку "Просмотр сертификатов". Появится всплывающее окно со списком сертификатов. Нажмите на кнопку "Импорт", перейдите в папку загрузок, выберите скачанный сертификат, и нажмите кнопку "Открыть". Появится всплывающее окно – поставьте чекбокс "Доверять этому сертификату для идентификации веб-сайтов", а затем нажмите "ОК". Теперь сертификат установлен. Перезапустите Firefox, чтобы убедиться, что новые настройки применены. Возвращаемся в Burp Suite. Выключите функцию перехвата – мы делаем это, чтобы не начинать перехватывать веб-запросы, пока все не будет готово. Для того, чтобы выключить ее, нажмите на вкладку Proxy в верхнем ряду вкладок, а затем – на вкладку Intercept во втором ряду, и выключите кнопку "Intercept is on". Теперь на ней должно быть написано "Intercept is off". Перейдите в Juice Shop и создайте аккаунт. Как только он будет создан, вам предложат авторизоваться. Перед тем, как это сделать, перейдите в Burp Suite и снова включите функцию перехвата, используя кнопку "Intercept is off". Теперь, когда Burp Suite готов перехватывать ваши запросы, авторизуйтесь в Juice Shop. В браузере ничего не произойдет – ваш запрос отправился в Burp Suite. Перейдите туда и нажмите на кнопку Forward – это перенаправит перехваченный запрос на сервер. Продолжайте нажимать на кнопку Forward, пока страница поиска в Juice Shop не загрузится полностью. В Burp Suite нажмите на вкладку HTTP History во втором ряду вкладок. Вы увидите все HTTP-запросы, которые были сделаны, когда грузилась страница поиска. Проскролльте вниз до POST-запроса с эндпойнтом /rest/user/login. Нажмите на этот запрос. В нижней панели Burp Suite вы увидите детали вашего запроса. Обратите внимание, что ваш логин и пароль передаются в открытом виде! Это означает, что если кто-то перехватит ваш логин, он получит доступ к вашим учетным данным и сможет авторизоваться под вашей учеткой в любой момент. Затем вернитесь в Juice Shop и нажмите на иконку корзины для первого сока в списке, чтобы добавить его в корзину. Перейдите в Burp Suite и нажмите на вкладку Intercept, а затем – на кнопку Forward, чтобы перенаправить запрос. Продолжайте нажимать эту кнопку, пока запросы не закончатся. Вернитесь на вкладку HTTP History в Burp Suite и проскролльте список запросов вниз, пока не увидите POST-запрос с эндпойнтом api/BasketItems. Кликните по нему правой кнопкой и выберите "Send to Repeater". Это отправит запрос в модуль Repeater, где им можно манипулировать и отправлять его повторно. Вернитесь на вкладку Intercept и выключите перехват. Нажмите на вкладку Repeater в верхнем ряду вкладок. Запрос, который мы перехватили, добавляя сок в корзину, находится там. Давайте попробуем отправить его заново, нажав на кнопку "Go". На правой панели страницы мы получим ответ 400 с сообщением, что ID продукта должен быть уникальным. Давайте вернемся к запросу в левой панели. Тут можно увидеть тело запроса: {"ProductId":1,"BasketId":"16" (этот номер варьируется и зависит от ID вашей корзины),"quantity":1}. Давайте изменим ProductId с 1 на 2 и снова отправим запрос кнопкой "Go". Мы увидим, что запрос прошел успешно. Давайте вернемся в Juice Shop и посмотрим, удалось ли нам на самом деле добавить товар в корзину через отправку запроса в Burp Suite. Нажмите на корзину. Вы должны увидеть там два сока. Это означает, что если кто-то перехватит ваш запрос, то он сможет манипулировать вашей корзиной, добавляя туда что угодно. Как еще можно манипулировать запросом? Вернитесь на вкладку Repeater в Burp Suite. Перехваченный запрос все еще там. Давайте поменяем BasketId на что-нибудь другое, например, на 1. Нажмите на Go, чтобы отправить запрос заново. Он пройдет успешно – мы только что добавили сок в чужую корзину! Итак, мы убедились, что если злоумышленник может перехватить запрос на добавление товара в корзину, он сможет манипулировать им множеством способов для добавления нежелательных товаров в корзины любых пользователей. Он сможет сделать это, потому что у перехваченного запроса достаточно авторизационной информации. Настраивая Burp Suite для перехвата запросов в вашем приложении, вы сможете тестировать на предмет уязвимостей перехвата сессий. |