Таким образом, механизм, описанный в этой главе, позволяет троянцу модифицировать исходящие SMS-сообщения, отправляемые другими приложениями. Мы полагаем, что злоумышленники используют эту технику для незаметного воровства финансовых средств пользователей. Например, когда пользователь покупает что-то во внутриигровом магазине какой-нибудь игры для Android (если эта игра использует SDK для оплаты внутриигровых покупок через SMS — например, mm.sms.purchasesdk), злоумышленники могут модифицировать исходящее платежное SMS-сообщение таким образом, чтобы получить деньги пользователя вместо разработчиков игры. В результате пользователь, скорее всего, не заподозрит, что его деньги были украдены злоумышленниками. Но поскольку оплаченный контент он так и не получит, то, вероятно, подумает, что это баг в игре. Еще один вариант – деньги уходят злоумышленникам, но пользователь контент получает. В таком случае троянец совершает хищение финансовых средств не столько пользователя, сколько разработчиков легитимного ПО.
Фильтрация входящих SMS
Оригинальная функция dispatchPdus(), как показано на схеме ниже, используется для рассылки PDU-данных (Protocol Data Unit, низкоуровневая сущность представления данных, используется во многих коммуникационных протоколах) входящих SMS-сообщений всем установленным приложениям. Далее все приложения, подписанные на это событие, могут получать и обрабатывать входящие SMS-сообщения, которые приходят в виде PDU-данных вместе с широковещательным событием.
Функция, которая подменяет оригинальную dispatchPdus(), вызывает функцию moduleDispatchPdus() из configpppl.jar. Эта функция сначала проверяет, в контексте какого приложения она запущена, и, если это не com.android.phone (т. е. стандартное приложение «телефон»), то просто формирует и отправляет всем приложениям событие android.provider.Telephony.SMS_RECEIVED (вместе в пришедшими PDU) – стандартное событие, означающее получение входящего SMS-сообщения, на которое подписано, например, стандартное приложение для работы с SMS («Сообщения» или Hangouts).
Если же функция запущена в контексте приложения com.android.phone, то троянец проверяет, с какого номера и с каким текстом получено SMS-сообщение. Для проверок используются несколько файлов, которые находятся в директориях: / sdcard/Android/com/register/infowaitreceive/ и /sdcard/Android/com/register/historyInfo/. Имена файлов в этих директориях имеют постфикс, содержащий дату и время последнего обновления. И если файлы были обновлены раньше, чем происходило последнее обращение к C&C серверу, то они просто удаляются и никаких проверок пришедшей SMS дальше не происходит. Иначе, все файлы, найденные в указанных директориях, расшифровываются, и из них достаются и заносятся в список номера и ключевые слова (для поиска в тексте SMS-сообщения).
Если SMS-сообщение пришло с номера из списка или его текст содержит одно (или несколько) из ключевых слов, то троянец отправляет его вместе с событием android.provider.Telephony.SMS_RECEIVEDcom.android.sms.core, которое получат только те, кто подписан на него. На «чистом» Android устройстве нет ни одного такого приложения. Иначе, отправляет его вместе со стандартным событием android.provider.Telephony.SMS_RECEIVED. Таким образом некоторые входящие SMS-сообщения могут быть отфильтрованы, и ни пользователь, ни какое-либо установленное приложение в системе его не увидят.
Сокрытие модулей троянца из списка запущенных сервисов
Данная функция используется для получения списка запущенных сервисов. Подменяя эту функцию, троянец скрывает свои модули из этого списка. А именно исключает из списка, возвращаемого оригинальной функцией getRunningServices(), следующие элементы:
com.android.system.google.server.info
com.android.system.guardianship.info.server
com.android.sys.op
com.android.system.op.
com.android.system.kylin.
com.android.kylines.
Сокрытие модулей троянца из списка запущенных приложений
Данная функция используется для получения списка запущенных приложений. Подменяя эту функцию, троянец скрывает свои модули из этого списка. А именно исключает из списка, возвращаемого оригинальной функцией getRunningAppProcesses(), следующие элементы:
com.android.system.google.server.info
com.android.system.guardianship.info.server
com.android.sys.op
com.android.system.op.
com.android.system.kylin.
com.android.kylines.
Сокрытие модулей троянца из списка установленных пакетов
Данная функция используется для получения списка установленных пакетов. Подменяя эту функцию, троянец скрывает свои модули из этого списка. А именно исключает из списка, возвращаемого оригинальной функцией getInstalledPackages(), следующие элементы:
com.android.system.google.server.info
com.android.system.guardianship.info.server
com.android.sys.op
com.android.system.op.
com.android.system.kylin.
com.android.kylines.
Сокрытие модулей троянца из списка установленных приложений
Данная функция используется для получения списка установленных пакетов приложений. Подменяя эту функцию, троянец скрывает свои модули из этого списка. А именно исключает из списка, возвращаемого оригинальной функцией getInstalledApplications(), следующие элементы:
com.android.system.google.server.info
com.android.system.guardianship.info.server
com.android.sys.op
com.android.system.op.
com.android.system.kylin.
com.android.kylines.
Заключение
Приложения, втайне от пользователя получающие root-доступ на мобильном устройстве, предоставляют доступ к зараженному устройству более сложным и опасным зловредам – в частности, мобильному троянцу Triada, самому сложному из известных нам. После попадания на устройство пользователя Triada внедряется практически во все запущенные процессы и продолжает существовать только в оперативной памяти. Кроме того, все отдельно запущенные процессы троянца скрываются от пользователя и других приложений. В итоге обнаружение и удаление троянца становится крайне затруднительным как для пользователя, так и для защитных решений антивирусных компаний.
Основная функциональность троянца направлена на перенаправление финансовых SMS-транзакций, осуществляемых в ходе оплаты пользователем различного дополнительного контента в легитимных приложениях. После оплаты деньги пользователя попадают не к разработчику ПО, а к злоумышленникам. В зависимости от того, получает ли пользователь оплаченный контент, троянец совершает хищение финансовых средств либо у пользователя (если контент пользователем не получен), либо у разработчиков легитимного ПО (если контент пользователем получен).
Очевидно, что троянец Triada разработан киберпреступниками, которые очень хорошо разбираются в атакуемой мобильной платформе. Спектр техник, использованных данным троянцем, не встречается ни в одном из известных нам мобильных зловредов. Использованные методы сокрытия и получения персистентности позволяют эффективно избегать обнаружения и удаления всех компонетов зловреда после их установки на зараженном устройстве, а модульная архитектура позволяет злоумышленникам расширять и менять функциональность, и ограничивают их только возможности операционной системы и установленные на устройстве приложения. Так как зловред проникает во все приложения, установленные на системе, киберпреступники потенциально могут модифицировать их логику, чтобы реализовать новые векторы атаки на пользователей и максимизировать свою прибыль.
По сложности Triada не уступает Windows-зловредам, что знаменует своеобразный Рубикон в эволюции угроз, направленных на платформу Android. Если раньше большинство троянцев под эту платформу были довольно примитивными, то теперь «на сцену» выходят новые угрозы – с высоким уровнем технической сложности.
Источник:
https://securelist.ru/analysis/obzor/28121/attack-on-zygote-a-new-twist-in-the-evolution-of-mobile-threats/
Нет комментариев