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

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

  1. Remote Application Management (RAM) Τα προφίλ eSIM μπορεί να ενσωματώνουν αυθαίρετες Java Card applets. Η παροχή πραγματοποιείται με τυπικά APDUs που μπορούν να μεταφερθούν μέσω SMS-PP (Short Message Service Point-to-Point) ή HTTPS. Εάν ένας επιτιθέμενος κατέχει (ή κλέψει) τα RAM keys για ένα προφίλ, μπορεί να INSTALL/LOAD μια κακόβουλη applet απομακρυσμένα.
  2. Java Card byte-code execution Μετά την εγκατάσταση, η applet εκτελείται μέσα στη VM. Η απουσία ελέγχων χρόνου εκτέλεσης επιτρέπει τη διαφθορά μνήμης.

The Type-Confusion Primitive

getfield / putfield προορίζονται να λειτουργούν μόνο σε αναφορές αντικειμένων. Στην Kigen eUICC, οι εντολές ποτέ δεν επικυρώνουν αν ο τελεστής στη στοίβα είναι αναφορά αντικειμένου ή πίνακα. Επειδή μια λέξη array.length βρίσκεται στην ακριβή ίδια θέση με το πρώτο πεδίο ενός κανονικού αντικειμένου, ένας επιτιθέμενος μπορεί να:

  1. Δημιουργήσει έναν πίνακα byte byte[] buf = new byte[0x100];
  2. Να τον μετατρέψει σε Object o = (Object)buf;
  3. Να χρησιμοποιήσει putfield για να αντικαταστήσει οποιαδήποτε 16-bit τιμή μέσα σε ένα γειτονικό αντικείμενο (συμπεριλαμβανομένων των VTABLE / ptr translation entries).
  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 – αρκετό για να αποθηκεύσει το μοναδικό ιδιωτικό κλειδί ECC της συσκευής που πιστοποιεί την κάρτα στο οικοσύστημα GSMA.

Ροή Εργασίας Εκμετάλλευσης Από Άκρο σε Άκρο

  1. Καταμέτρηση firmware – Χρησιμοποιήστε το μη τεκμηριωμένο στοιχείο GET DATA DF1F:
80 CA DF 1F 00   // → "ECu10.13" (ευάλωτο)
  1. Εγκατάσταση κακόβουλου 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 για φόρτωση
  1. Προκαλέστε σύγχυση τύπου – Όταν επιλεγεί το applet, εκτελεί την εγγραφή-τι-πού για να καταλάβει έναν πίνακα δεικτών και να διαρρεύσει μνήμη μέσω κανονικών απαντήσεων APDU.
  2. Εξαγωγή κλειδιού πιστοποίησης GSMA – Το ιδιωτικό κλειδί EC αντιγράφεται στη RAM του applet και επιστρέφεται σε κομμάτια.
  3. Προσωποποίηση του eUICC – Το κλεμμένο ζεύγος κλειδιών + πιστοποιητικά επιτρέπουν στον επιτιθέμενο να πιστοποιηθεί σε οποιονδήποτε RSP server ως νόμιμη κάρτα (η σύνδεση EID μπορεί να απαιτείται για ορισμένους παρόχους).
  4. Λήψη και τροποποίηση προφίλ – Τα προφίλ σε απλό κείμενο περιέχουν εξαιρετικά ευαίσθητα πεδία όπως 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

  1. Επαλήθευση byte-code στην κάρτα – επιβολή πλήρους παρακολούθησης ροής ελέγχου & ροής δεδομένων αντί μόνο στην κορυφή της στοίβας.
  2. Απόκρυψη κεφαλίδας πίνακα – τοποθέτηση length εκτός των επικαλυπτόμενων πεδίων αντικειμένων.
  3. Στρατηγική σκληραγώγησης κλειδιών RAM – ποτέ μην αποστέλλετε προφίλ με δημόσια κλειδιά; απενεργοποιήστε το INSTALL σε δοκιμαστικά προφίλ (αναφέρεται στο GSMA TS.48 v7).
  4. Heuristics πλευράς διακομιστή RSP – περιορισμός ρυθμού λήψης προφίλ ανά EID, παρακολούθηση γεωγραφικών ανωμαλιών, επικύρωση φρεσκάδας πιστοποιητικού.

Quick Checklist for Pentesters

  • Ερώτημα GET DATA DF1F – ευάλωτη συμβολοσειρά firmware ECu10.13 υποδεικνύει Kigen.
  • Ελέγξτε αν τα κλειδιά RAM είναι γνωστά ‑> προσπαθήστε OTA INSTALL/LOAD.
  • Μετά την εγκατάσταση της εφαρμογής, brute-force απλή μετατροπή primitive (objarrconfusion).
  • Προσπαθήστε να διαβάσετε τα ιδιωτικά κλειδιά του Security Domain – επιτυχία = πλήρης παραβίαση.

References

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