Поддельное окно авторизации, чтобы выманить пароль пользователя
Современные средства HTML/CSS позволяют сгенерировать фрейм, практически неотличимый от настоящего браузера, как на скриншоте вверху. Более того, можно нарисовать в нём «адресную строку» с любым URL. Это открывает двери для нового класса атак, который получил название BitB (браузер внутри браузера).
Насколько реальны такие атаки и что можно противопоставить в качестве защиты?
BitB
Уже как минимум 20 лет для фишинга применяются всплывающие окна, в которых подгружается фальшивая копия целевого сайта. В атаке BITB мы видим усовершенствованную технику такого рода. Здесь подделывается не только интерфейс целевого сайта, но и его URL.
Например, в фишинговом окне демонстрируется адрес вроде
https://facebook.com
или https://accounts.google.com
.Демонстрация:
Специалист по безопасности mr.d0x опубликовал примеры простого HTML-кода, который генерирует всплывающие окна с произвольным URL и заголовком окна.
Опубликованы примеры для браузера Chrome под MacOS и Windows (светлая и тёмная тема).
Например, вот index.html, script.js и style.css для светлой темы Chrome под Windows:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="style.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
</head>
<body>
<div id="window">
<!-- Title bar start -->
<div id="title-bar-width">
<div id="title-bar">
<div style="margin-top:5px;">
<img src="./logo.svg" width="20px" height="15px" id="logo">
<span id="logo-description">XX-TITLE-XX</span>
</div>
<div>
<span id="minimize">—</span>
<span id="square">□</span>
<span id="exit">✕</span>
</div>
</div>
<div id="url-bar">
<img src="./ssl.svg" width="20px" height="20px" id="ssl-padlock">
<span id="domain-name">XX-DOMAIN-NAME-XX</span>
<span id="domain-path">XX-DOMAIN-PATH-XX</span>
</div>
</div>
<!-- Content start -->
<iframe id="content" src="XX-PHISHING-LINK-XX" frameBorder="0"></iframe>
</div>
</body>
<script src="script.js"></script>
</html>
В опубликованном коде
index.html
четыре изменяемых параметра:- XX-TITLE-XX — заголовок страницы;
-
XX-DOMAIN-NAME-XX — доменное имя (например,
gmail.com
); -
XX-DOMAIN-PATH-XX — путь (например,
/auth/google/login
); - XX-PHISHING-LINK-XX — фишерская ссылка, которая внедряется во фрейм (например, https://example.com).
Как видим, поддельный URL просто прописывается в
url-bar
.По мнению независимых экспертов, это вполне действенный вектор атаки, в том числе через традиционные рекламные сети.
Загрузка вредоносного кода в рекламную сеть через стороннюю платформу (supply-side platform, SSP) вроде FreeWheel, OpenX или Pubmatic
Хотя Google и другие используют автоматизированные сканеры для обнаружения такого рода вредоносного кода, эти проверки можно обойти. Например, с помощью таймера, когда вредоносный скрипт на сервере срабатывает только при определённых условиях:
- через 45 или 60 дней;
- при запросе только с конкретных IP-адресов;
- при обнаружении движения; изменения положения девайса (с акселерометра), прикосновения и др.
Скрипт может сработать при сочетании нескольких перечисленных факторов. Это позволяет надёжно защитить вредоносный код от сканеров рекламной платформы.
Защита
В качестве защитных мер можно рекомендовать следующее:
- использование нестандартных тем оформления в браузере, нестандартных браузеров, нестандартных ОС и др.;
- использование менеджеров паролей (защита от поддельного URL);
- обновление блоклистов uBlock Origin/Adblock и других блокировщиков.
Чтобы сработала атака BitB, пользователь должен сначала зайти на сайт злоумышленника. Уже оттуда запускается поддельное окно браузера. Таким образом, для защиты от BitB следует изначально избегать подозрительных сайтов.
Ещё один нюанс. Поскольку BitB труднее монетизировать в массовом масштабе, эту атаку могут применять в таргетированном варианте против конкретных целей. Например, чтобы узнать пароль пользователя от MetaMask или другого кошелька.
Подробнее о сертификатах подписи кода на сайте GlobalSign www.globalsign.com/ru-ru/code-signing-certificate
Комментарии (15)
eps
28.03.2022 14:03+4Как отличить нарисованный
каминбраузер от настоящего? Возьмите окошко и утащите его за пределы окна браузера.Настоящее окно утащится хоть на соседний монитор, нарисованное — останется внутри document viewport.
И, конечно, подделать окно с современной красивой ОС довольно сложно. Картинку подделать умеренно легко, но поведение — совсем сложно. User UI customisations узнать и подделать примерно невозможно
aamonster
А вы давно видели всплывающие окна в браузере? Обычно, даже если сайт пытается это сделать (и ему позволили) – открывается новый таб, не отдельное окно.
Не очень понятно, на кого эта атака вообще нацелена.
pae174
А это не всплывающее окно в браузере. Это такой блок на текущей странице, внутри которого браузер только нарисован. То есть во время работы с этой как бы внешней плюхой юзер вообще не покидает изначальную зловредную страницу.
aamonster
Я про настоящие всплывающие окна. Нет их. Подо что же маскируется зловред?
Ну то есть не надо никаких нестандартных тем: увидел такое окно – значит, тебя пытаются обмануть.
CloudC
В самой первой картинке видно подо что маскируют. Ты сам нажимаешь "войти с помощью гугл", а это вроде всегда (или часто) открывает вот такую вкладку отдельным окном для ввода почты/пароля.
aamonster
Только что попробовал Trello, AppCenter, Slack. Все три абсолютно одинаково перебросили на accounts.google.com прямо в текущей вкладке.
Возможно, зависит от настроек браузера. Пробовал в Google Chrome, в настройках выставлено Security and Privacy -> Site Settings -> Content: Pop-ups and Redirects -> Default behaviour == "Don't allow sites to send pop-ups or use redirects" (настройка по умолчанию вроде).
Буду благодарен, если назовёте сайт, на котором у вас открывается настоящий попап.
NemoVors
facebook открывает в мозилле (открывал недавно, по крайней мере). у меня он в отдельном окне как-то открылся и выкинул его на второй (в тот момент выключенный) монитор. Я тогда чуть не сдвинулся не понимая, почему не могу войти на сайт, пока не догадался моник включить :) .
aamonster
На каком сайте? Сам фейсбук заходит только через себя, appcenter у меня вход через фейсбук только что открыл в той же вкладке - и в Chrome, и в Firefox.
Второй вопрос: не было ли это очень давно, когда все ещё не ополчились на popup-окна?
NemoVors
С год назад где-то. Может 2. Я где был зарегистрирован через фейсбук. И вот если я разлогинюсь в фб (что вообще было регулярно даже без моего желания, т.к. не вхожу в него), то при попытке куда-то через него зайти открывалось окно. А на поп-апы вой идет еще со времен диал-апа - только вот смысла не особенно.
То чат с ботом из угла выпрыгнет, то еще какая дурь со звуком аськи познакомиться захочет (ну там не поп-апы, конечно, но раздражают не меньше).
namikiri
Вот как раз Гоогле частенько и открывает маленькие зависимые окошечки, а не
табывкладки.eps
В Safari @ Mac OS поведение зависит от режима окна.
Если в полноэкранном режиме — всегда новые вкладки. Если в оконном — всплывающие окна спокойно вылетают. Paypal, например, любил показывать оплату в таком pop-up
FFxSquall
Браузеры блокируют всплывающие окна только если код их инициирует без участия пользователя. Если пользователь сам сделал клик по кнопке на которую навешано создание окна через window.open, такое поведение не будет заблокировано с дефолтными настройками браузера.
aamonster
Это да. Но когда браузеры стали блокировать часть попапов – сайты стали всё чаще без них обходиться. Приведённый тут в качестве примера попап логина через гугл мне повторить не удалось.
FFxSquall
Если не ошибаюсь у меня такой попап вылазит иногда на сайтах в которые можно войти через гугл. Но да, чаще всё же это переход на страницу гугла и возврат на сайт после логина.
aamonster
Я не смог уже найти сайты, на которых вылезает (собственно, если они используют единое API – попапы всюду могли быть убраны централизованно гуглом... И, кажется, случилось это не сегодня).
В любом случае вылезшее попап-окно, в котором требуется ввести логин и пароль – априори подозрительно и проверять его следует всеми возможными способами (например, ткнуть правой кнопкой и нажать "Inspect" ;-)).