Υπάρχει χώρος για εισαγωγή κώδικα μεταξύ μιας εφαρμογής και των εξωτερικών βιβλιοθηκών της. Κάτι τέτοιο δεν είναι εγγενώς κακό, αλλά είναι ένας πολύ καλός τρόπος να κάνετε κακό.
Όταν οι προγραμματιστές χρειάζεται να επεκτείνουν τη λειτουργικότητα ενός προγράμματος για το οποίο δεν έχουν τον πηγαίο κώδικα, συχνά στρέφονται στο αγκίστρωση DLL. Αυτός είναι ένας ανορθόδοξος τρόπος να κάνετε ένα πρόγραμμα να κάνει κάτι που δεν προορίζεται να κάνει.
Το θέμα είναι ότι οι χάκερ χρησιμοποιούν επίσης αυτή την τεχνική για όλους τους λάθος λόγους, όπως ο οπλισμός αβλαβών εφαρμογών ή το σπάσιμο λογισμικού. Τι είναι λοιπόν το DLL hooking και πώς λειτουργεί στην πραγματικότητα;
Τι είναι ένα DLL;
Κάθε εφαρμογή εξαρτάται από ορισμένα αρχεία εκτός του βασικού κώδικα για να εκτελεστεί. Αυτά τα εξωτερικά αρχεία περιέχουν κώδικα και δεδομένα που χρειάζεται ένα πρόγραμμα για να λειτουργήσει σωστά. Όταν κάποιο από αυτά τα εξωτερικά αρχεία λείπει, το πρόγραμμα μπορεί να έχει προβλήματα σταθερότητας ή να αρνηθεί να εκτελεστεί.
Στο λειτουργικό σύστημα Windows, αυτά τα εξωτερικά αρχεία ονομάζονται βιβλιοθήκες DLL ή δυναμικές συνδέσεις. Οι βιβλιοθήκες δυναμικών συνδέσμων είναι βασικά στοιχεία του λειτουργικού συστήματος Windows, παρέχοντας επαναχρησιμοποιήσιμο κώδικα και πόρους που μπορούν να μοιραστούν σε πολλές εφαρμογές.
Τα εξωτερικά αρχεία στα Windows είναι γνωστά ως βιβλιοθήκες. Υπάρχουν δύο τύποι βιβλιοθηκών: δυναμική και στατική. Οι δυναμικές βιβλιοθήκες φορτώνονται κατά το χρόνο εκτέλεσης και οι στατικές βιβλιοθήκες φορτώνονται κατά το χρόνο μεταγλώττισης. Το DLL είναι μια δυναμική βιβλιοθήκη.
Τι είναι το DLL Hooking;
Η αγκίστρωση DLL είναι μια τεχνική που περιλαμβάνει την παρακολούθηση και την αλλαγή των κλήσεων συναρτήσεων προγραμμάτων ή διαδικασιών που πραγματοποιούνται σε ένα DLL. Ουσιαστικά μια εγκατάσταση Man-in-The-Middle εγκαθίσταται όπου ένα άγκιστρο βρίσκεται ανάμεσα σε ένα πρόγραμμα και τα DLL που καλεί. Στη συνέχεια, όλες οι κλήσεις ή οι στοχευμένες συναρτήσεις παρακολουθούνται και τροποποιούνται.
Ακολουθεί ένα παράδειγμα ροής εργασίας επίθεσης αγκίστρωσης DLL:
- Ο εισβολέας αναλύει τις κλήσεις συναρτήσεων που γίνονται από το πρόγραμμα και τα αρχεία DLL από τα οποία εξαρτάται.
- Ο εισβολέας δημιουργεί ένα άγκιστρο χρησιμοποιώντας μία από τις πολλές τεχνικές υλοποίησης όπως το αγκίστρωση IAT, το ενσωματωμένο άγκιστρο, το αγκίστρωμα COM κ.λπ.
- Συμβαίνει αυθαίρετη εκτέλεση κώδικα.
- Η εκτέλεση κλήσης αρχικής συνάρτησης μπορεί να συμβεί ή να μην συμβεί.
- Ο εισβολέας καλύπτει τα ίχνη του διαγράφοντας το άγκιστρο και επαναφέροντας όλες τις αλλαγές που έγιναν.
Η αγκίστρωση DLL είναι μια εξελιγμένη τεχνική που μπορεί να χρησιμοποιηθεί και για τα δύο καλά (όπως η επέκταση της λειτουργικότητας του προγράμματος, ο εντοπισμός σφαλμάτων και καταγραφή) ή για κακό (όπως παράκαμψη μέτρων ασφαλείας, κλοπή ευαίσθητων δεδομένων, εκτέλεση αυθαίρετου κώδικα και σύνταξη βιντεοπαιχνιδιών αμυχές).
Πώς λειτουργεί το DLL Hooking;
Πριν ξεκινήσετε την εφαρμογή DLL hooking, είναι σημαντικό να ξεκαθαρίσετε τα βασικά. Ας κάνουμε ένα βήμα πίσω και ας καταλάβουμε τι συμβαίνει όταν μια κλήση συνάρτησης γίνεται σε ένα DLL από ένα πρόγραμμα.
Όταν ένα πρόγραμμα καλεί μια συνάρτηση σε ένα DLL, το λειτουργικό σύστημα αναζητά πρώτα το όνομα της συνάρτησης τον πίνακα διευθύνσεων εισαγωγής του προγράμματος και λαμβάνει τη διεύθυνση της συνάρτησης από τη διεύθυνση εξαγωγής του DLL Τραπέζι.
Μόλις επιλυθεί η διεύθυνση της συνάρτησης, το πρόγραμμα μπορεί να μεταβεί στη διεύθυνση της συνάρτησης για να αποκτήσει πρόσβαση και να την εκτελέσει. Η σύνδεση DLL περιστρέφεται γύρω από την παρεμπόδιση αυτής της διαδικασίας και την ανακατεύθυνση της κλήσης συνάρτησης σε μια διαφορετική συνάρτηση. Υπάρχουν διάφοροι τρόποι για την υλοποίηση της σύνδεσης DLL. Ας δούμε τις πιο συχνά χρησιμοποιούμενες τεχνικές για την υλοποίησή του.
Αυτό μπορεί να γίνει αρκετά τεχνικό, οπότε μπορεί να σας βοηθήσει αν το κάνετε είναι ισχυρός χρήστης των Windows ή αλλιώς να κατανοούν καλά τα εσωτερικά των Windows.
IAT Hooking
Το IAT hooking είναι μια αποτελεσματική τεχνική που χρησιμοποιείται ευρέως από δημιουργούς κακόβουλου λογισμικού για την παράκαμψη των μέτρων ασφαλείας και την αποφυγή του εντοπισμού. Ο πίνακας διευθύνσεων εισαγωγής (IAT) είναι μια δομή δεδομένων που φορτώνεται στη μνήμη κάθε φορά που δημιουργείται μια νέα διεργασία. Το IAT περιέχει τα ονόματα όλων των εισαγόμενων κλήσεων συναρτήσεων και τις διευθύνσεις μνήμης τους.
Όταν ένα πρόγραμμα καλεί μια συνάρτηση στο DLL, το όνομα της συνάρτησης αναζητείται πρώτα στο IAT και εάν το Η διεύθυνση μνήμης της εν λόγω συνάρτησης δεν βρίσκεται στο IAT και στη συνέχεια καθορίζεται από τη διεύθυνση εξαγωγής του DLL Τραπέζι.
Είναι μια δομή δεδομένων όπου όλες οι λειτουργίες που εξάγονται από το DLL αντιστοιχίζονται στις διευθύνσεις μνήμης τους. Στο IAT hooking, ένας αντίπαλος μπορεί να τροποποιήσει το IAT μιας διαδικασίας και να αντικαταστήσει νόμιμες αντιστοιχίσεις συναρτήσεων με κακόβουλα, διακόπτοντας έτσι την προβλεπόμενη λειτουργία και κάνοντας το πρόγραμμα να εκτελείται αυθαίρετα κώδικας.
Δείτε πώς φαίνεται η γενική ροή επίθεσης στο αγκίστρωση IAT:
- Ένα πρόγραμμα κάνει μια κλήση συνάρτησης.
- Η διεύθυνση λειτουργίας βρίσκεται στο IAT.
- Δεδομένου ότι το IAT έχει αγκιστρωθεί. η διεύθυνση της συνάρτησης έχει τροποποιηθεί και φορτώνεται η θέση μνήμης μιας κακόβουλης λειτουργίας.
- Το πρόγραμμα μεταβαίνει στη θέση της κακόβουλης λειτουργίας και εκτελείται αυθαίρετος κώδικας.
- Τέλος, εκτελείται η αρχική κλήση συνάρτησης.
Ενσωματωμένο Hooking
Το Inline hooking είναι μια τεχνική αγκίστρωσης DLL που περιλαμβάνει την αλλαγή του πηγαίου κώδικα μιας συνάρτησης στόχου προκειμένου να κατευθύνει την εκτέλεσή της σε μια ειδική συνάρτηση. Το Inline Hooking, σε αντίθεση με το IAT hooking, αλλάζει άμεσα τον κώδικα της συνάρτησης στόχου, δίνοντας στον εισβολέα πιο ακριβή έλεγχο σχετικά με τον τρόπο συμπεριφοράς της συνάρτησης στόχου.
Στο παραπάνω διάγραμμα, παρατηρήστε πώς παραποιήθηκε η νόμιμη λειτουργία για να υποδείξει μια κακόβουλη λειτουργία. Μόλις εκτελεστούν όλες οι εντολές της κακόβουλης συνάρτησης, γίνεται μια εντολή μετάβασης για να επιστρέψει στη νόμιμη συνάρτηση για να ολοκληρωθεί η εκτέλεσή της.
Οι αντίπαλοι χρησιμοποιούν το inline hooking για να κάνουν μόνιμες αλλαγές σε ένα πρόγραμμα, όπως η αλλαγή των παραμέτρων ή της τιμής επιστροφής μιας συνάρτησης.
Microsoft Detours
Η Microsoft Research έχει αναπτύξει ένα εσωτερικό πακέτο αγκίστρωσης DLL, το Detours. Επιτρέπει στους προγραμματιστές να παρακολουθούν και να αλλάζουν τις κλήσεις λειτουργιών που γίνονται από ένα πρόγραμμα. Οι παρακάμψεις μπορούν να χρησιμοποιηθούν για μια ποικιλία εργασιών, όπως ενδεικτικά: όργανα, δοκιμές και διόρθωση σφαλμάτων.
Οι αντίπαλοι χρησιμοποιούν το Detours για να πραγματοποιήσουν επιθέσεις έγχυσης και αγκίστρωσης DLL και οι προγραμματιστές το χρησιμοποιούν συχνά για να επεκτείνουν τη λειτουργικότητα των εφαρμογών τους. Μπορείτε να μάθετε περισσότερα για το πακέτο Detours στο επίσημο αποθετήριο GitHub.
Τώρα ξέρετε πώς λειτουργεί το DLL Hooking
Το DLL hooking είναι μια εξελιγμένη τεχνική που, όταν χρησιμοποιείται για τους σωστούς λόγους, μπορεί να ενισχύσει τις δυνατότητες της εφαρμογής σας ή να σας βοηθήσει να εντοπίσετε σφάλματα και να βελτιστοποιήσετε το λογισμικό. Δυστυχώς, το hooking χρησιμοποιείται πιο συχνά ως τεχνική αντίθεσης παρά ως αναπτυξιακή τεχνική. Επομένως, είναι σημαντικό να υιοθετείτε και να τηρείτε τις βέλτιστες πρακτικές ασφάλειας, διασφαλίζοντας ότι οι εφαρμογές σας είναι ασφαλείς και απαλλαγμένες από επιθέσεις όπως αγκίστρωση και έγχυση.