mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/generic-hacking/esim-javacard-exploitation.md'] to de
This commit is contained in:
parent
a2e21f5e25
commit
0b85e987a0
@ -77,6 +77,7 @@
|
|||||||
# 🧙♂️ Generic Hacking
|
# 🧙♂️ Generic Hacking
|
||||||
|
|
||||||
- [Brute Force - CheatSheet](generic-hacking/brute-force.md)
|
- [Brute Force - CheatSheet](generic-hacking/brute-force.md)
|
||||||
|
- [Esim Javacard Exploitation](generic-hacking/esim-javacard-exploitation.md)
|
||||||
- [Exfiltration](generic-hacking/exfiltration.md)
|
- [Exfiltration](generic-hacking/exfiltration.md)
|
||||||
- [Reverse Shells (Linux, Windows, MSFVenom)](generic-hacking/reverse-shells/README.md)
|
- [Reverse Shells (Linux, Windows, MSFVenom)](generic-hacking/reverse-shells/README.md)
|
||||||
- [MSFVenom - CheatSheet](generic-hacking/reverse-shells/msfvenom.md)
|
- [MSFVenom - CheatSheet](generic-hacking/reverse-shells/msfvenom.md)
|
||||||
|
|||||||
87
src/generic-hacking/esim-javacard-exploitation.md
Normal file
87
src/generic-hacking/esim-javacard-exploitation.md
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
# eSIM / Java Card VM Exploitation
|
||||||
|
|
||||||
|
{{#include ../banners/hacktricks-training.md}}
|
||||||
|
|
||||||
|
## Übersicht
|
||||||
|
Embedded SIMs (eSIMs) werden als **Embedded UICC (eUICC)** Smartcards implementiert, die eine **Java Card Virtual Machine (JC VM)** auf einem sicheren Element ausführen. Da Profile und Applets *over-the-air* (OTA) über Remote SIM Provisioning (RSP) bereitgestellt werden können, wird jeder Speicherfehler innerhalb der JC VM sofort zu einem Remote-Code-Ausführungsprimitive **innerhalb der privilegiertesten Komponente des Geräts**.
|
||||||
|
|
||||||
|
Diese Seite beschreibt einen realen vollständigen Kompromiss von Kigens eUICC (Infineon SLC37 ESA1M2, ARM SC300), verursacht durch fehlende Typ-Sicherheitsprüfungen in den `getfield` und `putfield` Bytecodes. Die gleiche Technik kann gegen andere Anbieter wiederverwendet werden, die die Überprüfung des Bytecodes auf der Karte weglassen.
|
||||||
|
|
||||||
|
## Angriffsfläche
|
||||||
|
1. **Remote Application Management (RAM)**
|
||||||
|
eSIM-Profile können beliebige Java Card Applets einbetten. Die Bereitstellung erfolgt mit standardmäßigen APDUs, die über SMS-PP (Short Message Service Point-to-Point) oder HTTPS tunneln können. Wenn ein Angreifer die **RAM-Schlüssel** für ein Profil besitzt (oder stiehlt), kann er ein bösartiges Applet remote `INSTALL`/`LOAD`en.
|
||||||
|
2. **Java Card Bytecode-Ausführung**
|
||||||
|
Nach der Installation wird das Applet innerhalb der VM ausgeführt. Fehlende Laufzeitprüfungen ermöglichen Speicherbeschädigungen.
|
||||||
|
|
||||||
|
## Der Typ-Verwirrungsprimitive
|
||||||
|
`getfield` / `putfield` sollen nur auf **Objektverweisen** arbeiten. In Kigen eUICC validieren die Anweisungen niemals, ob der Operand auf dem Stack ein *Objekt* oder ein *Array*-Verweis ist. Da ein `array.length` Wort an genau demselben Offset wie das erste Instanzfeld eines normalen Objekts liegt, kann ein Angreifer:
|
||||||
|
|
||||||
|
1. Ein Byte-Array erstellen `byte[] buf = new byte[0x100];`
|
||||||
|
2. Es in `Object o = (Object)buf;` umwandeln.
|
||||||
|
3. `putfield` verwenden, um *irgendeinen* 16-Bit-Wert innerhalb eines benachbarten Objekts (einschließlich VTABLE / ptr Übersetzungseinträge) zu überschreiben.
|
||||||
|
4. `getfield` verwenden, um *willkürlichen* Speicher zu lesen, sobald interne Zeiger übernommen wurden.
|
||||||
|
```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 ...
|
||||||
|
```
|
||||||
|
Die Primitive bietet **willkürlichen Lese-/Schreibzugriff** im eUICC-Adressraum – genug, um den gerätespezifischen ECC-Privatschlüssel zu dumpen, der die Karte im GSMA-Ökosystem authentifiziert.
|
||||||
|
|
||||||
|
## End-to-End-Ausbeutungsworkflow
|
||||||
|
1. **Firmware auflisten** – Verwenden Sie den nicht dokumentierten `GET DATA`-Eintrag `DF1F`:
|
||||||
|
```
|
||||||
|
80 CA DF 1F 00 // → "ECu10.13" (anfällig)
|
||||||
|
```
|
||||||
|
2. **Bösartiges Applet OTA installieren** – Missbrauch von öffentlich bekannten Schlüsseln des TS.48 Generic Test Profile und Push von SMS-PP-Fragmenten, die die CAP-Datei (`LOAD`) transportieren, gefolgt von einem `INSTALL`:
|
||||||
|
```
|
||||||
|
// vereinfachte APDU-Kette
|
||||||
|
80 E6 02 00 <data> // LOAD (Block n)
|
||||||
|
80 E6 0C 00 <data> // INSTALL für Load
|
||||||
|
```
|
||||||
|
3. **Typverwirrung auslösen** – Wenn das Applet ausgewählt wird, führt es den Write-What-Where aus, um eine Zeigertabelle zu übernehmen und Speicher durch normale APDU-Antworten zu leaken.
|
||||||
|
4. **GSMA-Zertifikatschlüssel extrahieren** – Der private EC-Schlüssel wird in den RAM des Applets kopiert und in Stücken zurückgegeben.
|
||||||
|
5. **Das eUICC impersonifizieren** – Das gestohlene Schlüsselpaar + Zertifikate ermöglichen es dem Angreifer, sich als legitime Karte bei *irgendeinem* RSP-Server zu authentifizieren (EID-Bindung kann für einige Betreiber weiterhin erforderlich sein).
|
||||||
|
6. **Profile herunterladen und modifizieren** – Klartextprofile enthalten hochsensible Felder wie `OPc`, `AMF`, OTA-Schlüssel und sogar zusätzliche Applets. Der Angreifer kann:
|
||||||
|
* Ein Profil auf ein zweites eUICC klonen (Voice/SMS-Hijack);
|
||||||
|
* Java Card-Anwendungen patchen (z. B. STK-Spyware einfügen), bevor sie erneut hochgeladen werden;
|
||||||
|
* Betreibergeheimnisse für großflächigen Missbrauch extrahieren.
|
||||||
|
|
||||||
|
## Klon- / Hijacking-Demonstration
|
||||||
|
Die Installation desselben Profils auf **PHONE A** und **PHONE B** führt dazu, dass das Mobile Switching Centre den eingehenden Verkehr an das Gerät weiterleitet, das sich zuletzt registriert hat. Eine Sitzung der Gmail 2FA-SMS-Abfangung reicht aus, um MFA für das Opfer zu umgehen.
|
||||||
|
|
||||||
|
## Automatisiertes Test- und Exploit-Toolkit
|
||||||
|
Die Forscher veröffentlichten ein internes Tool mit einem `bsc` (*Basic Security Check*)-Befehl, der sofort zeigt, ob eine Java Card VM anfällig ist:
|
||||||
|
```
|
||||||
|
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]
|
||||||
|
```
|
||||||
|
Module, die mit dem Framework geliefert werden:
|
||||||
|
* `introspector` – vollständiger VM- und Speicherscanner (~1,7 MB Java)
|
||||||
|
* `security-test` – generische Verifizierungs-Bypass-Applet (~150 KB)
|
||||||
|
* `exploit` – 100 % zuverlässiger Kigen eUICC-Kompromiss (~72 KB)
|
||||||
|
|
||||||
|
## Minderung
|
||||||
|
1. **On-Card-Bytecode-Verifizierung** – vollständige Kontrolle über den Kontrollfluss & Datenfluss-Tracking durchsetzen, anstatt nur den Stack-Top.
|
||||||
|
2. **Array-Header verbergen** – `length` außerhalb von überlappenden Objektfeldern platzieren.
|
||||||
|
3. **RAM-Schlüsselrichtlinie härten** – niemals Profile mit öffentlichen Schlüsseln ausliefern; `INSTALL` in Testprofilen deaktivieren (behandelt in GSMA TS.48 v7).
|
||||||
|
4. **RSP-Server-seitige Heuristiken** – Download von Profilen pro EID drosseln, geografische Anomalien überwachen, Frische der Zertifikate validieren.
|
||||||
|
|
||||||
|
## Schnelle Checkliste für Pentester
|
||||||
|
* Abfrage `GET DATA DF1F` – verwundbare Firmware-Zeichenfolge `ECu10.13` weist auf Kigen hin.
|
||||||
|
* Überprüfen, ob RAM-Schlüssel bekannt sind ‑> OTA `INSTALL`/`LOAD` versuchen.
|
||||||
|
* Nach der Installation des Applets einfache Cast-Primitiven brute-forcen (`objarrconfusion`).
|
||||||
|
* Versuchen, private Schlüssel des Sicherheitsbereichs zu lesen – Erfolg = vollständiger Kompromiss.
|
||||||
|
|
||||||
|
## Referenzen
|
||||||
|
- [Security Explorations – eSIM-Sicherheit](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-Spezifikation 3.1](https://docs.oracle.com/en/java/javacard/3.1/jc-vm-spec/F12650_05.pdf)
|
||||||
|
|
||||||
|
{{#include ../banners/hacktricks-training.md}}
|
||||||
Loading…
x
Reference in New Issue
Block a user