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 バンキングトロイの木馬が「secure keyboard」機能を同梱している理由です:悪意のある IME は WebView を埋め込んでいないアプリ(銀行アプリ、チャットアプリ、暗号ウォレットなど)からのキーストロークでさえ受け取ることができます。

Note

android.permission.BIND_INPUT_METHOD は通常 IME の service に宣言され、システムのみがそれにバインドできます。宣言するだけでは特別な権限は付与されません。重要なのは被害者にキーボードを 有効化/選択 させて Settings で設定させることです。

Manifest の宣言

キーボードは android.view.InputMethod インテントアクションを持つ 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>

Hunting tip: InputMethodService を宣言しているキーボードに見えないアプリは強いレッドフラッグです。

データはどこから来るか

実行時に IME は以下を取得します:

  • 入力されている target appEditorInfo 経由、例: onStartInputattribute.packageName)。
  • 入力されているテキスト(IME が現在の InputConnection とやり取りすることや、実装に応じた key events を通じて)。

Minimal (non-functional) sketch of the 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
}
}

一般的な有効化 & 収集ワークフロー(実際に確認された)

  • APKは“secure keyboard”としてマーケティングされるか、キーボードがより広範なトロイの木馬内に埋め込まれている。
  • マルウェアは被害者をシステムのキーボード設定へ誘導する(例: Settings.ACTION_INPUT_METHOD_SETTINGS を起動する、および/または UI オートメーションを使用する)ことで、IME が有効化されデフォルトに設定されるまで操作させる。
  • キー入力はアプリごとにバッファされ、マルウェアの既存の C2 チャンネル経由で exfiltrated されることが多く、しばしば他のデータソース(例: WebView の man-in-the-browser テレメトリ)と組み合わされる。

検出 / トリアージ方法

デバイス上でのチェック

  • Settings: インストール済みキーボード / デフォルトキーボード(不明な IME を確認)。
  • ADB:
adb shell dumpsys input_method
adb shell ime list -a
adb shell ime help

APKの静的トリアージ

  • InputMethodService クラスと android.view.InputMethod インテントフィルタを探す。
  • android.view.im で参照されている @xml/* の IME 設定を調査する。
  • アプリの表明された機能がフルキーボードの UI/リソースを同梱することと一致するかを確認する。

対策

  • User/MDM: 信頼できるキーボードを allowlist に登録する;管理対象プロファイル/デバイスでは不明な IME をブロックする。
  • App-side (high risk apps): phishing-resistant な認証(passkeys/biometrics)を優先し、セキュリティ境界として「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をサポートする