В данной статье проведем попытку изучения используемых конструкций языка программирования для работы вредоносного программного обеспечения. Основная задача — выяснить, содержат ли вредоносы для ОС Android какие-либо полезные и интересные недокументированные возможности ОС или же это просто приложения, которые ловко выполняют свой функционал при помощи стандартных приемов. ВПО может состоять из десятков тысяч строк исходного кода, если не больше. Поэтому для ориентира в этом море кода будем рассматривать следующие характеристики: используемый язык программирования; набор привилегий, которые доступны ПО; процедура предоставления удаленного доступа; особенности реализации программного обеспечения (если есть). Disclamer: Статья не претендует на полноту описываемой информации и предоставляет информацию только в образовательных целях. Как известно, система Android своим ядром обязана Linux. И как свой прародитель, ОС Android считалась неприступной для вредоносного программного обеспечения. По мере развития системы в нее добавлялись новые функции, которые должны были еще больше обезопасить систему. Среди них: песочница для каждого отдельного приложения; организация доступа к ресурсам ОС за счет большого количества правил SELinux подсистемы; использование нотификации для пользователей с перечнем необходимых для работы приложения привилегий. Однако и это не помогло на 100% защитить систему. Почему? Наиболее распространенный способ инфицирования данной ОС — использование патченного софта и социальная инженерия. Причем обычно пользователям предлагается работать с интерфейсом, который неотличим от системного — то есть любое приложение ОС Android может использовать нотификации и Intent`ы, которыми пользуется сама ОС.  ВПО под Android развивается отчасти по пути open source: в сеть периодически попадают исходные коды вредоносов, которое использовалось злоумышленниками, что в свою очередь помогает менее квалифицированным «вирусописателям» ускорить создание своих зловредов. Попробуем раздобыть эти исходники из публичных источников. Первым подопытным будет троян Anubis. Вот тут есть относительно свежая новость о том, с чем и как работает этот троян. Используемый язык программирования: Java. Для этого даже не нужно вычитывать исходники проекта, поскольку почти все файлы имеют расширение Java. Набор требуемых привилегий на самом деле зашкаливает. Приведем часть AndroidManifest: Похоже, что приложение будет системным, а также будет практически 24/7 мониторить активность пользователя и получать необходимые данные для своих целей. ОС не должна препятствовать деятельности этого приложения, если пользователь согласился с таким набором привилегий. ВПО представляет собой троян, который может предоставлять доступ к зараженному устройству. Это осуществляется через создание сервиса, который имеет говорящее название "ServiceRAT". Регистрируется он стандартно — через манифест. Часть исходника самого сервиса: Никаких изысков, используем http для передачи данных, и «шифруем» всё через RC4. Можно бы было придраться к code style, но похоже, что злоумышленники не парятся о подобном. Сам вредонос работает классически — получает зашифрованные данные от сервера и выполняет: Если смотреть код управления устройством полностью, то глаз зацепится за вот такой фрагмент: Похоже, у автора была 100% уверенность, что любая команда для вредоноса будет введена всегда 100% корректно. Поэтому можно не переживать о наполнении opendir и просто выполнить команду. Вывод: данный зловред никаких интересных «трюков» не использует. Разрешенные действия, которые описаны полностью в манифесте подчиняют практически полностью всю ОС. Все функции реализованы в рамках стандартного использования функций ОС и её библиотек. Отсутствует code style. Ещё один зловред, исходный код которого утёк в сеть. Недавняя новость о его функционале. Данная малвара имеет интересную особенность: практически все функции реализованы в отдельном файле, видимо разработчик таким образом хотел вынести весь алгоритм и иметь возможность обфусцировать его автоматическими средствами. Возможно, так было бы удобнее еще добавлять дополнительный функционал, но если задуматься, вероятно это один из методов обхода механизма проверки приложений для Google Play, так как вредонос достаточно часто светится в официальном магазине. Используемый язык программирования: Java. Набор привилегий: Объявления привилегий нет, у приложения всего лишь один Intent. Фрагмент исходника обработчика: Как было упомянуто ранее, основной алгоритм ВПО записан в отдельный модуль. Отследить работу алгоритма можно по объекту "tt". Автор вредоноса также не особенно переживает за поддержку данного кода, все объекты не имеют четкого именования. Видимо, данный модуль не планировали использовать долго.  Функционал вредоноса не ограничивается отправкой СМС, в нем так же есть работа с апдейтом модуля приложения: Дополнительный файл "system.apk", к сожалению, отсутствует среди исходников, но вероятно он загружался с управляющего сервера. Удаленного доступа данный вредонос не предоставляет совсем. Весь функционал реализуется на основании конфига, который автоматически выполняет операции, которые ему передал злоумышленник на этапе запуска. Вывод: ВПО работает только с СМС, которые проксируются в лог и пересылаются на конкретный номер. Снова полное отсутствие code style. Еще одно ВПО, которое распространялось на ОС Android. Относительно свежую новость о нем можно найти здесь. Снова язык программирования — Java, похоже зловреды категорически не хотят использовать Kotlin. Набор запрашиваемых привилегий: ВПО славится тем, что может работать с пользовательским интерфейсом и воровать данные пользователя. Для подобного функционала в ОС Android необходимо обладать специальными привилегиями, которые выдаются только специальному функционалу — «Расширенные возможности ввода» (ACCESSIBILITY). Ниже приведен фрагмент кода, который старается такие привилегии запросить для возможности рисовать свой Intent поверх других приложений: Социальная инженерия во всей красе. Если система не дала запустить приложение с возможностью помещать свой Intent поверх других приложений — запросить у пользователя эту возможность. С высокой долей вероятности нотификацию от системы будет им подтверждена без  подозрений. Удаленный доступ к устройству в этом ВПО не предоставляется, весь функционал обрабатывается автоматически. Вывод: Код создавался более опытным программистом, есть осмысленное именование объектов. Функционал реализуется за счет возможностей самой ОС и применяется для социальной инженерии. Код вредоносного программного обеспечения в большинстве случаев не выходит за рамки обычного программирования для ОС Android. Более того, можно сказать, что большинство ВПО пишется самоучками, которые собирают функции по официальной документации. В коде отсутствует четкое определение объектов их функционала, нет обработки данных от пользователя, так как реализация функционала пишется «чтобы работало». По итогу «недокументированные функции ОС» — это лишь умелые манипуляции злоумышленников по вводу пользователя в заблуждение. Автор статьи — Александр Колесников.Статья подготовлена в рамках курсов "Android Developer. Basic" и "Android Developer. Professional". Также приглашаем на открытый вебинар на тему «Рисуем свой график котировок в Android». На занятии участники вмеcте с экспертом:— рассмотрят основные инструменты для рисования;— изучат возможности классов Canvas, Path, Paint;— нарисуют кастомизируемый график котировок и добавим в него анимаций.Присоединяйтесь!    Редактор