Android IME / InputMethodService 滥用(恶意键盘)

Tip

学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE) 学习和实践 Azure 黑客技术:HackTricks Training Azure Red Team Expert (AzRTE)

支持 HackTricks

概述

Android 通过 InputMethodService(IME)允许第三方键盘。 一旦用户启用某个键盘并将其设为当前输入法,该 IME 就可以在跨应用范围内观察(并影响)设备上几乎所有的文本输入

这就是为什么多个 Android 银行木马会捆绑“安全键盘”功能:恶意 IME 即使在那些从未嵌入 WebView 的应用(银行应用、聊天应用、加密钱包等)中也能接收按键。

Note

android.permission.BIND_INPUT_METHOD 通常在 IME service 上声明,因此只有系统可以绑定它。仅声明它本身并不会授予特殊权限;关键步骤是让受害者在设置中启用/选择该键盘。

Manifest 声明

键盘通过具有 android.view.InputMethod intent action 的 service 和一个 IME 配置 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>

狩猎提示: 声明 InputMethodService 的非键盘外观应用是一个强烈的危险信号。

数据来源

运行时,IME 会获知:

  • 正在输入的 目标应用(通过 EditorInfo,例如在 onStartInput 中的 attribute.packageName)。
  • 正在输入的文本(通过 IME 与当前 InputConnection 的交互和/或基于实现的 key events)。

最小(非功能性)高信号 hook 点示意:

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

常见的启用与收集工作流程(在野外观察到)

  • 该 APK 以“secure keyboard”名义推广,或键盘被嵌入到更大范围的木马中。
  • 恶意软件将受害者引导至系统键盘设置(例如,通过启动 Settings.ACTION_INPUT_METHOD_SETTINGS 和/或使用 UI 自动化),直到 IME 被启用并设为默认。
  • 按应用缓冲按键记录,并通过恶意软件现有的 C2 通道外传,通常与其他数据来源(例如,WebView man-in-the-browser telemetry)结合。

如何检测 / 分级处置

设备上检查

  • Settings: 已安装的键盘 / 默认键盘(查找未知的 IME)。
  • ADB:
adb shell dumpsys input_method
adb shell ime list -a
adb shell ime help

APK 的静态初筛

  • 查找 InputMethodService 类和 android.view.InputMethod intent 过滤器。
  • 检查由 android.view.im 引用的 @xml/* IME 配置。
  • 检查应用声明的功能是否与提供完整键盘 UI/资源 相符。

缓解措施

  • 用户/MDM:将受信任的键盘加入允许列表;在受管理的配置文件/设备中阻止未知 IME。
  • 应用端(高风险应用):优先采用抗钓鱼的认证(passkeys/生物识别),并避免将 “secret text entry” 作为安全边界(恶意 IME 位于应用 UI 之下)。

Tip

学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE) 学习和实践 Azure 黑客技术:HackTricks Training Azure Red Team Expert (AzRTE)

支持 HackTricks