Translated ['src/generic-hacking/esim-javacard-exploitation.md'] to ko

This commit is contained in:
Translator 2025-07-16 08:58:26 +00:00
parent 39336bc828
commit 0e78b59d34
2 changed files with 88 additions and 0 deletions

View File

@ -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)

View File

@ -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 <victimObject+offset>, 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 <data> // LOAD (블록 n)
80 E6 0C 00 <data> // 로드를 위한 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}}