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 지원하기
- 구독 계획 확인하기!
- **💬 디스코드 그룹 또는 텔레그램 그룹에 참여하거나 트위터 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.
개요
Android는 InputMethodService(IME)를 통해 타사 키보드를 허용한다. 사용자가 키보드를 사용 설정하고 이를 현재 입력 방법으로 선택하면, IME는 앱 전반에서 생성되는 거의 모든 텍스트 입력을 관찰(및 조작)할 수 있다.
이 때문에 일부 Android 뱅킹 트로이목마는 “secure keyboard” 기능을 번들로 포함한다: 악성 IME는 WebView를 전혀 포함하지 않는 앱(뱅킹 앱, 채팅 앱, 암호화폐 지갑 등)에서도 키 입력을 수신한다.
Note
android.permission.BIND_INPUT_METHOD은 일반적으로 IME service에 선언되어 시스템만 바인딩할 수 있다. 단순히 선언한다고 해서 특별 권한이 부여되는 것은 아니며; 핵심 단계는 피해자가 설정에서 키보드를 사용 설정/선택하도록 만드는 것이다.
Manifest 선언
키보드는 android.view.InputMethod intent action을 가진 서비스와 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). - 입력되는 텍스트 (현재
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
}
}
Common enablement & collection workflow (observed in the wild)
- APK는 “secure keyboard”로 마케팅되거나 키보드가 더 큰 trojan 안에 포함되어 있다.
- 악성코드는 피해자를 시스템 키보드 설정(예:
Settings.ACTION_INPUT_METHOD_SETTINGS를 실행하거나 UI 자동화를 사용하여)으로 유도해 IME가 활성화되고 기본 입력기로 설정될 때까지 진행한다. - 앱별로 키 입력을 버퍼링하고 악성코드의 기존 C2 채널을 통해 외부로 유출하며, 종종 다른 데이터 소스(예:
WebViewman-in-the-browser telemetry)와 결합된다.
How to detect / triage
On-device checks
- Settings: 설치된 키보드 / 기본 키보드 (알 수 없는 IME 확인).
- ADB:
adb shell dumpsys input_method
adb shell ime list -a
adb shell ime help
APK의 정적 선별
InputMethodService클래스와android.view.InputMethodintent filter를 찾으세요.android.view.im에서 참조되는@xml/*IME 구성을 검사하세요.- 앱에 명시된 기능이 전체 키보드 UI/리소스를 제공하는 것과 일치하는지 확인하세요.
완화 조치
- User/MDM: 신뢰할 수 있는 키보드를 허용 목록에 추가하고, 관리되는 프로필/디바이스에서 알려지지 않은 IME를 차단하세요.
- App-side (high risk apps): 피싱 저항 인증(패스키/생체인식)을 우선 사용하고, “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 지원하기
- 구독 계획 확인하기!
- **💬 디스코드 그룹 또는 텔레그램 그룹에 참여하거나 트위터 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.


