Содержание статьи
Тизер
Начну с небольшого тизера. В следующем номере у нас будет материал, в котором мы собрали самые разные утилиты с последних хакерских конференций. Просматривая его, я наткнулся на утилиты HoneyBadger & PushPin и подумал: «Где ж вы были раньше?» Объясню: за последнее время меня не раз спрашивали, как можно определить месторасположение какого-то пользователя. Причины у людей разные, но цель всегда была одна — понять, где физически находится человек. Точкой на карте, не иначе :).
Определение месторасположения
Тут надо сказать, что раньше возможности узнать расположение были весьма скудные. Можно было разве что заманить пользователя на нужный ресурс, определить его IP-адрес и по скудным GeoIP-базам выяснить в лучшем случае город, из которого интересующий объект подключен. Впрочем, как нам известно, знание IP очень часто вообще ничего не дает. Особенно когда современные пользователи уже спокойно юзают весь арсенал средств для анонимизации: прокси, VPN, Tor и другие инструменты.
Все изменилось с появлением в HTML5 геолокационных возможностей. Теперь любой сайт с пугающей точностью может определить, где находится пользователь, — разумеется, если тот это разрешил. Вырисовывается уже вполне рабочий сценарий: если заманить пользователя на сайт с нужным JS-кодом и тот по незнанию разрешит определение месторасположения, вполне можно получить довольно точные (а подчас очень точные) его координаты.
Создатели HoneyBadger пошли дальше и написали целый фреймворк, который помогает вычислить месторасположение пользователя. Свою разработку они представили на конференции ShmooCon 2013. Общий принцип работы я уже описал: при помощи HTML5 и Java-апплетов браузер пользователя вынуждают раскрыть свое реальное местоположение, даже если пользователь использует анонимизацию (кому нужен его IP?).
Как это работает
Весь код написан на PHP и Python, поэтому их интерпретаторы нужны для установки необходимой серверной части HoneyBadger. Также потребуется SQLite. Собственно, описывать процедуру развертывания самого обычного приложения нет смысла — главное, скачав репозиторий с кодом, ты уже через пять минут получишь доступ к админке утилиты. API фреймворка имеет разные способы получения данных о расположении клиента, но начнем с веб-агентов. Тут есть три варианта:
- Web_http. Генерируется обычная HTML-страница с тегом . Когда пользователь заходит на сайт или открывает HTML-письмо, происходит обращение к веб-серверу за картинкой и в логах оказывается его IP. Соответственно, IP пробивается по базе GeoIP.
- Web_html5. На сайте генерируется страница, использующая механизмы HTML5 для геолокации. Если пользователь зайдет на такую страницу и настройки браузера позволят выдать его расположение, его координаты окажутся в нашем распоряжении. Запрос к API осуществляется опять же через тег .
- Web_applet. Это вариант работает не всегда, так как использует Java. Смысл в том, что с помощью апплета собирается информация о беспроводных устройствах вокруг клиента. Данные о точках доступа вокруг с большой вероятностью дают точное расположение с помощью Google Geolocation API.
Модули для Metasploit
Для удобства дополнительные способы были реализованы в виде модулей для Метасплоита. С их помощью упрощается создание HTML-письма или, например, PDF’ки.
- badger_smtpimg. Простое создание HTML-письма, которое отправляется пользователю. От юзера не требуется переходить на какой-то сайт, но определить можно только IP (и только при условии рендеринга HTML его почтовым клиентом).
- badger_pdftrack. Как несложно догадаться, для вычисления пользователя специальным образом генерируется PDF-файл с инъектированным JS-кодом (AcroJS), который пытается запустить браузер и выполнить в нем знакомые приемы геолокации.
Думаю, что уже этого в самых простых случаях будет достаточно, чтобы при удачном стечении обстоятельств вычислить пользователя. Но разработчики HoneyBadger пошли дальше и реализовали еще парочку более агрессивных способов постэксплуатации. По сути, разработчики ответили на вопрос: как определить, где находится пользователь, если есть доступ к удаленному компьютеру? (Кстати, вот тебе еще один способ найти украденный бук, если к нему остался какой-нибудь SSH/RDP-доступ.) Некоторые из таких модулей:
- badger_wlansurvey. Включает на удаленном хосте Wi-Fi-карточку, определяет точки доступа вокруг и вычисляет координаты при помощи Google Geolocation API.
- badger_mobilescrape. Вытаскивает координаты из бэкапа iPhone/iPad, который хранится в iTunes.
- badger_browserscrape. Модуль пытается найти данные о расположении в истории Firefox’а (в URL к тем же самым Google Maps часто фигурируют параметры долготы и широты).
Хакер #173. Уязвимости Ruby on Rails
Дополнительная штука
Это еще не все. Вместе с HoneyBadger разработчики показали еще и утилиту PushPin — Python-скрипт, пытающийся в зависимости от заданных координат извлечь из социальных сетей обсуждения, изображения и видео, которые могли бы помочь на этапе физической разведки при проведении теста на проникновение. Для работы надо просто задать широту и долготу искомой цели в градусах (собственно, расположение пользователя) и радиус сканирования в километрах — после чего PushPin предоставит все твиты, видео с YouTube и изображения с Flickr, которые запостили из заданной области.
Посмотрел, что она нашла для меня. Задумался :).