eSIM / Java Card VM Exploitation
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을 제출하여 해킹 트릭을 공유하세요.
개요
임베디드 SIM(eSIM)은 임베디드 UICC(eUICC) 스마트 카드로 구현되며, 보안 요소 위에서 **Java Card Virtual Machine(JC VM)**을 실행합니다. 프로필과 애플릿은 원격 SIM 프로비저닝(RSP)을 통해 무선으로 프로비저닝될 수 있으므로, JC VM 내부의 메모리 안전성 결함은 핸드셋의 가장 특권이 높은 구성 요소 내부에서 원격 코드 실행 원시 코드가 됩니다.
이 페이지는 getfield
및 putfield
바이트코드에서 타입 안전성 검사가 누락되어 발생한 Kigen의 eUICC(Infineon SLC37 ESA1M2, ARM SC300)의 실제 전체 손상 사례를 설명합니다. 동일한 기술은 카드 내 바이트 코드 검증을 생략하는 다른 공급업체에 대해 재사용될 수 있습니다.
공격 표면
- 원격 애플리케이션 관리(RAM)
eSIM 프로필은 임의의 Java Card 애플릿을 포함할 수 있습니다. 프로비저닝은 SMS-PP(단문 메시지 서비스 포인트 투 포인트) 또는 HTTPS를 통해 터널링할 수 있는 표준 APDU로 수행됩니다. 공격자가 프로필에 대한 RAM 키를 소유(또는 도난)하면, 악성 애플릿을 원격으로
INSTALL
/LOAD
할 수 있습니다. - Java Card 바이트 코드 실행 설치 후, 애플릿은 VM 내에서 실행됩니다. 누락된 런타임 검사는 메모리 손상을 허용합니다.
타입 혼동 원시 코드
getfield
/ putfield
는 객체 참조에서만 작동해야 합니다. Kigen eUICC에서는 명령어가 스택의 피연산자가 객체인지 배열 참조인지 확인하지 않습니다. array.length
단어는 일반 객체의 첫 번째 인스턴스 필드와 정확히 동일한 오프셋에 존재하므로, 공격자는 다음을 수행할 수 있습니다:
- 바이트 배열 생성
byte[] buf = new byte[0x100];
- 이를
Object o = (Object)buf;
로 캐스팅합니다. putfield
를 사용하여 인접한 객체 내부의 임의 16비트 값을 덮어씁니다(여기에는 VTABLE / 포인터 변환 항목이 포함됩니다).- 내부 포인터가 탈취된 후
getfield
를 사용하여 임의 메모리를 읽습니다.
// 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 개인 키를 덤프하기에 충분합니다.
종단 간 악용 워크플로우
- 펌웨어 열거 – 문서화되지 않은
GET DATA
항목DF1F
사용:
80 CA DF 1F 00 // → "ECu10.13" (취약점 존재)
- 악성 앱렛 OTA 설치 – TS.48 일반 테스트 프로파일의 공개적으로 알려진 키를 악용하고 CAP 파일(
LOAD
)을 전송하는 SMS-PP 조각을 푸시한 후INSTALL
:
// 단순화된 APDU 체인
80 E6 02 00 <data> // LOAD (블록 n)
80 E6 0C 00 <data> // 로드를 위한 INSTALL
- 타입 혼동 유발 – 앱렛이 선택되면 포인터 테이블을 탈취하기 위해 write-what-where를 수행하고 정상 APDU 응답을 통해 메모리를 유출합니다.
- GSMA 인증서 키 추출 – 개인 EC 키가 앱렛의 RAM에 복사되고 청크로 반환됩니다.
- eUICC 가장하기 – 도난당한 키 쌍 + 인증서를 통해 공격자는 모든 RSP 서버에 합법적인 카드로 인증할 수 있습니다 (일부 운영자에게는 EID 바인딩이 여전히 필요할 수 있습니다).
- 프로파일 다운로드 및 수정 – 일반 텍스트 프로파일에는
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)
완화 조치
- 카드 내 바이트 코드 검증 – 스택 최상위만이 아닌 전체 제어 흐름 및 데이터 흐름 유형 추적을 강제합니다.
- 배열 헤더 숨기기 –
length
를 겹치는 객체 필드 외부에 배치합니다. - RAM 키 정책 강화 – 공개 키가 포함된 프로필을 절대 배포하지 마십시오; 테스트 프로필에서
INSTALL
을 비활성화합니다 (GSMA TS.48 v7에서 다룸). - RSP 서버 측 휴리스틱 – EID당 프로필 다운로드 속도 제한, 지리적 이상 모니터링, 인증서 신선도 검증.
펜테스터를 위한 빠른 체크리스트
GET DATA DF1F
쿼리 – 취약한 펌웨어 문자열ECu10.13
는 Kigen을 나타냅니다.- RAM 키가 알려져 있는지 확인 ‑> OTA
INSTALL
/LOAD
시도. - 애플릿 설치 후, 간단한 캐스트 원시형을 무차별 대입 (
objarrconfusion
). - 보안 도메인 개인 키를 읽어보십시오 – 성공 = 전체 타협.
참고 문헌
- Security Explorations – eSIM security
- GSMA TS.48 Generic Test Profile v7.0
- Java Card VM Specification 3.1
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을 제출하여 해킹 트릭을 공유하세요.