Android IME / InputMethodService Abuso (Tastiere malevole)

Tip

Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Impara e pratica il hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporta HackTricks

Panoramica

Android permette tastiere di terze parti tramite un InputMethodService (IME). Una volta che un utente abilita una tastiera e la seleziona come metodo di input corrente, l’IME può osservare (e influenzare) essenzialmente tutti gli input di testo prodotti sul dispositivo attraverso le app.

This is why several Android banking trojans bundle a “secure keyboard” feature: the malicious IME receives keystrokes even from apps that never embed a WebView (banking apps, chat apps, crypto wallets, etc.).

Note

android.permission.BIND_INPUT_METHOD is typically declared on the IME servizio so only the system can bind to it. Dichiararlo non conferisce privilegi speciali di per sé; il passo chiave è far sì che la vittima abiliti/selezioni la tastiera nelle Impostazioni.

Manifest declaration

Una tastiera è esposta tramite un servizio con l’intent action android.view.InputMethod e un file di configurazione IME in 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>

Hunting tip: un’app che non sembra una tastiera ma dichiara un InputMethodService è un forte segnale d’allarme.

Da dove provengono i dati

Durante l’esecuzione un IME apprende:

  • L’app di destinazione nella quale si digita (tramite EditorInfo, p.es. attribute.packageName in onStartInput).
  • Il testo inserito (attraverso l’interazione dell’IME con la InputConnection corrente e/o gli eventi di tasti a seconda dell’implementazione).

Schizzo minimale (non funzionale) del punto di hook ad alto segnale:

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

Flusso comune di abilitazione e raccolta (osservato sul campo)

  • L’APK è commercializzato come una “tastiera sicura” oppure la tastiera è incorporata all’interno di un trojan più ampio.
  • Il malware induce la vittima nelle impostazioni della tastiera di sistema (ad esempio lanciando Settings.ACTION_INPUT_METHOD_SETTINGS e/o usando UI automation) finché l’IME non è abilitato e impostato come predefinito.
  • Le pressioni dei tasti vengono bufferizzate per app e esfiltrate tramite il canale C2 esistente del malware, spesso combinate con altre fonti di dati (ad esempio, WebView man-in-the-browser telemetry).

Come rilevare / triage

Controlli sul dispositivo

  • Impostazioni: Tastiere installate / tastiera predefinita (cerca IME sconosciuti).
  • ADB:
adb shell dumpsys input_method
adb shell ime list -a
adb shell ime help

Analisi statica di un APK

  • Cerca classi InputMethodService e il filtro di intent android.view.InputMethod.
  • Ispeziona la configurazione IME @xml/* referenziata da android.view.im.
  • Verifica se la funzionalità dichiarata dell’app giustifica l’inclusione di una UI/risorse di tastiera completa.

Mitigazioni

  • Utente/MDM: consentire solo tastiere affidabili; bloccare IME sconosciuti nei profili/dispositivi gestiti.
  • Lato app (app ad alto rischio): preferire autenticazione resistente al phishing (passkeys/biometrics) ed evitare di affidarsi all’«inserimento di testo segreto» come confine di sicurezza (un IME malevolo si trova al di sotto dell’UI dell’app).

Tip

Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Impara e pratica il hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporta HackTricks