Cryptographic/Compression Algorithms
Last updated
Last updated
Μάθετε & εξασκηθείτε στο AWS Hacking:Εκπαίδευση HackTricks AWS Red Team Expert (ARTE) Μάθετε & εξασκηθείτε στο GCP Hacking: Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)
Εάν end σε έναν κώδικα χρησιμοποιώντας μετατοπίσεις δεξιά και αριστερά, XOR και αρκετές αριθμητικές πράξεις είναι πολύ πιθανό ότι είναι η υλοποίηση ενός κρυπτογραφικού αλγορίθμου. Εδώ θα δείξουμε κάποιους τρόπους για αναγνώριση του αλγορίθμου που χρησιμοποιείται χωρίς την ανάγκη αντιστροφής κάθε βήματος.
CryptDeriveKey
Εάν χρησιμοποιείται αυτή η συνάρτηση, μπορείτε να βρείτε ποιος αλγόριθμος χρησιμοποιείται ελέγχοντας την τιμή της δεύτερης παραμέτρου:
Ελέγξτε εδώ τον πίνακα των πιθανών αλγορίθμων και των αντιστοιχισμένων τιμών τους: https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id
RtlCompressBuffer/RtlDecompressBuffer
Συμπιέζει και αποσυμπιέζει ένα δεδομένο buffer.
CryptAcquireContext
Από τα έγγραφα: Η συνάρτηση CryptAcquireContext χρησιμοποιείται για να αποκτήσει ένα χειριστή για ένα συγκεκριμένο δοχείο κλειδιών εντός ενός συγκεκριμένου παρόχου κρυπτογραφικών υπηρεσιών (CSP). Αυτός ο επιστρεφόμενος χειριστής χρησιμοποιείται σε κλήσεις συναρτήσεων CryptoAPI που χρησιμοποιούν τον επιλεγμένο CSP.
CryptCreateHash
Εκκινεί την κατακερματισμό ενός ρεύματος δεδομένων. Εάν χρησιμοποιείται αυτή η συνάρτηση, μπορείτε να βρείτε ποιος αλγόριθμος χρησιμοποιείται ελέγχοντας την τιμή της δεύτερης παραμέτρου:
Ελέγξτε εδώ τον πίνακα των πιθανών αλγορίθμων και των αντιστοιχισμένων τιμών τους: https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id
Μερικές φορές είναι πραγματικά εύκολο να αναγνωρίσετε έναν αλγόριθμο χάρη στο γεγονός ότι χρειάζεται να χρησιμοποιήσει μια ειδική και μοναδική τιμή.
Εάν αναζητήσετε την πρώτη σταθερά στο Google, αυτό είναι το αποτέλεσμα:
Συνεπώς, μπορείτε να υποθέσετε ότι η αποσυναρμολογημένη συνάρτηση είναι ένας υπολογιστής sha256. Μπορείτε να αναζητήσετε οποιαδήποτε άλλη σταθερά και θα λάβετε (πιθανόν) το ίδιο αποτέλεσμα.
Εάν ο κώδικας δεν έχει κάποια σημαντική σταθερά, μπορεί να φορτώνει πληροφορίες από την ενότητα .data. Μπορείτε να έχετε πρόσβαση σε αυτά τα δεδομένα, να ομαδοποιήσετε τον πρώτο λέξη και να το αναζητήσετε στο Google όπως κάναμε στην προηγούμενη ενότητα:
Σε αυτήν την περίπτωση, αν αναζητήσετε το 0xA56363C6 θα βρείτε ότι σχετίζεται με τις πίνακες του αλγορίθμου AES.
Αποτελείται από 3 κύρια μέρη:
Στάδιο Αρχικοποίησης/: Δημιουργεί έναν πίνακα τιμών από 0x00 έως 0xFF (συνολικά 256 bytes, 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 χάρη στη χρήση συγκεκριμένων τιμών πινάκων αναζήτησης (σταθερές). _Σημειώστε ότι η σταθερά μπορεί να **απο
Πιο πολύπλοκη από τους συμμετρικούς αλγορίθμους
Δεν υπάρχουν σταθερές! (η προσαρμοσμένη υλοποίηση είναι δύσκολο να προσδιοριστεί)
Ο 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
Σημειώστε τη χρήση περισσότερων σταθερών
Μικρότερο και πιο αποδοτικό καθώς η λειτουργία του είναι να εντοπίζει τυχαίες αλλαγές στα δεδομένα
Χρησιμοποιεί πίνακες αναζήτησης (έτσι μπορείτε να αναγνωρίσετε σταθερές)
Ελέγξτε τις σταθερές του πίνακα αναζήτησης:
Ένας αλγόριθμος κατακερματισμού CRC φαίνεται όπως:
Δεν αναγνωρίσιμες σταθερές
Μπορείτε να δοκιμάσετε να γράψετε τον αλγόριθμο σε Python και να αναζητήσετε παρόμοια πράγματα online
Το γράφημα είναι αρκετά μεγάλο:
Ελέγξτε 3 συγκρίσεις για να το αναγνωρίσετε: