Αρχικήinvestigations Arbor Networks: Soraya - Δύο απειλές σε ένα πακέτο. Πλήρη τεχνική...

Arbor Networks: Soraya – Δύο απειλές σε ένα πακέτο. Πλήρη τεχνική ανάλυση!

Arbor Networks Logo

To SecNews σε συνεργασία με την CIVITAS σας παρουσιάζει την ανάλυση του κακόβουλου λογισμικού Soraya, που εντοπίστηκε από την εταιρεία ασφάλειας Arbor Networks. Ο αναλυτής Matt Bing, ASERT security analyst της Arbor Networks παρουσιάζει την πλήρη ανάλυση του malware στο SecNews.

Εντοπισμός

Πρόσφατα, ανακαλύψαμε μια νέα οικογένεια κακόβουλου λογισμικού (malware) η οποία συνδυάζει διάφορες τεχνικές με στόχο την υποκλοπή στοιχείων από πιστωτικές και χρεωστικές κάρτες. Γνωστός με το όνομα ‘Soraya’ (σημαίνει “πλούσιος”) ο κακόβουλος αυτός κώδικας χρησιμοποιεί την τεχνική memory scraping, όπως και ο Dexter,  για να στοχοποιήσει τα τερματικά ηλεκτρονικών πληρωμών στα διάφορα σημεία πώλησης. Ταυτόχρονα, υποκλέπτει και data που έχουν σταλεί από κάποιον web browser, με τρόπο που θυμίζει τους ιούς της οικογένειας Zeus. Καμία από τις δύο αυτές τεχνικές δεν είναι καινούρια, όμως η συνδυασμένη χρήση τους στο ίδιο κομμάτι κακόβουλου λογισμικού, είναι κάτι που συναντάμε για πρώτη φορά.

Αρχική εγκατάσταση

Αρχικά, ο Soraya εισχωρεί ως thread σε αρκετά processes του λειτουργικού, ακόμη και στο explorer.exe των Windows. Στη συνέχεια, δημιουργεί αντίγραφο του εαυτού του στον φάκελο AppData (με το όνομα servhost.exe), και δίνει εντολή να εκτελεστεί χρησιμοποιώντας το registry key HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\WinServHost.

Μετά από αυτό, οποιαδήποτε νέα διαδικασία ξεκινά από το shell του –μολυσμένου-  explorer, και ειδικά οι web browsers, κουβαλά ενσωματωμένο τον κώδικα του Soraya.

[quote] Για το σκοπό αυτό, ο ιός χρησιμοποιεί τη ρουτίνα ntdll.dll!NtResumeThread(), η οποία είναι υπεύθυνη για το process initialization. Παράλληλα, χρησιμοποιεί και το ntdll!NtQueryDirectoryFile() ώστε να μην επιτρέπει στο servhost.exe να εμφανίζεται. Και οι δύο αυτές τεχνικές είναι παρόμοιες με τις αντίστοιχες των ιών της οικογένειας Zeus. [/quote]

creditcardterminal-450x299

Memory Scraping

Ένα από τα thread του συστήματος αναλαμβάνει το scraping της μνήμης για στοιχεία πιστωτικών καρτών. Αυτό το καταφέρνει δημιουργώντας ένα POSMainMutex ώστε να εξασφαλίζει ότι αυτό είναι το μοναδικό ενεργό thread. Κάθε 5 δευτερόλεπτα, το thread επαναλαμβάνεται μέσα από τη λίστα των processes χρησιμοποιώντας το Process32Next() και αγνοώντας τα system processes που έχουν τα εξής ονόματα:

  • System
  • [System Process]
  • svchost.exe
  • dwm.exe
  • winlogon.exe
  • explorer.exe
  • taskhost.exe
  • taskeng.exe
  • smss.exe
  • MOM.exe
  • CCC.exe
  • conhost.exe
  • services.exe

Παράλληλα, η ρουτίνα VirtualQueryEx() τσεκάρει τις περιοχές της μνήμης που χρησιμοποιεί η κάθε διαδικασία, αγνοώντας όσες έχουν τιμές στα πεδία PAGE_NOACCESS ή PAGE_GUARD. Οι έγκυρες περιοχές της μνήμης αντιγράφονται μέσω του ReadProcessMemory() και εξετάζονται προκειμένου να διαπιστωθεί εάν περιέχουν στοιχεία πιστωτικών ή χρεωστικών καρτών. Παρόμοια τεχνική χρησιμοποιείται και από τους ιούς της οικογένειας Dexter.

Ο Soraya σαρώνει τη μνήμη αναζητώντας patterns που μοιάζουν με τα στοιχεία μιας έγκυρης πιστωτικής κάρτας. Για το σκοπό αυτό δεν χρησιμοποιεί συνηθισμένες εκφράσεις, αλλά το format code “B”, ακολουθούμενο από αριθμητικά strings και το τυπικό “^” separator, σύμφωνα με το πρότυπο ISO/IEC 7813.

Ένα μοναδικό χαρακτηριστικό του Soraya είναι το γεγονός ότι χρησιμοποιεί τον αλγόριθμο Luhn για να εντοπίζει έγκυρους αριθμούς πιστωτικών και χρεωστικών καρτών, μια τεχνική memory scraping η οποία συναντάται για πρώτη φορά σε κακόβουλο λογισμικό τερματικών POS. Ο αλγόριθμος Luhn χρησιμοποιεί έναν απλό έλεγχο checksum στον αριθμό της κάρτας για να διαπιστώσει εάν αυτός είναι έγκυρος. Τα data του Track 1 και του track 2 πακετάρονται και στέλνονται στο κέντρο ελέγχου (command & control -C2) ως μήνυμα “mode 5″, σύμφωνα με το εξής πρωτόκολλο:

Arbor.Image.1
Σχήμα 1 – Ο αλγόριθμος Luhn

Form Grabbing

Μετά την πρώτη του είσοδο, ο Soraya αρχίζει να ελέγχει μερικά συγκεκριμένα DLLs για να διαπιστώσει αν μια νέα διαδικασία που ξεκινά στο shell έχει σχέση με κάποιον web browser. Στο στόχαστρο μπαίνουν όλα τα functions που αναλαμβάνουν την αποστολή POST data, με στόχο την υφαρμπαγή των στοιχείων και την αποστολή τους στο C2 ως μήνυμα “mode 4″. Αυτό αφορά όλα τα POST data, όχι μόνο τα στοιχεία των καρτών πληρωμής.

Στον Internet Explorer ο ιός γίνεται hooked στο wininet!HttpSendRequestW() και ελέγχει το checkInternetQueryOptionA() με INTERNET_OPTION_URL για να διαπιστωθεί αν έχει σταλεί όγκος > 1 byte. Αν αυτό ισχύει, τα data αντιγράφονται και αποσπώνται.

Στον Firefox, προσκολλάται στη λειτουργία nss3!PR_Write, η οποία τσεκάρει αν περιέχεται η λέξη “POST”, και στη συνέχεια αποσπά τα data.

Στον Chome, ανάλογα χρησιμοποιείται το nspr4.dll!PR_Write(). Κι εδώ ελέγχεται η ύπαρξη της λέξης “POST”, και στη συνέχεια αποσπώνται τα δεδομένα. Παράλληλα, ο Soraya ελέγχει manually το chrome.dll και κάνει hook σε άλλα unexported functions.

Ο Soraya καταφέρνει να γίνει hooked στα συγκεκριμένα functions, κάνοντας overwrite στο αρχικό κομμάτι του κώδικα (function prologue) με τις εντολές PUSH και RET, δίνοντας ουσιαστικά ένα καινούριο saved return address και επιστρέφοντας σε αυτό. Για παράδειγμα, ο κώδικας που ακολουθεί είναι η κανονική, unhooked εκδοχή του nss3!PR_Write  στον Firefox.

Arbor.Image.2

Μόλις εισχωρήσει ο Soraya, τα πρώτα 6 bytes του function αλλάζουν με την εντολή PUSH 62042h, η οποία δείχνει στη διεύθυνση του intercept function, και με την εντολή RET η οποία επιστρέφει στη διεύθυνση αυτή.

Arbor.Image.3

Η ίδια η λειτουργία υποκλοπής (intercept function) στο 0×62042 ελέγχει αν το EBX δείχνει προς το “POST” στη διεύθυνση at 0x6206A. Πριν από αυτό, έχει φροντίσει να εκτελεστεί η κανονική λειτουργία PR_Write καλώντας τη διεύθυνση 0x640EC.

Arbor.Image.4

Ο κώδικας στο 0x640EC που χρησιμοποιείται για να εκτελεστεί το κανονικό PR_Write function χρησιμοποιεί μια παρόμοια τεχνική. Τα πρώτα έξι bytes του κανονικού PR_Write function αποθηκεύονται και εκτελούνται πριν επιστραφούν τα 6 bytes του κακόβουλου κώδικα με τα οποία έχουν αντικατασταθεί.

Arbor.Image.5

Την ίδια τεχνική χρησιμοποιεί ο Soraya για να κάνει hook και στα ntdll.dll!NtResumeThread() και ntdll!NtQueryDirectoryFile(), θυμίζοντας αρκετά τον τρόπο του Citadel.

Επικοινωνία με το Command & Control

Ένα από τα thread του συστήματος είναι υπεύθυνο για την επικοινωνία με τον command & control server. Αυτό επιτυγχάνεται κατασκευάζοντας το mutex JDWJDd8a2 και ελέγχοντας το C2 κάθε 5 λεπτά, ώστε τα χρήσιμα data να στέλνονται σε ένα συγκεκριμένο URL το οποίο έχει ενσωματωθεί στον εκτελέσιμο κώδικα. Το C2 και το αντίστοιχο URL έχουν ενσωματωθεί στον κώδικα, αφού πρώτα έχει γίνει XORing με το Unicode string “SorayaV1.1″.

Για να μην ενεργοποιείται σε κάθε browsing, το backend του C2 δέχεται μόνο μηνύματα που έχουν ένα συγκεκριμένο User-Agent. Στον κώδικα που εντοπίσαμε εμείς, η τιμή αυτή είναι static, στοιχείο το οποίο θα πρέπει να είναι μοναδικό για τη συγκεκριμένη περίπτωση.

Στο C2 μπορούν να στέλνονται αρκετές μεταβλητές HTTP POST, όπως:

mode – προσδιορίζει τον τύπο του μηνύματος που στέλνεται στο C2 από τον ιό

uid – Ένα μοναδικό string-ταυτότητα που δημιουργεί ο ίδιος ο ιός και αποθηκεύεται στο HKCU\SOFTWARE\Microsoft\Soraya2\UID του registry

osname – Ένα hex string που περιγράφει την έκδοση (major και minor) του λειτουργικού, το service pack version, και τον τύπο της αρχιτεκτονικής (“x86″ ή “x64″)

compname – Ένα hex string που περιέχει το τρέχον όνομα του υπολογιστή και του χρήστη

browser – Ένα από τα “FireFox”, “Chrome” ή “InternetExplorer”, ανάλογα με τον browser που έχει δημιουργήσει το μήνυμα

url – Ένα hexURL στο οποίο στέλνονται τα data

grabbed – Rawdata που συλλέγει ένα POST και αποστέλλονται σε κάποιο URL

compinfo – Ίδιο με το compname

ccnum – Κωδικοποιημένος (Hex) αριθμός πιστωτικής κάρτας

type – “Track 1″ ή “Track 2″ ανάλογα με το είδος των data που έχουν γίνει captured

track – Hex encoded raw track data

comid – Ένα αριθμητικό jobID που ορίζεται από το C2

Επίσης, έχουν ταυτοποιηθεί και οι εξής τιμές για το “mode”:

Mode 1 –  Δηλώνει ένα καινούριο bot στο C2

Mode 2 – Λήψη των τελευταίων εντολών από το C2

Mode 3 – Ενημέρωση του C2 ότι το τρέχον job έχει ολοκληρωθεί

Mode 4 – Προσθήκη πληροφοριών από grabbed form

Mode 5 – Αποστολή skimmed track information στο C2

Το thread που έχει την ευθύνη επικοινωνίας με το C2 στέλνει μηνύματα  “mode 1″, “2″, και “3″. Η απάντηση στο μήνυμα “mode 2″, ο server απαντά με ένα από τα εξής:

vweb – με το ShellExecuteA() άνοιξε ένα URI
vstealth – με το URLDownloadToFileW(tmpfile) άνοιξε ένα URL, αόρατο στο χρήστη
down – Κατέβασε ένα αρχείο από κάποιο URL και εκτέλεσέ το
update – Κατέβασε ένα αρχείο από κάποιο URL, στείλε ένα μήνυμα “mode 3″, δημιούργησε ένα καινούριο process στον κώδικα, και στη συνέχεια αυτοκαταστρέψου
uninstall – Απάντησε με μήνυμα “mode 3″, και στη συνέχεια αυτοκαταστρέψου

Με την εγκατάστασή του, ο Soraya στέλνει ένα POST request στον C2 server. Το request αποτελείται από ένα μήνυμα “mode 1″, την έκδοση του λειτουργικού, το όνομα του υπολογιστή και ένα μοναδικό UID που αποτελεί την ταυτότητα του συγκεκριμένου bot.
Με την εγκατάστασή του, ο Soraya στέλνει ένα POST request στον C2 server. Το request αποτελείται από ένα μήνυμα “mode 1″, την έκδοση του λειτουργικού, το όνομα του υπολογιστή και ένα μοναδικό UID που αποτελεί την ταυτότητα του συγκεκριμένου bot.

 

Ο Soraya στέλνει ένα μήνυμα “mode 2″ προκειμένου να ελέγξει οποιαδήποτε εντολή του C2 server βρίσκεται σε εκκρεμότητα.
Ο Soraya στέλνει ένα μήνυμα “mode 2″ προκειμένου να ελέγξει οποιαδήποτε εντολή του C2 server βρίσκεται σε εκκρεμότητα.

 

Οποιοδήποτε process του browser το οποίο έχει μολυνθεί με τον ιό Soraya είναι σε θέση να στείλει μηνύματα “mode 4″. Το thread που έχει αναλάβει το memory scraping στέλνει μηνύματα “mode 5″, όπως φαίνεται και στο παράδειγμα που ακολουθεί:
Οποιοδήποτε process του browser το οποίο έχει μολυνθεί με τον ιό Soraya είναι σε θέση να στείλει μηνύματα “mode 4″. Το thread που έχει αναλάβει το memory scraping στέλνει μηνύματα “mode 5″, όπως φαίνεται και στο παράδειγμα που ακολουθεί:

 

Web Panel / Back-end

Η έκδοση 1.0 του πάνελ του Soraya περιλαμβάνει τα εξής αρχεία:

login.php
Το login.php είναι η σελίδα εισόδου στο πάνελ. Το συγκεκριμένο αρχείο υποδέχεται το password που στέλνεται μέσω της παραμέτρου “p” του GET request. Αν το login γίνει κανονικά, ορίζονται οι μεταβλητές του session και ο administrator γίνεται redirected στο “statistics.php”.

auth.php
Στο αρχείο αυτό αποθηκεύονται διάφορες πληροφορίες για το session.

statistics.php
Η σελίδα statistics.php δίνει μια γενική εικόνα των bots που μπορούν να κάνουν τσεκ στον C2. Περιλαμβάνονται πληροφορίες για το συνολικό αριθμό των bots που είναι online, τον αριθμό των προσβεβλημένων υπολογιστών ανά χώρα, και για τις 25 πιο πρόσφατες συνδέσεις.

Arbor.Image.9

bot.php
Τα processes που έχουν προσβληθεί από τον Soraya  δηλώνουν την παρουσία τους στο command & control και στέλνουν POST requests στο αρχείο “bot.php”. Ο Soraya έχει σχεδιαστεί ώστε να στέλνει ένα συγκεκριμένο user-agent το οποιο λειτουργεί ως connection password με το πάνελ. Αν ο κωδικός είναι σωστός, τότε το αρχείο δέχεται το registration ενός καινούριου bot στο πάνελ, τα requests για νέες εντολές προς εκτέλεση από τον προβεβλημένο υπολογιστή, και την επιβεβαίωση για τη σωστή εκτέλεση κάθε εντολής. Δέχεται, επίσης, κλεμμένα form data και track data. Στη συνέχεια, όλες αυτές οι πληροφορίες αποθηκεύονται σε κάποιο backend database, όπως ακριβώς συμβαίνει σε πολλά κανονικά C2s.

commands.php
Η σελίδα “commands.php” χρησιμοποιείται για την αποστολή εντολών προς τα bots τα οποία έχουν κάνει register στο πάνελ ελέγχου. Μεταξύ των ενοτλών περιλαμβάνεται η δυνατότητα ανοίγματος τυχαίων URLs, με ή χωρίς τη γνώση του χρήστη, το κατέβασμα και η εκτέλεση αρχείων, η αναβάθμιση του bot, η η εντολή απεγκατάστασής του. Στη ίδια σελίδα βρίσκουμε πληροφορίες σχετικά με τις φορές που θα πρέπει να εκτελέσει μία εντολή ένα συγκεκριμένο bot, καθώς και το συνολικό αριθμό των φορών που έχει εκτελεστεί μία εντολή.

Arbor.Image.10

 

logout.php
Η σελίδα η οποία τερματίζει ένα ενεργό session.

settings.php
Το αρχείο περιλαμβάνει τους ορισμούς του κωδικού εισόδου στο πάνελ, πληροφορίες για το database, και τον κωδικό σύνδεσης (connection password) που χρησιμοποιεί το malware.

formgrab.php
Στη σελίδα φαίνεται η λίστα των bots που έχουν υποκλέψει form data, και πιο συγκεκριμένα, τη ταυτότητα του bot, η διεύθυνση IP, ο τύπος του browser, το URL στόχος, και η ημερομηνία υποκλοπής των form data.

viewlog.php
Στη σελίδα εμφανίζονται τα υποκλαπέντα POST data και τα αντίστοιχα URLs.

trackgrab.php
Στη σελίδα εμφανίζονται οι αριθμοί των κλεμμένων καρτών, raw track data, το είδος των υποκλαπέντων track data, καθώς και το όνομα του μολυσμένου υπολογιστή. Μέσα από την ίδια σελίδα γίνονται save τα track data σε ένα dump file, το όνομα του οποίου ορίζεται ως “dump-YYYY-mm-dd.txt”, ενώ από εδώ μπορούν οι administrators του πάνελ να διαγράφουν track data από τη database.

Arbor.Image.11

funcs.php
Περιέχει διάφορα functions, χρήσιμα σε άλλα components του control panel.

/inc/GeoIP.dat
Ο κωδικός της χώρας (country code) ενός μολυσμένου υπολογιστή αποκτά κάποια συγκεκριμένη τιμή μόλις το bot κάνει register στο πάνελ ελέγχου. Το αρχείο αυτό περιέχει τα MaxMind GeoIP data τα οποία χρησιμοποιούνται για τον προσδιορισμό κάθε χώρας.

/inc/geoip.inc
Περιλαμβάνει τον κώδικα PHP του MaxMind που χρησιμοποιείται για την αντιστοίχιση (mapping) της διεύθυνσης IP ενός μολυσμένου υπολογιστή στην αντίστοιχη χώρα.

credit_card_theft_080407_mn

Υποκλαπέντα στοιχεία καρτών πληρωμής

Σύμφωνα με την ανάλυση και τα στοιχεία που έχουμε συγκεντρώσει για τον Soraya, οι κάρτες που έχουν υποκλαπεί ανέρχονται σε χιλιάδες. Μπορέσαμε να δούμε τα track data από ένα command & control, μόλις τα υποκλαπέντα στοιχεία των καρτών βρέθηκαν προσωρινά αποθηκευμένα σε κάποιο δημόσιο server.

Η ανάλυση των track 1 data έδειξε ότι οι χώρες προέλευσης των τραπεζών που είχαν εκδώσει τις υποκλαπείσες κάρτες ήταν οι εξής:

Arbor.Image.12

Το 65.16% των κρουσμάτων αφορά κάρτες που είχαν εκδοθεί από τράπεζες των ΗΠΑ. Μεγάλος ήταν και ο αριθμός των τραπεζικών οργανισμών της Κόστα Ρίκα, με 21.45% των καρτών, ενώ οι καναδικές τράπεζες ακολουθούν με 11.20%, οι τράπεζες της Ν. Αφρικής με 0.82%, της Βραζιλίας και της Ρωσίας με 0.40%, και τέλος, οι τράπεζες της Μ. Βρετανίας, της Πολωνίας, του Μεξικού και του Παναμά με 0.14% για την κάθε περίπτωση.

Arbor.Image.13

Επιπλέον, καταφέραμε να προσδιορίσουμε το είδος των καρτών που υπέκλεψε ο Soraya. Η πλειοψηφία αφορά χρεωστικές κάρτες (63.934% του συνόλου των track 1 data). Οι πιστωτικές κάρτες ακολουθούν με 34.153%. Για το υπόλοιπο 1.913% δεν μπορέσαμε να βρούμε τον τύπο τους.

[box_alert]

Συμπέρασμα

Είναι σαφές ότι οι δημιουργοί του Soraya εμπνεύστηκαν από τους ιούς Dexter και Zeus. Η διπλή λειτουργία, με ταυτόχρονο memory scraping και form grabbing, είναι αυτό που κάνει το Soraya μοναδικό. Σε παλαιότερες επιθέσεις, οι memory scrapers έβαζαν στόχο τα τερματικά των σημείων πώλησης, ενώ οι form grabbers τους χρήστες υπηρεσιών online τραπεζικής.[/box_alert]

MD5s

Για να βοηθήσουμε περαιτέρω έρευνες, παραθέτουμε τις τιμές MD5 από τα δείγματα που έχουν ταυτοποιηθεί ως Soraya.

a95dacba360e45fc03769ea55c546a7b

1483d0682f72dfefff522ac726d22256

1661aab32a97e56bc46181009ebd80c9

Τα ακόλουθα MD5 hashes συνδέονται με τα panel files:

1df57b31a4bca7a1c93ecd50bd8fd8bf auth.php

67a6bf5b9b23c6588c756c2f2a74635c bot.php

c3e9d1dda7f1f71b4e1e2ead7c7406dd commands.php

515232eb815b7bafab57c7cdca437a7a formgrab.php

ff8cc2e792a59d068f35cb3eb2ea69bc funcs.php

b64ea0c3e9617ccd2f22d8568676a325 /inc/GeoIP.dat

d2ba8b27dc886b36e0e8ec10e013d344 /inc/geoip.inc

c94285b73f61204dcee5614f91aaf206 login.php

d9e7f69822821188eac36b82928de2a0 logout.php

e5dadfff0bc1f2113fedcf4eb3efd02f settings.php

22888a7b45adc60593e4fc2fe031be98 statistics.php

ecf98e76c99f926e09246b02e53f2533 style.css

3f391740cbbd9623c4dfb19fb203f5bc trackgrab.php

ea9a242932dfa03084db3895cf798be5 viewlog.php

Μελέτη/ανάλυση

Η μελέτη πραγματοποιήθηκε από τον Matt Bing, ASERT security analyst της εταιρείας Arbor Networks και δημοσιοποιήθηκε μέσω της εταιρείας CIVITAS

 

Εγγραφή στο Newsletter

* indicates required

FOLLOW US

LIVE NEWS