Перехват VK. Как хакеры используют кликджекинг для деанонимизации
В этой статье я расскажу, как злоумышленник может использовать технику социального фишинга под названием кликджекинг, чтобы деанонимизировать пользователя. В качестве примера мы будем изучать атаку на аккаунт VK и посмотрим, как именно хакер может узнать идентификатор пользователя. Это очень опасный вид атаки, который сложно предотвратить, и попасться на него может каждый.
Что такое кликджекинг
Кликджекинг — это механизм обмана, связанный с размещением на сайте невидимых элементов, с которыми пользователь может взаимодействовать, даже не подозревая этого. То есть создается кнопка и в невидимом слое накладывается поверх другой — видимой. Например, жертва хочет посмотреть фильм на сайте, жмет Play, а попутно еще случайно дает «согласие на обработку персональных данных». Найти такие невидимые элементы можно, только заглянув в код сайта.
Бывает еще и «курсорджекинг». Это незаметное перемещение курсора мыши, чтобы выполнить те или иные действия на странице. Перемещаться вместе с курсором может и какой‑то элемент.
Дальше я покажу, как злоумышленник может добавить на страницу виджет «ВКонтакте», сделать его невидимым и подложить ничего не подозревающему пользователю.
Дизайн сайта
Здесь злоумышленник может нафантазировать что угодно. Социальный фишинг — ничто без социальной инженерии, поэтому ему потребуется схема введения в заблуждение, под которую уже будет подгоняться содержимое сайта.
Для примера возьмем пустой шаблон.
<!DOCTYPE html> <!-- Объявление формата документа -->
<html>
<head> <!-- Техническая информация о документе -->
<meta charset="UTF-8"> <!-- Определение кодировки символов -->
<title>...</title> <!-- Заголовок документа -->
<link rel="stylesheet" type="text/css" href="style.css"> <!--
Подключение внешней таблицы стилей -->
<script src="script.js"></script> <!-- Подключение сценариев -->
</head>
<body> <!-- Основная часть документа -->
</body>
</html>
Авторизация VK
Теперь на сайт добавляется возможность авторизоваться через VK. Для этого есть официальный API, к нему идет подробная инструкция.
Если вкратце, то достаточно добавить вот этот скрипт в секцию head:
<script src="https://vk.com/js/api/openapi.js?169" type="text/javascript"></script>
И вот это — в body:
<div id="vk_auth"></div>
<script type="text/javascript"> window.onload = function () { VK.init({apiId:1111111});
VK.Widgets.Auth('vk_auth', {});
}
</script>
Параметру apiId нужно дать значение, которое находится в документации и есть в разделе «Код виджета для вставки на сайте».
На скрине замазан сам идентификатор. Теперь на сайте должна появиться такая кнопка.
У злоумышленника есть широкий выбор вариантов того, как переправлять себе данные об авторизованных посетителях. На стороне сервера для этого может использоваться база данных или просто текстовый файл.
Как сказано в документации, после авторизации метод VK.Widgets.Auth возвращает данные о пользователе в виде GET-параметров URL при использовании authUrl или в виде параметров функции при использовании onAuth. Возвращаются следующие поля:
- uid (integer) — идентификатор пользователя;
- first_name (string) — имя;
- last_name (string) — фамилия;
- photo (string) — URL фотографии профиля пользователя шириной 200 px;
- photo_rec (string) — URL фотографии профиля пользователя шириной 50 px;
- hash (string) — служебный параметр, необходимый для проверки авторизации на удаленной стороне.
Для проверки авторизации можно использовать полученный параметр hash, сравнивая его со значением функции MD5 от app_id + user_id + secret_key. Например:
md5(667481942537fTanpCrNSeuGPbA4ENCo)
Как настраивать этот виджет, есть многочисленные инструкции, здесь никаких секретов, разобраться под силу каждому. Так что идем дальше.
Настройка видимости
Обычный веб‑разработчик на этом этапе бы и остановился, но злоумышленнику нужно сделать кнопку авторизации невидимой и вставить поверх нее какое‑нибудь привлекательное изображение, чтобы пользователь прошел авторизацию, не заметив этого. Например, можно поставить поверх какую‑то другую кнопку.
Если в любом браузере выбрать «Просмотр кода» и навести курсор мыши на кнопку входа в VK, а затем щелкнуть правой кнопкой, то можно найти такой абзац (на скриншоте замазана часть текста, которой на этом этапе не будет).
Теперь в окне CSS можно добавить opacity : 0.0. Кнопка станет невидимой.
Код абзаца уже со значением opacity : 0.0 можно скопировать и получить код скрытой кнопки. В таком виде злоумышленник и добавляет кнопку на свой сайт вместо прежнего кода.
Выводы
Получается невидимая кнопка, и при нажатии на нее выполняется действие. Кстати, если просто скрыть этот элемент атрибутом hidden, то никакого результата не будет, ведь кнопка не только пропадет визуально, но и не будет получать событий вроде щелчка кнопкой мыши.
Это, по моему мнению, крайне эффективный способ деанонимизации, когда пользователя достаточно направить на страницу — и можно получить его идентификатор VK и некоторые другие данные. Работает же такая схема практически незаметно для обывателя.
Защититься от такого способа крайне сложно. Можно разве что поискать в исходнике подозрительного сайта слово opacity, но вряд ли кто‑то будет делать это на каждой посещаемой странице.
