Οι κανόνες YARA αποτελούν ένα πολύ σημαντικό όπλο στον «πόλεμο» έναντι των επιθέσεων τύπου Malware.
Οι κανόνες YARA είναι ένας ιδιαίτερα σημαντικό όπλο για την αναγνώριση κακόβουλου λογισμικού (ή άλλων αρχείων). Κύριο χαρακτηριστικό τους, η δημιουργία προϋποθέσεων που αναζητούν ορισμένα χαρακτηριστικά.
Οι κακόβουλες επιθέσεις τύπου Malware πρέπει να αντιμετωπιστούν.
Όπως έχουμε αναφέρει και παλιότερα, οι κακόβουλες επιθέσεις τύπου Ransomware δεν μπορούν να περνούν απαρατήρητες. Μέσα στο 2021 παρατηρήθηκε ένα μεγάλο και ανησυχητικό κύμα από επιθέσεις ενάντια σε οργανισμούς κάθε είδους μεγέθους. Κύριος σκοπός των επιθέσεων να εμποδίσουν την πρόσβαση σε ένα σύστημα υπολογιστή έως ότου καταβληθεί ένα μεγάλο χρηματικό ποσό.
Για την αντιμετώπιση των κακόβουλων επιθέσεων, υπάρχουν στην αγορά τα συστήματα ανίχνευσης και αντιμετώπισης τύπου SIEM. Τα πιο προηγμένα από αυτά τα συστήματα, επιβάλλεται να περιλαμβάνουν τους κανόνες Yara.
Γιατί αναπτύχθηκαν οι κανόνες YARA;
Οι κανόνες YARA αναπτύχθηκαν αρχικά από τον Victor Alvarez της Virustotal και η χρήση τους γίνεται κυρίως στην έρευνα και τον εντοπισμό κακόβουλου λογισμικού. Αναπτύχθηκαν με την ιδέα να περιγράψουν μοτίβα που προσδιορίζουν συγκεκριμένα στελέχη ή ολόκληρες οικογένειες κακόβουλου λογισμικού.
Ο τρόπος λειτουργίας των κανόνων YARA.
Οι κανόνες YARA είναι σαν ένα κομμάτι γλώσσας προγραμματισμού. Λειτουργούν ορίζοντας έναν αριθμό μεταβλητών που περιέχουν μοτίβα που βρίσκονται, μέσα σε ένα δείγμα κακόβουλου λογισμικού. Εάν πληρούνται ορισμένες ή όλες οι προϋποθέσεις, ανάλογα με τον κανόνα, τότε μπορεί να χρησιμοποιηθεί για την επιτυχή αναγνώριση ενός τμήματος κακόβουλου λογισμικού.
Οι ερευνητές, αναλύοντας ένα κομμάτι κακόβουλου λογισμικού, εντοπίζουν μοναδικά μοτίβα και συμβολοσειρές μέσα στο κακόβουλο λογισμικό. Αυτός ο εντοπισμός θα τους επιτρέψει να προσδιορίζουν σε ποια ομάδα απειλών και από ποια οικογένεια κακόβουλου λογισμικού προέρχεται το δείγμα. Δημιουργώντας έναν κανόνα YARA από πολλά δείγματα από την ίδια οικογένεια κακόβουλου λογισμικού, είναι δυνατός ο εντοπισμός πολλών δειγμάτων που σχετίζονται με τον ίδιο ίσως παράγοντα εκστρατείας ή απειλής.
Ερευνώντας ένα κομμάτι κακόβουλου λογισμικού, ένας αναλυτής μπορεί να δημιουργήσει έναν κανόνα YARA για ένα νέο δείγμα που ερευνά. Αυτός ο κανόνας θα μπορούσε στη συνέχεια να χρησιμοποιηθεί για την αναζήτηση της δικής τους ιδιωτικής βάσης δεδομένων κακόβουλου λογισμικού ή διαδικτυακών αποθετηρίων. Για παράδειγμα, μπορεί να χρησιμοποιηθεί το VirusTotal για αυτού του είδους παρόμοια δείγματα.
Ένας αναλυτής κακόβουλου μπορεί να χρησιμοποιήσει τους κανόνες YARA ως εργαλείο απόκρισης περιστατικών για τον εντοπισμό κακόβουλων δυαδικών αρχείων εντός του οργανισμού. Αυτό είναι ιδιαίτερα χρήσιμο, ειδικά εάν ο αναλυτής χρησιμοποιεί ένα σύστημα SIEM που έχει την υποστήριξη των κανόνων YARA, για προστασία από κακόβουλα λογισμικά.
Περιπτώσεις χρήσης με κανόνες YARA
Οι κανόνες YARA έχουν αποδειχθεί εξαιρετικά δημοφιλείς. Ο λόγος είναι ότι υπάρχουν πολλές περιπτώσεις χρήσης για την εφαρμογή τους:
- Αναγνώριση και ταξινόμηση του κακόβουλου λογισμικού
- Εύρεση νέων δειγμάτων με βάση τα μοτίβα που αφορούν συγκεκριμένες οικογένειες κακόβουλων λογισμικών
- Οι ανταποκριτές συμβάντων μπορούν να αναπτύξουν κανόνες YARA για να εντοπίσουν δείγματα και παραβιασμένες συσκευές
- Η προληπτική ανάπτυξη προσαρμοσμένων κανόνων YARA μπορεί να αυξήσει την άμυνα ενός οργανισμού
Στοιχεία που θα πρέπει να γνωρίζετε για να δημιουργήσετε κανόνες YARA.
Προκειμένου για να δημιουργήσετε έναν κανόνα YARA θα πρέπει να γνωρίζετε κάποια πολύ σημαντικά στοιχεία.
Μεταδεδομένα (Metadata)
Τα Metadata μπορεί να μην επηρεάζουν την αναζητήσεις των κανόνων YARA, αλλά παρέχουν χρήσιμες πληροφορίες για τους ίδιους τους κανόνες.
- Συγγραφέας – Όνομα, διεύθυνση email, λογαριασμός Twitter.
- Ημερομηνία δημιουργίας του κανόνα.
- Έκδοση – Ο αριθμός έκδοσης του κανόνα YARA για την παρακολούθηση τροποποιήσεων.
- Αναφορά – Ένας σύνδεσμος προς ένα άρθρο ή λήψη του δείγματος, που χρησιμοποιείται για την παροχή σχετικών πληροφοριών σχετικά με το δείγμα κακόβουλου λογισμικού που έχει σχεδιαστεί να ανιχνεύει ο κανόνας.
- Περιγραφή – Μια σύντομη επισκόπηση του σκοπού του κανόνα και του κακόβουλου λογισμικού που στοχεύει να εντοπίσει.
- Κατακερματισμός – Μια λίστα δειγμάτων κατακερματισμού που χρησιμοποιήθηκαν για τη δημιουργία του κανόνα YARA.
Συμβολοσειρές (Strings)
Είναι σύνηθες να βρίσκουμε μοναδικές και ενδιαφέρουσες συμβολοσειρές σε ένα δείγμα κακόβουλου λογισμικού. Αυτές οι συμβολοσειρές είναι ιδανικές για τη δημιουργία κανόνων YARA. Για να οριστεί μια συμβολοσειρά μέσα σε έναν κανόνα, η ίδια η συμβολοσειρά πρέπει να δηλωθεί ως μια μεταβλητή.
- $a=”string from malware sample” (συμβολοσειρά από δείγμα κακόβουλου λογισμικού)
Εκτός από τη δήλωση μιας συμβολοσειράς, μπορούμε επίσης να προσαρτήσουμε τροποποιητές μετά τη δηλωμένη συμβολοσειρά για να τελειοποιήσουμε την αναζήτηση.
- $a=”malwarestring” fullword
Αυτός ο τροποποιητής ταιριάζει με μια ακριβή λέξη. Για παράδειγμα, το “www.malwarestring.com” θα επέστρεφε την αντιστοίχιση, αλλά το “www.abcmalwarestring.com” δεν θα την επέστρεφε.
- $a=”malwarestring” wide
Αυτός θα ταιριάζει με συμβολοσειρές unicode που χωρίζονται με μηδενικά byte, για παράδειγμα «w.w.w…m.a.l.w.a.r.e.s.t.r.i.n.g…c.o.m.»
- $a=”malwarestring” wide ascii
Αυτός ο τροποιητής θα επιτρέψει στον κανόνα να ταιριάξει χαρακτήρες unicode και ascii.
- $a=”MalwareString” nocase
Ο κανόνας θα ταιριάξει με τη συμβολοσειρά, ανεξαρτήτως της περίπτωσης.
Ορισμένες συμβολοσειρές και μοναδικά αναγνωριστικά που είναι εξαιρετικές για τους κανόνες YARA:
- Mutexes – Μοναδικές στις οικογένειες κακόβουλων προγραμμάτων. Αυτές οι συμβολοσειρές χρησιμοποιούνται από κακόβουλο λογισμικό για να ελέγξουν εάν μια συσκευή έχει ήδη παραβιαστεί. Για να επιτευχθεί ο έλεγχος, εξετάζουν για την παρουσία του mutex.
- Σπάνιοι και ασυνήθιστοι χρήστες – Εντοπίζονται όταν το κακόβουλο λογισμικό επικοινωνεί με την υποδομή του, τύπου C2.
- Κλειδιά μητρώου – Συνήθως δημιουργούνται από κακόβουλο λογισμικό ως «επίμονος μηχανισμός».
- Διαδρομές PDB – Αυτό σημαίνει Βάση δεδομένων προγράμματος, ένα PDB περιέχει πληροφορίες εντοπισμού σφαλμάτων για ένα αρχείο. Είναι πολύ απίθανο να υπάρχει PDB για ένα κομμάτι κακόβουλου λογισμικού. Ωστόσο, η διαδρομή PDB μπορεί συχνά να βρεθεί και να χρησιμοποιηθεί μέσα σε έναν κανόνα YARA
- Κρυπτογραφημένες συμβολοσειρές διαμόρφωσης – Το κακόβουλο λογισμικό συχνά κρυπτογραφεί τη διαμόρφωσή του που περιέχει χρήσιμα IOC, όπως διευθύνσεις IP και τομείς. Εάν υπάρχουν οι δεξιότητες της αντίστροφης μηχανικής για τον προσδιορισμό των κρυπτογραφημένων δεδομένων, τότε μπορούν να χρησιμοποιηθούν εντός ενός κανόνα YARA.
Συνθήκες (Conditions)
Η ενότητα των συμβολοσειρών θα ορίσει τα κριτήρια αναζήτησης που θα χρησιμοποιηθούν για έναν κανόνα YARA. Ύστερα, η ενότητα συνθηκών θα ορίσει τα κριτήρια για τον κανόνα για την ενεργοποίηση μιας επιτυχημένης αντιστοίχισης. Υπάρχουν πολλές συνθήκες που μπορούν να χρησιμοποιηθούν.
- uint16(0) == 0x5A4D – Ο έλεγχος της κεφαλίδας ενός αρχείου είναι μια εξαιρετική προϋπόθεση που πρέπει να περιλαμβάνουν οι κανόνες YARA. Αυτή η συνθήκη ορίζει ότι το αρχείο πρέπει να είναι εκτελέσιμο των Windows, επειδή οι δεκαεξαδικές (hex) τιμές 4D 5A βρίσκονται πάντα στην αρχή μιας κεφαλίδας εκτελέσιμου αρχείου. Αυτό αντιστρέφεται στο YARA λόγω του όρου του endianness.
- uint32(0)==0x464c457f) ή (uint32(0) == 0xfeedfacf) ή (uint32(0) == 0xcffaedfe) ή (uint32(0) == 0xfeedface) ή (uint32(0) == 0xcefaedfe). Χρησιμοποιείται για να αναγνωρίστουν τα δυαδικά αρχεία τύπου Linux ελέγχοντας την κεφαλίδα του αρχείου.
- (#a == 6) – Ο αριθμός συμβολοσειρών είναι ίσος με 6.
- (#a > 6) – Ο αριθμός συμβολοσειρών είναι μεγαλύτερος από 6.
Υπάρχουν μερικοί διαφορετικοί τρόποι για να καθορίσετε το μέγεθος ενός αρχείου συνθήκης.
- (filesize>512)
- (filesize<5000000)
- (filesize<5MB)
Αφού δηλωθούν οι συμβολοσειρές μέσα σε έναν κανόνα, μπορείτε στη συνέχεια να προσαρμόσετε πόσες αντιστοιχίσεις πρέπει να ενεργοποιηθούν ως προϋπόθεση.
Με αυτό τον τρόπο ο κανόνας θα επιστρέψει αυτό που θεωρεί πως τηρεί την συνθήκη που αναζήτησε.
- 2 of ($a,$b,$c)
- 3 of them
- 4 of ($a*)
- all of them
- any of them
- $a and not $b
Όπου είναι δυνατόν, δοκιμάστε και χρησιμοποιήστε 2-3 ομάδες συνθηκών για την αποφυγή δημιουργίας ψευδών θετικών στοιχείων και για να δημιουργηθεί επίσης ένας αξιόπιστος κανόνας.
Μέθοδος Εισαγωγής (Imports)
Με τη μέθοδο των imports έχουμε έναν πολύ καλός τρόπο για να εφαρμόσουμε πρόσθετους όρους στους κανόνες YARA. Παρακάτω μπορείτε να δείτε μερικά παραδείγματα για τον τρόπο χρήσης της εισαγωγής PE.
Βιβλιοθήκη PΕ:
Προσθέτοντας τη σύνταξη “import pe” στην αρχή ενός κανόνα YARA θα επιτρέψει να χρησιμοποιήσετε τη λειτουργία της PE των κανόνων YARA. Αυτό είναι χρήσιμο εάν δεν μπορείτε να αναγνωρίσετε μοναδικές συμβολοσειρές.
Τα exports (εξαγωγές) είναι επίσης, εξαιρετικές προσθήκες σε έναν κανόνα YARA. Οι εξαγωγές είναι λειτουργίες που έχει δημιουργήσει ο δημιουργός κακόβουλου λογισμικού. Επομένως, φροντίστε να χρησιμοποιήσετε αυτά τα μοναδικά τους ονόματα.
Στην παρακάτω εικόνα μπορείτε να διακρίνετε τον εντοπισμό ορισμένες εξαγωγές που χρησιμοποιούνται από ένα DLL. Αυτό το DLL προήλθε από ένα κομμάτι κακόβουλου λογισμικού (malware) τύπου Formbook.
Ενδεικτικές εντολές της βιβλιοθήκης PE:
- pe.exports(“Botanist”, “Chechako”, “Originator”, “Repressions”)
Στην παρακάτω εικόνα, μπορείτε να παρατηρήσετε ένα ενδιαφέρον DLL που χρησιμοποιείται για συνδεσιμότητα HTTP, το winhttp.dll:
Μπορούμε επίσης να δούμε ότι αυτή η βιβλιοθήκη εισάγει έναν αριθμό από ενδιαφέροντα API που θα μπορούσαν να συμπεριληφθούν σε έναν κανόνα.
- pe.imports(“winhttp.dll”, “WinHttpConnect”)
- pe.machine == pe.MACHINE_AMD64 – Χρησιμοποιείται για τον έλεγχο του τύπου μηχανής.
Κατακερματισμός (imphash)
Το imphash είναι ο κατακερματισμός του πίνακα διευθύνσεων εισαγωγής του κακόβουλου λογισμικού (IAT – Import Address Table). Αυτό τον κατακερματισμό, εντοπίσαμε στην προηγούμενη εικόνα χρησιμοποιώντας το PEStudio. Το ίδιο IAT θα χρησιμοποιείται συχνά σε μια οικογένεια κακόβουλου λογισμικού. Επομένως η χρήση του IAT σε έναν κανόνα YARA θα πρέπει να ανιχνεύει παρόμοια δείγματα.
- pe.imphash() == “0E18F33408BE6E4CB217F0266066C51C”
Για να χρησιμοποιηθεί μια χρονική σήμανση αρχείων σε έναν κανόνα YARA, πρέπει να μετατραπεί σε χρονική σήμανση τύπου unix. Στην παρακάτω εικόνα μπορούμε να δούμε, πότε δημιουργήθηκε το κακόβουλο λογισμικό.
Η χρήση της σύνταξης ‘//’ επιτρέπει τη δημιουργία σχολίων εντός του κανόνα. Όπως μπορούμε να διακρίνουμε παρακάτω, μπορεί να προστεθεί ένα σχόλιο που προσδιορίζει ποια είναι η χρονική σήμανση της εποχής.
- pe.timestamp == 1616850469 // Tue Dec 08 17:58:56 2020
Η ενότητα έκδοσης του PEStudio δείχνει ότι αυτό το δείγμα του Lokibot έχει μερικά μοναδικά αναγνωριστικά έκδοσης. Οπότε, χρησιμοποιώντας τη συνάρτηση pe.version_info μπορούμε να καθορίσουμε ποιες ιδιότητες έκδοσης θα χρησιμοποιήσουμε, όπως το πεδίο “Company Name” (Όνομα εταιρείας).
- pe.version_info[“CompanyName”] εμπεριέχει το AmAZon.cOm
- pe.language(0x0804) // China – Οι προσδιορισμένες γλώσσες μπορούν να χρησιμοποιηθούν καθορίζοντας τον κωδικό γλώσσας της Microsoft.
Στην παρακάτω εικόνα βλέπουμε τον εντοπισμό μιας σειράς από ενότητες στο κακόβουλο λογισμικό που δεν βρίσκονται συνήθως σε άλλα εκτελέσιμα αρχεία των Windows. Χρησιμοποιώντας αυτές τις πληροφορίες, μπορούμε να καθορίσουμε συγκεκριμένα ονόματα ενοτήτων και τον αντίστοιχο αριθμό της κάθε ενότητας.
Μπορείτε να παρατηρήσετε πως οι ενότητες έχουν μηδενικό ευρετήριο, επομένως η πρώτη ενότητα θα είναι «0», η δεύτερη θα είναι «1» και ούτω καθεξής. Έτσι στο παρακάτω παράδειγμα χρησιμοποίθηκε η ενότητα με το όνομα «BSS», που είναι η ενότητα νούμερο δύο.
- pe.sections[2].name == “BSS”
Πως να δημιουργήσετε κανόνες YARA
Στην παρακάτω εικόνα μπορείτε να διακρίνετε ένα χαρακτηριστικό παράδειγμα σύνταξης των κανόνων Yara.
Έναρξη του κανόνα
Οι κανόνες YARA ξεκινούν με τη σύνταξη “rule” και ακολούθως από το όνομα του κανόνα. Στη συνέχεια προστίθεται με το “{” για να υποδηλώσει το περιεχόμενο του κανόνα YARA.
Στην εικόνα μπορούμε επίσης να παρατηρήσουμε την εισαγωγή της λειτουργείας PE. Χρησιμοποιούμε την δήλωση “import pe” στην ενότητα συνθήκης των κανόνων.
MetaData (Μεταδεδομένα)
Στο παραπάνω παράδειγμα κανόνα, έχουμε συμπεριλάβει:
- τον συγγραφέα του κανόνα YARA,
- τον τύπο αρχείου του κακόβουλου λογισμικού,
- την ημερομηνία εγγραφής του κανόνα,
- την έκδοση του κανόνα,
- μια αναφορά στο από πού προήλθε το δείγμα και
- έναν κατακερματισμό του κακόβουλου λογισμικού.
Αυτά τα στοιχεία παρέχουν ορισμένες σχετικές πληροφορίες σε οποιονδήποτε άλλο μπορεί να χρησιμοποιήσει τον κανόνα. Επίσης αυτές οι πληροφορίες μπορεί να ακόμη χρήσιμοι στον ίδιο το συγγραφέα σε περίπτωση που επανεξετάσει τον κανόνα μεταγενέστερα.
Δήλωση συμβολοσειρών (strings)
Στη συνέχεια, καθορίστηκαν ορισμένες συμβολοσειρές που βρέθηκαν στο δείγμα του κακόβουλου λογισμικού. Αυτές οι συμβολοσειρές δηλώνονται ως μεταβλητές εντός του κανόνα και μπορούν να χρησιμοποιηθούν για αναζήτηση αρχείων με παρόμοιο περιεχόμενο.
Οι συμβολοσειρές που χρησιμοποιήθηκαν, αναγνωρίστηκαν χρησιμοποιώντας το PEStudio. Πρόκειται για έναν συνδυασμό ενός ενδιαφέροντος API και συμβολοσειρών των Windows. Εκτιμούμε πως θα είναι μοναδικοί σε αυτήν την οικογένεια του κακόβουλου λογισμικού.
Συνθήκες (Conditions)
Η ενότητα συνθηκών είναι το μέρος πρέπει να δηλωθούν οι προϋποθέσεις που πρέπει να πληρούνται, προκειμένου ο κανόνας YARA να ενεργοποιήσει μια αντιστοίχιση. Ο πρώτος κανόνας που έχει οριστεί, αναφέρει ότι η κεφαλίδα του αρχείου πρέπει να είναι ένα εκτελέσιμο αρχείο των Windows. Αυτός καθορίζεται με τις τιμές hex που βρίσκονται στην κεφαλίδα του εκτελέσιμου αρχείου.
Η έκδοση του αρχείου εντός του κακόβουλου λογισμικού, εκτιμήθηκε επίσης ως κάτι που μπορεί να είναι μοναδικό για το κακόβουλο λογισμικό,. Επομένως συμπεριλήφθηκε στον κανόνα το – “Versium Research 5 Installation”.
Επίσης διευκρινίστηκαν τρεις εισαγωγές τις οποίες το PEStudio έχει επισημάνει ως ύποπτες. Πρόκειται για τις FDIDestroy, FDICopy και FDICreate.
Με τον χρόνο και την εμπειρία, θα μπορείτε να εντοπίσετε τα ύποπτα τμήματα μέσα στα δείγματα. Μερικά παραδείγματα αποτελούν τα ‘.data’, ‘.reloc’, και ‘.rsrc’.
Στο παραπάνω παράδειγμα, βρέθηκαν μερικές ενότητες που δεν ταιριάζουν με αυτό το μοτίβο. Επομένως ο κανόνας YARA αναζητά τις ενότητες με το όνομα “CODE” και “BSS”.
Οι υπόλοιπες συνθήκες δηλώνουν ότι πρέπει να πληρούνται πως, η πρώτη συμβολοσειρά που δηλώνεται ως “$a1” πρέπει να υπάρχει ή τρεις από τις συμβολοσειρές “$b” ή μία από τις συμβολοσειρές “$c”. Η τελευταία συνθήκη υποδηλώνει πως το μέγεθος του αρχείου πρέπει να είναι μικρότερο από 50000 byte.
Με την ολοκλήρωση της σύνταξης του, ο κανόνας αυτός είναι έτοιμος να αντιμετωπίσει τα πρόσθετα δείγματα του κακόβουλου λογισμικού Redline.
Εν κατακλείδι:
Πλέον έχετε μια θεμελιώδης γνώση για να δημιουργήσετε τους δικούς σας κανόνες YARA. Θα μπορείτε να αρχίσετε να αναζητάτε νέα δείγματα για ανάλυση ή εναλλακτικά να εφαρμόζετε ορισμένες προληπτικές ανιχνεύσεις στον οργανισμό σας.