Применяемые при проверке подписи приложения цифровые сертификаты (электронные документы, в которых хранится цифровой ключ) издаются специальными удостоверяющими центрами. Если система доверяет удостоверяющему центру, она автоматически доверяет и всем изданным им сертификатам, которые использует приложение. При проверке (валидации) цифровой подписи приложения операционная система использует открытый ключ разработчика программы. Чтобы убедиться в действительности этого ключа, требуется выполнить проверку соответствующего сертификата удостоверяющего центра. Это называется проверкой цепочки сертификатов. Уязвимость заключается в том, что в процессе установки приложения ранние версии Android не выполняли такую проверку вовсе.
В качестве практической реализации уязвимости можно привести такой пример. Если приложение подписано двумя цифровыми сертификатами: подлинным и поддельным, то при его установке будет создана цифровая подпись, использующая оба сертификата. В результате приложение сможет, например, скачивать и устанавливать вредоносные обновления, которые не будут проверяться на безопасность, если разработчик подпишет их с помощью того же недостоверного сертификата.
Некоторые приложения Android могут использовать учетные данные пользователя для автоматической авторизации в различных интернет-сервисах. В этом случае пользователю достаточно указать свои логин и пароль один раз, после чего они регистрируются в специальном разделе системных настроек «Аккаунты», к которому приложение обращается всякий раз, когда ему необходимо пройти аутентификацию. При создании такой учетной записи ОС передает приложению различные параметры, среди которых имеется параметр PendingIntent . Из-за ошибки в реализации вызываемого при регистрации аккаунта метода addAccount в Android 4.0–4.4 система не проверяет значения этого поля, поэтому злоумышленник может передать в PendingIntent фактически любую команду, которая будет выполнена с теми же привилегиями, что и направившее его приложение «Настройки», — системными. Например, можно сформировать команду на удаление хранящихся на устройстве файлов или последовательность байтов, которая будет воспринята системой как входящее SMS-сообщение. Так, если в параметре PendingIntent будет передана команда android.intent.action.MASTER_CLEAR , Android послушно выполнит полный системный сброс с уничтожением всей хранящейся на устройстве информации.
А вот пример очень хитрой уязвимости. Эта уязвимость, получившая название ToastOverlay, была обнаружена в 2017 году и затрагивает все версии Android с 4.0 по 7.1.2 включительно. Ошибку разработчики допустили в подсистеме оверлеев — окон, способных отображаться поверх других экранных форм.
Использующему уязвимость приложению достаточно объявить в манифесте только одно разрешение — BIND_ACCESSIBILITY_SERVICE . В обычных условиях для отображения окон типа TYPE_TOAST , предназначенных для показа системных уведомлений, приложению требуется отправить запрос SYSTEM_ALERT_WINDOW , однако благодаря ошибке в обработчике проверки разрешений Android AOSP вредоносная программа может обойтись без подобных формальностей. Компонент просто не выполняет проверку доступа (permission check) и операции (operation check) при обработке запроса SYSTEM_ALERT_WINDOW для TYPE_TOAST . В результате использующее уязвимость приложение может безнаказанно рисовать свои окна поверх окон других программ и фиксировать нажатия на экран. Фактически оно получает полный контроль над окном TYPE_TOAST . Какое содержимое будет отображаться в этом окне, зависит только от фантазии вирусописателей.
В Android есть встроенный фреймворк SIM Application Toolkit (STK), который позволяет SIM-карте выполнять в системе определенный набор команд. Таким образом, в частности, формируется SIM-меню оператора связи. Уязвимость SinToolkit позволяет перехватывать команды, отправляемые SIM-картой операционной системе, а также подменять их. Вредоносное приложение может передать классу com.android.stk.StkCmdReceiver специально созданный объект parcelable . Получатель не проверяет подлинность отправителя, при этом действие android.intent.action.stk.command не объявлено в манифесте как защищенное, благодаря чему можно эмулировать отсылку команд SIM-картой.
Например, если SIM-карта формирует на экране устройства сообщение с подтверждением действий пользователя, оно будет содержать кнопку OK. Такие сообщения используются для подтверждения отправки USSD-запросов, транзакций, действий с хранящимися на карте контактами и так далее. Вредоносное приложение может вызвать действие android.intent.action.stk.command и отобразит на экране поверх настоящего поддельное окно, содержащее произвольный текст. При нажатии кнопки OK вызывается метод sendResponse() с флагом true , и это событие — нажатие кнопки — передается SIM-карте, ожидающей реакции пользователя. При этом событие будет обработано так, как если бы оно поступило от настоящего диалогового окна. Это открывает широчайшие возможности для создателей вредоносных программ.
Читать дальше
Конец ознакомительного отрывка
Купить книгу