iPhone терминатор. Создаем автоматическое средство аудита Apple iPhoneD0znp (http://oxod.ru) В мартовском номере, в статье «Яблочное пюре», я рассказал о самом популярном и притязательном телефоне на рынке – Apple iPhone. Можно долго спорить на тему его функциональности, сравнивать с камнем или с ЛСД, восхищаться и глумиться, но все это я оставлю на твое личное усмотрение. На себя же возьму обязательство продолжить рассказ о безопасности устройства. А безопасность iPhone, скажу я тебе, оставляет желать лучшего.
Сперва разберемся, что же заставляет андеграунд двигаться в определенном направлении исследований. Если судить по количеству прикладных эксплоитов (офигеть какой показатель, сам знаю), то Win-системы гораздо более уязвимы, чем все Nix вместе взятые. Глупо предполагать, что дело только в кривизне кода от Microsoft. Весь секрет в популярности: чем больше пользователей пользуются софтом, тем больше интереса (материального и идейного) искать в нем ошибки и уязвимости. Какой резон в публикации невероятно сложной и красивой атаки на какой-нибудь Amoi MD-1 (это мобильный телефон, если что)? А вот в простой атаке на Apple iPhone пользы куда больше! Популярности одной модели айфона могут позавидовать целые серии телефонов. Сколько всего на территории нашей прекрасной страны iPhone, не знает никто, но оценку этой величины дать можно. На ленте за 26 января значилась цифра 120.000 проданных белых 3g. До этого времени, по оценкам экспертов, было еще 250.000 серых телефонов. В сумме получаем где-то 370.000. За цифру я не ручаюсь, и, если окажется, что она в два раза выше, – не удивлюсь. Наши операторы обязались за два года продать около 3 млн. устройств, так что им еще есть куда стремиться... В одном отдельно взятом кафе в столице легко можно встретить 5-10 айфонов за раз. Хотел бы ты получить возможность обрабатывать чужие телефоны в автоматическом режиме? Дальше я опишу процесс создания устройства для поиска и аудита яблочных телефонов. Мы скомбинируем принципы пассивного и активного сканирования, а также описанные в предыдущей статье атаки. Наш терминатор будет пытаться получить доступ ко всем айфонам в округе и запускать на них тестовое приложение для отправки SMS. Ну все, хватит обещаний, поехали! Выбираем платформуДавай прикинем, каким основным требованиям должно удовлетворять автоматическое средство аудита мобильных телефонов? Прежде всего, конечно, мобильность, извиняюсь за тавтологию. Идея использовать обычный ноутбук приходит в голову сразу, однако, это не всегда удобно. Я предлагаю поступить по-хакерски и сделать iPhone терминатора из обычного беспроводного роутера или точки доступа. Такая платформа обладает рядом преимуществ по сравнению с ноутом:
Кроме того, в определенных местах человек с ноутом привлекает гораздо больше внимания, чем человек с рюкзачком или сумкой. Вместо штатного монитора контролировать устройство мы будем через SSH с телефона – таким образом, шансы прохожих разглядеть что-то интересное на твоем экране уменьшаются до нуля. Если тебя коробит вопрос производительности, то смею заверить – процессора ARM 200МГц хватить для наших нужд выше крыши. Нелишним будет USB-порт – мы поместим туда флешку для ведения ядовитых логов, но если его нет, можно скидывать все на «админский» телефон или сервер в интернете. Я буду описывать процесс на примере Asus WL-500G, просто потому, что он валяется под рукой. Все будет абсолютно аналогично при использовании любого роутера из этого списка: http://wiki.openwrt.org/CompleteTableOfHardware. Если моих доводов в пользу выбора платформы недостаточно и желание повторить все нижеописанное на ноуте непреодолимо, – вперед! Весь используемый софт работает под линухом и без труда заведется под твой любимый дистрибутив или другой никс. На всякий случай напомню: если возникнут какие-то вопросы, можешь задать их в моем блоге (oxod.ru). Только не забудь вытащить жесткий диск и поставить ОС на флешку: при ходьбе и, тем более, беге, есть большой шанс заклинить даже самые дорогие диски. С платформой определились, едем дальше! Собери сам. Создаем свою прошивкуДля моего роутера существует несколько дистрибутивов линукса. Это – openwrt, dd-wrt и другие, менее известные. Я решил использовать openwrt исключительно по этическим соображениям, и ты можешь выбрать что угодно, или даже воспользоваться оригинальным дистрибутивом от производителя, их часто выкладывают под лицензией GPL. В общем, необходимое условие одно – наличие toolchain, т.е. средств кросс-компиляции, с помощью которых мы соберем и поместим в прошивку нестандартные утилиты. Нам всего-то потребуются: expect, ssh client, sshd, http-сервер, dns-сервер. Буду рассказывать на примере openwrt, так что выкачиваем сборку под свою модель, в моем случае это: http://downloads.openwrt.org/kamikaze/8.09/brcm-2.4/openwrt-brcm-2.4-squashfs.trx.
Вышла она 15 февраля 2009 года, – самый свежак. Перед прошивкой переводим устройство в Failure Mode. Для этого отключаем питание, зажимаем кнопку Reset и подключаем питание. Держим Reset, пока индикатор питания не подмигнет нам, затем отпускаем кнопку. Процедура входа в Failure Mode для разных роутеров может отличаться, но подробная процедура установки всегда будет описана в WIKI openwrt для каждой модели. Ссылка на инструкцию находится в последней колонке таблицы поддерживаемых устройств. Далее подключаем патч-корд к устройству и проверяем, что у нас вышло: ping 192.168.1.1. Если все хорошо и устройство отвечает, переходим к заливке прошивки. Потребуется tftp-клиент, его можно взять здесь:
После установки заливаем прошивку на устройство:
Ждем, пока индикатор питания перестанет моргать (завершится процесс записи в ROM). Вот так, просто и без приключений, мы подготовили платформу для дальнейших изысканий. Теперь перейдем непосредственно к настройке. Выполняем команды:
Возможно, перед последней командой придется еще настроить подключение к интернету. Настройка интерфейсов происходит через /etc/config/network. Если надо настроить PPPoE, создай в конфиге такое правило:
На этом базовая установка ОС закончена. Дистрибутив уже включает в себя DHCP-сервер, SSH-сервер и SSH-клиент. Дальнейшая настройка зависит уже от типа атаки. Делай раз. Вкусная точка доступа
Теперь основная задача – заставить пользователя iPhone подключиться к нашей точке доступа. Мы должны сделать ее наиболее привлекательной, сулящей неслыханную халяву и т.д. Первое, что приходит на ум – поставить SSID, который точно привлечет внимание любого пользователя. Например, взять существующие имена бесплатных WiFi-сетей. Для правдоподобности можно работать в режиме моста с настоящей точкой доступа, подключенной к интернету. Тогда пользователь будет иметь полноценный выход в глобальную сеть, параллельно с этим попадаясь на все наши дальнейшие уловки с DNS (я же не зря перечислил его в требованиях!). Для максимального эффекта предварительно просканируй все сети, действующие в том районе, где будешь производить испытания, и выдели наиболее популярные точки доступа. Затем поставь своему устройству MAC и SSID, как у самого популярного хот-спота. Если ты окажешься ближе к пользователю, уровень сигнала от тебя будет выше, и ты получишь клиентов, привычно подключающихся к знакомой сети. Простейший конфиг беспроводного интерфейса /etc/config/wireless выглядит так:
Последний штрих – настройка DHCP-сервера. Мы же должны создать для клиентов максимально комфортные условия работы в нашей сети :).
Если возникнут вопросы по поводу синтаксиса, обращайся к официальной документации http://wiki.openwrt.org/OpenWrtDocs/KamikazeConfiguration (в журнале приводить все возможные варианты настроек смысла нет). Делай два. Подбор паролей SSHСамая простая и действенная на текущий момент атака на iPhone – пользуемся паролем по умолчанию, установленным практически на все джеилбрейкнутые телефоны SSHD. Для начала, с помощью toolchain от openwrt собираем из исходников утилиту expect. Если есть флешка, можно поставить компилятор на сам роутер. Устанавливаем все необходимое:
Сразу отредактируем /etc/ssh/ssh_config, добавив строчку «StrictHostKeyChecking no», чтобы SSH-клиент не выдавал сообщение о принятии новых сессионных ключей для каждой жертвы. Затем скачиваем исходники expect отсюда: http://expect.nist.gov/expect.tar.gz. Распаковываем и собираем, как обычно: ./configure, make, make install. Может потребоваться установить переменную окружения: «setenv TCL_LIBRARY /usr/bin/tcl8.4.19/Library». Теперь напишем скрипт, который будет пытаться подключиться к телефону с дефолтной связкой логин-пароль. Получиться что-нибудь наподобие этого:
В случае успеха демон системных логов на захваченном телефоне заменится нашей программой iphone-trojan, которая будет выполняться при каждом рестарте системы. Что это будет за программа, мы рассмотрим ниже. Предлагаю в качестве самостоятельного упражнения связать логи dhcp-сервера с выполнением этого скрипта так, чтобы атака осуществлялась на каждый новый выданный IP. Можешь также установить nmap и перед запуском проверять, что подцепился именно iPhone. Делается это командой nmap –O2 10.0.0.Х. Стоит отметить, что сканирование nmap’ом занимает приличное время, поэтому куда выгоднее просто пытаться атаковать сразу после подключения клиента. Тут уж решай сам. Делай три. Ложный репозиторий InstallerЭта атака была описана в моей предыдущей статье. Если вкратце, – суть заключается в подмене DNS-адреса репозитория менеджера пакетов Installer. Менеджер устанавливается на все джеилбрейкнутые телефоны, коих, по некоторым оценкам, > 50% среди всех iPhone в нашей стране. Выглядит это так: пользователь подключается к нашему терминатору, открывает Installer и устанавливает обновление самого менеджера пакетов. Но вместе с оригинальной программой на телефон заливается любая другая. Приступим к настройке. Устанавливаем DNS-сервер:
Меняем настоящий IP сервера с репозиторием i.ripdev.com на нащ. Для этого редактируем /etc/mararc и /etc/marands/ripdev.com:
Теперь все запросы к серверу будут обработаны терминатором. Остается настроить встроенный веб-сервер в качестве поддельного репозитория. По умолчанию веб-сервер запускается с корнем /www, но ты в любой момент можешь погасить его и запустить с ключом –h /my/www-root. Выгодно создавать корень веб-сервера на прикрученной флешке. Так или иначе, нам надо скачать и записать на терминатора следующие файлы:
В каждом из них исправляем раздел, относящийся к программе Installer, меняем ключи date и version на большие. Если мы не хотим вызывать лишних подозрений, исправляем ссылки на файлы всех остальных программ так, чтобы они вели на настоящий сервер. Для этого указываем явно его IP-адрес. Более подробно процесс рассмотрен в уже упомянутой статье «Яблочное пюре» в мартовском номере ][. Затем скачиваем и правим следующие файлы:
Меняем ключ version на такой же, какой поставили в предыдущих конфигах. Затем редактируем ключи size и hash. Это размер и md5 хеш от файла с нашим поддельным приложением, которое пользователи будут себе устанавливать. Остается только разместить само поддельное приложение на роутере вместе с конфигами (то есть создать директорию /www/info и /www/packages/System), ну и записать туда все вышеописанные файлы. Бонус. Кодим под iPhoneКак будем проверять работоспособность нашего терминатора? А пусть сами жертвы известят нас с помощью sms (заодно – получим телефонный номер отправителя). Достаточное доказательство? Напишем приложение и повесим его демоном на захваченные iPhone. Забудь про xcode и Apple SDK, пользоваться будем грубым мужским gcc. Компилятор можно поставить прямо на телефон через Cydia. Или на компьютер:
Отправлять SMS будем через AT команды устройству /dev/tty.debug. Эта консоль модема используется для отладки и присутствует на всех iPhone/iPhone 3g. Ни одно приложение по умолчанию не использует это устройство - то, что доктор прописал! Великий и могучий code.google.com уже имеет проект с нужным нам функционалом. Велосипед изобретать не будем и некоторые функции просто позаимствуем оттуда:
Из этого проекта мы возьмем функцию InitConn – подключение к модему, CloseConn – отключение от модема, SendCmd – отправка AT команды модему и ReadResp – чтение ответа от модема. Приведу пример значимых строк кода (сам проект можно найти на нашем DVD):
Подумаем над содержанием сообщения. Предлагаю для однозначности скидывать с захваченных телефонов ни много, ни мало – а IMEI и CCID. Это сделает наши доказательства успешной атаки более весомыми. Получать данные мы тоже будем через AT команды. Функцию ReadResp я немного допишу, чтобы находить ответы за запросы IMEI и CCID и записывать их в переменную message. Выйдет примерно так:
Осталось лишь написать main функцию, в которую мы заложим весь функционал. Сначала получаем CCID, потом – IMEI, затем отправляем сообщение. Война войной, а питание по расписанию
Нашему терминатору не хватает только автономного источника питания. Действительно, стационарная точка доступа - это хорошо, а мобильная куда лучше. Существуют два способа решить проблему: переносной аккумулятор и адаптер питания от автомобильного прикуривателя. Для начала смотрим на штатный адаптер питания точки доступа и видим что-нибудь похожее на 12 В, 1 А. Автомобильный прикуриватель даст как раз 12 В, но мгновенные значения за счет шумов могут колебаться от 8 от 16 вольт. Перебои в работе нам не нужны, поэтому стоит воспользоваться адаптером с шумоподавителем. Схема такого устройства нашлась быстро:
Если не заморачиваться и подключать терминатора после зажигания, то можно рискнуть – напрямую подключиться к прикуривателю. Также дешево и сердито – воспользоваться адаптером от GPS-навигатора, он как раз будет 12 В, 1 А и с шумами как-нибудь справится. Еще есть вариант установить автомобильный адаптер инвертер 12/220 В (можно брать от 50 В мощности). Что касается переносных аккумуляторов, то подключаться стоит к обычному ноутбучному. Подсчитаем: аккумулятор для ноутбука при 12 В дает 4.8 А/ч – то есть почти пять часов работы при потреблении в 1 А. Отмечу, что это пиковый ток, потребляемый точкой. Среднее значение будет меньше, – а значит, время работы заведомо больше 5 часов. С аккумулятора надо будет снимать только + и -, логические контакты оставь в покое. Узнать распайку контактов можно либо по наклейке на аккумуляторе, либо с помощью тестера. Надеюсь, приведенной здесь информации будет достаточно, чтобы запитать терминатора. Недалекое будущееВ последнее время производительность и скорость подключения к интернету мобильных устройств сильно растут. В недалеком будущем, а вернее, уже почти настоящем, вырисовываются четкие перспективы мобильных ботнетов. Эти устройства практически всегда онлайн, имеют несколько способов подключения к Сети, при этом – есть GPS-навигация. Они всегда находятся рядом со своими владельцами и часто содержат конфиденциальную инфу. Я думаю, причин для хака более чем достаточно! Сегодня я попытался рассказать, как без особых усилий сделать устройство, способное получать доступ к Apple iPhone в автоматическом режиме. Перемещаясь с таким терминатором по улицам, можно собрать целую мобильную армию, готовую в любой момент произвести DDoS-атаку или распределено вычислить значение хеш-функции. В следующей статье я опишу процесс создания трояна для iPhone. Он способен получать команды с сервера хозяина, отправлять различными способами данные с телефона, выполнять шелл-команды, собирать статистику, генерировать трафик на определенный ресурс и... что-нибудь еще, что успею придумать. WWW
DVDНа диске ты найдешь исходники программы для отправки SMS. INFO
WARNINGВнимание! Информация представлена исключительно с целью ознакомления! Ни автор, ни редакция за твои действия ответственности не несут! |