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์— ์„ ์–ธ๋˜์–ด ์‹œ์Šคํ…œ๋งŒ ๋ฐ”์ธ๋”ฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‹จ์ˆœํžˆ ์„ ์–ธํ•œ๋‹ค๊ณ  ํ•ด์„œ ํŠน๋ณ„ ๊ถŒํ•œ์ด ๋ถ€์—ฌ๋˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋ฉฐ; ํ•ต์‹ฌ ๋‹จ๊ณ„๋Š” ํ”ผํ•ด์ž๊ฐ€ ์„ค์ •์—์„œ ํ‚ค๋ณด๋“œ๋ฅผ ์‚ฌ์šฉ ์„ค์ •/์„ ํƒํ•˜๋„๋ก ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋‹ค.

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 ์ฑ„๋„์„ ํ†ตํ•ด ์™ธ๋ถ€๋กœ ์œ ์ถœํ•˜๋ฉฐ, ์ข…์ข… ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ์†Œ์Šค(์˜ˆ: WebView man-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.InputMethod intent 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 ์ง€์›ํ•˜๊ธฐ