Эксклюзивно для codeby.net продолжаю публиковать перевод ресерчей по книге 2021 года от Brandon Wieser The Hackers Codex: Modern Web Application Attacks Demystified.
В этой главе восточно-европейский хакер Юрий и его юный подаван Газманов перейдут от теории к практике и проэксплуатируют CSRF уязвимость через clickjacking.
CSRF Bypass - Clickjacking Drag and Drop
Напомню, кликджекинг (clickjacking) - это атака, которая является формой изменения пользовательского интерфейса (UI). Clickjacking-атака — это попытка через изменение пользовательского интерфейса жертвы, обычно с использованием HTML тега <iframe>, заставить пользователя выполнить запрос на изменение данных. На вредоносном сайте злоумышленник, используя iframe, внедряет в уязвимое веб-приложение другой HTML-документ, содержащий форму для изменения данных. Используя CSS и другие приемы со стилями отображения (напр. увеличивая прозрачность), злоумышленник делает встроенную через iframe форму изменения данных невидимой, и таким образом отображается страница сайта злоумышленника, перекрытая невидимой формой. Когда жертва заходит на сайт злоумышленника и кликает где-нибудь кнопкой мыши, то взаимодействуя с уязвимым веб-сайтом она фактически выполняет действие по изменению данных, сама того не осознавая (кто из нас не пытался «пропустить рекламу», тем самым открывая все новые и новые страницы). А если у жертвы будет еще и валидный cookie тогда браузер также перешлет эти cookie вместе с любыми токенами CSRF, заголовками авторизации и т. д.
Чтобы продемонстрировать возможные последствия кликджекинга, давайте вернемся к Юрию. Юрий быстро стал высокопоставленным членом кибербанды и становится senior по вопросам безопасности веб-приложений. По этой причине к нему за помощью приходит junior по фамилии Газманов.
Газманов успешно провел атаку по подбору учетных данных, используя список имен пользователей и паролей из недавно полученного дампа учетных данных. У него есть несколько взломанных учетных записей электронной почты, которые не имеют двухфакторной аутентификации. Один из этих аккаунтов представляет особый интерес, потому что похоже, что он принадлежит веб-разработчику конфиденциального приложения. На основе электронных писем, которые он прочел во входящих, он видит, что разработчик использует сторонний продукт, который позволяет нескольким членам команды делиться, писать, и развертывать код через свои браузеры.
Домашняя страница популярного сервиса обмена кодом
Если Газманов сможет в этом приложении получить доступ к аккаунту или добавить себя в команду, то он сможет получить имена пользователей, хеши паролей и информацию о клиенте, используемые программным обеспечением. Кроме того, появится возможность установить бэкдор в, выпущенное в продакшн (не знаю, как это по-русски), программное обеспечение.
Единственная проблема заключается в том, что разработчик использует пароль, отличный от его текущего пароля учетной записи электронной почты. Газманов не хочет принудительно сбрасывать пароль, т.к. в этом случае разработчик может получить текстовое сообщение или уведомление другого типа. Кроме того, даже если бы бандиты смогли перехватить запрос на смену пароля и удалить его после смены пароля (если бы он был отправлен на электронную почту, например) пароль все равно будет изменен на неизвестный разработчику. Т.е. разработчик поймет, что что-то не так, когда в следующий раз попытается войти в свою учетную запись, и его пароль не сработает.
Газманов просит Юрия взглянуть на приложение, прежде чем он попытается либо выполнить фишинг учетной записи с помощью поддельного запроса на сброс пароля, либо сам выполнит законный сброс пароля и сменит пароль. Юрий настраивает BurpSuite и создает в тестируемом приложении бесплатную учетную запись. В Burp’е он пытается добавить случайного члена в команду разработчиков приложений и перехватывает следующий запрос:
Перехваченный POST запрос на добавление нового члена в команду
Как показано выше, токен заголовка Authorization используется для предотвращения CSRF атаки. Кроме того, во вкладке "Target issues" отображается информация полученная пассивным сканером BurpSuite об обнаружении уязвимости "информационного" уровня - «Ответ (response) содержащий frame (потенциальный кликджекинг)». Юрий сразу видит потенциальное решение проблемы Газманова. Если он сможет обманом заставить разработчика посетить страницу, контролируемую злоумышленником, то они смогут заставить разработчика добавить аккаунт Газманова в команду.
Скриншот с добавлением члена команды в приложение
Как только Газманова добавят в команду, он сможет быстро скачать пароль, хеши, имена пользователей и данные о клиентах, а также загрузить бекдор. После этого он сможет удалить себя и деактивировать учетную запись.
Эта стратегия имеет следующие преимущества:
Описание PoC:
Для добавления пользователя разработчику необходимо нажать кнопку «Add», ввести имя пользователя и щелкнуть один раз, чтобы выбрать его.
Первый и второй клики, записанные в «Clickbandit», можно увидеть на изображении ниже:
1 атака Click Bandit PoC
2 атака Click Bandit PoC
Последний этап
Первая атака кликджекингом осуществляется для нажатия перекрытой кнопки «Add». Вторая атака имитирует клик по выпадающему списку - кликает на то место, где находится имя пользователя в раскрывающемся меню после того, как жертва напишет имя для добавления в строке поиска.
Юрию нужно изменить PoC «Clickbandit», чтобы автоматически заполнять строку поиска с именем пользователя Газманова между этапами 1 и 2 кликджекинга. Этого можно добиться, используя HTML-тег «div» с обработчиком событий «ondragstart», который использует метод event.dataTransfer.setData (), атрибут «draggable» установлен на «true», а элемент стиля позиции установлен на relative, в то время как z-index установлен на top.
Хотя это может показаться сложным, приведенный ниже фрагмент кода демонстрирует необходимое:
Когда жертва перетаскивает div на строку поиска в iframe, текст будет перемещен. Потенциальный способ убедить жертву сделать это – создать поддельную регистрационную форму и поддельную «капчу», требующую от жертвы перетаскивания (drag and drop) куска пазла или клика и перемещения ползунка, прежде чем форму можно будет отправлять.
В Google можно найти, например, такой вид
Скелет PoC, объединяющий все основные элементы, может выглядеть так:
Не беспокойтесь о копировании или вводе кода вручную. Приведенный выше код можно легко создать с помощью Clickbandit, создав 2 поля для клика, а затем, добавив перетаскиваемый код «div» в верхнюю часть кода «Clickbandit».
Пока Юрий создавал скелет PoC, Газманов нашел предлог для социальной инженерии. Просматривая электронную почту разработчика, он заметил, что жертве и его команде нравится играть вместе в браузерные игры. Он видит отличную возможность для предлога.
Газманов решает выполнить следующие действия для атаки на разработчика:
В этой главе восточно-европейский хакер Юрий и его юный подаван Газманов перейдут от теории к практике и проэксплуатируют CSRF уязвимость через clickjacking.
- Html Injection
- Host Header Injection
- Username Enumeration – SSN
- Same Origin Policy и Exploiting CORS Misconfigurations
- Origin Reflection Attacks
- CSRF
- CSRF Bypass – Clickjacking Drag and Drop
- Redirection Bugs
- XSS – Cross-Site Scripting
- Identifying XSS Vulnerabilities
- JSONP
- Language-Specific XSS
- SOME Attacks
- CSV Injection
- HTTP Desync
- Web Cache Poisoning
CSRF Bypass - Clickjacking Drag and Drop
Напомню, кликджекинг (clickjacking) - это атака, которая является формой изменения пользовательского интерфейса (UI). Clickjacking-атака — это попытка через изменение пользовательского интерфейса жертвы, обычно с использованием HTML тега <iframe>, заставить пользователя выполнить запрос на изменение данных. На вредоносном сайте злоумышленник, используя iframe, внедряет в уязвимое веб-приложение другой HTML-документ, содержащий форму для изменения данных. Используя CSS и другие приемы со стилями отображения (напр. увеличивая прозрачность), злоумышленник делает встроенную через iframe форму изменения данных невидимой, и таким образом отображается страница сайта злоумышленника, перекрытая невидимой формой. Когда жертва заходит на сайт злоумышленника и кликает где-нибудь кнопкой мыши, то взаимодействуя с уязвимым веб-сайтом она фактически выполняет действие по изменению данных, сама того не осознавая (кто из нас не пытался «пропустить рекламу», тем самым открывая все новые и новые страницы). А если у жертвы будет еще и валидный cookie тогда браузер также перешлет эти cookie вместе с любыми токенами CSRF, заголовками авторизации и т. д.
Чтобы продемонстрировать возможные последствия кликджекинга, давайте вернемся к Юрию. Юрий быстро стал высокопоставленным членом кибербанды и становится senior по вопросам безопасности веб-приложений. По этой причине к нему за помощью приходит junior по фамилии Газманов.
Газманов успешно провел атаку по подбору учетных данных, используя список имен пользователей и паролей из недавно полученного дампа учетных данных. У него есть несколько взломанных учетных записей электронной почты, которые не имеют двухфакторной аутентификации. Один из этих аккаунтов представляет особый интерес, потому что похоже, что он принадлежит веб-разработчику конфиденциального приложения. На основе электронных писем, которые он прочел во входящих, он видит, что разработчик использует сторонний продукт, который позволяет нескольким членам команды делиться, писать, и развертывать код через свои браузеры.
Домашняя страница популярного сервиса обмена кодом
Если Газманов сможет в этом приложении получить доступ к аккаунту или добавить себя в команду, то он сможет получить имена пользователей, хеши паролей и информацию о клиенте, используемые программным обеспечением. Кроме того, появится возможность установить бэкдор в, выпущенное в продакшн (не знаю, как это по-русски), программное обеспечение.
Единственная проблема заключается в том, что разработчик использует пароль, отличный от его текущего пароля учетной записи электронной почты. Газманов не хочет принудительно сбрасывать пароль, т.к. в этом случае разработчик может получить текстовое сообщение или уведомление другого типа. Кроме того, даже если бы бандиты смогли перехватить запрос на смену пароля и удалить его после смены пароля (если бы он был отправлен на электронную почту, например) пароль все равно будет изменен на неизвестный разработчику. Т.е. разработчик поймет, что что-то не так, когда в следующий раз попытается войти в свою учетную запись, и его пароль не сработает.
Газманов просит Юрия взглянуть на приложение, прежде чем он попытается либо выполнить фишинг учетной записи с помощью поддельного запроса на сброс пароля, либо сам выполнит законный сброс пароля и сменит пароль. Юрий настраивает BurpSuite и создает в тестируемом приложении бесплатную учетную запись. В Burp’е он пытается добавить случайного члена в команду разработчиков приложений и перехватывает следующий запрос:
Перехваченный POST запрос на добавление нового члена в команду
Как показано выше, токен заголовка Authorization используется для предотвращения CSRF атаки. Кроме того, во вкладке "Target issues" отображается информация полученная пассивным сканером BurpSuite об обнаружении уязвимости "информационного" уровня - «Ответ (response) содержащий frame (потенциальный кликджекинг)». Юрий сразу видит потенциальное решение проблемы Газманова. Если он сможет обманом заставить разработчика посетить страницу, контролируемую злоумышленником, то они смогут заставить разработчика добавить аккаунт Газманова в команду.
Скриншот с добавлением члена команды в приложение
Как только Газманова добавят в команду, он сможет быстро скачать пароль, хеши, имена пользователей и данные о клиентах, а также загрузить бекдор. После этого он сможет удалить себя и деактивировать учетную запись.
Эта стратегия имеет следующие преимущества:
- Снижение вероятности того, что разработчик узнает о том, что он является жертвой атаки, потому что можно использовать любой предлог социальной инженерии.
- С меньшей вероятностью разработчик узнает, на какое приложение сейчас нацелены атакующие, т.к. под предлогом социальной инженерии нет необходимости использовать уязвимое приложение. Вредоносный сайт может использовать любые предлоги, чтобы авторизованный разработчик перешел на сайт и повзаимодействовал с ним.
- Поскольку можно использовать любой предлог, разработчик может подвергнуться нападению неоднократно. Если одна из схем не сработает, злоумышленники могут зарегистрировать новый домен и испытать новый предлог для убеждения разработчика посетить сайт.
- У жертвы может быть включена двухфакторная аутентификация аккаунта. Злоупотребляя уязвимостью кликджекинга, чтобы добавить Газманова в команду, любая потенциальная двухфакторная аутентификация игнорируется.
Описание PoC:
Для добавления пользователя разработчику необходимо нажать кнопку «Add», ввести имя пользователя и щелкнуть один раз, чтобы выбрать его.
Первый и второй клики, записанные в «Clickbandit», можно увидеть на изображении ниже:
1 атака Click Bandit PoC
2 атака Click Bandit PoC
Последний этап
Первая атака кликджекингом осуществляется для нажатия перекрытой кнопки «Add». Вторая атака имитирует клик по выпадающему списку - кликает на то место, где находится имя пользователя в раскрывающемся меню после того, как жертва напишет имя для добавления в строке поиска.
Юрию нужно изменить PoC «Clickbandit», чтобы автоматически заполнять строку поиска с именем пользователя Газманова между этапами 1 и 2 кликджекинга. Этого можно добиться, используя HTML-тег «div» с обработчиком событий «ondragstart», который использует метод event.dataTransfer.setData (), атрибут «draggable» установлен на «true», а элемент стиля позиции установлен на relative, в то время как z-index установлен на top.
Хотя это может показаться сложным, приведенный ниже фрагмент кода демонстрирует необходимое:
HTML:
<div id="payload" draggable="true"
ondragstart="event.dataTransfer.setData('text/plain',
‘Bezmaneovs_Username')" style="position: relative;z-index: 1000000">
<h3>DRAG ME OVER THE SEARCH BOXES AFTER CLICKING
THE RED RECTANGLE</h3></div>
Когда жертва перетаскивает div на строку поиска в iframe, текст будет перемещен. Потенциальный способ убедить жертву сделать это – создать поддельную регистрационную форму и поддельную «капчу», требующую от жертвы перетаскивания (drag and drop) куска пазла или клика и перемещения ползунка, прежде чем форму можно будет отправлять.
В Google можно найти, например, такой вид
Ссылка скрыта от гостей
.Скелет PoC, объединяющий все основные элементы, может выглядеть так:
Не беспокойтесь о копировании или вводе кода вручную. Приведенный выше код можно легко создать с помощью Clickbandit, создав 2 поля для клика, а затем, добавив перетаскиваемый код «div» в верхнюю часть кода «Clickbandit».
Пока Юрий создавал скелет PoC, Газманов нашел предлог для социальной инженерии. Просматривая электронную почту разработчика, он заметил, что жертве и его команде нравится играть вместе в браузерные игры. Он видит отличную возможность для предлога.
Газманов решает выполнить следующие действия для атаки на разработчика:
- Придумать название фальшивой браузерной игры.
- Заплатить художнику на бирже фриланса за дизайн изображения страницы регистрации игры.
- Купить доменное имя и создать поддельную регистрационную форму, содержащую два текстовых поля. Одно для имени пользователя и одно для пароля.
- Создать поддельную перетаскиваемую капчу, которую необходимо перетащить перед отправкой формы.
- Наложить текстовые поля имени пользователя и пароля на кликджекинг-PoC, созданный в «Clickbandit», а затем наложить перетаскиваемый div с поддельной капчей.
- Отправить поддельное электронное письмо, якобы отправленное одним из участников команды разработчиков с просьбой поиграть в игру, которую он недавно нашел, с приложением ссылки на страницу атаки с использованием кликджекинга.
- Следить за веб-журналами своего веб-сервера, на выполнение GET-запроса на страницу кликджекинга (фальшивая браузерная игра размещена на VPS банды).
- После того, как кто-то отправит на страницу GET-запрос, проверить приложение, чтобы узнать, добавлен ли его аккаунт в команду разработки проект.