В статье рассматриваются основные принципы обнаружения и анализа предположительно вредоносных программ в операционной системе Android, широко используемой в смартфонах и планшетах. Перечислены основные инструменты, используемые экспертами для анализа приложений для Android.
2. Общая характеристика вредоносных приложений для Android
3. Обнаружение вредоносных приложений для Android
4. Методы противодействия криминалистическому исследованию и способы борьбы с ними
5. Анализ следов предположительно вредоносных программ
Введение
Мобильные устройства хранят огромное количество важной персональной информации, включая платежную, что делает их привлекательными для киберпреступников. Развитие мобильных ОС, например iOS и Android, а также техническая эволюция смартфонов и планшетов привели к росту популярности последних. Результатом высокого спроса, а также множества уязвимостей операционной системы и отсутствия средств антивирусной защиты стал интерес киберпреступников к разработке или покупке приложений, реализующих вредоносные функции на мобильных платформах. Это, в свою очередь, поставило перед специалистами в области судебной компьютерной (компьютерно-технической) экспертизы новые задачи.
Общая характеристика вредоносных приложений для Android
Для написания большинства приложений, работающих в ОС Android, используется язык программирования Java. Выполняются программы в системе посредством AndroidRuntime начиная с версии 4.4.
Для того чтобы проводить анализ приложений, эксперту необходимо понять их формат. Рассматриваемые приложения хранятся в памяти мобильного устройства в формате APK, причем приложение сначала компилируется, а уже после упаковывается в APK-файл вместе со всеми составляющими. Указанный файл представляет собой ZIP-архив, включающий байт-коды, ресурсы, сертификаты и manifest-файл. После установки APK-файл копируется в соответствующее место файловой системы. Для системных приложений это обычно /system/app, для пользовательских — /data/app.
С криминалистической точки зрения APK-файл содержит три наиболее важных части: сигнатура, байт-код и ресурсы.
Сигнатура содержит контрольную сумму APK-файла, которая может быть использована экспертом, чтобы установить, не повреждено ли приложение. Кроме того, эксперт может собирать сигнатуры программ, в том числе предположительно вредоносных, и использовать для их быстрой идентификации в памяти исследуемого носителя цифровой информации.
Исполняемая часть приложения хранится в файле classes.dex, размещенном в архиве (APK-файл), и содержит все его скомпилированные классы, представленные в виде байт-кодов. Необходимо отметить, что байт-код здесь преобразован в инструкции для виртуальной машины AndroidRuntime, так как последняя, в отличие от виртуальной машины Java, основана на регистрах. Также APK-файл может содержать заранее скомпилированный код (каталог lib).
В качестве ресурсов выступают части приложения, не требующие исполнения, например компоненты пользовательского интерфейса. Наиболее важной частью ресурсов, с точки зрения криминалистического исследования, является файл AndroidManifest.xml. Указанный файл содержит сведения о разрешениях, запрашиваемых приложением при установке. Так, некоторые приложения, чтобы получить доступ с защищенным API ОС Android, запрашивают разрешение на доступ к чтению сообщений, контактам и т. д. Анализ рассматриваемого файла является важнейшим шагом для обнаружения вредоносных функций того или иного приложения.
Обнаружение вредоносных приложений для Android
Несмотря на то, что существуют специализированные приложения, предназначенные для обнаружения вредоносных программ, это не решает рассматриваемой проблемы цифровой криминалистики. Кроме того, в ходе криминалистического исследования эксперту необходимо не просто обнаружить потенциальный вредонос, но и проанализировать его код, а также произвести реконструкцию его действий.
Чтобы обнаружить потенциально вредоносные приложения, эксперт может использовать контрольные суммы. База данных (БД) контрольных сумм может быть собрана на основе данных, представленных, например, в Google Play. Тот факт, что контрольная сумма приложения не соответствует ни одной из имеющихся в БД, может указывать на то, что приложение является вредоносным. Разумеется, для однозначного вывода данной информации недостаточно: требуется более глубокий анализ.
Необходимость в получении разрешений — уникальная черта программного обеспечения ОС Android. Необходимо отметить, что приложению достаточно получить права единожды — при инсталляции. Многие пользователи игнорируют данный запрос, что и приводит к тому, что кажущееся безобидным на первый взгляд приложение получает все необходимые ему права. Подозрительные разрешения — один из главных признаков, характеризующих приложение как вредоносное.
Методы противодействия криминалистическому исследованию и способы борьбы с ними
Специалисты выделяют четыре наиболее распространенных способа противодействия криминалистическому исследованию предположительно вредоносных приложений в ОС Android: обфускация, шифрование символьных строк, противодействие декомпилятору и проверка окружения.
Обфускация позволяет разработчикам, сохранив функциональность программы, привести ее код к такому виду, что его анализ и понимание алгоритмов работы будет затруднено.
Перед тем как производить деобфускацию кода, эксперту необходимо произвести декомпиляцию предположительно вредоносной программы. К сожалению, на современном этапе развития декомпиляторы не могут разбирать программы идеально. Полученный с их помощью код отличается наличием ошибок и неполнотой. Тем не менее байт-код, несмотря на свою сложность, всегда точен. Из этого следует, что в ходе анализа предположительно вредоносных программ эксперт должен опираться не только на декомпилированный исходный код, но и на байт-код.
Для того чтобы извлечь байт-код (в .dex формате) из APK-файла, эксперт может воспользоваться, например, ApkTool. Для декомпиляции байт-кода в исходный код Java и последующего анализа может быть использована связка программных продуктов, состоящая, например, из Dex2Jar (декомпиляция) и JD-GUI (анализ). Полученный в результате декомпиляции исходный код Java нуждается в редактировании: может возникнуть необходимость удалить пустые классы, поправить ошибки, осуществить переименования методов, классов и их объектов и т. д.
Символьные строки, содержащиеся в предположительно вредоносной программе, являются важнейшим источником криминалистически значимой информации. Для реализации шифрования символьных строк разработчиками используются как сравнительно простые алгоритмы, такие как XOR, Base64 и ROT13 (включая его вариации, например, ROT15), так и продвинутые криптографические стандарты, например DES и AES.
Так, идентификация символьных строк, зашифрованных применением алгоритма XOR, может быть осуществлена экспертом посредством программного продукта XORSearch разработки Дидье Стивенса.
Необходимо отметить, что злоумышленниками применяются различные методы, позволяющие избежать детектирования рассматриваемого алгоритма. Например, шифрование с применением XOR осуществляется в два этапа: сначала с использованием одного значения, затем — другого.
Существует огромное количество программ и онлайн-сервисов, позволяющих привести строки, закодированные Base64, в читаемый вид. Несмотря на то, что обойти подобное шифрование достаточно просто, эксперт все же может столкнуться с трудностями. Например, создатели вредоноса могут изменить последовательность символов в алфавите Base64, что помешает работе стандартных декодировщиков.
ROT13 — наиболее простой алгоритм из трех рассматриваемых. Но существуют и его модификации, способные усложнить декодирование. Так разработчиками вредоносного программного обеспечения может использоваться модификация этого алгоритма, например ROT15, которая осуществляет сдвиг не на 13 позиций, а на 15.
Некоторые вредоносные программы написаны таким образом, что их функционирование возможно только на определенных типах мобильных устройств. Приложением осуществляется проверка как свойств системы, так и международного идентификатора мобильного абонента (IMSI). Таким образом, программа не выполняется, если устройство или эмулятор не проходит проверку, что затрудняет проведение динамического анализа.
Обойти рассматриваемую меру противодействия криминалистическому анализу можно, модифицировав код обнаруженной предположительно вредоносной программы.
Анализ следов предположительно вредоносных программ
Исследователи различают два типа анализа предположительно вредоносных программ: динамический и статический.
В рамках динамического анализа предположительно вредоносной программы, который иногда называют поведенческим, рассматриваются особенности ее поведения, в частности, как она взаимодействует с системой, какие данные собирает, какие сетевые соединения устанавливает и т. д.
Для проведения динамического (поведенческого) анализа экспертом может быть использован, например, программный продукт DroidBox. Он позволяет собрать следующую информацию о программе и ее деятельности в системе:
- хеш-сумма APK-файла (алгоритмы MD5, SHA-1 и SHA-256);
- сведения о полученных и отправленных по сети данных;
- сведения об операциях чтения и записи файлов;
- сведения о запущенных службах и загруженных классах;
- сведения о сборе и отправке пользовательских данных;
- сведения о разрешениях, которые получило приложение;
- сведения о криптографических операциях, осуществляемых приложением с использованием Android API;
- сведения об отправляемых SMS-сообщениях и осуществляемых вызовах.
По результатам эксперт получит для анализа набор файлов в формате JSON, содержащих указанные сведения.
Необходимо отметить, что рассматриваемый программный продукт предназначен для работы в операционных системах Linux и Mac OS X. Однако большинство экспертов используют рабочие станции под управлением операционной системы семейства Windows. Решением данной проблемы может послужить создание виртуальной машины и установка соответствующей операционной системы или использование уже готового дистрибутива, например Santoku Linux.
В рамках статического анализа предположительно вредоносной программы производится анализ ее кода. Главной задачей рассматриваемого типа анализа является выделение части кода, ответственной за предположительно вредоносные действия исследуемой программы.
Существует два наиболее распространенных способа проведения статического анализа, а именно с использованием ApkTool или Dex2Jar и JD-GUI.
ApkTool позволяет произвести дизассемблирование предположительно вредоносной программы. В результате эксперт получит несколько файлов и каталогов, в том числе:
- файл Android Manifest, который содержит сведения о разрешениях, запрашиваемых приложением, а также о точках входа;
- каталог res, который содержит XML-файлы, описывающие макет приложения, а также необходимые ему графические файлы и т. д.;
- каталог smali, содержащий файлы .smali (операционный код), которые могут быть проанализированы посредством текстового редактора с подсветкой синтаксиса, например, Notepad++.
Чтобы воспользоваться Dex2Jar, эксперту необходимо предварительно распаковать предположительно вредоносный APK-файл, после чего посредством рассматриваемого программного продукта преобразовать файл classes.dex (байт-код) в classes.dex.dex2jar.jar (java-код). Анализ полученного файла, содержащего исходный код Java, может быть произведен посредством программного продукта JD-GUI.
Рисунок 1. Этапы обнаружения и анализа следов предположительно вредоносного поведения программ в ОС Android
Выводы
В данной статье мы рассмотрели основные принципы обнаружения и анализа предположительно вредоносных программ в операционной системе Android. Также были рассмотрены основные инструменты, используемые экспертами для анализа приложений в этой операционной системе. В последующих статьях мы более подробно остановимся на способах и средствах, которые могут быть использованы для анализа предположительно вредоносных программ, а также приведем примеры подобного анализа.
Авторы:
Михайлов Игорь Юрьевич