Κρυπτογραφικοί/Αλγόριθμοι Συμπίεσης
Reading time: 7 minutes
tip
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
Αναγνώριση Αλγορίθμων
Αν καταλήγεις σε έναν κώδικα χρησιμοποιώντας μετατοπίσεις δεξιά και αριστερά, xors και διάφορες αριθμητικές λειτουργίες είναι πολύ πιθανό να είναι η υλοποίηση ενός κρυπτογραφικού αλγορίθμου. Εδώ θα παρουσιαστούν μερικοί τρόποι για να αναγνωρίσεις τον αλγόριθμο που χρησιμοποιείται χωρίς να χρειάζεται να αναστρέψεις κάθε βήμα.
Λειτουργίες API
CryptDeriveKey
Αν αυτή η λειτουργία χρησιμοποιείται, μπορείς να βρεις ποιος αλγόριθμος χρησιμοποιείται ελέγχοντας την τιμή της δεύτερης παραμέτρου:
Έλεγξε εδώ τον πίνακα των πιθανών αλγορίθμων και των ανατεθειμένων τιμών τους: https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id
RtlCompressBuffer/RtlDecompressBuffer
Συμπιέζει και αποσυμπιέζει ένα δεδομένο buffer δεδομένων.
CryptAcquireContext
Από τα docs: Η λειτουργία CryptAcquireContext χρησιμοποιείται για να αποκτήσει ένα handle σε ένα συγκεκριμένο container κλειδιών μέσα σε έναν συγκεκριμένο πάροχο κρυπτογραφικών υπηρεσιών (CSP). Αυτό το επιστρεφόμενο handle χρησιμοποιείται σε κλήσεις σε λειτουργίες CryptoAPI που χρησιμοποιούν τον επιλεγμένο CSP.
CryptCreateHash
Αρχίζει την καταμέτρηση ενός ρεύματος δεδομένων. Αν αυτή η λειτουργία χρησιμοποιείται, μπορείς να βρεις ποιος αλγόριθμος χρησιμοποιείται ελέγχοντας την τιμή της δεύτερης παραμέτρου:
Έλεγξε εδώ τον πίνακα των πιθανών αλγορίθμων και των ανατεθειμένων τιμών τους: https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id
Σταθερές Κώδικα
Μερικές φορές είναι πολύ εύκολο να αναγνωρίσεις έναν αλγόριθμο χάρη στο γεγονός ότι χρειάζεται να χρησιμοποιήσει μια ειδική και μοναδική τιμή.
Αν ψάξεις για την πρώτη σταθερά στο Google αυτό είναι που θα βρεις:
Επομένως, μπορείς να υποθέσεις ότι η αποσυμπιεσμένη λειτουργία είναι ένας υπολογιστής sha256.
Μπορείς να ψάξεις οποιαδήποτε από τις άλλες σταθερές και θα αποκτήσεις (πιθανώς) το ίδιο αποτέλεσμα.
πληροφορίες δεδομένων
Αν ο κώδικας δεν έχει καμία σημαντική σταθερά μπορεί να είναι φορτώνοντας πληροφορίες από την ενότητα .data.
Μπορείς να έχεις πρόσβαση σε αυτά τα δεδομένα, ομαδοποιώντας το πρώτο dword και ψάχνοντας το στο Google όπως κάναμε στην προηγούμενη ενότητα:
Σε αυτή την περίπτωση, αν ψάξεις για 0xA56363C6 μπορείς να βρεις ότι σχετίζεται με τους πίνακες του αλγορίθμου AES.
RC4 (Συμμετρική Κρυπτογράφηση)
Χαρακτηριστικά
Αποτελείται από 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).
tip
Για να αναγνωρίσεις ένα RC4 σε έναν αποσυμπιεσμένο/αποσυμπιεσμένο κώδικα μπορείς να ελέγξεις για 2 κύκλους μεγέθους 0x100 (με τη χρήση ενός κλειδιού) και στη συνέχεια ένα XOR των δεδομένων εισόδου με τις 256 τιμές που δημιουργήθηκαν πριν στους 2 κύκλους πιθανώς χρησιμοποιώντας ένα %256 (mod 256)
Στάδιο Αρχικοποίησης/Πίνακας Υποκατάστασης: (Σημείωσε τον αριθμό 256 που χρησιμοποιείται ως μετρητής και πώς γράφεται ένα 0 σε κάθε θέση των 256 χαρακτήρων)
Στάδιο Ανακατανομής:
Στάδιο XOR:
AES (Συμμετρική Κρυπτογράφηση)
Χαρακτηριστικά
- Χρήση πινακων υποκατάστασης και πινάκων αναζήτησης
- Είναι δυνατόν να διακρίνεις το AES χάρη στη χρήση συγκεκριμένων τιμών πίνακα αναζήτησης (σταθερές). _Σημείωσε ότι η σταθερά μπορεί να είναι αποθηκευμένη στο δυαδικό ή να δημιουργείται δυναμικά.
- Το κλειδί κρυπτογράφησης πρέπει να είναι διαιρέσιμο με 16 (συνήθως 32B) και συνήθως χρησιμοποιείται ένα IV 16B.
Σταθερές SBox
Serpent (Συμμετρική Κρυπτογράφηση)
Χαρακτηριστικά
- Είναι σπάνιο να βρεις κάποιο malware που να το χρησιμοποιεί αλλά υπάρχουν παραδείγματα (Ursnif)
- Απλό να προσδιορίσεις αν ένας αλγόριθμος είναι Serpent ή όχι με βάση το μήκος του (εξαιρετικά μεγάλη λειτουργία)
Αναγνώριση
Στην παρακάτω εικόνα παρατήρησε πώς χρησιμοποιείται η σταθερά 0x9E3779B9 (σημείωσε ότι αυτή η σταθερά χρησιμοποιείται επίσης από άλλους κρυπτογραφικούς αλγορίθμους όπως TEA -Tiny Encryption Algorithm).
Επίσης σημείωσε το μέγεθος του κύκλου (132) και τον αριθμό των λειτουργιών XOR στις εντολές αποσυμπίεσης και στο παράδειγμα κώδικα:
Όπως αναφέρθηκε προηγουμένως, αυτός ο κώδικας μπορεί να οπτικοποιηθεί μέσα σε οποιονδήποτε αποσυμπιεστή ως μια πολύ μεγάλη λειτουργία καθώς δεν υπάρχουν άλματα μέσα σε αυτόν. Ο αποσυμπιεσμένος κώδικας μπορεί να φαίνεται όπως το εξής:
Επομένως, είναι δυνατόν να αναγνωρίσεις αυτόν τον αλγόριθμο ελέγχοντας τον μαγικό αριθμό και τους αρχικούς XORs, βλέποντας μια πολύ μεγάλη λειτουργία και συγκρίνοντας κάποιες εντολές της μεγάλης λειτουργίας με μια υλοποίηση (όπως η μετατόπιση αριστερά κατά 7 και η περιστροφή αριστερά κατά 22).
RSA (Ασύμμετρη Κρυπτογράφηση)
Χαρακτηριστικά
- Πιο περίπλοκος από τους συμμετρικούς αλγορίθμους
- Δεν υπάρχουν σταθερές! (οι προσαρμοσμένες υλοποιήσεις είναι δύσκολο να προσδιοριστούν)
- Ο KANAL (ένας αναλυτής κρυπτογράφησης) αποτυγχάνει να δείξει ενδείξεις για το RSA καθώς βασίζεται σε σταθερές.
Αναγνώριση μέσω συγκρίσεων
- Στη γραμμή 11 (αριστερά) υπάρχει ένα
+7) >> 3
που είναι το ίδιο με τη γραμμή 35 (δεξιά):+7) / 8
- Η γραμμή 12 (αριστερά) ελέγχει αν
modulus_len < 0x040
και στη γραμμή 36 (δεξιά) ελέγχει ανinputLen+11 > modulusLen
MD5 & SHA (hash)
Χαρακτηριστικά
- 3 λειτουργίες: Init, Update, Final
- Παρόμοιες λειτουργίες αρχικοποίησης
Αναγνώριση
Init
Μπορείς να αναγνωρίσεις και τους δύο ελέγχοντας τις σταθερές. Σημείωσε ότι η sha_init έχει 1 σταθερά που δεν έχει το MD5:
MD5 Transform
Σημείωσε τη χρήση περισσότερων σταθερών
CRC (hash)
- Μικρότερος και πιο αποδοτικός καθώς η λειτουργία του είναι να βρίσκει τυχαίες αλλαγές στα δεδομένα
- Χρησιμοποιεί πίνακες αναζήτησης (έτσι μπορείς να αναγνωρίσεις σταθερές)
Αναγνώριση
Έλεγξε σταθερές πίνακα αναζήτησης:
Ένας αλγόριθμος hash CRC μοιάζει με:
APLib (Συμπίεση)
Χαρακτηριστικά
- Μη αναγνωρίσιμες σταθερές
- Μπορείς να προσπαθήσεις να γράψεις τον αλγόριθμο σε python και να ψάξεις για παρόμοια πράγματα online
Αναγνώριση
Ο γραφικός πίνακας είναι αρκετά μεγάλος:
Έλεγξε 3 συγκρίσεις για να τον αναγνωρίσεις:
tip
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.