Зло-кодинг под Symbian. Написать троя в обход защиты Symbian? Не советуем!Дмитрий Тарасов (root@dtarasov.ru) В свое время мы уже рассказывали о том, как злые люди пишут трояны, способные пересылать копии sms'ок и информацию о звонках на номер хакера. Публикации вызвали волну интереса, и до сих пор мне пишут люди с просьбами помочь разобраться в разработке шпионского ПО. Что ж, мы учли специфику спроса на софт подобного рода. На этот раз мы приоткроем завесу тайны над процессом разработки продвинутого смс–трояна для смартфонов Nokia, Samsung и LG на базе S60. Незаметно для пользователя троян умеет сливать деньги со счета. Интерес злоумышленников к трубкам невинных пользователей понятен. Смартфон – это личное средство коммуникации, и он не только содержит разного рода приватную информацию вроде сообщений, лога звонков и адресной книги, но и может выполнять операции, напрямую связанные с состоянием денежного баланса (осуществление звонков, отправка sms, использование GPRS и т.д.). Учитывая особенности функционала смартфонов, я выделил бы три разновидности вредоносного ПО, представляющие коммерческую ценность для хакеров:
Поскольку процесс создания приложений первого типа уже был более-менее детально освещен, сейчас мы подробно рассмотрим шаги, необходимые для разработки трояна-рассыльщика. В простейшем случае алгоритм функционирования несложен – программа устанавливается в телефон, никак не выдавая свое присутствие. Раз в заданный промежуток времени она отправляет Premium SMS (о том, что это и как зарегистрировать короткий номер – смотри следующий раздел) на заданный номер и… все. Примерно так и функционировал один из первых троянов для Symbian. Очевидно, что этот функционал требует некоторого усовершенствования. Логика функционирования продвинутого троянаПроблема описанной программы заключается в том, что вскоре после попадания трояна в аппараты пользователей, факт недобросовестности арендатора короткого номера, на который отправляется платная sms, может сильно озаботить собственников этого номера. Обычно они просто блокируют арендатора, чтобы он не мог более класть деньги невинных пользователей к себе в карман. Но быстро зарегистрировать новый короткий номер особого труда не составляет, поэтому неплохо было бы, чтобы программа могла периодически обновлять информацию о том, куда, собственно, слать платную sms. Иначе говоря, хакеру надо реализовать механизмы соединения программы с сервером и обновления настроек. Казалось бы, в чем сложность? А в том, что в смартфонах на базе Symbian все соединения через tcp sockets (в том числе и HTTP over TCP) осуществляются посредством так называемой «точки доступа в интернет» (Internet Access Point). Поэтому, если программа использует функционал соединения с сетью, пользователь должен задать используемую точку доступа хотя бы один раз. Троян трудно было бы назвать незаметным, если бы он спрашивал у пользователя, какую точку доступа ему использовать. Поэтому хакеру предстоит реализовать механизм автоматического выбора точки доступа из установленных в смартфоне и определения ее способности быть использованной в качестве транспорта для синхронизации с сервером. Итак, требования к программе можно сформулировать следующим образом:
Помимо этого, стоит учесть, что софт, устанавливаемый на современные смартфоны, работающие под управлением Symbian 9, должен быть подписан цифровым сертификатом, получаемым в конторе под названием SymbianSigned. Предлагаю пошагово рассмотреть этапы разработки зловредного ПО и подготовки его к работе. Механизм сокрытия программыПредположим, что базовый костяк приложения создан. Для этого могут быть использованы как Carbide C++, так и Visual Studio.NET с установленной надстройкой Carbide.VS. Подойдет базовый шаблон вроде «Symbian Hello World Application» (отмечу, что в этой статье нет привязки к конкретному SDK, поэтому можно использовать любой SDK для любой платформы). Теперь приступим к собственно сокрытию приложения от глаз пользователя. Чтобы спрятать программу, нужно выполнить три простых шага: 1) Редактируем структуру, содержащую служебную информацию о приложении и именуемую AIF_DATA в Symbain 7.x-8.x и APP_REGISTRATION_INFO в Symbian 9.x. Эта структура является обычным ресурсом и находится обычно в том файле ресурсов, который содержит основной UID приложения. Необходимо добавить следующую простую запись:
Флаг попросту скрывает иконку приложения из меню аппарата. 2) В класс документа приложения добавляем определение виртуальной функции UpdateTaskNameL, служащей для настройки отображения иконки и названия программы в Task–листе:
3) Для Symbian 7/8. Добавляем в конструктор класса AppUi-приложения свойства окна, скрывающие его от глаз пользователя:
Для Symbian 9. Проблема в использовании приведенного для Symbian 7/8 кода тут состоит в том, что вызов второй статической функции в Symbian 9 блокирует любую активность приложения, включая отправку сообщений. Поэтому мы ограничиваемся вызовом первой функции и переопределяем метод класса CAknViewAppUi (от которого, собственно, и наследуется класс AppUi-приложения) – HandleForegroundEventL, вызываемого в момент, когда приложение получает или теряет фокус:
Все, теперь наше приложение при установке благополучно исчезает из меню аппарата, task-листа – и даже прячется, если пользователь вдруг каким-то образом найдет исполняемый файл в файловой системе и попытается запустить его вручную. Реализация механизма автостартаПрограммирование автостарта придется рассмотреть отдельно для Symbian 7/8 и для Symbian 9. Для Symbian 7/8. В самой Symbian OS до версии 9.х не было явной поддержки механизма автостарта, и злые программисты для реализации своих темных планов были вынуждены использовать так называемые recognizers. Recognizers изначально являются механизмом для идентификации MIME–типа конкретного файла, позволяющим, к примеру, операционной системе определять, каким приложением открывать и редактировать файлы определенного типа. Для управления запуском приложений и сохранением данных, основанных на MIME–типах, в Series60 существует подсистема, именуемая Document Handler. Эта подсистема разработана для корректного сохранения и открытия контента, полученного, к примеру, через MMS–сообщения, WAP-закачки, bluetooth и т.д. Проще говоря, механизм позволяет при открытии картинки из аттача сообщений открыть ее именно программой просмотра сообщений, а не чем-то еще. В Series60 развит так называемый embedded launching, – то есть, если в приложении А требуется обработка контента по типу, соответствующему приложению В, то приложение А вызывает приложение В и передает ему контент. При этом вернуться в приложение А можно только по факту завершения работы с контентом в В. Примером служит открытие в WEB-браузере смартфона ссылки на jpg-картинку. Для просмотра файла запускается Image Viewer, и только после его закрытия можно вернуться к браузеру. Привязка конкретных приложений к конкретным типам осуществляется путем хранения соответствий MIME-типов уникальным идентификаторам приложений (UID). Чтобы помочь Symbian OS определить, каким приложением нужно открывать файл с конкретным разрешением или MIME-типом, и были созданы recognizers. По своей сути recognizer – это dll, имеющая разрешение mdl и сохраняемая в директории c:\system\recogs смартфона. При старте смартфона ОС регистрирует соответствия вида «MIME–тип / UID приложения» путем вызова кода recognizer’ов. Именно этот факт и можно использовать для автостарта приложения. В нашем случае процедура реализации автостарта следующая:
Процесс довольно сложен для восприятия, но исходники, как обычно, прилагаются на диске к журналу. Здесь мы не будем их приводить из-за нехватки журнального места. Для Symbian 9. Тут, к счастью, все гораздо проще. Чтобы заставить нашу программу запускаться при старте мобилы, нужно проделать вот что: 1) Создать файл ресурсов (*.rss), называемый по UID3 приложения. В частности, если UID3 0x12345678, то файл ресурсов называем 12345678.rss. Содержать он будет следующий ресурс:
2) В MMP-файл добавляем команду компиляции файла ресурсов: 3) В pkg-файл добавляем строку:
В данном случае директория c:\private\101f875a\import является рабочим каталогом, на основании содержания которого формируется список автозагрузки. Мы, фактически, создали хороший и универсальный костяк для практически любой полезной софтины под Symbian. Идем дальше. Автоопределение точки доступаНа мой взгляд, это самая сложная часть. Базовая идея реализация механизма состоит в следующем: 1) Программно получаем список всех сохраненных в настройках устройства точек доступа. Среди них будут как GPRS-, так и WAP- и MMS-точки доступа. При получении списка точек доступа посредством класса CApSelect, который мы будем использовать, можно задавать фильтр составления списка, в том числе и по типу точки доступа (GPRS/WAP/MMS). Мы рекомендуем фильтрацию не проводить, поскольку принадлежность конкретной точки доступа к конкретному типу (с точки зрения CApSelect) не гарантирует, что через эту точку доступа нельзя достучаться до нашего сервера (или что, наоборот, можно). 2) Начинаем перебирать каждую точку доступа из списка, используя ее для тестового соединения с удаленным echo-сервером, отправляющим клиенту (нашей программе) в точности тот же набор байт, который он получил от него. Проще говоря, пытаемся отправить на эхо-сервис байты 0x01,0x02 и 0x03 и проверяем, получили ли мы их обратно. Условие приема данной комбинации байт является необходимым и достаточным для идентификации того, что точка доступа может быть использована для соединения с сервером. В случае любого другого результата – таймаут запроса, код ошибки и т.д. – мы идентифицируем точку доступа как нерабочую. 3) Сохраняем идентификатор полученной рабочей точки доступа и используем ее для соединения с сервером. Для получения списка точек доступа, как уже отмечалось, используется экземпляр класса CApSelect. Его можно сделать членом класса AppUi-приложения и вызывать в конструкторе AppUi следующий код (будет, соответственно, вызываться при старте приложения):
Здесь мы подсоединяемся к базе данных commDB и создаем список точек доступа. После этого устанавливаем индекс списка на первую позицию (советую изучить описание CApSelect в SDK). Теперь можно тестировать точки доступа. В качестве движка работоспособности точки доступа используется модифицированный движок TCP, исходные коды которого можно взять на forum.nokia.com. Модификация заключается в том, что добавлен класс – observer (MtcpipIapCheckEngineObserver), содержащий единственный метод TestCompleted, вызываемый движком при индикации процесса окончании тестирования конкретной точки доступа. В нашем случае от MTcpipIapCheckEngineObserver наследуется AppUi. Мы также не публикуем здесь исходный текст движка CIapCheckTcpEngine, но с ним рекомендуется ознакомиться (есть на нашем диске). Отметим, что вся логика использования экземпляра класса CIapCheckTcpEngine в AppUi заключается в обработке вызова TestCompleted, параметром которого как раз и является индикатор успешности или неуспешности использования точки доступа. Код TestCompleted выглядит так:
Как видно, в случае успеха, мы коннектимся к серверу и обновляем номер. Коннект к серверу и чтение настроекЧтобы иметь возможность удаленно задать хакерской софтине номер, на который нужно слать недешевое sms, взломщики реализуют некое подобие админки (смотри картинку). Проще всего сделать это с использованием стандартной связки PHP + MySQL. После изменения и занесения номера в базу на сервере необходимо реализовать простенький интерфейс взаимодействия с мобильным телефоном. Тут можно пойти разными путями:
В общем, это уже дело вкуса. Главное, корректно обработать отдаваемые сервером данные на стороне мобильного приложения. Проще всего снова пойти на forum.nokia.com или пошариться на нашем диске и ознакомиться с кодом http-движка, позволяющего осуществлять GET-запросы. Использование экземпляра класса движка из AppUi выглядит примерно так:
Здесь iUri – url скрипта, возвращающего номер, а iIapId – идентификатор точки доступа, которую мы решили использовать. После получения ответа от сервера нужно позаботиться о том, чтобы сохранить номер в файл или в локальную переменную, и отправить sms. Механизм отправки smsЭтот функционал уже неоднократно описывался на страницах нашего журнала, поэтому либо подними старые номера, либо ознакомься с материалами на сайте http://dtarasov.ru. Сертификация приложенияКак говорилось выше, чтобы приложения могли беспрепятственно устанавливаться в смартфоны под управлением Symbian 9, необходимо их подписывать цифровым сертификатом. Эта мера была введена в рамках технологии Symbian Platform Security, появившейся в Symbian OS 9.1 и предназначенной для защиты как раз от подобного софта. Если попытаться вкратце сформулировать суть проблемы, то есть два пути, чтобы заставить приложение установиться в телефон пользователя:
Очевидно, что из указанных способов первый едва ли может быть применим – хакер просто не сумеет собрать IMEI всех мобил, в которые желает внедриться. Единственный путь – сертификация посредством Express Signed. Все осложняет один факт – для того, чтобы воспользоваться Express Signed, необходимо иметь универсальный идентификатор поставщика услуг Publisher ID. Стоит он $200 в год и отпускается исключительно юридическим лицам, представившим учредительские документы в TrustCenter. Подробнее о Publisher ID можно прочитать на http://dtarasov.ru. Процедура регистрации Publisher ID может выглядеть примерно так:
Все, Publisher ID получен. Тонким моментом здесь является отправка учредительских документов юридического лица. Обычно хакеры изыскивают возможность отправки каких-нибудь поддельных или чужих документов. Как показывает практика, у Trustcenter нет возможности проверить их подлинность, поэтому их рисуют даже в фотошопе. После получения Publisher ID взломщик получает доступ к Express Signed – и возможность сабмитить свеженаписанный троян на подпись. Здесь шаги следующие:
Даже если пункты 4 и 5 будут иметь место (что совсем не факт), то, в любом случае, взломщик успеет скачать подписанный троян и сможет начать его популяризацию. Для распространения заразы Publisher ID не нужен и, даже если его заблокируют, это уже малоинтересно, ибо делали его на подставные документы. Таким вот незаурядным способом обходится защита Symbian Platform Security. Кстати, ты заметил, что во всех этих случаях я описываю деятельность некоего «хакера»? Это неспроста, поскольку сам я подобными вещами никогда не занимался и тебе не советую – мы всего лишь описываем то, как оно случается. Просто будь в курсе и знай, что самые современные технологии от Симбиан не могут защитить твою мобилу на сто процентов. Happy EndКак видно, задача написания функционального трояна для Symbian не такая уж и тривиальная, но вполне выполнимая. Сейчас угроза безопасности не так явна в силу относительной сложности описанных процедур реализации. Вирусописатели еще не успели наплодить массу опасного ПО. Но со временем они его наплодят, поэтому пользователям мобильных устройств стоит внимательнее относиться к устанавливаемому ПО, тем более, из непроверенных источников. Если же читатель заинтересован в разработке или использовании подобных «продуктов», то напоминаем, что это противозаконная деятельность, которая может привести к печальным последствиям! DVDНа диске лежат исходные коды основных классов приложения. WWWТема разработки шпионского ПО для Symbian раскрыта на http://dtarasov.ru. Также рекомендуется регулярно посещать forum.nokia.com. WARNINGМинистерство здравоохранения ][ еще раз напоминает, что данная статья написана исключительно в образовательных целях. Мы не несем ответственности за противозаконное применение этой информации. Короткий номер и Premium SMSДумается, читатель знаком с механизмом оплаты контента и услуг посредством мобильного телефона, когда для получения контента требуется отправить sms на какой-нибудь короткий номер с определенным текстом. Стоимость таких сообщений может варировать от 0,06 до 5$. Эти дорогие sms и называются Premium SMS. Непосредственно короткий номер принадлежит операторам сотовой связи, так что, по идее, вопрос аренды нужно решать с каждым оператором отдельно. Дабы сильно не заморачиваться с утрясанием всяких бюрократических вопросов, касающихся аренды короткого номера, предприимчивые люди обычно пользуются услугами агрегаторов вроде СМС-Трафик (http://www.smstraffic.ru), которые берут на себя вопросы заключения договоров со всеми операторами. При этом обычно схема взаимодействия с агрегатором примерно следующая:
Понятно, что арендовать короткий номер и грести деньги с отправленных на него sms может любой, и мошенники – не исключение. На рынке присутствуют несколько контор, которые позволяют арендовать короткий номер, не оставляя о себе приватной информации. |