eSIM / Java Card VM Exploitation
Reading time: 6 minutes
tip
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
Overview
Οι ενσωματωμένες SIM (eSIM) υλοποιούνται ως Embedded UICC (eUICC) έξυπνες κάρτες που εκτελούν μια Java Card Virtual Machine (JC VM) πάνω σε ένα ασφαλές στοιχείο. Επειδή τα προφίλ και οι applets μπορούν να παρασχεθούν over-the-air (OTA) μέσω Remote SIM Provisioning (RSP), οποιοδήποτε σφάλμα ασφάλειας μνήμης μέσα στην JC VM γίνεται αμέσως μια απομακρυσμένη εκτέλεση κώδικα μέσα στο πιο προνομιούχο συστατικό της συσκευής.
Αυτή η σελίδα περιγράφει μια πραγματική πλήρη παραβίαση του eUICC της Kigen (Infineon SLC37 ESA1M2, ARM SC300) που προκλήθηκε από την απουσία ελέγχων τύπου στην getfield
και putfield
bytecodes. Η ίδια τεχνική μπορεί να επαναχρησιμοποιηθεί κατά άλλων προμηθευτών που παραλείπουν την επαλήθευση byte-code στην κάρτα.
Attack Surface
- Remote Application Management (RAM)
Τα προφίλ eSIM μπορεί να ενσωματώνουν αυθαίρετες Java Card applets. Η παροχή πραγματοποιείται με τυπικά APDUs που μπορούν να μεταφερθούν μέσω SMS-PP (Short Message Service Point-to-Point) ή HTTPS. Εάν ένας επιτιθέμενος κατέχει (ή κλέψει) τα RAM keys για ένα προφίλ, μπορεί να
INSTALL
/LOAD
μια κακόβουλη applet απομακρυσμένα. - Java Card byte-code execution Μετά την εγκατάσταση, η applet εκτελείται μέσα στη VM. Η απουσία ελέγχων χρόνου εκτέλεσης επιτρέπει τη διαφθορά μνήμης.
The Type-Confusion Primitive
getfield
/ putfield
προορίζονται να λειτουργούν μόνο σε αναφορές αντικειμένων. Στην Kigen eUICC, οι εντολές ποτέ δεν επικυρώνουν αν ο τελεστής στη στοίβα είναι αναφορά αντικειμένου ή πίνακα. Επειδή μια λέξη array.length
βρίσκεται στην ακριβή ίδια θέση με το πρώτο πεδίο ενός κανονικού αντικειμένου, ένας επιτιθέμενος μπορεί να:
- Δημιουργήσει έναν πίνακα byte
byte[] buf = new byte[0x100];
- Να τον μετατρέψει σε
Object o = (Object)buf;
- Να χρησιμοποιήσει
putfield
για να αντικαταστήσει οποιαδήποτε 16-bit τιμή μέσα σε ένα γειτονικό αντικείμενο (συμπεριλαμβανομένων των VTABLE / ptr translation entries). - Να χρησιμοποιήσει
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 – αρκετό για να αποθηκεύσει το μοναδικό ιδιωτικό κλειδί ECC της συσκευής που πιστοποιεί την κάρτα στο οικοσύστημα GSMA.
Ροή Εργασίας Εκμετάλλευσης Από Άκρο σε Άκρο
- Καταμέτρηση firmware – Χρησιμοποιήστε το μη τεκμηριωμένο στοιχείο
GET DATA
DF1F
:
80 CA DF 1F 00 // → "ECu10.13" (ευάλωτο)
- Εγκατάσταση κακόβουλου applet OTA – Καταχρήστε τα δημόσια γνωστά κλειδιά του TS.48 Generic Test Profile και στείλτε SMS-PP τμήματα που μεταφέρουν το αρχείο CAP (
LOAD
) ακολουθούμενο από έναINSTALL
:
// απλοποιημένη αλυσίδα APDU
80 E6 02 00 <data> // LOAD (μπλοκ n)
80 E6 0C 00 <data> // INSTALL για φόρτωση
- Προκαλέστε σύγχυση τύπου – Όταν επιλεγεί το applet, εκτελεί την εγγραφή-τι-πού για να καταλάβει έναν πίνακα δεικτών και να διαρρεύσει μνήμη μέσω κανονικών απαντήσεων APDU.
- Εξαγωγή κλειδιού πιστοποίησης GSMA – Το ιδιωτικό κλειδί EC αντιγράφεται στη RAM του applet και επιστρέφεται σε κομμάτια.
- Προσωποποίηση του eUICC – Το κλεμμένο ζεύγος κλειδιών + πιστοποιητικά επιτρέπουν στον επιτιθέμενο να πιστοποιηθεί σε οποιονδήποτε RSP server ως νόμιμη κάρτα (η σύνδεση EID μπορεί να απαιτείται για ορισμένους παρόχους).
- Λήψη και τροποποίηση προφίλ – Τα προφίλ σε απλό κείμενο περιέχουν εξαιρετικά ευαίσθητα πεδία όπως
OPc
,AMF
, OTA κλειδιά και ακόμη και επιπλέον applets. Ο επιτιθέμενος μπορεί να:
- Κλωνοποιήσει ένα προφίλ σε δεύτερο eUICC (κατάληψη φωνής/SMS);
- Διορθώσει εφαρμογές Java Card (π.χ. εισαγωγή STK spyware) πριν την επαναφόρτωση;
- Εξαγάγει μυστικά παρόχου για εκτενή κατάχρηση.
Επίδειξη Κλωνοποίησης / Κατάληψης
Η εγκατάσταση του ίδιου προφίλ σε ΤΗΛΕΦΩΝΟ Α και ΤΗΛΕΦΩΝΟ Β έχει ως αποτέλεσμα το Κέντρο Κινητής Μεταγωγής να δρομολογεί την εισερχόμενη κίνηση στη συσκευή που έχει εγγραφεί πιο πρόσφατα. Μια συνεδρία παρεμβολής SMS 2FA Gmail είναι αρκετή για να παρακάμψει το MFA για το θύμα.
Αυτοματοποιημένο Εργαλείο Δοκιμών & Εκμετάλλευσης
Οι ερευνητές κυκλοφόρησαν ένα εσωτερικό εργαλείο με μια εντολή bsc
(Basic Security Check) που δείχνει αμέσως αν μια Java Card VM είναι ευάλωτη:
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]
Modules που αποστέλλονται με το πλαίσιο:
introspector
– πλήρης εξερευνητής VM και μνήμης (~1.7 MB Java)security-test
– γενική εφαρμογή παράκαμψης επαλήθευσης (~150 KB)exploit
– 100 % αξιόπιστη παραβίαση Kigen eUICC (~72 KB)
Mitigations
- Επαλήθευση byte-code στην κάρτα – επιβολή πλήρους παρακολούθησης ροής ελέγχου & ροής δεδομένων αντί μόνο στην κορυφή της στοίβας.
- Απόκρυψη κεφαλίδας πίνακα – τοποθέτηση
length
εκτός των επικαλυπτόμενων πεδίων αντικειμένων. - Στρατηγική σκληραγώγησης κλειδιών RAM – ποτέ μην αποστέλλετε προφίλ με δημόσια κλειδιά; απενεργοποιήστε το
INSTALL
σε δοκιμαστικά προφίλ (αναφέρεται στο GSMA TS.48 v7). - Heuristics πλευράς διακομιστή RSP – περιορισμός ρυθμού λήψης προφίλ ανά EID, παρακολούθηση γεωγραφικών ανωμαλιών, επικύρωση φρεσκάδας πιστοποιητικού.
Quick Checklist for Pentesters
- Ερώτημα
GET DATA DF1F
– ευάλωτη συμβολοσειρά firmwareECu10.13
υποδεικνύει Kigen. - Ελέγξτε αν τα κλειδιά RAM είναι γνωστά ‑> προσπαθήστε OTA
INSTALL
/LOAD
. - Μετά την εγκατάσταση της εφαρμογής, brute-force απλή μετατροπή primitive (
objarrconfusion
). - Προσπαθήστε να διαβάσετε τα ιδιωτικά κλειδιά του Security Domain – επιτυχία = πλήρης παραβίαση.
References
- Security Explorations – eSIM security
- GSMA TS.48 Generic Test Profile v7.0
- Java Card VM Specification 3.1
tip
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.