Electron Desktop Apps
WhiteIntel είναι μια μηχανή αναζήτησης που τροφοδοτείται από το dark web και προσφέρει δωρεάν λειτουργίες για να ελέγξετε αν μια εταιρεία ή οι πελάτες της έχουν διαρρεύσει από κλέφτες κακόβουλου λογισμικού.
Ο κύριος στόχος του WhiteIntel είναι η καταπολέμηση των αναλήψεων λογαριασμών και των επιθέσεων ransomware που προκύπτουν από κακόβουλο λογισμικό που κλέβει πληροφορίες.
Μπορείτε να ελέγξετε τον ιστότοπό τους και να δοκιμάσετε τη μηχανή τους δωρεάν στο:
Εισαγωγή
Το Electron συνδυάζει ένα τοπικό backend (με NodeJS) και ένα frontend (Chromium), αν και λείπουν μερικοί μηχανισμοί ασφαλείας των σύγχρονων περιηγητών.
Συνήθως μπορείτε να βρείτε τον κώδικα της εφαρμογής Electron μέσα σε μια εφαρμογή .asar
, για να αποκτήσετε τον κώδικα πρέπει να τον εξάγετε:
Στον πηγαίο κώδικα μιας εφαρμογής Electron, μέσα στο packet.json
, μπορείτε να βρείτε καθορισμένο το αρχείο main.js
όπου έχουν οριστεί οι ρυθμίσεις ασφαλείας.
Το Electron έχει 2 τύπους διεργασιών:
Κύρια Διεργασία (έχει πλήρη πρόσβαση στο NodeJS)
Διεργασία Απεικονιστή (θα πρέπει να έχει περιορισμένη πρόσβαση στο NodeJS για λόγους ασφαλείας)
Μια διεργασία απεικονιστή θα είναι ένα παράθυρο περιήγησης που φορτώνει ένα αρχείο:
Οι ρυθμίσεις της διερμηνευτικής διαδικασίας μπορούν να διαμορφωθούν στη κύρια διεργασία μέσα στο αρχείο main.js. Κάποιες από τις ρυθμίσεις θα εμποδίσουν την εφαρμογή Electron να λάβει RCE ή άλλες ευπάθειες αν οι ρυθμίσεις είναι διαμορφωμένες σωστά.
Η εφαρμογή Electron μπορεί να έχει πρόσβαση στη συσκευή μέσω των διεργασιών του Node, αν και μπορεί να ρυθμιστεί για να το αποτρέψει:
nodeIntegration
- είναιoff
από προεπιλογή. Αν είναι ενεργοποιημένο, επιτρέπει την πρόσβαση σε χαρακτηριστικά του Node από τη διερμηνευτική διαδικασία.contextIsolation
- είναιon
από προεπιλογή. Αν είναι απενεργοποιημένο, οι κύριες και οι διερμηνευτικές διαδικασίες δεν είναι απομονωμένες.preload
- κενό από προεπιλογή.sandbox
- είναι απενεργοποιημένο από προεπιλογή. Θα περιορίσει τις ενέργειες που μπορεί να εκτελέσει το NodeJS.Ενσωμάτωση του Node σε Εργαζόμενους
nodeIntegrationInSubframes
- είναιoff
από προεπιλογή.Αν το
nodeIntegration
είναι ενεργοποιημένο, αυτό θα επιτρέψει τη χρήση των API του Node.js σε ιστοσελίδες που φορτώνονται σε iframes μέσα σε μια εφαρμογή Electron.Αν το
nodeIntegration
είναι απενεργοποιημένο, τότε τα προ-φορτώσεις θα φορτώνονται στο iframe
Παράδειγμα διαμόρφωσης:
Μερικά φορτία RCE από εδώ:
Καταγραφή κίνησης
Τροποποιήστε τη διαμόρφωση start-main και προσθέστε τη χρήση ενός proxy όπως:
Ενσωμάτωση Τοπικού Κώδικα στο Electron
Εάν μπορείτε να εκτελέσετε τοπικά μια εφαρμογή Electron, είναι δυνατόν να την κάνετε να εκτελέσει αυθαίρετο κώδικα JavaScript. Ελέγξτε πώς στο:
pagemacOS Electron Applications InjectionRCE: XSS + nodeIntegration
Εάν το nodeIntegration έχει οριστεί σε on, το JavaScript μιας ιστοσελίδας μπορεί να χρησιμοποιήσει εύκολα χαρακτηριστικά του Node.js απλά καλώντας το require()
. Για παράδειγμα, ο τρόπος εκτέλεσης της εφαρμογής υπολογιστή στα Windows είναι:
RCE: preload
Το script που υποδεικνύεται σε αυτή τη ρύθμιση φορτώνεται πριν από άλλα scripts στον renderer, έχοντας απεριόριστη πρόσβαση στα Node APIs:
Επομένως, το σενάριο μπορεί να εξάγει τα χαρακτηριστικά του κόμβου σε σελίδες:
Αν το contextIsolation
είναι ενεργοποιημένο, αυτό δεν θα λειτουργήσει
RCE: XSS + contextIsolation
Το contextIsolation εισάγει τα ξεχωριστά περιβάλλοντα μεταξύ των scripts της ιστοσελίδας και του εσωτερικού κώδικα JavaScript του Electron ώστε η εκτέλεση του JavaScript κάθε κώδικα να μην επηρεάζει τον άλλο. Αυτό είναι ένα απαραίτητο χαρακτηριστικό για την εξάλειψη της δυνατότητας RCE.
Αν τα περιβάλλοντα δεν είναι απομονωμένα, ένας επιτιθέμενος μπορεί:
Να εκτελέσει οποιοδήποτε JavaScript στον renderer (XSS ή πλοήγηση σε εξωτερικές ιστοσελίδες)
Να αντικαταστήσει την ενσωματωμένη μέθοδο που χρησιμοποιείται στο preload ή στον εσωτερικό κώδικα του Electron με δική του λειτουργία
Να ενεργοποιήσει τη χρήση της αντικατασταθείσας λειτουργίας
RCE?
Υπάρχουν 2 μέρη όπου οι ενσωματωμένες μέθοδοι μπορούν να αντικατασταθούν: Στον κώδικα preload ή στον εσωτερικό κώδικα του Electron:
pageElectron contextIsolation RCE via preload codepageElectron contextIsolation RCE via Electron internal codepageElectron contextIsolation RCE via IPCΠαράκαμψη συμβάντος κλικ
Αν υπάρχουν περιορισμοί που εφαρμόζονται όταν κάνετε κλικ σε ένα σύνδεσμο, μπορείτε να τους παρακάμψετε κάνοντας κλικ με το κέντρο αντί για ένα κανονικό αριστερό κλικ
RCE μέσω shell.openExternal
Για περισσότερες πληροφορίες σχετικά με αυτά τα παραδείγματα ελέγξτε https://shabarkin.medium.com/1-click-rce-in-electron-applications-79b52e1fe8b8 και https://benjamin-altpeter.de/shell-openexternal-dangers/
Κατά την ανάπτυξη μιας εφαρμογής Electron desktop, είναι κρίσιμο να διασφαλιστούν οι σωστές ρυθμίσεις για το nodeIntegration
και το contextIsolation
. Έχει επιβεβαιωθεί ότι η εκτέλεση κώδικα απομακρυσμένα (RCE) προς τα preload scripts ή τον φυσικό κώδικα του Electron από την κύρια διεργασία αποτρέπεται αποτελεσματικά με αυτές τις ρυθμίσεις σε ισχύ.
Κατά την αλληλεπίδραση ενός χρήστη με συνδέσμους ή με το άνοιγμα νέων παραθύρων, ενεργοποιούνται συγκεκριμένοι ακροατές συμβάντων, οι οποίοι είναι κρίσιμοι για την ασφάλεια και τη λειτουργικότητα της εφαρμογής:
Αυτοί οι ακροατές αντικαθίστανται από την εφαρμογή επιφάνειας εργασίας για την υλοποίηση της επιχειρηματικής λογικής της. Η εφαρμογή αξιολογεί εάν ένας πλοηγούμενος σύνδεσμος πρέπει να ανοίξει εσωτερικά ή σε έναν εξωτερικό περιηγητή ιστού. Αυτή η απόφαση καθορίζεται συνήθως μέσω μιας συνάρτησης, openInternally
. Εάν αυτή η συνάρτηση επιστρέφει false
, υποδηλώνει ότι ο σύνδεσμος πρέπει να ανοίξει εξωτερικά, χρησιμοποιώντας τη συνάρτηση shell.openExternal
.
Εδώ υπάρχει απλοποιημένο ψευδοκώδικα:
Οι βέλτιστες πρακτικές ασφαλείας του Electron JS συνιστούν να μην γίνεται δεκτό μη αξιόπιστο περιεχόμενο με τη συνάρτηση openExternal
, καθώς αυτό θα μπορούσε να οδηγήσει σε RCE μέσω διαφόρων πρωτοκόλλων. Τα λειτουργικά συστήματα υποστηρίζουν διαφορετικά πρωτόκολλα που ενδέχεται να ενεργοποιήσουν RCE. Για λεπτομερείς παραδείγματα και περαιτέρω εξήγηση σχετικά με αυτό το θέμα, μπορεί κάποιος να ανατρέξει σε αυτό τον πόρο, ο οποίος περιλαμβάνει παραδείγματα πρωτοκόλλων των Windows που μπορούν να εκμεταλλευτούν αυτήν την ευπάθεια.
Παραδείγματα εκμετάλλευσης πρωτοκόλλων των Windows περιλαμβάνουν:
Ανάγνωση Εσωτερικών Αρχείων: XSS + contextIsolation
Η απενεργοποίηση του contextIsolation
επιτρέπει τη χρήση των ετικετών <webview>
, παρόμοια με τις <iframe>
, για την ανάγνωση και εξυφάντωση τοπικών αρχείων. Ένα παράδειγμα παρέχει τον τρόπο εκμετάλλευσης αυτής της ευπάθειας για την ανάγνωση των περιεχομένων εσωτερικών αρχείων:
Επιπλέον, μια άλλη μέθοδος για την ανάγνωση ενός εσωτερικού αρχείου κοινοποιείται, επισημαίνοντας μια κρίσιμη ευπάθεια ανάγνωσης τοπικού αρχείου σε μια εφαρμογή επιφάνειας εργασίας Electron. Αυτό περιλαμβάνει την ενσωμάτωση ενός script για την εκμετάλλευση της εφαρμογής και την εξυφάντωση δεδομένων:
RCE: XSS + Παλιό Chromium
Αν το chromium που χρησιμοποιείται από την εφαρμογή είναι παλιό και υπάρχουν γνωστές ευπαθείες σε αυτό, είναι πιθανό να είναι δυνατή η εκμετάλλευσή του και η απόκτηση RCE μέσω ενός XSS. Μπορείτε να δείτε ένα παράδειγμα σε αυτό το writeup: https://blog.electrovolt.io/posts/discord-rce/
XSS Phishing μέσω παράκαμψης εσωτερικού URL regex
Υποθέτοντας ότι βρήκατε ένα XSS αλλά δεν μπορείτε να ενεργοποιήσετε RCE ή να κλέψετε εσωτερικά αρχεία, μπορείτε να προσπαθήσετε να το χρησιμοποιήσετε για να κλέψετε διαπιστευτήρια μέσω phishing.
Καταρχάς, πρέπει να γνωρίζετε τι συμβαίνει όταν προσπαθείτε να ανοίξετε ένα νέο URL, ελέγχοντας τον κώδικα JS στο μέτωπο:
Η κλήση στο openInternally
θα αποφασίσει εάν το σύνδεσμος θα ανοίξει στο παράθυρο της επιφάνειας εργασίας ως σύνδεσμος που ανήκει στην πλατφόρμα, ή αν θα ανοίξει στο πρόγραμμα περιήγησης ως πόρος τρίτου μέρους.
Στην περίπτωση που το regex που χρησιμοποιείται από τη συνάρτηση είναι ευάλωτο σε παρακάμψεις (για παράδειγμα μην αποδράσει τα τελεία των υποτομέων) ένας επιτιθέμενος θα μπορούσε να καταχραστεί το XSS για να ανοίξει ένα νέο παράθυρο το οποίο θα βρίσκεται στη υποδομή του επιτιθέμενου ζητώντας διαπιστευτήρια από τον χρήστη:
Εργαλεία
Electronegativity είναι ένα εργαλείο για την αναγνώριση λανθασμένων ρυθμίσεων και αντι-προτύπων ασφάλειας σε εφαρμογές που βασίζονται σε Electron.
Electrolint είναι ένα πρόσθετο του VS Code για εφαρμογές Electron που χρησιμοποιεί το Electronegativity.
nodejsscan για έλεγχο ευπαθών βιβλιοθηκών τρίτων
Electro.ng: Πρέπει να το αγοράσετε
Εργαστήρια
Στο https://www.youtube.com/watch?v=xILfQGkLXQo&t=22s μπορείτε να βρείτε ένα εργαστήριο για την εκμετάλλευση ευπαθών εφαρμογών Electron.
Μερικές εντολές που θα σας βοηθήσουν με το εργαστήριο:
Αναφορές
Περισσότερες έρευνες και αναλύσεις σχετικά με την ασφάλεια του Electron στο https://github.com/doyensec/awesome-electronjs-hacking
WhiteIntel είναι μια μηχανή αναζήτησης που τροφοδοτείται από το dark web και προσφέρει δωρεάν λειτουργίες για να ελέγξετε αν μια εταιρεία ή οι πελάτες της έχουν διαρρεύσει από κλέφτες κακόβουλου λογισμικού.
Ο κύριος στόχος του WhiteIntel είναι η καταπολέμηση των αρπαγών λογαριασμών και των επιθέσεων ransomware που προκύπτουν από κακόβουλο λογισμικό που κλέβει πληροφορίες.
Μπορείτε να ελέγξετε την ιστοσελίδα τους και να δοκιμάσετε τη μηχανή τους δωρεάν στο:
Last updated