macOS Electron Applications Injection
Βασικές Πληροφορίες
Αν δεν ξέρετε τι είναι το Electron, μπορείτε να βρείτε πολλές πληροφορίες εδώ. Αλλά για τώρα απλά γνωρίστε ότι το Electron εκτελεί node. Και το node έχει μερικές παραμέτρους και μεταβλητές περιβάλλοντος που μπορούν να χρησιμοποιηθούν για να το κάνουν να εκτελέσει άλλον κώδικα εκτός από τον καθορισμένο αρχείο.
Συγχώνευση Electron
Αυτές οι τεχνικές θα συζητηθούν στη συνέχεια, αλλά το Electron έχει προσθέσει πρόσφατα αρκετές σημαίες ασφαλείας για να τις αποτρέψει. Αυτές είναι οι Συγχωνεύσεις Electron και αυτές είναι αυτές που χρησιμοποιούνται για να αποτρέψουν τις εφαρμογές Electron σε macOS από το φόρτωμα αυθαίρετου κώδικα:
RunAsNode
: Εάν είναι απενεργοποιημένο, αποτρέπει τη χρήση της μεταβλητής περιβάλλοντοςELECTRON_RUN_AS_NODE
για την εισαγωγή κώδικα.EnableNodeCliInspectArguments
: Εάν είναι απενεργοποιημένο, παράμετροι όπως--inspect
,--inspect-brk
δεν θα τηρούνται. Αποφεύγοντας έτσι την εισαγωγή κώδικα.EnableEmbeddedAsarIntegrityValidation
: Εάν είναι ενεργοποιημένο, το φορτωμένοasar
αρχείο θα ελεγχθεί από το macOS. Αποτρέποντας με αυτόν τον τρόπο την εισαγωγή κώδικα με τροποποίηση του περιεχομένου αυτού του αρχείου.OnlyLoadAppFromAsar
: Εάν αυτό είναι ενεργοποιημένο, αντί να αναζητά να φορτώσει με την ακόλουθη σειρά:app.asar
,app
και τελικάdefault_app.asar
. Θα ελέγχει και θα χρησιμοποιεί μόνο το app.asar, εξασφαλίζοντας έτσι όταν συνδυαστεί με τη συγχώνευσηembeddedAsarIntegrityValidation
είναι αδύνατο να φορτωθεί μη-επικυρωμένος κώδικας.LoadBrowserProcessSpecificV8Snapshot
: Εάν είναι ενεργοποιημένο, η διεργασία περιήγησης χρησιμοποιεί το αρχείο που ονομάζεταιbrowser_v8_context_snapshot.bin
για το στιγμιότυπο του V8.
Μια άλλη ενδιαφέρουσα συγχώνευση που δεν θα αποτρέψει την εισαγωγή κώδικα είναι:
EnableCookieEncryption: Εάν είναι ενεργοποιημένο, το αποθετήριο cookie στο δίσκο κρυπτογραφείται χρησιμοποιώντας κλειδιά κρυπτογράφησης σε επίπεδο λειτουργικού συστήματος.
Έλεγχος Συγχωνέύσεων Electron
Μπορείτε να ελέγξετε αυτές τις σημαίες από μια εφαρμογή με:
Τροποποίηση των Ηλεκτρονικών Ασφαλμάτων
Όπως αναφέρονται στα έγγραφα, η διαμόρφωση των Ηλεκτρονικών Ασφαλμάτων γίνεται μέσα στο Ηλεκτρονικό δυαδικό που περιέχει κάπου το συμβολοσειρά dL7pKGdnNz796PbbjQWNKmHXBZaB9tsX
.
Στις εφαρμογές macOS αυτό βρίσκεται συνήθως στο application.app/Contents/Frameworks/Electron Framework.framework/Electron Framework
Μπορείτε να φορτώσετε αυτό το αρχείο στο https://hexed.it/ και να αναζητήσετε την προηγούμενη συμβολοσειρά. Μετά από αυτήν τη συμβολοσειρά, μπορείτε να δείτε σε ASCII έναν αριθμό "0" ή "1" που υποδηλώνει εάν κάθε ασφάλεια είναι απενεργοποιημένη ή ενεργοποιημένη. Απλά τροποποιήστε τον κωδικό hex (0x30
είναι 0
και 0x31
είναι 1
) για τροποποίηση των τιμών των ασφαλειών.
Σημείωση ότι αν προσπαθήσετε να αντικαταστήσετε το δυαδικό αρχείο του Electron Framework μέσα σε μια εφαρμογή με αυτά τα bytes τροποποιημένα, η εφαρμογή δεν θα εκκινήσει.
RCE προσθέτοντας κώδικα σε Εφαρμογές Electron
Μπορεί να υπάρχουν εξωτερικά αρχεία JS/HTML που χρησιμοποιεί μια Εφαρμογή Electron, έτσι ένας επιτιθέμενος μπορεί να ενθέσει κώδικα σε αυτά τα αρχεία, η υπογραφή των οποίων δεν θα ελεγχθεί και να εκτελέσει αυθαίρετο κώδικα στο πλαίσιο της εφαρμογής.
Ωστόσο, προς το παρόν υπάρχουν 2 περιορισμοί:
Η άδεια
kTCCServiceSystemPolicyAppBundles
είναι απαραίτητη για την τροποποίηση μιας Εφαρμογής, οπότε από προεπιλογή αυτό δεν είναι πλέον δυνατό.Το μεταγλωττισμένο αρχείο
asap
συνήθως έχει τις ασφάλειεςembeddedAsarIntegrityValidation
και
onlyLoadAppFromAsar
ενεργοποιημένες
Κάνοντας αυτό το μονοπάτι επίθεσης πιο περίπλοκο (ή αδύνατο).
Σημειώστε ότι είναι δυνατό να παρακάμψετε την απαίτηση της kTCCServiceSystemPolicyAppBundles
με το να αντιγράψετε την εφαρμογή σε έναν άλλο κατάλογο (όπως /tmp
), να μετονομάσετε τον φάκελο app.app/Contents
σε app.app/NotCon
, τροποποιήστε το αρχείο asar με τον κακόβουλο κώδικά σας, να το μετονομάσετε πίσω σε app.app/Contents
και να το εκτελέσετε.
Μπορείτε να αποσυμπιέσετε τον κώδικα από το αρχείο asar με:
Και συμπιέστε το πίσω μετά την τροποποίησή του με:
RCE με το ELECTRON_RUN_AS_NODE
ELECTRON_RUN_AS_NODE
Σύμφωνα με τα έγγραφα, εάν αυτή η μεταβλητή περιβάλλοντος είναι ορισμένη, θα ξεκινήσει τη διαδικασία ως ένα κανονικό διεργασία Node.js.
Αν η προστασία RunAsNode
είναι απενεργοποιημένη, η μεταβλητή περιβάλλοντος ELECTRON_RUN_AS_NODE
θα αγνοηθεί και αυτό δεν θα λειτουργήσει.
Έγχυση από το Plist της Εφαρμογής
Όπως προτάθηκε εδώ, μπορείτε να καταχραστείτε αυτήν τη μεταβλητή περιβάλλοντος σε ένα plist για να διατηρήσετε την επιμονή:
RCE με NODE_OPTIONS
NODE_OPTIONS
Μπορείτε να αποθηκεύσετε το φορτίο σε διαφορετικό αρχείο και να το εκτελέσετε:
Αν η ασφάλεια EnableNodeOptionsEnvironmentVariable
είναι απενεργοποιημένη, η εφαρμογή θα αγνοήσει τη μεταβλητή περιβάλλοντος NODE_OPTIONS όταν εκκινηθεί εκτός αν η μεταβλητή περιβάλλοντος ELECTRON_RUN_AS_NODE
είναι ορισμένη, η οποία θα αγνοηθεί επίσης αν η ασφάλεια RunAsNode
είναι απενεργοποιημένη.
Αν δεν ορίσετε το ELECTRON_RUN_AS_NODE
, θα εμφανιστεί το σφάλμα: Οι περισσότερες NODE_OPTIONs δεν υποστηρίζονται σε συσκευασμένες εφαρμογές. Δείτε την τεκμηρίωση για περισσότερες λεπτομέρειες.
Έγχυση από το Plist της Εφαρμογής
RCE με επιθετική επιθεύση
Σύμφωνα με αυτό, εάν εκτελέσετε μια εφαρμογή Electron με σημαίες όπως --inspect
, --inspect-brk
και --remote-debugging-port
, ένα θύρα εντοπισμού σφαλμάτων θα είναι ανοιχτή ώστε να μπορείτε να συνδεθείτε σε αυτήν (για παράδειγμα από το Chrome στο chrome://inspect
) και θα μπορείτε να εισάγετε κώδικα σε αυτήν ή ακόμη και να εκκινήσετε νέες διεργασίες.
Για παράδειγμα:
Εάν το ασφαλιστικό EnableNodeCliInspectArguments
είναι απενεργοποιημένο, η εφαρμογή θα αγνοήσει τις παραμέτρους του node (όπως --inspect
) όταν ξεκινήσει εκτός αν η μεταβλητή περιβάλλοντος ELECTRON_RUN_AS_NODE
είναι ορισμένη, η οποία θα αγνοηθεί επίσης εάν το ασφαλιστικό RunAsNode
είναι απενεργοποιημένο.
Ωστόσο, μπορείτε ακόμα να χρησιμοποιήσετε την παράμετρο electron --remote-debugging-port=9229
αλλά το προηγούμενο φορτίο δεν θα λειτουργήσει για την εκτέλεση άλλων διεργασιών.
Χρησιμοποιώντας την παράμετρο --remote-debugging-port=9222
είναι δυνατόν να κλέψετε κάποιες πληροφορίες από την εφαρμογή Electron όπως το ιστορικό (με GET εντολές) ή τα cookies του προγράμματος περιήγησης (καθώς αποκρυπτογραφούνται μέσα στον περιηγητή και υπάρχει ένα json endpoint που θα τα δώσει).
Μπορείτε να μάθετε πώς να το κάνετε αυτό σε εδώ και εδώ και να χρησιμοποιήσετε το αυτόματο εργαλείο WhiteChocolateMacademiaNut ή ένα απλό σενάριο όπως:
Στο συγκεκριμένο blogpost, αυτή η αποσφαλμάτωση καταχρηστεύεται για να κάνει το headless chrome να κατεβάσει αυθαίρετα αρχεία σε αυθαίρετες τοποθεσίες.
Έγχυση από το App Plist
Μπορείτε να καταχρηστεύσετε αυτήν τη μεταβλητή περιβάλλοντος σε ένα plist για να διατηρήσετε την επιμονή προσθέτοντας αυτά τα κλειδιά:
Παράκαμψη TCC εκμεταλλευόμενος Παλαιότερες Εκδόσεις
Το TCC daemon του macOS δεν ελέγχει την εκτελούμενη έκδοση της εφαρμογής. Έτσι, αν δεν μπορείτε να ενθάρρυνετε κώδικα σε μια εφαρμογή Electron με καμία από τις προηγούμενες τεχνικές, μπορείτε να κατεβάσετε μια προηγούμενη έκδοση της ΕΦΑΡΜΟΓΗΣ και να ενθάρρυνετε κώδικα σε αυτήν καθώς θα εξακολουθεί να λαμβάνει τα δικαιώματα TCC (εκτός αν το Trust Cache το εμποδίζει).
Εκτέλεση μη JS Κώδικα
Οι προηγούμενες τεχνικές θα σας επιτρέψουν να εκτελέσετε JS κώδικα μέσα στη διαδικασία της εφαρμογής electron. Ωστόσο, θυμηθείτε ότι οι υποδιεργασίες εκτελούνται υπό το ίδιο προφίλ αμμοθοχώρου με τη γονική εφαρμογή και κληρονομούν τα δικαιώματα TCC τους. Επομένως, αν θέλετε να εκμεταλλευτείτε τις αδειοδοτήσεις για πρόσβαση στην κάμερα ή το μικρόφωνο για παράδειγμα, απλά μπορείτε να εκτελέσετε ένα άλλο δυαδικό από τη διαδικασία.
Αυτόματη Ενθάρρυνση
Το εργαλείο electroniz3r μπορεί να χρησιμοποιηθεί εύκολα για να εντοπίσει ευάλωτες εφαρμογές electron που έχουν εγκατασταθεί και να ενθαρρύνει κώδικα σε αυτές. Αυτό το εργαλείο θα προσπαθήσει να χρησιμοποιήσει την τεχνική --inspect
:
Πρέπει να το μεταγλωτίσετε μόνοι σας και μπορείτε να το χρησιμοποιήσετε ως εξής:
Αναφορές
Last updated