Категория > Новости > Контроль над Android. Перехватываем данные и сбрасываем настройки смартфона через самые опасные API - «Новости»
Контроль над Android. Перехватываем данные и сбрасываем настройки смартфона через самые опасные API - «Новости»11-11-2020, 00:01. Автор: Олег |
||||
Кроме традиционных разрешений, в Android есть три мета-разрешения, которые открывают доступ к весьма опасным API, позволяющим в прямом смысле захватить контроль над устройством. В этой статье мы научимся их использовать, чтобы программно нажимать кнопки смартфона, перехватывать уведомления, извлекать текст из полей ввода других приложений и сбрасывать настройки смартфона. О каких API пойдет речь?
Получив доступ ко всем этим API, зловредное приложение сможет сделать со смартфоном практически все что угодно. Именно поэтому для их защиты используются не традиционные запросы полномочий, на которые пользователь может машинально ответить «Да», а скрытый глубоко в настройках интерфейс, который при активации покажет угрожающее сообщение. Все, что может сделать приложение, чтобы получить нужное полномочие, — это перебросить пользователя в окно настроек, после чего тот должен будет найти нужное приложение, включить напротив него переключатель и согласиться с предупреждающим сообщением. Заставить пользователя дать разрешение на использование этих API можно обманом. Зачастую зловреды прикидываются легитимными приложениями, которым разрешение нужно для работы ключевой функциональности. К примеру, это может быть приложение для ведения журнала уведомлений или приложение для альтернативной жестовой навигации (такому приложению нужен сервис Accessibility для нажатия кнопок навигации). Также можно использовать атаку Cloak & Dagger, чтобы перекрыть окно настроек другим безобидным окном. Нажимаем кнопки смартфонаПростейший сервис Accessibility может выглядеть так (код на Kotlin):
class AccessService: AccessibilityService() {
companion object {
var service: AccessibilityService? = null
// Метод для программного нажатия кнопки «Домой»
fun pressHome() {
service?.performGlobalAction(GLOBAL_ACTION_HOME)
}
}
override fun onServiceConnected() {
service = this
super.onServiceConnected()
}
override fun onUnbind(intent: Intent?): Boolean {
service = null
return super.onUnbind(intent)
}
override fun onInterrupt() {}
override fun onAccessibilityEvent(event: AccessibilityEvent) {}
}
Чтобы система узнала о нашем сервисе, его необходимо объявить в
<service
android:name=".AccessService"
android:label="@string/app_name"
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
<intent-filter>
<action android:name="android.accessibilityservice.AccessibilityService" />
</intent-filter>
<meta-data
android:name="android.accessibilityservice"
android:resource="@xml/accessibility_service_config" />
</service>
Это описание ссылается на конфигурационный файл
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
android:canRetrieveWindowContent="false"
android:description="@string/accessibility_description" />
После того как пользователь включит наш сервис Accessibility в окне «Настройки -> Спец. возможности», система автоматически запустит сервис и мы сможем выполнить функцию
// Если service не null — значит, система успешно запустила сервис
if (AccessService.service != null) {
AccessService.pressHome()
}
Одной лишь только этой функциональности достаточно, чтобы реализовать Ransomware, который будет вызывать функцию
Однако настоящая мощь Accessibility кроется не в нажатии кнопок навигации, а в возможности контролировать другие приложения. Перехватываем содержимое полей вводаAPI Accessibility был создан для людей с ограниченными возможностями. С его помощью можно, например, создать приложение, которое будет зачитывать все надписи интерфейса и позволит нажимать элементы интерфейса голосом. Все это достижимо благодаря тому, что Accessibility дает полный доступ к интерфейсу приложений в виде дерева элементов: можно пройти по нему и выполнить над элементами определенные операции. Перейти обратно к новости |