Clickjacking (исправление пользовательского интерфейса)

Clickjacking (исправление пользовательского интерфейса)

by moiseevrus

Clickjacking (исправление пользовательского интерфейса)

В этом разделе мы объясним, что такое кликджекинг, опишем распространенные примеры атак кликджекинга и обсудим, как защититься от этих атак.

Что такое кликджекинг?

Clickjacking — это атака на основе интерфейса, при которой пользователя обманом заставляют щелкнуть по полезному контенту на скрытом веб-сайте, щелкнув какой-либо другой контент на фиктивном веб-сайте. Рассмотрим следующий пример:

Веб-пользователь заходит на веб-сайт-приманку (возможно, это ссылка, предоставленная по электронной почте) и нажимает кнопку, чтобы выиграть приз. По незнанию они были обмануты злоумышленником, который нажал альтернативную скрытую кнопку, что привело к оплате счета на другом сайте. Это пример атаки кликджекинга. Этот метод зависит от включения невидимой веб-страницы (или нескольких страниц), содержащей кнопку или скрытую ссылку, скажем, внутри iframe. Кадр iframe накладывается поверх предполагаемого содержимого веб-страницы-приманки пользователя. Эта атака отличается от атаки CSRF тем, что от пользователя требуется выполнить действие, такое как нажатие кнопки, тогда как атака CSRF зависит от подделки всего запроса без ведома или ввода пользователя.

 

Защита от CSRF-атак часто обеспечивается за счет использования CSRF-токена : одноразового номера для конкретного сеанса или одноразового номера. Атаки Clickjacking не нейтрализуются токеном CSRF , поскольку целевой сеанс устанавливается с контентом, загруженным с подлинного веб-сайта, и все запросы выполняются в домене. Токены CSRF помещаются в запросы и передаются на сервер как часть обычного сеанса. Отличие от обычного пользовательского сеанса заключается в том, что процесс происходит внутри скрытого iframe.

Как построить базовую атаку кликджекинга

Атаки Clickjacking используют CSS для создания слоев и управления ими. Злоумышленник включает целевой веб-сайт в виде слоя iframe, наложенного на веб-сайт-приманку. Пример использования тега стиля и параметров выглядит следующим образом:

<head>
<style>
#target_website {
position:relative;
width:128px;
height:128px;
opacity:0.00001;
z-index:2;
}
#decoy_website {
position:absolute;
width:300px;
height:400px;
z-index:1;
}
</style>
</head>
...
<body>
<div id="decoy_website">
...decoy web content here...
</div>
<iframe id="target_website" src="https://vulnerable-website.com">
</iframe>
</body>

iframe целевого веб-сайта размещается в браузере таким образом, чтобы обеспечить точное перекрытие целевого действия с веб-сайтом-приманкой с использованием соответствующих значений ширины и высоты положения. Абсолютные и относительные значения положения используются для того, чтобы целевой веб-сайт точно перекрывал обманку независимо от размера экрана, типа браузера и платформы. Z-индекс определяет порядок размещения слоев iframe и веб-сайта. Значение непрозрачности определяется как 0,0 (или близко к 0,0), чтобы содержимое iframe было прозрачным для пользователя. Защита от кликджекинга в браузере может применять обнаружение прозрачности iframe на основе порогового значения (например, Chrome версии 76 включает это поведение, а Firefox — нет). Злоумышленник выбирает значения непрозрачности таким образом, чтобы желаемый эффект был достигнут без срабатывания защитных действий.

кликбандит

Хотя вы можете вручную создать доказательство концепции кликджекинга, как описано выше, на практике это может быть довольно утомительно и требует много времени. Когда вы тестируете кликджекинг в дикой природе, мы рекомендуем вместо этого использовать инструмент Burp Clickbandit . Это позволяет использовать браузер для выполнения необходимых действий на странице с возможностью создания фреймов, а затем создает HTML-файл, содержащий подходящее наложение кликджекинга. Вы можете использовать это для создания интерактивного доказательства концепции за считанные секунды, не написав ни одной строки HTML или CSS.

Clickjacking с предварительно заполненной формой ввода

Некоторые веб-сайты, требующие заполнения и отправки формы, разрешают предварительное заполнение входных данных формы с использованием параметров GET перед отправкой. Другие веб-сайты могут потребовать текст перед отправкой формы. Поскольку значения GET являются частью URL-адреса, целевой URL-адрес может быть изменен для включения значений по выбору злоумышленника, а прозрачная кнопка «Отправить» накладывается на сайт-приманку, как в базовом примере кликджекинга.

Скрипты разрыва кадров

Атаки Clickjacking возможны всякий раз, когда веб-сайты могут быть подделаны. Таким образом, превентивные методы основаны на ограничении возможности создания фреймов для веб-сайтов. Обычная защита на стороне клиента, реализуемая через веб-браузер, заключается в использовании сценариев прерывания кадров или прерывания кадров. Их можно реализовать с помощью проприетарных надстроек или расширений JavaScript для браузера, таких как NoScript. Сценарии часто разрабатываются таким образом, чтобы они выполняли некоторые или все из следующих действий:

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

Методы блокировки кадров часто зависят от браузера и платформы, и из-за гибкости HTML злоумышленники обычно могут их обойти. Поскольку блокировщики кадров — это JavaScript, настройки безопасности браузера могут помешать их работе, или браузер может даже не поддерживать JavaScript. Эффективный обходной путь злоумышленника против прерывателей кадров — использование sandboxатрибута HTML5 iframe. Когда это установлено со значениями allow-formsили allow-scriptsи allow-top-navigationзначение опущено, сценарий очистки кадров может быть нейтрализован, поскольку iframe не может проверить, является ли это верхним окном:

<iframe id="victim_website" src="https://victim-website.com" sandbox="allow-forms"></iframe>

Оба значения allow-formsи allow-scriptsразрешают указанные действия в iframe, но навигация верхнего уровня отключена. Это запрещает прерывание кадров, но обеспечивает функциональность на целевом сайте.

Сочетание кликджекинга с атакой DOM XSS

До сих пор мы рассматривали кликджекинг как автономную атаку. Исторически кликджекинг использовался для выполнения таких действий, как накрутка лайков на странице Facebook. Однако истинная мощь кликджекинга раскрывается, когда он используется в качестве носителя для другой атаки, такой как атака DOM XSS . Реализация этой комбинированной атаки относительно проста, если предположить, что злоумышленник сначала идентифицировал эксплойт XSS. Затем эксплойт XSS объединяется с целевым URL-адресом iframe, так что пользователь нажимает кнопку или ссылку и, следовательно, выполняет атаку DOM XSS.

Многошаговый кликджекинг

Злоумышленник, манипулирующий входными данными на целевом веб-сайте, может потребовать нескольких действий. Например, злоумышленник может захотеть обманом заставить пользователя купить что-то на веб-сайте розничной торговли, чтобы товары нужно было добавить в корзину перед размещением заказа. Эти действия могут быть реализованы злоумышленником с использованием нескольких подразделений или фреймов. Такие атаки требуют значительной точности и осторожности с точки зрения злоумышленника, если они хотят быть эффективными и незаметными.

Как предотвратить кликджекинговые атаки

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

Clickjacking — это поведение на стороне браузера, и его успех или иным образом зависит от функциональности браузера и соответствия преобладающим веб-стандартам и передовой практике. Защита на стороне сервера от кликджекинга обеспечивается путем определения и передачи ограничений на использование таких компонентов, как iframe. Однако реализация защиты зависит от соответствия браузера и соблюдения этих ограничений. Двумя механизмами защиты от кликджекинга на стороне сервера являются X-Frame-Options и Content Security Policy .

X-Frame-Параметры

X-Frame-Options изначально был представлен как неофициальный заголовок ответа в Internet Explorer 8 и быстро был принят в других браузерах. Заголовок предоставляет владельцу веб-сайта контроль над использованием фреймов или объектов, поэтому включение веб-страницы во фрейм может быть запрещено с помощью denyдирективы:

X-Frame-Options: deny

Кроме того, кадрирование может быть ограничено тем же источником, что и веб-сайт, с помощью sameoriginдирективы

X-Frame-Options: sameorigin

или на указанный веб-сайт с помощью allow-fromдирективы:

X-Frame-Options: allow-from https://normal-website.com

X-Frame-Options не реализовано последовательно в разных браузерах ( allow-fromнапример, директива не поддерживается в Chrome версии 76 или Safari 12). Однако при правильном применении в сочетании с Content Security Policy в рамках многоуровневой стратегии защиты она может обеспечить эффективную защиту от атак с использованием кликджекинга.

Политика безопасности контента ( CSP )

Политика безопасности контента (CSP) — это механизм обнаружения и предотвращения, который обеспечивает смягчение последствий таких атак, как XSS и кликджекинг. CSP обычно реализуется на веб-сервере в виде возвращаемого заголовка вида:

Content-Security-Policy: policy

где политика — это строка директив политики, разделенных точкой с запятой. CSP предоставляет клиентскому браузеру информацию о разрешенных источниках веб-ресурсов, которые браузер может использовать для обнаружения и перехвата вредоносного поведения.

Рекомендуемой защитой от кликджекинга является включение frame-ancestorsдирективы в политику безопасности контента приложения. Директива frame-ancestors 'none'похожа на директиву X-Frame-Options deny. Эта frame-ancestors 'self'директива в целом эквивалентна директиве X-Frame-Options sameorigin. Следующие CSP вносят кадры в белый список только для одного и того же домена:

Content-Security-Policy: frame-ancestors 'self';

В качестве альтернативы кадрирование может быть ограничено именованными сайтами:

Content-Security-Policy: frame-ancestors normal-website.com;

Чтобы быть эффективными против кликджекинга и XSS, CSP требуют тщательной разработки, внедрения и тестирования и должны использоваться как часть многоуровневой стратегии защиты.

Статья является переводом portswigger.net

You may also like

Leave a Comment