Мобильный ботнет. Создаем загон для iPhone-зомбиD0znp (http://oxod.ru) Пройдет еще лет пять, и текущие гигабитные скорости мы будем считать бесконечно малыми. Помимо GSM и 3g, современные телефоны имеют Wi-Fi адаптеры, так что практически постоянно находятся в онлайне. Век мобильных ботнетов уже настал. В этой статье я расскажу о практической реализации сервера для управления сетью мобильных зомби-телефонов, в частности для Apple iPhone. Мобильная спецификаПеред началом работы разберем особенности мобильных зомби – чем они отличаются и какие преимущества дают по сравнению с «классическими» зараженными машинами. Вот список основных фич:
Использовать все эти особенности вместе было бы, конечно, здорово, но меня на такой подвиг не тянет. Ограничусь основными, а остальные пойдут как доработки. Также не исключаю, что мой список можно пополнить еще десятком позиций. Как это будет работатьМы напишем серверную часть с админкой для публикации команд на веб-сервере. Клиенты (то есть зараженные телефоны) посредством самого трояна будут скачивать наши команды через определенные интервалы времени и исполнять их. Результаты исполнения клиенты опять-таки будут передавать нашему серверу через HTTP. Это хозяйство можно реализовать на чем угодно. В статье я опишу все для PHP и SQLite под Windows. Разумеется, не составит труда перенести код под любую другую среду. Замечу, что я специально оставил в коде SQL-инъекции, чтобы ни у кого не закралась мысль использовать этот пример для причинения вреда чему-то живому. Идентификация телефонов и регистрационные данныеЕсли компьютеры в ботнете обычно идентифицируют по IP-адресам, то телефоны мы будем определять по IMEI – уникальному коду, зашитому на заводе. Это тот самый код, что может служить доказательством кражи в суде. По IMEI можно найти пропавший телефон через соответствующие органы, а они, в свою очередь, найдут его местоположение через сотового оператора. Сменить IMEI на конкретном телефоне считается довольно проблематичным (зависит от производителя и модели). По смене IMEI на iPhone есть полная и подробная инструкция (а главное - простая): www.iclarified.com/entry/index.php?enid=657. Тем не менее, с очень большой вероятностью IMEI будет нашим уникальным идентификатором зомби. Давай прикинем, какие дополнительные данные нам потребуются от зараженного образца. Во-первых, обычный телефонный номер вида +7-(123)-456-78-90. Он пригодится для отправки SMS и специальных сервисов ОПСОСа, а-ля переброс денег на другой счет или подключение услуг. Сюда же я предлагаю добавить дату регистрации зомби на мастер-сервере (дату заражения) и дату последней активности (дату ответа на последнюю команду). Для красоты заведем еще, опционально, текстовый алиас аппарата и килобайтный комментарий. Таким образом, мы сможем записать информацию о каждом зомби, придумывать смешные названия и прочую фигню, если вдруг понадобится. Также потребуется хранить сами команды, которые будут получать и исполнять наши зомби – я предусматриваю общие (бродкаст) для всех зараженных и специальные (директ) команды для конкретного телефона. Все эту информацию надо где-то хранить, и вероятно, не на бумажке под половицей. Поэтому заведем соответствующие таблички в базе данных. Я использую SQLite, хотя все написанное без труда можно переложить под любую другую СУБД (на этот счет еще будет несколько комментариев по тексту). Устанавливаем СУБД, создаем таблицыВся прелесть (и одновременно, недостаток) SQLite заключается в том, что сама база представляет собой всего-навсего один файл. Интеграция с языками программирования тоже очень простая. Я буду писать под PHP и Windows. В моем случае для установки СУБД следует добавить в php.ini следующие строчки:
После этого скачиваем объявленные библиотеки в директорию ext и наслаждаемся. Теперь создаем таблицы, куда будем записывать поступающую от зомби информацию и новые указания. Вот так выглядит SQL-скрипт:
Отмечу, что, например, для MySQL 15 цифр IMEI не влезут в INTEGER, так что SQL придется немного исправить. Покончив с настройкой базы, перейдем непосредственно к написанию скрипта, который будет регистрировать в базе новых жертв. «Помогу с регистрацией», или Записываем зомбиПосле заражения телефон отправляет http-запрос с GET-параметром IMEI и кодом регистрации. Код нужен, чтобы убедиться, что регистрацию проходит именно наш троян, а не дядя в фуражке. Крутые перцы пишут тяжелые математические функции для свертки регистрационных данных в верификационный код, а для наших тестовых целей хватит и чего-нибудь попроще. Например, возьмем выборочные цифры из IMEI, умножим на константы и сложим результат вместе. Выйдет не очень красиво, но весьма наглядно. Таким образом, пишем первую функцию для проверки регистрационного ключа:
После проверки ключа добавляем гаврика в базу. Для этого используем функцию addToZombie:
Обе эти функции и простую логику проверки собираем вместе в файл reg.php. Для корректной работы троян при регистрации должен послать нам http-запрос примерно с таким URL:
Раздаем командыОсталось написать командую часть. Логика здесь простая: лезем в базу, тащим самую свежую команду (с большим ID) и печатаем в HTTP response. При этом еще надо обновить табличку zombies, установив там дату последней активности зомби, забравшего команду, равную текущей дате. Функции будут выглядеть так:
Соответственно, чтобы забрать команду, троян тянет страничку вида:
Чтобы иметь возможность общаться с конкретным телефоном, напишем функцию для вывода команды из таблицы special_commands по конкретному IMEI:
Ну вот, все готово. Можно начинать проверять работоспособность движка, так как базовый функционал готов. Правда, мы не сделали себе возможность записывать эти самые команды в базу. Тут есть два варианта – либо пользоваться консольной утилитой sqlite.exe, либо потратить еще 15 минут и дописать веб-интерфейс. Ты как хочешь, а я пойду по второму пути, потому что он сэкономит потом пару часов на пиво :). Дайте порулить, или Пишем админкуПервым делом выведем список всех зомби в HTML-табличке. Для наглядности, телефоны, которые приняли после регистрации хотя бы одну команду (заполнено поле last_active_date таблицы zombies), подсветим зеленым, остальные – красным. Здесь же пишем простой жаваскрипт для изменения алиаса и комментария. Выйдет примерно так:
После этого напишем еще два скрипта для отображения и редактирования бродкаст и специальной команды выбранному устройству. Исходники их функций я приводить не буду, они аналогичны уже разобранным и не нуждаются в комментариях. На диске ты найдешь полные исходники приложения, без труда разберешься и допишешь нужный функционал, если потребуется. Мое творение ты можешь наблюдать на скриншотах. Еще раз отмечу, что специально делаю код понятным и простым, а не быстрым и безопасным. ЗаключениеМиф о несуществовании телефонных ботнетов развеян. Как минимум, три тестовых образца выполняли мои команды, а это уже ботнет :). Есть надежда, что в скором времени процессоры мобильников станут еще быстрее, памяти будет больше, а кнопок не останется вовсе. Так или иначе, уровень безопасности телефонов неизбежно возрастет. Гипервизоры и подписанный код станут основополагающими требованиями. Очень надеюсь, что наряду с этим вырастут уровень и количество специалистов, которые будут в состоянии вскрывать такие защиты. Как всегда, на все вопросы отвечаю в блоге http://oxod.ru. Удачи! WWW
DVDРабочую версию скриптов и библиотеки для работы с SQLite из PHP ты найдешь на диске. INFOВ мартовском номере ][ была опубликована статья по созданию Трояна для Symbian. Нетрудно доработать его и научить общаться с нашим мастер-сервером. Может получиться прекрасный мульти-платформенный ботнет. WARNINGВнимание! Информация представлена исключительно с целью ознакомления! Ни автор, ни редакция за твои действия ответственности не несут! |