Thursday, 10 March 2016

Syrian Electronic Army malware-Αναλυση

File: Chrome.exe
Sha1: 9acae703940b38f33cbcaa4ac7d0eb7663c1b96b

Tools : ILSpy, OllyDbg, Visual Studio.

Εισαγωγή

Τα .Net malware συνήθως χαρακτηρίζονται από την απλότητα στην ανάλυση της.Οι ευκολίες στο development που προσφέρουν οι γλώσσες που υποστηρίζει το .Net Framework σε συνάρτηση με τις τεχνικές που υπάρχουν στο διαδίκτυο, τις καθιστούν ιδανικές για την ανάπτυξη ιομορφικού λογισμικού.Ένα μεινόκτημα αυτών των γλωσσών, είναι πως επειδή πρώτα μεταγλωττίζονται σε μία ενδιάμεση γλώσσα MSIL και μετέπειτα σε native opcodes, είναι εύκολη η ανάλυση τους.

Ανάλυση

Το συγκεκριμένο malware είχε χρησιμοποιηθεί σε ένα operation στην Συρία και και βρέθηκε καθώς είχε ανέβει προηγουμένως για ανάλυση στο malwr. Ξεκινώντας λοιπόν, ελέγχουμε το αρχέιο (με το πρόγραμμα της αρεσκείας μας) για να εντοπίσουμε εάν έχει χρησιμοποιηθεί κάποιος packer/crypter.Στην συγκεκριμένη περίπτωση θα δούμε ότι το πρόγραμμα μας είναι καθαρό. Απευθείας λοιπόν χρησιμοποιήσουμε το ILSpy για να δούμε το decompiled αρχείο και τον κώδικα του.
Ανοίγοντας το EntryPoint.cs, βλέπουμε τον κώδικα που εκτελείται.















Ενδιαφέρον προκύπτει από την γραμμή 3. Γενικότερα, η C# θεωρείται αρκετά δυνατή γλώσσα με πολλές επιλογές σε manual crypting/unpacking capabilities. Συνεπώς, η χρήση του συγκεκριμένου import μας προδιαθέτει ότι θα υπάρξουν κάποιες τεχνικές της Visual Basic προσαρμοσμένες στην γλώσσα C#.
Ξεκινώντας από την Main, βλέπουμε ότι στην γραμμή 15 γίνεται το decoding -> decompressing του malicious payload που θα τρέξει στην συνέχεια στον υπολογιστή του θύματος. Τα αρχεία που χρησιμοποιήθηκαν έχουν προστεθεί στο παρόν rar, ώστε να κάνει κάποιος γρήγορο unpacking του payload.
Μία γρήγορη ατομική ανάλυση του Payload φανερώνει ότι είναι ένα κοινό rat ,χωρίς κάτι ιδιαίτερο να επισημανθεί στο παρόν έγγραφο.Επίσης, ένα uploading στο VirutsTotal φανερώνει και τον τύπο του αντίστοιχου rat.
Στην γραμμή 18 βρίσκεται ο κώδικας όπου θα τρέξει το payload. Όπως αποδείχθηκε απο την ανάλυση, ήταν μία κοινή τεχνική RunPe όπου είχε ένα απλοικό επίπεδο obscu στον πηγαίο κώδικα.
Για να μπορέσουμε όμως να κατανοήσουμε πως γίνεται το Unpacking, θα πρέπει να προσέξουμε τον τρόπο με τον οποίο η C# κάνει export της συναρτήσεις από γνωστά DLL. 
















Το κόλπο εδώ είναι το εξής : Γίνονται αυτολεξή οι δηλώσεις για τις συναρτήσεις LoadLibrary και GetProcAddress. Μέσω αυτών και εκμεταλλευόμενος τις Generic Functions της C#, στις γραμμές 75-76 υλοποιείται μία πιο σύνθετη LoadLibrary, προσαρμοσμένη στις ανάγκες της C#. Οι υπόλοιπες συναρτήσεις (NtReadVirtualMemory, NtResumeThread, NtSetContextThread, NtGetContextThread, VirtualAllocEx, NtUnmapViewOfSection) δηλώνονται παρακάτω με random ονόματα.
Η εκτέλεση του payload επιτυγχάνεται με παρακάτω με την τεχνική RUNPE.





















Παρόλο που ο κώδικας φαίνεται παράξενος και ίσως μπερδεύει κάποιον που έχει καλή γνώση της C#, δεν είναι τίποτα παραπάνω από ένα απλό RunPe. Ψάχνοντας στο διαδίκτυο και όπως ανέφερα αρχικά, είναι γνωστή παλιά τεχνική , η οποία απλά διαφοροποιείται στο τρόπο που γίνονται τα Imports αλλά και τον τρόπο που τελικώς γίνεται το execute το payload ( Στην Main, στην γραμμή 17 το Thread γινόταν Suspend , για αυτό τελικώς στην γραμμή 56 γίνεται Resume, με νέο Entry Point το οποίο επιτυγχάνεται με απανωτά Memory Writes και χρήση συναρτήσεων *ContextThread).
Στις γραμμές 19-26 υπάρχουν κάποιες συναρτήσεις γνωστές για Anti-Debugging οι οποίες εκτελούνται μετέπεια και τερματίζουν το πρόγραμμα σε περίπτωση που πληρούνται τα κριτήρια τους.

Επίλογος

[Cuckoo] : Για τους βιαστικούς https://malwr.com/analysis/ZDYxNDc2NGNhZTdiNDI4OTg3ZTIwYzFlZmU1Njc3MmQ/
Συνοψίζοντας, το συγκεκριμένο malware δεν χαρακτηρίζεται advanced, αλλά είναι καλή άσκηση για κάποιον που θέλει να φρεσκάρει τις γνώσεις τους.