StrandHogg 2.0 Exploit Explained

Το StrandHogg 2.0 είναι μια επικίνδυνη νέα ευπάθεια Android. Δείτε πώς μπορεί να επηρεάσει τους χρήστες και πώς οι προγραμματιστές μπορούν να προστατεύσουν τις εφαρμογές τους από αυτό.

Είναι 10:00 μ.μ. Γνωρίζετε πού βρίσκονται οι Δραστηριότητές σας; Υπάρχει μια νέα ευπάθεια που μπορεί να αξιοποιηθεί σε εκατομμύρια συσκευές Android και είναι επίσης πολύ άσχημη. Με λίγα λόγια, αυτό το ελάττωμα σχεδιασμού επιτρέπει σε έναν εισβολέα να παρουσιάσει τη δική του Δραστηριότητα (σελίδα) πάνω από μια άλλη εφαρμογή, φέρνοντας δυνητικά σε σύγχυση τον χρήστη να δώσει τα προσωπικά του δεδομένα. Η ευπάθεια έχει ονομαστεί StrandHogg 2.0 και αποκαλύφθηκε πρόσφατα από Promon, μια νορβηγική εταιρεία ασφαλείας.

Η ευπάθεια StrandHogg 2.0 επηρεάζει θεωρητικά όλες τις συσκευές Android που διαθέτουν εκδόσεις Android τόσο παλιές όσο το Honeycomb (3.0) και έως το Android 9 Pie (9.0). Βασισμένο στο στατιστικά στοιχεία διανομής τελευταίας έκδοσης Android, αυτό σημαίνει ότι περίπου το 91,8% όλων των συσκευών Android είναι ευάλωτες στο StrandHogg 2.0

. Η ευπάθεια εκχωρήθηκε CVE-2020-0096 και δόθηκε α επίπεδο σοβαρότητας του "κρίσιμου". Δεν απαιτεί ειδικά δικαιώματα για να λειτουργήσει και μπορεί να λειτουργήσει σχεδόν εξ ολοκλήρου χωρίς αλληλεπίδραση με τον χρήστη. Το μόνο που πρέπει να κάνει ένας χρήστης είναι να ανοίξει μια εφαρμογή με κακόβουλο κώδικα κρυμμένο σε αυτήν και στη συνέχεια να είναι ευάλωτος στην εκμετάλλευση.

Ο Promon είχε την καλοσύνη να μας στείλει την απόδειξη της ιδέας της εφαρμογής και τον πηγαίο κώδικα της, ώστε να μπορέσουμε καλύτερα εξηγήστε πώς λειτουργεί το exploit, γιατί έχει σημασία για τους χρήστες και πώς οι προγραμματιστές μπορούν να προστατεύσουν τις εφαρμογές τους εναντίον του.


Πως δουλεύει

Ας υποθέσουμε ότι χρησιμοποιείτε το Gmail και κάνετε κλικ σε έναν σύνδεσμο ιστού. Εάν μεταβείτε στην οθόνη των πρόσφατων εφαρμογών σας, μπορεί να παρατηρήσετε ότι η ιστοσελίδα φαίνεται να βρίσκεται "μέσα" στο Gmail. Η προεπισκόπηση δείχνει τον ιστότοπο, αλλά το εικονίδιο και το όνομα της εφαρμογής εξακολουθούν να προέρχονται από το Gmail. Αυτό είναι κάτι που συμβαίνει όταν μια εφαρμογή/Δραστηριότητα εκκινεί μια άλλη εφαρμογή/Δραστηριότητα στην ίδια εργασία. Τώρα φανταστείτε ότι δεν ανοίξατε σκόπιμα αυτόν τον σύνδεσμο. Για εσάς, φαίνεται ότι είναι απλώς μέρος της εφαρμογής Gmail. Αυτή είναι η συμπεριφορά που εκμεταλλεύεται το StrandHogg 2.0.

Θα πρέπει να αφήσουμε έξω ορισμένες λεπτομέρειες εδώ, αλλά εδώ είναι περίπου πώς λειτουργεί αυτό το exploit. Για τα ακόλουθα, ας υποθέσουμε ότι ο εισβολέας θέλει να λάβει τα στοιχεία σύνδεσης του χρήστη στο Gmail.

  1. Ο χρήστης κατεβάζει μια κακόβουλη εφαρμογή (φυσικά, χωρίς να γνωρίζει ότι είναι κακόβουλη) και την ανοίγει.
  2. Στο παρασκήνιο, η εφαρμογή ανοίγει το Gmail, τοποθετεί μια παρόμοια Δραστηριότητα σύνδεσης πάνω της και, στη συνέχεια, ξεκινά μια άλλη Δραστηριότητα.
  3. Ο χρήστης ανοίγει το Gmail και βλέπει αυτό που μοιάζει με την οθόνη σύνδεσης του Gmail, αλλά στην πραγματικότητα είναι η δραστηριότητα phishing του εισβολέα.

Η τελική Δραστηριότητα που ξεκίνησε στο βήμα 2 μπορεί να είναι οτιδήποτε αποφεύγει την υποψία. Η εφαρμογή θα μπορούσε να προσποιηθεί ένα σφάλμα και να επιστρέψει στην αρχική οθόνη ή θα μπορούσε απλώς να ανοίξει στην κύρια δραστηριότητά της σαν να μην συνέβη τίποτα. Το μόνο ύποπτο πράγμα που μπορεί να δει ο χρήστης είναι ένα σωρό ανοιγόμενα κινούμενα σχέδια καθώς ξεκινούν όλες οι Δραστηριότητες. Το χειρότερο μέρος: Δεν θα φαίνεται καν ότι το Gmail έχει ανοίξει.

Πηγή: Promon

Φυσικά, ένας εισβολέας μπορεί να κάνει περισσότερα από το να δείχνει απλώς μια ψεύτικη οθόνη σύνδεσης. Αντ' αυτού, μια κακόβουλη εφαρμογή θα μπορούσε να παρουσιάσει μια προτροπή αδειών, εξαπατώντας τον χρήστη να παραχωρήσει ανεπιθύμητα δικαιώματα. Ενώ το αίτημα οποιωνδήποτε ειδικών αδειών, όπως η Προσβασιμότητα, μπορεί να κάνει τον χρήστη ύποπτο, είναι πιθανό να προκληθεί μεγάλη ζημιά με κάτι σαν την Πρόσβαση στο χώρο αποθήκευσης.


Τα τεχνικά κομμάτια

Αυτή η επόμενη ενότητα είναι μια επισκόπηση υψηλού επιπέδου του τρόπου λειτουργίας του StrandHogg 2.0. Η Promon δεν θα δημοσιεύσει τις πλήρεις λεπτομέρειες για άλλους μερικούς μήνες, επομένως δεν μπορούμε να μοιραστούμε πώς ακριβώς υλοποιείται αυτό το exploit. Ωστόσο, υπάρχουν κάποιες τεχνικές λεπτομέρειες για τις οποίες μπορούμε να μιλήσουμε.

Με λίγα λόγια, το StrandHogg 2.0 πειράζει το Android Context.startActivities() Μέθοδος API, χρησιμοποιώντας τρεις προθέσεις.

  • Το πρώτο Intent είναι αυτό που εκκινεί, στην περίπτωση του παραδείγματός μας, το Gmail. Επισημαίνεται με Intent.FLAG_ACTIVITY_NEW_TASK.
  • Η δεύτερη Πρόθεση είναι η κακόβουλη. Στο παράδειγμά μας, είναι για τη Δραστηριότητα σύνδεσης που μοιάζει με παρόμοια. Αυτή η Πρόθεση δεν έχει σημαίες.
  • Η τρίτη πρόθεση είναι η απόσπαση της προσοχής. Διασφαλίζει ότι ο χρήστης δεν είναι ύποπτος για το Gmail που ανοίγει τυχαία αντί για την εφαρμογή που πάτησε (δηλαδή αυτή που εκτοξεύει την επίθεση). Επισημαίνεται με Intent.FLAG_ACTIVITY_NEW_TASK.

Στη συνέχεια, όλα αυτά τα Intents μεταβιβάζονται σε έναν πίνακα στο startActivities() μέθοδος.

Η έλλειψη σημαιών του δεύτερου Intent είναι το κλειδί εδώ. Κάνοντάς το αυτό, βασικά απλώς αναπαράγαμε το παράδειγμα του Gmail από πάνω. Η εργασία είναι τεχνικά του Gmail, αλλά η κορυφαία Δραστηριότητα είναι του εισβολέα. Όταν ο χρήστης κάνει κλικ στο εικονίδιο της αρχικής οθόνης του Gmail, εμφανίζεται η Δραστηριότητα του εισβολέα αντί του Gmail.


Proof of Concept

Με τις πληροφορίες που μας έστειλε ο Promon, μπορέσαμε να επαναλάβουμε την απόδειξη της ιδέας τους. Ακολουθεί μια εγγραφή οθόνης από ένα Samsung Galaxy Note8 με Android 9 Pie που το δείχνει σε δράση.


Τεχνικές και Ζητήματα Μετριασμού

Τώρα, η απλή αναπαραγωγή των παραπάνω σε κώδικα δεν θα λειτουργήσει πραγματικά. Δεν είναι ένα πλήρες παράδειγμα, και υπάρχουν μερικά άλλα πράγματα που πρέπει να κάνει ένας εισβολέας για να λειτουργήσει, τα οποία δεν μπορούμε να μοιραστούμε. Αλλά δεν είναι ιδιαίτερα δύσκολο να μαντέψετε μόνοι σας, και αυτό είναι μέρος του τι κάνει αυτή την επίθεση τόσο επικίνδυνη. Το StrandHogg 2.0 είναι ένα σχετικά εύκολο exploit στην εφαρμογή και δύσκολο να μετριαστεί.

Ο μετριασμός δεν μπορεί να περιλαμβάνει απλώς τη μαύρη λίστα όλων των εφαρμογών που χρησιμοποιούν startActivities(), αφού υπάρχουν πολλές νόμιμες χρήσεις του. Είναι επίσης πολύ δύσκολο να αυτοματοποιηθεί ένας αλγόριθμος ανίχνευσης για αυτό. Οι κακόβουλοι προγραμματιστές μπορούν να χρησιμοποιήσουν κάθε είδους κόλπα για να κάνουν την εφαρμογή του StrandHogg 2.0 ουσιαστικά αόρατη σε υπηρεσίες όπως το Google Play Protect. Το StrandHogg 1.0 απαιτούσε από τον εισβολέα να προσθέσει ένα χαρακτηριστικό στο AndroidManifest.xml της κακόβουλης εφαρμογής, το οποίο ήταν σχετικά εύκολο να εντοπιστεί. Το StrandHogg 2.0, από την άλλη πλευρά, λειτουργεί εξ ολοκλήρου σε Java/Kotlin.

Λαμβάνοντας υπόψη τη συσκότιση, τον προβληματισμό και ακόμη και τα διαφορετικά στυλ κωδικοποίησης, δεν φαίνεται πρακτικό να ανιχνεύεται αυτόματα σωστά μια εφαρμογή που χρησιμοποιεί αυτό το exploit. Επιπλέον, εάν ένας χρήστης υποστεί επίθεση StrandHogg 2.0, μπορεί να μην το γνωρίζει καν. Εάν ανοίξετε το Gmail και δείτε την οθόνη σύνδεσής του, μπορεί απλώς να σκεφτείτε ότι η περίοδος σύνδεσης σας έληξε και να εισαγάγετε τα στοιχεία σύνδεσής σας χωρίς δεύτερη σκέψη.

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

«Εκτιμούμε το έργο των ερευνητών και έχουμε κυκλοφορήσει μια επιδιόρθωση για το πρόβλημα που εντόπισαν. Επιπλέον, το Google Play Protect εντοπίζει και αποκλείει κακόβουλες εφαρμογές, συμπεριλαμβανομένων εκείνων που χρησιμοποιούν αυτήν την τεχνική."

Αυτό ακούγεται καλό και ελπίζουμε ότι έχει τουλάχιστον κάποιο αποτέλεσμα ενάντια στις επιθέσεις StrandHogg 2.0. Αξίζει να σημειωθεί, ωστόσο, ότι το Google Play Protect δεν εντοπίστε την εφαρμογή απόδειξης της ιδέας ως κακόβουλη, ακόμη και μετά την εκτέλεση χειροκίνητης σάρωσης.

Ο Promon λέει ότι "δεν έχουν παρατηρήσει κανένα κακόβουλο λογισμικό σε πραγματικό χρόνο που χρησιμοποιεί την ευπάθεια StrandHogg 2.0», αλλά δεν υπάρχει καμία εγγύηση ότι αυτή είναι η πρώτη φορά που ανακαλύπτεται η εκμετάλλευση. Για αυτόν τον λόγο, η Promon συνιστά στους προγραμματιστές να προχωρήσουν και να προστατεύσουν τις εφαρμογές τους ορίζοντας τη Δραστηριότητα εκκίνησης launchMode σημαία σε οποιοδήποτε από τα δύο singleTask ή singleInstance. Οποιαδήποτε από αυτές τις σημαίες θα αποτρέψει την έγχυση εργασιών, στο οποίο βασίζεται το StrandHogg 2.0. Ωστόσο, εάν η Δραστηριότητά σας χρησιμοποιεί μία από αυτές τις σημαίες μπορεί να προκαλέσει προβλήματα με ορισμένες ροές εφαρμογών, επομένως δεν είναι πάντα επιθυμητό.

Η Promon προωθεί επίσης το δικό της προϊόν "In-App Protection by Promon SHIELD" που μοιάζει με βιβλιοθήκη που μπορούν να εφαρμόσουν οι προγραμματιστές εφαρμογών για την παρακολούθηση των εργασιών στη διαδικασία της εφαρμογής σας για έλεγχο για μη κανονικές εισαγωγές. Επειδή δεν υπάρχει πραγματικά αποτελεσματική στρατηγική μετριασμού για προγραμματιστές ή χρήστες, είναι πολύ σημαντικό οι κατασκευαστές να εφαρμόσουν την ενημερωμένη έκδοση κώδικα για να διορθώσουν αυτό το συντομότερο δυνατό.

Ευτυχώς, η Promon ακολούθησε τις οδηγίες υπεύθυνης αποκάλυψης προτού δημοσιοποιήσει αυτό το exploit (και δεν είναι ακόμα πλήρως δημόσιο — ο Promon περιμένει 90 ημέρες πριν αποκαλύψει πλήρως πώς το StrandHogg 2.0 έργα). Έκτοτε, η Google έχει υποστηρίξει ενημερώσεις κώδικα για αυτό το exploit σε Android 8.0 Oreo, Android 8.1 Oreo και Android 9 Pie με Επίπεδο ενημερωμένης έκδοσης κώδικα ασφαλείας Android Μαΐου 2020 (SPL). Οι χρήστες σε Android 10 και νεότερες εκδόσεις δεν είναι ευάλωτοι, αν και δεν είμαστε απολύτως σίγουροι γιατί συμβαίνει αυτό. Πιθανότατα έχει να κάνει με τους νέους περιορισμούς του Android 10 σχετικά με την εκκίνηση των Δραστηριοτήτων και τον τρόπο με τον οποίο η Google το ενσωμάτωσε στη στοίβα εργασιών. Ο Promon λέει ότι "στο Android 10 η επίθεση είναι εντελώς αναποτελεσματική και οι δραστηριότητες χωρίζονται σε διαφορετικές εργασίες και σε ξεχωριστές στοίβες εργασιών σύμφωνα με adb shell dumpsys activity activities."

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

Για περισσότερες λεπτομέρειες και περιπτώσεις χρήσης του StrandHogg 2.0, ανατρέξτε στο επίσημη ανακοίνωση στην ιστοσελίδα της Promon. Για προγραμματιστές προσαρμοσμένης ROM, μπορείτε να βρείτε τις σχετικές δεσμεύσεις AOSP για την αποτροπή επιθέσεων StrandHogg 2.0 εδώ και εδώ.


Χρονοδιάγραμμα αποκάλυψης

Ακολουθεί το χρονοδιάγραμμα αποκάλυψης που κοινοποίησε η Promon στο έγγραφό της StandHogg 2.0:

  • 4 Δεκεμβρίου 2019 – Αναφέρθηκε πρόβλημα στην Google
  • 4 Δεκεμβρίου 2019 – Κοινή χρήση μιας «κακόβουλης εφαρμογής» και βίντεο PoC με την Google
  • 4 Δεκεμβρίου 2019 – Η Google επιβεβαίωσε ότι έλαβε την αναφορά
  • 9 Δεκεμβρίου 2019 – Η Google έθεσε τη σοβαρότητα του ευρήματος ως «Κρίσιμη»
  • 9 Δεκεμβρίου 2019 – Η Google επιβεβαιώνει ότι είναι σε θέση να αναπαράγει το ζήτημα
  • 14 Φεβρουαρίου 2020 – Ενημερώνουμε την Google ότι η αποκάλυψη 90 ημερών πλησιάζει στις αρχές Μαρτίου και ζητάμε την κατάσταση από την πλευρά της
  • 14 Φεβρουαρίου 2020 – Η Google απαντά ότι ο Απρίλιος είναι το συντομότερο δυνατό που μπορεί να παρουσιάσει μια διόρθωση
  • 14 Φεβρουαρίου 2020 – Ενημερώνουμε την Google ότι εργαζόμαστε για μετριασμούς
  • 14 Φεβρουαρίου 2020 – απαντά η Google. Εργάζονται για διορθώσεις και ρωτούν αν μπορούμε να μοιραστούμε τους μετριασμούς που προτείνουμε
  • 17 Φεβρουαρίου 2020 – Ενημερώνουμε την Google ότι μπορούμε να καθυστερήσουμε την αποκάλυψη έως τον Απρίλιο. Ζητάμε τον αριθμό CVE
  • 17 Φεβρουαρίου 2020 – Μοιραζόμαστε τις στρατηγικές μας μετριασμού, καθώς και τον τρόπο με τον οποίο οραματιζόμαστε έναν μετριασμό της πλατφόρμας
  • 23 Μαρτίου 2020 – Η Google απαντά με το CVE ID (CVE-2020-0096)
  • 23 Μαρτίου 2020 – Η Google απαντά ότι η γενική διαθεσιμότητα της επιδιόρθωσης για Android θα είναι διαθέσιμη τον Μάιο
  • 23 Μαρτίου 2020 – Η Google ρωτά αν θα εξετάσουμε το ενδεχόμενο καθυστέρησης της αποκάλυψης για τον Μάιο
  • 27 Μαρτίου 2020 – Απαντάμε ότι θα καθυστερήσουμε την αποκάλυψη μέχρι τον Μάιο
  • 22 Απριλίου 2020 – Η Google μας ενημερώνει ότι το Δελτίο ασφαλείας του Μαΐου έχει προγραμματιστεί να περιέχει μια ενημέρωση κώδικα για την ευπάθεια