Анализ обнаружения обфусцированных вирусов мобильными антивирусными приложениями на платформе Android

    image
    Команда УЦСБ провела независимое исследование для того, чтобы протестировать работу популярных антивирусных приложений для Android. С результатами этого исследования я делилась на конференции phdays VI, но хотелось бы более подробно остановиться на применении обфускаторов для обхода механизмов обнаружения вирусов.

    Методы обфускации
    В свободном доступе существует довольно много различных обфускаторов. Для применения в рамках исследования были выбраны три бесплатных, а в качестве дополнения был написан еще один, выполняющий функции, которых на наш взгляд не хватало в предыдущих.
    Во-первых, были выбраны два обфускатора, работающих с исходным кодом – это Proguard и Alatori.
    ProGuard внедрен в систему сборки Android приложений – Android Studio и запускается вместе со сборкой приложения в «release» режиме. Официально эта утилита предназначена для сокращения, оптимизации и обфускации кода.
    ProGuard умеет переименовывать имена методов и некоторых классов, а в качестве уникальной особенности можно выделить то, что данный обфускатор единственный удаляет всю отладочную информацию (имена файлов с исходным кодом класса и номера строк в коде).
    Аналогично рассмотренному Proguard, Alatori умеет переименовывать имена свойств и методов, а также некоторые имена классов, а еще частично удаляет отладочную информацию — меняет имя файла с исходным кодом, не удаляя при этом номера строк. Главным отличием Alatori является шифрование строк (алгоритмом xor с ключем 0x20).
    Во-вторых, был рассмотрен обфускатор, работающий с байт-кодом в формате smali – Adam.
    А поскольку утилита apktool легко генерирует такой байт-код из apk-файла, то для обфускации приложения при помощи Adam не требуется исходный код этого приложения.
    Адам поддерживает 4 метода обфускации, на примере которых можно наглядно рассмотреть, как видоизменяется код после обфускации:
    1) Добавление в код каждого класса дополнительного метода.
    БЫЛО СТАЛО
    Код метода1
    Код метода2
    Код метода1
    .method public SparkLog(Ljava/lang/String;)V
    const-string v0, «SparkLog»
    invoke-static {v0, p0}, Lcom/lohan/lohanLog;->Log(Ljava/lang/String;Ljava/lang/String;)V
    .end method
    Код метода2

    2) Изменение имён методов классов
    БЫЛО
    СТАЛО
    .method private
    capitalize(Ljava/lang/String;)Ljava/lang/String;
    .method private
    capitalizeabc123 (Ljava/lang/String;)Ljava/lang/String;

    3) Изменение потока выполнения.
    Вначале реализации каждого метода ставится goto инструкция безусловного перехода в конец метода. После происходит безусловный переход в начало, сразу за инструкцией перехода, где продолжится нормальное выполнение кода.
    БЫЛО
    СТАЛО
    .method private capitalize(Ljava/lang/String;)Ljava/lang/String;
    Кодметода
    .end method
    .method private
    capitalize(Ljava/lang/String;)Ljava/lang/String;
    goto :CFGGoto2
    :CFGGoto1
    Кодметода
    :CFGGoto2
    goto :CFGGoto1
    .end method

    4) Шифрование строк кода.
    Все инструкции объявления строковых переменных заменяются на инструкции объявления зашифрованной строковой переменной и вызовом статического метода, расшифровывающую строку.
    БЫЛО
    СТАЛО
    const-string v5, «http.protocol.content-charset»
    const-string v5, "rddz.zbydymyv.myxdoxd-mrkbcod"
    invoke-static {v5}, Lcom/mzhengDS;->DecryptString(Ljava/lang/String;)Ljava/lang/String;
    move-result-object v5

    Тестирование антивирусов на обфусцированных приложениях
    Для тестирования обфусцированных приложений было решено взять один новый троян (приложение malware.apk, включающее некоторый опасный потенциал) и один известный – дендроид (известный, потому что его сигнатуры определяют многие антивирусы). Кроме того, тестирование проводили еще и на модифицированном дендроид – почищенном от мусора в исходном коде, например, от неиспользуемых функции. К слову, даже просто убрав мусор, и пересобрав вредоносное приложение, некоторые антивирусы уже переставали на него реагировать.
    Результаты сканирования на virustotal отображены в таблице 1.
    Таблица 1 – результаты сканирования на virustotal
     
    Clean
    Proguard
    Alatori
    ADAM
    Malware.apk
    26
    17
    10
    18
    Dendroid
    35
    31
    24
    25
    Dendroid
    (модифицированный)
    28
    28
    21
    17

    Результаты сканирования на топовых мобильных антивирусных приложениях, установленных на смартфоне показаны в таблице 2.
    Таблица 2 – результаты сканирования мобильными антивирусами
     
    Clean
    Proguard
    Alatori
    ADAM
    Malware.apk
    6
    4
    4
    3
    Dendroid
    12
    11
    9
    11
    Dendroid
    (модифицированный)
    10
    9
    5
    9

    В большинстве случаев Alatory показал наилучшие результаты, предположительно, благодаря функции шифрования строк кода, кроме сканирования обфусцированного Malware.apk мобильными антивирусами. В этой ситуации лучше всех с заданием справился ADAM, а тремя антивирусами, обнаружившими вирус, стали Kaspersky, LookOut и AVAST.
    Снижение числа детектов до трёх – это конечно хорошо, но мы хотели добиться нулевого распознавания обфусцированного приложения (чего, кстати, сделать так и не удалось).
    Поэтому был разработан еще один обфускатор, умеющий работать с байт-кодом и сочетающий лучшие стороны уже рассмотренных обфускаторов. А в следствие того, что он прекрасно дополнил ADAM умением шифровать имена пакетов и классов (алгоритмом xor как в Alatori, но на этот раз с переменным ключом), обфускатор был назван – EVA.
    На рисунке 1 показан фрагмент AndroidManifest.xml после обфускации EVA, в котором были изменены (зашифрованы) все имена классов и пакетов. После работы EVA обфусцированный байт-код необходимо пересобрать с помощью apktool обратно в apk-файл и переподписать его.
    image
    Рисунок 1 – фрагмент AndroidManifest.xml после обфускации EVA
    Результаты сканирования приложений, обфусцированных EVA приведены в таблицах 3 и 4.

    Таблица 3 – результаты сканирования на virustotal
     
    Clean
    Eva
    Malware.apk
    26
    3
    Dendroid
    35
    12

    Таблица 4 — результаты сканирования мобильными антивирусами
     
    Clean
    Eva
    Malware.apk
    6
    1
    Dendroid
    12
    11

    Таким образом, EVA показала наилучшие результаты среди обфускаторов. Для malware.apk удалось добиться единичного детекта со стороны мобильных антивирусов, причем единственным антивирусом, обнаружившим вирус оказался AVAST.

    Но и это еще не всё!
    Во-первых, простая перепаковка приложения с помощью apktool уменьшает число детектов уже в несколько раз.
    Во-вторых, комбинация различных методов и обфускаторов значительно улучшает результаты. Так применение EVA, ADAM и Proguard в любой последовательности и любое количество раз позволило снизить число детектов на virustotal тоже до 1. Здесь нулевого детекта, к сожалению, также добиться не удалось. А вот единственным антивирусом, обнаружившим вирус, на этот раз оказался некий Ahnlab-V3.
    В-третьих, было подмечено, что Kaspersky перестает реагировать на вирус после применения любого шифрующего метода, правда через некоторое время его базы обновляются и детект возобновляется.

    Вместо заключения
    Поскольку приложение malware.apk в части запрашиваемых прав на устройстве ничем не отличалось от стандартного мессенджера, был взят и прообфусцирован популярный WhatsApp, который, естественно, не является вредоносным изначально.
    Обфускация мессенджера проводилась тремя способами:
    1) простой перепаковкой;
    2) обфускацией байт-кода с использованием ADAM;
    3) обфускацией байт-кода с использованием EVA.
    Правда при попытке обфускации имен классов и пакетов трансформация приложения оказывалась слишком сильной и приложение аварийно завершалось.
    Кроме этого, из-за наличия у WhatsApp проверки контрольной суммы образа, даже в случае успешной обфускации, приложение отказывалось работать, предлагая себя переустановить.
    В итоге, обфусцированный WhatsApp, во всех 3х случаях, определялся в качестве вредоносного ПО двумя антивирусами – Avast и Lookout.
    • +7
    • 11.8k
    • 8
    Share post
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 8

      0
      Что касательно EVA. Вы планируете его выложить в открытый доступ или на платной основе? Или это лишь для тестирования?
        +1
        нет, не планируем, разрабатывали для тестирования
          0
          Очень жаль, было бы интересно протестировать в живую
        +2
        Вот почему народ думает, что внутри антивируса некий исcкуственный интеллект, который магически взглянув на программу определяет ее вредоносность?
          0
          Практически у всех антивирусов сейчас имеется эвристический анализ, который по определенным критериям может с большой вероятностью определить направленность программы.
            +2
            Эвристический анализ может определять новые модификации известных угроз. Написав новый обфускатор/перепаковщик вы эвристик обойдете. Посему статей на хабре по типу я написал новый вирус, а он не ловится никем — тележка наберется. Новая угроза ловится поведенческим анализатором. Но по малости ресурсов таковых в андроидных решениях не водится.
            А вот если бы вы провели тесты на самозащиту и лечение активных угроз — вот это было бы реально нужно для людей, выбирающих решение.
            И кстати отмеченный вами рост распознавания на вирустотале — это действительно проблема безопасности
              +1
              Настоящая статья затрагивает только вопрос детекта обфусцированных приложений и не раскрывает полной сути исследования, которое было значительно шире. С обобщенными результатами исследования можно ознакомиться на сайте securitylab http://www.securitylab.ru/analytics/483120.php, там кстати приводятся имена антивирусов, справившихся с проверкой.
                0
                Да. я видел. Собственно и мнение высказал по итогам этих двух статей

        Only users with full accounts can post comments. Log in, please.