OceanLotus: Ενημέρωση κακόβουλου λογισμικού για macOS

Τον Μάρτιο του 2019, ένα νέο δείγμα κακόβουλου λογισμικού macOS από την ομάδα κυβερνοχώρου OceanLotus μεταφορτώθηκε στο VirusTotal, μια δημοφιλή διαδικτυακή υπηρεσία σάρωσης. Το εκτελέσιμο αρχείο backdoor έχει τις ίδιες δυνατότητες με την προηγούμενη έκδοση του κακόβουλου λογισμικού macOS που μελετήσαμε, αλλά η δομή του έχει αλλάξει και έχει γίνει πιο δύσκολο να εντοπιστεί. Δυστυχώς, δεν μπορέσαμε να βρούμε ένα σταγονόμετρο που να σχετίζεται με αυτό το δείγμα, επομένως δεν γνωρίζουμε ακόμη τον φορέα μόλυνσης.

Πρόσφατα δημοσιεύσαμε ανάρτηση για το OceanLotus και πώς οι χειριστές προσπαθούν να παρέχουν επιμονή, να επιταχύνουν την εκτέλεση κώδικα και να ελαχιστοποιήσουν το αποτύπωμα στα συστήματα Windows. Είναι επίσης γνωστό ότι αυτή η ομάδα στον κυβερνοχώρο έχει επίσης ένα στοιχείο για το macOS. Αυτή η ανάρτηση περιγράφει λεπτομερώς τις αλλαγές στην νεότερη έκδοση του κακόβουλου λογισμικού για macOS σε σύγκριση με την προηγούμενη έκδοση (περιγράφεται από την Trend Micro), και περιγράφει επίσης πώς μπορείτε να αυτοματοποιήσετε την αποκρυπτογράφηση συμβολοσειρών κατά την ανάλυση χρησιμοποιώντας το IDA Hex-Rays API.

OceanLotus: Ενημέρωση κακόβουλου λογισμικού για macOS

Ανάλυση

Τα επόμενα τρία μέρη περιγράφουν την ανάλυση ενός δείγματος με κατακερματισμό SHA-1 E615632C9998E4D3E5ACD8851864ED09B02C77D2. Το αρχείο καλείται φακός, τα προϊόντα προστασίας από ιούς της ESET το εντοπίζουν ως OSX/OceanLotus.D.

Anti-debugging και προστασία sandbox

Όπως όλα τα δυαδικά αρχεία macOS OceanLotus, το δείγμα είναι συσκευασμένο με UPX, αλλά τα περισσότερα εργαλεία αναγνώρισης συσκευαστή δεν το αναγνωρίζουν ως τέτοιο. Πιθανώς επειδή περιέχουν ως επί το πλείστον μια υπογραφή που εξαρτάται από την παρουσία της συμβολοσειράς "UPX" και επίσης επειδή οι υπογραφές Mach-O είναι λιγότερο συνηθισμένες και δεν ενημερώνονται τόσο συχνά. Αυτή η δυνατότητα καθιστά δύσκολη τη στατική ανίχνευση. Είναι ενδιαφέρον ότι μετά την αποσυσκευασία, το σημείο εισόδου βρίσκεται στην αρχή του τμήματος __cfstring στο τμήμα .TEXT. Αυτή η ενότητα έχει χαρακτηριστικά σημαίας όπως φαίνεται στην παρακάτω εικόνα.

OceanLotus: Ενημέρωση κακόβουλου λογισμικού για macOS
Εικόνα 1. Χαρακτηριστικά ενότητας MACH-O __cfstring

Όπως φαίνεται στο Σχήμα 2, οι θέσεις του κώδικα στην ενότητα __cfstring σας επιτρέπει να ξεγελάσετε ορισμένα εργαλεία αποσυναρμολόγησης εμφανίζοντας κώδικα ως συμβολοσειρές.

OceanLotus: Ενημέρωση κακόβουλου λογισμικού για macOS
Σχήμα 2. Κωδικός οπισθόπορτας που ανιχνεύθηκε από το IDA ως δεδομένα

Μόλις εκτελεστεί, το δυαδικό δημιουργεί ένα νήμα ως πρόγραμμα αντιμετώπισης σφαλμάτων, του οποίου ο μοναδικός σκοπός είναι να ελέγχει συνεχώς για την παρουσία ενός προγράμματος εντοπισμού σφαλμάτων. Για αυτή τη ροή:

— Προσπαθεί να αποσυνδέσει οποιοδήποτε πρόγραμμα εντοπισμού σφαλμάτων, καλώντας ptrace с PT_DENY_ATTACH ως παράμετρος αιτήματος
- Ελέγχει εάν ορισμένες αποκλειστικές θύρες είναι ανοιχτές καλώντας μια λειτουργία task_get_exception_ports
- Ελέγχει εάν το πρόγραμμα εντοπισμού σφαλμάτων είναι συνδεδεμένο, όπως φαίνεται στην παρακάτω εικόνα, ελέγχοντας την παρουσία της σημαίας P_TRACED στην τρέχουσα διαδικασία

OceanLotus: Ενημέρωση κακόβουλου λογισμικού για macOS
Εικόνα 3. Έλεγχος της σύνδεσης του προγράμματος εντοπισμού σφαλμάτων χρησιμοποιώντας τη συνάρτηση sysctl

Εάν ο φύλακας εντοπίσει την παρουσία εντοπισμού σφαλμάτων, καλείται η συνάρτηση exit. Επιπλέον, το δείγμα ελέγχει στη συνέχεια το περιβάλλον εκτελώντας δύο εντολές:

ioreg -l | grep -e "Manufacturer" и sysctl hw.model

Στη συνέχεια, το δείγμα ελέγχει την επιστρεφόμενη τιμή έναντι μιας κωδικοποιημένης λίστας συμβολοσειρών από γνωστά συστήματα εικονικοποίησης: Acle, vmware, VirtualBox ή παραλληλισμούς. Τέλος, η επόμενη εντολή ελέγχει εάν το μηχάνημα είναι ένα από τα ακόλουθα «MBP», «MBA», «MB», «MM», «IM», «MP» και «XS». Αυτοί είναι κωδικοί μοντέλων συστήματος, για παράδειγμα, "MBP" σημαίνει MacBook Pro, "MBA" σημαίνει MacBook Air κ.λπ.

system_profiler SPHardwareDataType 2>/dev/null | awk '/Boot ROM Version/ {split($0, line, ":");printf("%s", line[2]);}

Βασικές προσθήκες

Ενώ οι εντολές του backdoor δεν έχουν αλλάξει από την έρευνα της Trend Micro, παρατηρήσαμε μερικές άλλες τροποποιήσεις. Οι διακομιστές C&C που χρησιμοποιούνται σε αυτό το δείγμα είναι αρκετά νέοι και δημιουργήθηκαν στις 22.10.2018/XNUMX/XNUMX.

- daff.faybilodeau[.]com
- sarc.onteagleroad[.]com
- au.charlineopkesston[.]com

Η διεύθυνση URL του πόρου έχει αλλάξει σε /dp/B074WC4NHW/ref=gbps_img_m-9_62c3_750e6b35.
Το πρώτο πακέτο που αποστέλλεται στον διακομιστή C&C περιέχει περισσότερες πληροφορίες σχετικά με τον κεντρικό υπολογιστή, συμπεριλαμβανομένων όλων των δεδομένων που συλλέγονται από τις εντολές στον παρακάτω πίνακα.

OceanLotus: Ενημέρωση κακόβουλου λογισμικού για macOS

Εκτός από αυτήν την αλλαγή διαμόρφωσης, το δείγμα δεν χρησιμοποιεί βιβλιοθήκη για φιλτράρισμα δικτύου libcurl, αλλά μια εξωτερική βιβλιοθήκη. Για να το βρει, το backdoor προσπαθεί να αποκρυπτογραφήσει κάθε αρχείο στον τρέχοντα κατάλογο χρησιμοποιώντας το AES-256-CBC με το κλειδί gFjMXBgyXWULmVVVzyxy, γεμισμένο με μηδενικά. Κάθε αρχείο αποκρυπτογραφείται και αποθηκεύεται ως /tmp/store, και γίνεται προσπάθεια φόρτωσης ως βιβλιοθήκης χρησιμοποιώντας τη συνάρτηση dlopen. Όταν μια προσπάθεια αποκρυπτογράφησης καταλήγει σε επιτυχημένη κλήση dlopen, το backdoor εξάγει εξαγόμενες λειτουργίες Boriry и ChadylonV, τα οποία είναι προφανώς υπεύθυνα για την επικοινωνία δικτύου με τον διακομιστή. Δεν έχουμε το dropper ή άλλα αρχεία από την αρχική τοποθεσία του δείγματος, επομένως δεν μπορούμε να αναλύσουμε αυτήν τη βιβλιοθήκη. Επιπλέον, δεδομένου ότι το στοιχείο είναι κρυπτογραφημένο, ένας κανόνας YARA που βασίζεται σε αυτές τις συμβολοσειρές δεν θα ταιριάζει με το αρχείο που βρίσκεται στο δίσκο.

Όπως περιγράφεται στο παραπάνω άρθρο, δημιουργεί ταυτότητα πελάτη. Αυτό το αναγνωριστικό είναι ο κατακερματισμός MD5 της τιμής επιστροφής μιας από τις ακόλουθες εντολές:

- ioreg -rd1 -c IOPlatformExpertDevice | awk '/IOPlatformSerialNumber/ { split($0, line, """); printf("%s", line[4]); }'
- ioreg -rd1 -c IOPlatformExpertDevice | awk '/IOPlatformUUID/ { split($0, line, """); printf("%s", line[4]); }'
- ifconfig en0 | awk '/ether /{print $2}' (λάβετε διεύθυνση MAC)
- άγνωστη ομάδα ("x1ex72x0a"), το οποίο χρησιμοποιείται σε προηγούμενα δείγματα

Πριν από τον κατακερματισμό, ένα "0" ή "1" προστίθεται στην τιμή επιστροφής για να υποδείξει τα δικαιώματα root. Αυτό ταυτότητα πελάτη αποθηκευμένο σε /Library/Storage/File System/HFS/25cf5d02-e50b-4288-870a-528d56c3cf6e/pivtoken.appex, εάν ο κώδικας εκτελείται ως root ή στο ~/Library/SmartCardsServices/Technology/PlugIns/drivers/snippets.ecgML σε όλες τις άλλες περιπτώσεις. Το αρχείο συνήθως κρύβεται χρησιμοποιώντας τη συνάρτηση _chflags, η χρονική του σήμανση αλλάζει χρησιμοποιώντας την εντολή touch –t με τυχαία τιμή.

Αποκωδικοποίηση συμβολοσειρών

Όπως και με τις προηγούμενες επιλογές, οι συμβολοσειρές κρυπτογραφούνται χρησιμοποιώντας AES-256-CBC (δεκαεξαδικό κλειδί: 9D7274AD7BCEF0DED29BDBB428C251DF8B350B92 γεμισμένο με μηδενικά και IV γεμάτο με μηδενικά) μέσω της συνάρτησης CCCcrypt. Το κλειδί έχει αλλάξει από τις προηγούμενες εκδόσεις, αλλά επειδή η ομάδα εξακολουθεί να χρησιμοποιεί τον ίδιο αλγόριθμο κρυπτογράφησης συμβολοσειράς, η αποκρυπτογράφηση μπορεί να αυτοματοποιηθεί. Εκτός από αυτήν την ανάρτηση, κυκλοφορούμε ένα σενάριο IDA που χρησιμοποιεί το Hex-Rays API για την αποκρυπτογράφηση των συμβολοσειρών που υπάρχουν στο δυαδικό αρχείο. Αυτό το σενάριο μπορεί να βοηθήσει στη μελλοντική ανάλυση του OceanLotus και στην ανάλυση των υπαρχόντων δειγμάτων που δεν μπορέσαμε ακόμη να λάβουμε. Το σενάριο βασίζεται σε μια καθολική μέθοδο για τη λήψη ορισμάτων που μεταβιβάζονται σε μια συνάρτηση. Επιπλέον, αναζητά εκχωρήσεις παραμέτρων. Η μέθοδος μπορεί να επαναχρησιμοποιηθεί για τη λήψη μιας λίστας ορισμάτων συνάρτησης και, στη συνέχεια, τη μεταβίβασή της στην επανάκληση.

Γνωρίζοντας το πρωτότυπο λειτουργίας αποκρυπτογραφήσει, το σενάριο βρίσκει όλες τις παραπομπές σε αυτήν τη συνάρτηση, όλα τα ορίσματα, στη συνέχεια αποκρυπτογραφεί τα δεδομένα και τοποθετεί απλό κείμενο μέσα σε ένα σχόλιο στη διεύθυνση παραπομπής. Για να λειτουργήσει σωστά το σενάριο, πρέπει να οριστεί στο προσαρμοσμένο αλφάβητο που χρησιμοποιείται από τη συνάρτηση αποκωδικοποίησης base64 και πρέπει να οριστεί μια καθολική μεταβλητή που να περιέχει το μήκος του κλειδιού (σε αυτήν την περίπτωση ένα DWORD, βλέπε Εικόνα 4).

OceanLotus: Ενημέρωση κακόβουλου λογισμικού για macOS
Εικόνα 4. Ορισμός της καθολικής μεταβλητής key_len

Στο παράθυρο Συνάρτηση, μπορείτε να κάνετε δεξί κλικ στη συνάρτηση αποκρυπτογράφησης και να κάνετε κλικ στην επιλογή «Εξαγωγή και αποκρυπτογράφηση ορισμάτων». Το σενάριο πρέπει να τοποθετεί τις αποκρυπτογραφημένες γραμμές στα σχόλια, όπως φαίνεται στο Σχήμα 5.

OceanLotus: Ενημέρωση κακόβουλου λογισμικού για macOS
Εικόνα 5. Το αποκρυπτογραφημένο κείμενο τοποθετείται στα σχόλια

Με αυτόν τον τρόπο οι αποκρυπτογραφημένες συμβολοσειρές τοποθετούνται εύκολα μαζί στο παράθυρο IDA xrefs για αυτή τη λειτουργία όπως φαίνεται στην Εικόνα 6.

OceanLotus: Ενημέρωση κακόβουλου λογισμικού για macOS
Εικόνα 6. Xrefs to f_decrypt συνάρτηση

Το τελικό σενάριο βρίσκεται στο Αποθήκη Github.

Παραγωγή

Όπως ήδη αναφέρθηκε, η OceanLotus βελτιώνει και ενημερώνει συνεχώς την εργαλειοθήκη της. Αυτή τη φορά, η ομάδα του κυβερνοχώρου έχει βελτιώσει το κακόβουλο λογισμικό για να λειτουργεί με χρήστες Mac. Ο κώδικας δεν έχει αλλάξει πολύ, αλλά επειδή πολλοί χρήστες Mac αγνοούν τα προϊόντα ασφαλείας, η προστασία του κακόβουλου λογισμικού από τον εντοπισμό είναι δευτερεύουσας σημασίας.

Τα προϊόντα της ESET ανίχνευαν ήδη αυτό το αρχείο τη στιγμή της έρευνας. Επειδή η βιβλιοθήκη δικτύου που χρησιμοποιείται για την επικοινωνία C&C είναι πλέον κρυπτογραφημένη στο δίσκο, το ακριβές πρωτόκολλο δικτύου που χρησιμοποιείται από τους εισβολείς δεν είναι ακόμη γνωστό.

Δείκτες συμβιβασμού

Οι δείκτες συμβιβασμού καθώς και τα χαρακτηριστικά MITER ATT&CK είναι επίσης διαθέσιμα στο GitHub.

Πηγή: www.habr.com

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