Cryptographic/Compression Algorithms
Last updated
Last updated
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Αν καταλήξετε σε έναν κώδικα χρησιμοποιώντας shift rights και lefts, xors και διάφορες αριθμητικές λειτουργίες είναι πολύ πιθανό να είναι η υλοποίηση ενός κρυπτογραφικού αλγορίθμου. Εδώ θα παρουσιαστούν μερικοί τρόποι για να αναγνωρίσετε τον αλγόριθμο που χρησιμοποιείται χωρίς να χρειάζεται να αντιστρέψετε κάθε βήμα.
CryptDeriveKey
Αν αυτή η λειτουργία χρησιμοποιείται, μπορείτε να βρείτε ποιος αλγόριθμος χρησιμοποιείται ελέγχοντας την τιμή της δεύτερης παραμέτρου:
Ελέγξτε εδώ τον πίνακα των πιθανών αλγορίθμων και των ανατεθειμένων τιμών τους: https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id
RtlCompressBuffer/RtlDecompressBuffer
Συμπιέζει και αποσυμπιέζει ένα δεδομένο buffer δεδομένων.
CryptAcquireContext
Από τα docs: Η λειτουργία CryptAcquireContext χρησιμοποιείται για να αποκτήσει ένα handle σε ένα συγκεκριμένο key container εντός ενός συγκεκριμένου κρυπτογραφικού παρόχου υπηρεσιών (CSP). Αυτό το επιστρεφόμενο handle χρησιμοποιείται σε κλήσεις προς τις λειτουργίες CryptoAPI που χρησιμοποιούν το επιλεγμένο CSP.
CryptCreateHash
Αρχίζει την καταμέτρηση ενός ρεύματος δεδομένων. Αν αυτή η λειτουργία χρησιμοποιείται, μπορείτε να βρείτε ποιος αλγόριθμος χρησιμοποιείται ελέγχοντας την τιμή της δεύτερης παραμέτρου:
Ελέγξτε εδώ τον πίνακα των πιθανών αλγορίθμων και των ανατεθειμένων τιμών τους: https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id
Μερικές φορές είναι πολύ εύκολο να αναγνωρίσετε έναν αλγόριθμο χάρη στο γεγονός ότι χρειάζεται να χρησιμοποιήσει μια ειδική και μοναδική τιμή.
Αν ψάξετε για την πρώτη σταθερά στο Google αυτό είναι που θα βρείτε:
Επομένως, μπορείτε να υποθέσετε ότι η αποσυμπιεσμένη λειτουργία είναι ένας υπολογιστής sha256. Μπορείτε να αναζητήσετε οποιαδήποτε από τις άλλες σταθερές και θα αποκτήσετε (πιθανώς) το ίδιο αποτέλεσμα.
Αν ο κώδικας δεν έχει καμία σημαντική σταθερά μπορεί να είναι φορτώνοντας πληροφορίες από την ενότητα .data. Μπορείτε να αποκτήσετε πρόσβαση σε αυτά τα δεδομένα, ομαδοποιώντας το πρώτο dword και να το αναζητήσετε στο google όπως κάναμε στην προηγούμενη ενότητα:
Σε αυτή την περίπτωση, αν ψάξετε για 0xA56363C6 μπορείτε να βρείτε ότι σχετίζεται με τις πίνακες του αλγορίθμου AES.
Αποτελείται από 3 κύρια μέρη:
Στάδιο αρχικοποίησης/: Δημιουργεί έναν πίνακα τιμών από 0x00 έως 0xFF (256bytes συνολικά, 0x100). Αυτός ο πίνακας ονομάζεται συνήθως Substitution Box (ή SBox).
Στάδιο ανακατέματος: Θα περάσει από τον πίνακα που δημιουργήθηκε προηγουμένως (κύκλος 0x100 επαναλήψεων, ξανά) δημιουργώντας τροποποιώντας κάθε τιμή με ημι-τυχαία bytes. Για να δημιουργηθούν αυτά τα ημι-τυχαία bytes, χρησιμοποιείται το κλειδί RC4. Τα κλειδιά RC4 μπορούν να είναι μεταξύ 1 και 256 bytes σε μήκος, ωστόσο συνήθως συνιστάται να είναι πάνω από 5 bytes. Συνήθως, τα κλειδιά RC4 είναι 16 bytes σε μήκος.
Στάδιο XOR: Τέλος, το απλό κείμενο ή το κρυπτογραφημένο κείμενο είναι XORed με τις τιμές που δημιουργήθηκαν προηγουμένως. Η λειτουργία για την κρυπτογράφηση και την αποκρυπτογράφηση είναι η ίδια. Για αυτό, θα εκτελεστεί ένας κύκλος μέσω των 256 bytes που δημιουργήθηκαν όσες φορές είναι απαραίτητο. Αυτό συνήθως αναγνωρίζεται σε έναν αποσυμπιεσμένο κώδικα με ένα %256 (mod 256).
Για να αναγνωρίσετε ένα RC4 σε έναν αποσυμπιεσμένο/αποσυμπιεσμένο κώδικα μπορείτε να ελέγξετε για 2 κύκλους μεγέθους 0x100 (με τη χρήση ενός κλειδιού) και στη συνέχεια ένα XOR των δεδομένων εισόδου με τις 256 τιμές που δημιουργήθηκαν προηγουμένως στους 2 κύκλους πιθανώς χρησιμοποιώντας ένα %256 (mod 256)
Χρήση πινακων υποκατάστασης και πινάκων αναζήτησης
Είναι δυνατόν να διακριθεί το AES χάρη στη χρήση συγκεκριμένων τιμών πίνακα αναζήτησης (σταθερές). _Σημειώστε ότι η σταθερά μπορεί να είναι αποθηκευμένη στο δυαδικό ή δημιουργημένη δυναμικά.
Το κλειδί κρυπτογράφησης πρέπει να είναι διαιρέσιμο με 16 (συνήθως 32B) και συνήθως χρησιμοποιείται ένα IV 16B.
Είναι σπάνιο να βρείτε κάποιο malware που να το χρησιμοποιεί αλλά υπάρχουν παραδείγματα (Ursnif)
Απλό να προσδιορίσετε αν ένας αλγόριθμος είναι Serpent ή όχι με βάση το μήκος του (εξαιρετικά μεγάλη λειτουργία)
Στην παρακάτω εικόνα παρατηρήστε πώς χρησιμοποιείται η σταθερά 0x9E3779B9 (σημειώστε ότι αυτή η σταθερά χρησιμοποιείται επίσης από άλλους κρυπτογραφικούς αλγόριθμους όπως TEA -Tiny Encryption Algorithm). Επίσης σημειώστε το μέγεθος του κύκλου (132) και τον αριθμό των λειτουργιών XOR στις εντολές αποσυμπίεσης και στο παράδειγμα κώδικα:
Όπως αναφέρθηκε προηγουμένως, αυτός ο κώδικας μπορεί να οπτικοποιηθεί μέσα σε οποιονδήποτε αποσυμπιεστή ως μια πολύ μεγάλη λειτουργία καθώς δεν υπάρχουν άλματα μέσα σε αυτόν. Ο αποσυμπιεσμένος κώδικας μπορεί να φαίνεται όπως το εξής:
Επομένως, είναι δυνατόν να αναγνωρίσετε αυτόν τον αλγόριθμο ελέγχοντας τον μαγικό αριθμό και τους αρχικούς XORs, βλέποντας μια πολύ μεγάλη λειτουργία και συγκρίνοντας κάποιες εντολές της μεγάλης λειτουργίας με μια υλοποίηση (όπως το shift left κατά 7 και το rotate left κατά 22).
Πιο περίπλοκο από τους συμμετρικούς αλγόριθμους
Δεν υπάρχουν σταθερές! (οι προσαρμοσμένες υλοποιήσεις είναι δύσκολο να προσδιοριστούν)
KANAL (ένας αναλυτής κρυπτογράφησης) αποτυγχάνει να δείξει ενδείξεις για το RSA καθώς βασίζεται σε σταθερές.
Στη γραμμή 11 (αριστερά) υπάρχει ένα +7) >> 3
που είναι το ίδιο με τη γραμμή 35 (δεξιά): +7) / 8
Η γραμμή 12 (αριστερά) ελέγχει αν modulus_len < 0x040
και στη γραμμή 36 (δεξιά) ελέγχει αν inputLen+11 > modulusLen
3 λειτουργίες: Init, Update, Final
Παρόμοιες λειτουργίες αρχικοποίησης
Init
Μπορείτε να αναγνωρίσετε και τους δύο ελέγχοντας τις σταθερές. Σημειώστε ότι η sha_init έχει 1 σταθερά που δεν έχει το MD5:
MD5 Transform
Σημειώστε τη χρήση περισσότερων σταθερών
Μικρότερος και πιο αποδοτικός καθώς η λειτουργία του είναι να βρίσκει τυχαίες αλλαγές στα δεδομένα
Χρησιμοποιεί πίνακες αναζήτησης (έτσι μπορείτε να αναγνωρίσετε σταθερές)
Ελέγξτε σταθερές πίνακα αναζήτησης:
Ένας αλγόριθμος hash CRC φαίνεται όπως:
Μη αναγνωρίσιμες σταθερές
Μπορείτε να προσπαθήσετε να γράψετε τον αλγόριθμο σε python και να αναζητήσετε παρόμοια πράγματα online
Ο γραφικός πίνακας είναι αρκετά μεγάλος:
Ελέγξτε 3 συγκρίσεις για να τον αναγνωρίσετε:
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)