From 0e78b59d34df95958a6cf75585cf630634fe69a6 Mon Sep 17 00:00:00 2001 From: Translator Date: Wed, 16 Jul 2025 08:58:26 +0000 Subject: [PATCH] Translated ['src/generic-hacking/esim-javacard-exploitation.md'] to ko --- src/SUMMARY.md | 1 + .../esim-javacard-exploitation.md | 87 +++++++++++++++++++ 2 files changed, 88 insertions(+) create mode 100644 src/generic-hacking/esim-javacard-exploitation.md diff --git a/src/SUMMARY.md b/src/SUMMARY.md index ac7efe026..9ab45b360 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -77,6 +77,7 @@ # ๐Ÿง™โ€โ™‚๏ธ Generic Hacking - [Brute Force - CheatSheet](generic-hacking/brute-force.md) +- [Esim Javacard Exploitation](generic-hacking/esim-javacard-exploitation.md) - [Exfiltration](generic-hacking/exfiltration.md) - [Reverse Shells (Linux, Windows, MSFVenom)](generic-hacking/reverse-shells/README.md) - [MSFVenom - CheatSheet](generic-hacking/reverse-shells/msfvenom.md) diff --git a/src/generic-hacking/esim-javacard-exploitation.md b/src/generic-hacking/esim-javacard-exploitation.md new file mode 100644 index 000000000..7c9c6b7c6 --- /dev/null +++ b/src/generic-hacking/esim-javacard-exploitation.md @@ -0,0 +1,87 @@ +# eSIM / Java Card VM Exploitation + +{{#include ../banners/hacktricks-training.md}} + +## ๊ฐœ์š” +์ž„๋ฒ ๋””๋“œ SIM(eSIM)์€ **์ž„๋ฒ ๋””๋“œ UICC(eUICC)** ์Šค๋งˆํŠธ ์นด๋“œ๋กœ ๊ตฌํ˜„๋˜๋ฉฐ, ๋ณด์•ˆ ์š”์†Œ ์œ„์—์„œ **Java Card Virtual Machine(JC VM)**์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœํ•„๊ณผ ์• ํ”Œ๋ฆฟ์€ ์›๊ฒฉ SIM ํ”„๋กœ๋น„์ €๋‹(RSP)์„ ํ†ตํ•ด *๋ฌด์„ ์œผ๋กœ* ํ”„๋กœ๋น„์ €๋‹๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, JC VM ๋‚ด๋ถ€์˜ ๋ฉ”๋ชจ๋ฆฌ ์•ˆ์ „์„ฑ ๊ฒฐํ•จ์€ **ํ•ธ๋“œ์…‹์˜ ๊ฐ€์žฅ ํŠน๊ถŒ์ด ๋†’์€ ๊ตฌ์„ฑ ์š”์†Œ ๋‚ด๋ถ€์—์„œ ์›๊ฒฉ ์ฝ”๋“œ ์‹คํ–‰ ์›์‹œ ์ฝ”๋“œ**๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. + +์ด ํŽ˜์ด์ง€๋Š” `getfield` ๋ฐ `putfield` ๋ฐ”์ดํŠธ์ฝ”๋“œ์—์„œ ํƒ€์ž… ์•ˆ์ „์„ฑ ๊ฒ€์‚ฌ๊ฐ€ ๋ˆ„๋ฝ๋˜์–ด ๋ฐœ์ƒํ•œ Kigen์˜ eUICC(Infineon SLC37 ESA1M2, ARM SC300)์˜ ์‹ค์ œ ์ „์ฒด ์†์ƒ ์‚ฌ๋ก€๋ฅผ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ๋™์ผํ•œ ๊ธฐ์ˆ ์€ ์นด๋“œ ๋‚ด ๋ฐ”์ดํŠธ ์ฝ”๋“œ ๊ฒ€์ฆ์„ ์ƒ๋žตํ•˜๋Š” ๋‹ค๋ฅธ ๊ณต๊ธ‰์—…์ฒด์— ๋Œ€ํ•ด ์žฌ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. + +## ๊ณต๊ฒฉ ํ‘œ๋ฉด +1. **์›๊ฒฉ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ด€๋ฆฌ(RAM)** +eSIM ํ”„๋กœํ•„์€ ์ž„์˜์˜ Java Card ์• ํ”Œ๋ฆฟ์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ๋น„์ €๋‹์€ SMS-PP(๋‹จ๋ฌธ ๋ฉ”์‹œ์ง€ ์„œ๋น„์Šค ํฌ์ธํŠธ ํˆฌ ํฌ์ธํŠธ) ๋˜๋Š” HTTPS๋ฅผ ํ†ตํ•ด ํ„ฐ๋„๋งํ•  ์ˆ˜ ์žˆ๋Š” ํ‘œ์ค€ APDU๋กœ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. ๊ณต๊ฒฉ์ž๊ฐ€ ํ”„๋กœํ•„์— ๋Œ€ํ•œ **RAM ํ‚ค**๋ฅผ ์†Œ์œ (๋˜๋Š” ๋„๋‚œ)ํ•˜๋ฉด, ์•…์„ฑ ์• ํ”Œ๋ฆฟ์„ ์›๊ฒฉ์œผ๋กœ `INSTALL`/`LOAD`ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. +2. **Java Card ๋ฐ”์ดํŠธ ์ฝ”๋“œ ์‹คํ–‰** +์„ค์น˜ ํ›„, ์• ํ”Œ๋ฆฟ์€ VM ๋‚ด์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ๋ˆ„๋ฝ๋œ ๋Ÿฐํƒ€์ž„ ๊ฒ€์‚ฌ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์†์ƒ์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. + +## ํƒ€์ž… ํ˜ผ๋™ ์›์‹œ ์ฝ”๋“œ +`getfield` / `putfield`๋Š” **๊ฐ์ฒด ์ฐธ์กฐ**์—์„œ๋งŒ ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Kigen eUICC์—์„œ๋Š” ๋ช…๋ น์–ด๊ฐ€ ์Šคํƒ์˜ ํ”ผ์—ฐ์‚ฐ์ž๊ฐ€ *๊ฐ์ฒด*์ธ์ง€ *๋ฐฐ์—ด* ์ฐธ์กฐ์ธ์ง€ ํ™•์ธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. `array.length` ๋‹จ์–ด๋Š” ์ผ๋ฐ˜ ๊ฐ์ฒด์˜ ์ฒซ ๋ฒˆ์งธ ์ธ์Šคํ„ด์Šค ํ•„๋“œ์™€ ์ •ํ™•ํžˆ ๋™์ผํ•œ ์˜คํ”„์…‹์— ์กด์žฌํ•˜๋ฏ€๋กœ, ๊ณต๊ฒฉ์ž๋Š” ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค: + +1. ๋ฐ”์ดํŠธ ๋ฐฐ์—ด ์ƒ์„ฑ `byte[] buf = new byte[0x100];` +2. ์ด๋ฅผ `Object o = (Object)buf;`๋กœ ์บ์ŠคํŒ…ํ•ฉ๋‹ˆ๋‹ค. +3. `putfield`๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ธ์ ‘ํ•œ ๊ฐ์ฒด ๋‚ด๋ถ€์˜ *์ž„์˜* 16๋น„ํŠธ ๊ฐ’์„ ๋ฎ์–ด์”๋‹ˆ๋‹ค(์—ฌ๊ธฐ์—๋Š” VTABLE / ํฌ์ธํ„ฐ ๋ณ€ํ™˜ ํ•ญ๋ชฉ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค). +4. ๋‚ด๋ถ€ ํฌ์ธํ„ฐ๊ฐ€ ํƒˆ์ทจ๋œ ํ›„ `getfield`๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ *์ž„์˜* ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ฝ์Šต๋‹ˆ๋‹ค. +```java +// Pseudo-bytecode sequence executed by the malicious applet +// buf = newarray byte 0x100 +// o = (Object) buf // illegal but not verified +// putfield , 0xCAFE // arbitrary write +// ... set up read-what-where gadgets ... +``` +์›์‹œ ๊ธฐ๋Šฅ์€ eUICC ์ฃผ์†Œ ๊ณต๊ฐ„์—์„œ **์ž„์˜ ์ฝ๊ธฐ/์“ฐ๊ธฐ**๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” GSMA ์ƒํƒœ๊ณ„์— ์นด๋“œ๋ฅผ ์ธ์ฆํ•˜๋Š” ์žฅ์น˜ ๊ณ ์œ ์˜ ECC ๊ฐœ์ธ ํ‚ค๋ฅผ ๋คํ”„ํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. + +## ์ข…๋‹จ ๊ฐ„ ์•…์šฉ ์›Œํฌํ”Œ๋กœ์šฐ +1. **ํŽŒ์›จ์–ด ์—ด๊ฑฐ** โ€“ ๋ฌธ์„œํ™”๋˜์ง€ ์•Š์€ `GET DATA` ํ•ญ๋ชฉ `DF1F` ์‚ฌ์šฉ: +``` +80 CA DF 1F 00 // โ†’ "ECu10.13" (์ทจ์•ฝ์  ์กด์žฌ) +``` +2. **์•…์„ฑ ์•ฑ๋ › OTA ์„ค์น˜** โ€“ TS.48 ์ผ๋ฐ˜ ํ…Œ์ŠคํŠธ ํ”„๋กœํŒŒ์ผ์˜ ๊ณต๊ฐœ์ ์œผ๋กœ ์•Œ๋ ค์ง„ ํ‚ค๋ฅผ ์•…์šฉํ•˜๊ณ  CAP ํŒŒ์ผ(`LOAD`)์„ ์ „์†กํ•˜๋Š” SMS-PP ์กฐ๊ฐ์„ ํ‘ธ์‹œํ•œ ํ›„ `INSTALL`: +``` +// ๋‹จ์ˆœํ™”๋œ APDU ์ฒด์ธ +80 E6 02 00 // LOAD (๋ธ”๋ก n) +80 E6 0C 00 // ๋กœ๋“œ๋ฅผ ์œ„ํ•œ INSTALL +``` +3. **ํƒ€์ž… ํ˜ผ๋™ ์œ ๋ฐœ** โ€“ ์•ฑ๋ ›์ด ์„ ํƒ๋˜๋ฉด ํฌ์ธํ„ฐ ํ…Œ์ด๋ธ”์„ ํƒˆ์ทจํ•˜๊ธฐ ์œ„ํ•ด write-what-where๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ์ •์ƒ APDU ์‘๋‹ต์„ ํ†ตํ•ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์œ ์ถœํ•ฉ๋‹ˆ๋‹ค. +4. **GSMA ์ธ์ฆ์„œ ํ‚ค ์ถ”์ถœ** โ€“ ๊ฐœ์ธ EC ํ‚ค๊ฐ€ ์•ฑ๋ ›์˜ RAM์— ๋ณต์‚ฌ๋˜๊ณ  ์ฒญํฌ๋กœ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค. +5. **eUICC ๊ฐ€์žฅํ•˜๊ธฐ** โ€“ ๋„๋‚œ๋‹นํ•œ ํ‚ค ์Œ + ์ธ์ฆ์„œ๋ฅผ ํ†ตํ•ด ๊ณต๊ฒฉ์ž๋Š” *๋ชจ๋“ * RSP ์„œ๋ฒ„์— ํ•ฉ๋ฒ•์ ์ธ ์นด๋“œ๋กœ ์ธ์ฆํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (์ผ๋ถ€ ์šด์˜์ž์—๊ฒŒ๋Š” EID ๋ฐ”์ธ๋”ฉ์ด ์—ฌ์ „ํžˆ ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค). +6. **ํ”„๋กœํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ ๋ฐ ์ˆ˜์ •** โ€“ ์ผ๋ฐ˜ ํ…์ŠคํŠธ ํ”„๋กœํŒŒ์ผ์—๋Š” `OPc`, `AMF`, OTA ํ‚ค ๋ฐ ์ถ”๊ฐ€ ์•ฑ๋ ›๊ณผ ๊ฐ™์€ ๋งค์šฐ ๋ฏผ๊ฐํ•œ ํ•„๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ณต๊ฒฉ์ž๋Š”: +* ๋‘ ๋ฒˆ์งธ eUICC์— ํ”„๋กœํŒŒ์ผ ๋ณต์ œ (์Œ์„ฑ/SMS ํƒˆ์ทจ); +* ์žฌ์—…๋กœ๋“œ ์ „์— Java Card ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํŒจ์น˜ (์˜ˆ: STK ์ŠคํŒŒ์ด์›จ์–ด ์‚ฝ์ž…); +* ๋Œ€๊ทœ๋ชจ ์•…์šฉ์„ ์œ„ํ•œ ์šด์˜์ž ๋น„๋ฐ€ ์ถ”์ถœ. + +## ํด๋กœ๋‹ / ํƒˆ์ทจ ์‹œ์—ฐ +**PHONE A**์™€ **PHONE B**์— ๋™์ผํ•œ ํ”„๋กœํŒŒ์ผ์„ ์„ค์น˜ํ•˜๋ฉด ๋ชจ๋ฐ”์ผ ์Šค์œ„์นญ ์„ผํ„ฐ๊ฐ€ ์ตœ๊ทผ์— ๋“ฑ๋ก๋œ ์žฅ์น˜๋กœ ์ˆ˜์‹  ํŠธ๋ž˜ํ”ฝ์„ ๋ผ์šฐํŒ…ํ•ฉ๋‹ˆ๋‹ค. Gmail 2FA SMS ๊ฐ€๋กœ์ฑ„๊ธฐ ํ•œ ์„ธ์…˜์ด๋ฉด ํ”ผํ•ด์ž์˜ MFA๋ฅผ ์šฐํšŒํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. + +## ์ž๋™ํ™”๋œ ํ…Œ์ŠคํŠธ ๋ฐ ์•…์šฉ ํˆดํ‚ท +์—ฐ๊ตฌ์ž๋“ค์€ Java Card VM์ด ์ทจ์•ฝํ•œ์ง€ ์ฆ‰์‹œ ๋ณด์—ฌ์ฃผ๋Š” `bsc` (*Basic Security Check*) ๋ช…๋ น์ด ํฌํ•จ๋œ ๋‚ด๋ถ€ ๋„๊ตฌ๋ฅผ ๊ณต๊ฐœํ–ˆ์Šต๋‹ˆ๋‹ค: +``` +scard> bsc +- castcheck [arbitrary int/obj casts] +- ptrgranularity [pointer granularity/tr table presence] +- locvaraccess [local variable access] +- stkframeaccess [stack frame access] +- instfieldaccess [instance field access] +- objarrconfusion [object/array size field confusion] +``` +ํ”„๋ ˆ์ž„์›Œํฌ์™€ ํ•จ๊ป˜ ์ œ๊ณต๋˜๋Š” ๋ชจ๋“ˆ: +* `introspector` โ€“ ์ „์ฒด VM ๋ฐ ๋ฉ”๋ชจ๋ฆฌ ํƒ์ƒ‰๊ธฐ (~1.7 MB Java) +* `security-test` โ€“ ์ผ๋ฐ˜์ ์ธ ๊ฒ€์ฆ ์šฐํšŒ ์• ํ”Œ๋ฆฟ (~150 KB) +* `exploit` โ€“ 100 % ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” Kigen eUICC ํƒ€ํ˜‘ (~72 KB) + +## ์™„ํ™” ์กฐ์น˜ +1. **์นด๋“œ ๋‚ด ๋ฐ”์ดํŠธ ์ฝ”๋“œ ๊ฒ€์ฆ** โ€“ ์Šคํƒ ์ตœ์ƒ์œ„๋งŒ์ด ์•„๋‹Œ ์ „์ฒด ์ œ์–ด ํ๋ฆ„ ๋ฐ ๋ฐ์ดํ„ฐ ํ๋ฆ„ ์œ ํ˜• ์ถ”์ ์„ ๊ฐ•์ œํ•ฉ๋‹ˆ๋‹ค. +2. **๋ฐฐ์—ด ํ—ค๋” ์ˆจ๊ธฐ๊ธฐ** โ€“ `length`๋ฅผ ๊ฒน์น˜๋Š” ๊ฐ์ฒด ํ•„๋“œ ์™ธ๋ถ€์— ๋ฐฐ์น˜ํ•ฉ๋‹ˆ๋‹ค. +3. **RAM ํ‚ค ์ •์ฑ… ๊ฐ•ํ™”** โ€“ ๊ณต๊ฐœ ํ‚ค๊ฐ€ ํฌํ•จ๋œ ํ”„๋กœํ•„์„ ์ ˆ๋Œ€ ๋ฐฐํฌํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค; ํ…Œ์ŠคํŠธ ํ”„๋กœํ•„์—์„œ `INSTALL`์„ ๋น„ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค (GSMA TS.48 v7์—์„œ ๋‹ค๋ฃธ). +4. **RSP ์„œ๋ฒ„ ์ธก ํœด๋ฆฌ์Šคํ‹ฑ** โ€“ EID๋‹น ํ”„๋กœํ•„ ๋‹ค์šด๋กœ๋“œ ์†๋„ ์ œํ•œ, ์ง€๋ฆฌ์  ์ด์ƒ ๋ชจ๋‹ˆํ„ฐ๋ง, ์ธ์ฆ์„œ ์‹ ์„ ๋„ ๊ฒ€์ฆ. + +## ํŽœํ…Œ์Šคํ„ฐ๋ฅผ ์œ„ํ•œ ๋น ๋ฅธ ์ฒดํฌ๋ฆฌ์ŠคํŠธ +* `GET DATA DF1F` ์ฟผ๋ฆฌ โ€“ ์ทจ์•ฝํ•œ ํŽŒ์›จ์–ด ๋ฌธ์ž์—ด `ECu10.13`๋Š” Kigen์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. +* RAM ํ‚ค๊ฐ€ ์•Œ๋ ค์ ธ ์žˆ๋Š”์ง€ ํ™•์ธ โ€‘> OTA `INSTALL`/`LOAD` ์‹œ๋„. +* ์• ํ”Œ๋ฆฟ ์„ค์น˜ ํ›„, ๊ฐ„๋‹จํ•œ ์บ์ŠคํŠธ ์›์‹œํ˜•์„ ๋ฌด์ฐจ๋ณ„ ๋Œ€์ž… (`objarrconfusion`). +* ๋ณด์•ˆ ๋„๋ฉ”์ธ ๊ฐœ์ธ ํ‚ค๋ฅผ ์ฝ์–ด๋ณด์‹ญ์‹œ์˜ค โ€“ ์„ฑ๊ณต = ์ „์ฒด ํƒ€ํ˜‘. + +## ์ฐธ๊ณ  ๋ฌธํ—Œ +- [Security Explorations โ€“ eSIM security](https://security-explorations.com/esim-security.html) +- [GSMA TS.48 Generic Test Profile v7.0](https://www.gsma.com/get-involved/working-groups/gsma_resources/ts-48-v7-0-generic-euicc-test-profile-for-device-testing/) +- [Java Card VM Specification 3.1](https://docs.oracle.com/en/java/javacard/3.1/jc-vm-spec/F12650_05.pdf) + +{{#include ../banners/hacktricks-training.md}}