Nadużycie Android IME / InputMethodService (złośliwe klawiatury)

Tip

Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Ucz się i ćwicz Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Wsparcie dla HackTricks

Przegląd

Android pozwala na klawiatury firm trzecich poprzez InputMethodService (IME). Gdy użytkownik włączy klawiaturę i wybierze ją jako aktualną metodę wprowadzania, IME może obserwować (i wpływać na) zasadniczo wszystkie wprowadzane teksty na urządzeniu we wszystkich aplikacjach.

Dlatego kilka trojanów bankowych na Androida dołącza funkcję „bezpiecznej klawiatury”: złośliwe IME otrzymuje naciśnięcia klawiszy nawet z aplikacji, które nigdy nie osadzają WebView (aplikacje bankowe, komunikatory, portfele kryptowalut itp.).

Note

android.permission.BIND_INPUT_METHOD jest zazwyczaj deklarowane na service IME, więc tylko system może się z nim związać. Sama deklaracja nie przyznaje specjalnych uprawnień; kluczowym krokiem jest nakłonienie ofiary do włączenia/wybrania klawiatury w Ustawieniach.

Deklaracja w manifeście

Klawiatura jest udostępniana poprzez usługę z akcją intent android.view.InputMethod oraz konfiguracją IME w pliku XML:

<!-- 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>

Wskazówka: aplikacja, która nie wygląda na klawiaturę, a deklaruje InputMethodService, to silny sygnał ostrzegawczy.

Skąd pochodzą dane

W czasie działania IME poznaje:

  • Docelowa aplikacja, do której wpisywany jest tekst (przez EditorInfo, np. attribute.packageName w onStartInput).
  • Wprowadzany tekst (przez interakcję IME z aktualnym InputConnection i/lub zdarzeniami klawiszy, w zależności od implementacji).

Minimalny (niefunkcjonalny) szkic high-signal hook point:

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

Typowy proces aktywacji i zbierania danych (obserwowany w terenie)

  • APK jest reklamowany jako „secure keyboard” lub klawiatura jest osadzona w większym trojanie.
  • Malware kieruje ofiarę do ustawień systemowej klawiatury (np. uruchamiając Settings.ACTION_INPUT_METHOD_SETTINGS i/lub używając UI automation), aż IME zostanie włączone i ustawione jako domyślne.
  • Naciśnięcia klawiszy są buforowane per-aplikacja i exfiltrated przez istniejący kanał C2 malware, często łączone z innymi źródłami danych (np. WebView man-in-the-browser telemetry).

Jak wykryć / przeprowadzić triage

Kontrole na urządzeniu

  • Settings: Zainstalowane klawiatury / klawiatura domyślna (szukaj nieznanych IME).
  • ADB:
adb shell dumpsys input_method
adb shell ime list -a
adb shell ime help

Statyczna analiza (triage) APK

  • Szukaj klas InputMethodService i filtru intent android.view.InputMethod.
  • Przeanalizuj konfigurację IME @xml/* odwoływaną przez android.view.im.
  • Sprawdź, czy deklarowana funkcjonalność aplikacji odpowiada dostarczaniu pełnego interfejsu klawiatury/zasobów.

Środki zaradcze

  • Użytkownik/MDM: zezwalaj tylko zaufanym klawiaturom; blokuj nieznane IME w profilach/urządzeniach zarządzanych.
  • Po stronie aplikacji (aplikacje wysokiego ryzyka): stosuj uwierzytelnianie odporne na phishing (passkeys/biometrics) i unikaj polegania na „secret text entry” jako granicy bezpieczeństwa (złośliwe IME znajduje się poniżej interfejsu aplikacji).

Tip

Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Ucz się i ćwicz Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Wsparcie dla HackTricks