Android IME / InputMethodService Зловживання (шкідливі клавіатури)

Tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримайте HackTricks

Огляд

Android дозволяє сторонні клавіатури через InputMethodService (IME). Коли користувач увімкне клавіатуру і вибере її як поточний метод введення, IME може спостерігати (і впливати) фактично все текстове введення, що генерується на пристрої в різних додатках.

Ось чому декілька банківських троянів для Android додають функцію «secure keyboard»: шкідливий IME отримує натискання клавіш навіть від додатків, які ніколи не вбудовують WebView (банківські додатки, чат-додатки, криптогаманці тощо).

Note

android.permission.BIND_INPUT_METHOD is typically declared on the IME service so only the system can bind to it. Declaring it doesn’t grant special privileges by itself; the key step is getting the victim to enable/select the keyboard in Settings.

Manifest declaration

Клавіатура надається через сервіс з intent action android.view.InputMethod та конфігураційним XML для IME:

<!-- AndroidManifest.xml -->
<service
android:name=".SpyKeyboard"
android:permission="android.permission.BIND_INPUT_METHOD"
android:exported="false">

<intent-filter>
<action android:name="android.view.InputMethod" />
</intent-filter>

<meta-data
android:name="android.view.im"
android:resource="@xml/spy_ime" />
</service>

Порада для виявлення: додаток, що не виглядає як клавіатура, але оголошує InputMethodService, є серйозним тривожним сигналом.

Звідки беруться дані

Під час виконання IME дізнається:

  • цільовий додаток, у який вводиться текст (через EditorInfo, наприклад attribute.packageName в onStartInput).
  • Текст, що вводиться (через взаємодію IME з поточним InputConnection і/або подіями натискання клавіш залежно від реалізації).

Мінімальний (нефункціональний) ескіз ключової точки перехоплення:

public class SpyKeyboard extends InputMethodService {
@Override public void onStartInput(EditorInfo attribute, boolean restarting) {
// attribute.packageName identifies the foreground app receiving input
}
}

Загальна послідовність активації й збору (спостерігалася в реальному житті)

  • APK рекламується як «безпечна клавіатура» або клавіатура вбудована в ширший троян.
  • Шкідливе ПЗ заводить жертву в системні налаштування клавіатури (наприклад, запустивши Settings.ACTION_INPUT_METHOD_SETTINGS та/або використовуючи UI automation), поки IME не буде увімкнено і встановлено за замовчуванням.
  • Натискання клавіш буферизуються окремо для кожного додатка і ексфільтруються через наявний C2-канал шкідливого ПЗ, часто в поєднанні з іншими джерелами даних (наприклад, телеметрія man-in-the-browser з WebView).

Як виявити / провести триаж

Перевірки на пристрої

  • Налаштування: Встановлені клавіатури / клавіатура за замовчуванням (шукати невідомі IME).
  • ADB:
adb shell dumpsys input_method
adb shell ime list -a
adb shell ime help

Статичний аналіз APK

  • Шукайте класи InputMethodService та intent-фільтр android.view.InputMethod.
  • Перевірте @xml/* конфігурацію IME, на яку посилається android.view.im.
  • Переконайтеся, чи заявлена функціональність додатка відповідає наявності повного клавіатурного UI/ресурсів.

Заходи пом’якшення

  • User/MDM: додайте в allowlist довірені keyboards; блокуйте невідомі IME в керованих профілях/пристроях.
  • Сторона додатка (додатки з високим ризиком): віддавайте перевагу аутентифікації, стійкій до фішингу (passkeys/biometrics) і не покладайтеся на «secret text entry» як межу безпеки (шкідливий IME знаходиться під UI додатка).

Tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримайте HackTricks