Καθημερινά, χάκερ σε όλο τον κόσμο ανακαλύπτουν και εκμεταλλεύονται νέα τρωτά σημεία σε ιστότοπους, εφαρμογές, ακόμη και στην αρχιτεκτονική του συστήματος. Ένα κοινό πράγμα σε όλες τις ηλεκτρονικές συσκευές, παλιές ή νέες, είναι ότι εκτελούνται από προγράμματα που είναι αποθηκευμένα στη μνήμη. Οι χάκερ το εκμεταλλεύτηκαν αυτό και βρήκαν τρωτά σημεία γνωστά ως υπερχείλιση buffer.
Αν και δεν είναι καινούργιο, οι επιθέσεις υπερχείλισης buffer και τα τρωτά σημεία έχουν προκαλέσει όλεθρο στον κυβερνοχώρο. Εδώ, θα σας εξηγήσουμε τι είναι οι επιθέσεις υπερχείλισης buffer και πώς μπορείτε να τις αποτρέψετε.
Κατανόηση των buffer και της μνήμης συστήματος
Για να κατανοήσετε τι είναι μια επίθεση υπερχείλισης buffer και πώς λειτουργεί, πρέπει να γνωρίζετε τι είναι η προσωρινή μνήμη και πώς λειτουργεί η μνήμη ενός υπολογιστή.
Στοίβα και σωρό μνήμη είναι δύο βασικά χαρακτηριστικά της μνήμης ενός υπολογιστή. Είναι δομές δεδομένων που χρησιμοποιούνται για την εκχώρηση μνήμης. Αν και είναι παρόμοια, Η μνήμη στοίβας και σωρού διαφέρουν με πολλαπλούς τρόπους.
Η στοίβα, η οποία χρησιμοποιεί την έννοια Last-in, First-out (LIFO), χρησιμοποιείται στη μνήμη RAM (μνήμη τυχαίας πρόσβασης) για αποθηκεύστε τις εκτελέσεις προγραμμάτων προσωρινά, ενώ ο σωρός εκχωρεί μνήμη χρησιμοποιώντας δυναμική κατανομή σε καθολική μεταβλητές. Αλλά το μόνο κοινό τους σημείο είναι ένα buffer.
Τι είναι ένα buffer;
Το buffer είναι μια περιοχή της μνήμης που χρησιμοποιείται για την αποθήκευση δεδομένων, πιθανότατα στη μνήμη RAM ενός υπολογιστή, ενώ μετακινείται από τη μια θέση στην άλλη. Αυτά τα δεδομένα είναι συνήθως προγράμματα που πρέπει να εκτελεστούν. Τα buffer αποθηκεύονται στη στοίβα ή στο σωρό. Βελτιστοποιούν την εκτέλεση των δεδομένων.
Τι είναι η υπερχείλιση buffer;
Μια υπερχείλιση buffer συμβαίνει όταν το buffer λαμβάνει περισσότερα δεδομένα από την χωρητικότητα αποθήκευσης. Επειδή δεν μπορεί να επεξεργαστεί αυτόν τον όγκο δεδομένων, ξεχειλίζει.
Τώρα, στη μνήμη ενός υπολογιστή, ακριβώς μετά από ένα buffer ή ένα buffer space είναι μια διεύθυνση επιστροφής. Αυτή η διεύθυνση επιστροφής ονομάζεται στην πραγματικότητα Εκτεταμένος δείκτης εντολών (EIP). Η λειτουργία του είναι να κατευθύνει τον υπολογιστή σε ένα καθορισμένο πρόγραμμα όταν γεμίσει. Όταν ένα buffer έχει περισσότερα δεδομένα από όσα μπορεί να κρατήσει και ξεχειλίζει, υπερχειλίζει στη διεύθυνση επιστροφής.
Για να το καταλάβετε αυτό, ας υποθέσουμε ότι έχετε έναν χώρο προσωρινής αποθήκευσης που μπορεί να χωρέσει μόνο πέντε γράμματα. Έτσι, εάν συμπληρώσετε λέξεις όπως "ζάχαρη" ή "ειρήνη", η ροή του ρυθμιστή μπορεί να το περιέχει. Αλλά όταν έχετε μια λέξη όπως "έλεγχος ταυτότητας", αναπόφευκτα θα ξεχυθεί. Αυτό οδηγεί σε σφάλμα ή σφάλμα στο σύστημα. Αλλά οι χάκερ μπορούν να εκμεταλλευτούν αυτήν την ευπάθεια για να ξεκινήσουν μια επίθεση υπερχείλισης buffer.
Τι είναι μια επίθεση υπερχείλισης buffer και πώς λειτουργεί;
Οι επιθέσεις υπερχείλισης buffer συμβαίνουν όταν ο χάκερ παίρνει τον έλεγχο της διεύθυνσης επιστροφής ή του EIP. Όταν ο εισβολέας γνωρίζει το μέγεθος της μνήμης ενός συστήματος, μπορεί σκόπιμα να γράψει δεδομένα σε αυτό το σύστημα απλώς για να υπερχειλίσει. Στη συνέχεια, βεβαιώνονται ότι η διεύθυνση EIP ή η διεύθυνση επιστροφής είναι γραμμένη για να οδηγεί σε ένα πρόγραμμα που μπορεί να τους δώσει πρόσβαση στο σύστημα ή να αποκαλύψει ευαίσθητες πληροφορίες που είναι αποθηκευμένες στο σύστημα.
Ο εισβολέας μπορεί ακόμη και να γράψει ορισμένα δεδομένα που περιέχουν κακόβουλο κώδικα και να προκαλέσουν υπερχείλιση του buffer. Στη συνέχεια, το EIP γράφεται για να ανακατευθύνει το σύστημα πίσω στον κακόβουλο κώδικα και τίθεται σε λειτουργία. Στη συνέχεια, ο χάκερ παίρνει τον έλεγχο του συστήματος.
Υπάρχουν πέντε βασικά βήματα στις επιθέσεις υπερχείλισης buffer:
- Αιχμές
- Θολές
- Εύρεση της μετατόπισης
- Αντικατάσταση της διεύθυνσης EIP ή επιστροφής
- Εκμετάλλευση της ευπάθειας
Το Spiking είναι το πρώτο βήμα. Εδώ, οι χάκερ βρίσκουν το τμήμα της μνήμης του προγράμματος που είναι ευάλωτο σε υπερχειλίσεις buffer. Μετά έρχεται το fuzzing, το οποίο είναι παρόμοιο με το spiking, αλλά εδώ, ο χάκερ στέλνει χαρακτήρες στο πρόγραμμα για να δει αν μπορεί να σπάσει. Μόλις πετύχει, ο εισβολέας προχωρά στην εύρεση της μετατόπισης, όπου ξεχείλισε το buffer. Αυτό γίνεται για να γνωρίζουμε το μέγεθος του buffer και τη διεύθυνση επιστροφής. Στη συνέχεια, ο χάκερ εισάγει έναν κακόβουλο κώδικα κελύφους και ελέγχει το σύστημα.
Ποιοι είναι οι τύποι επιθέσεων υπερχείλισης buffer;
Υπάρχουν δύο κύριοι τύποι επιθέσεων υπερχείλισης buffer: οι επιθέσεις που βασίζονται σε στοίβα και οι επιθέσεις που βασίζονται σε σωρό.
1. Επιθέσεις υπερχείλισης buffer που βασίζονται σε στοίβα
Οι επιθέσεις υπερχείλισης buffer που βασίζονται σε στοίβα είναι ο πιο δημοφιλής τύπος επιθέσεων υπερχείλισης buffer. Εμφανίζονται όταν η στοίβα μνήμη του συστήματος υπερκαλύπτεται και γίνεται αντικείμενο εκμετάλλευσης. Είναι επίσης γνωστό ως συντριβή στοίβας.
2. Επιθέσεις υπερχείλισης buffer με βάση το σωρό
Αυτός ο τύπος υπερχείλισης στοίβας δεν είναι πολύ συνηθισμένος, καθώς είναι δύσκολο να εφαρμοστεί και να εκμεταλλευτεί. Εμφανίζεται όταν η μνήμη που εκχωρείται σε ένα πρόγραμμα ξεχειλίζει. Τον Ιανουάριο του 2021, η Google ανακάλυψε μια υπερχείλιση buffer που βασίζεται σε σωρούς ευπάθεια στο στοιχείο V8 του Chrome.
Πώς μπορείτε να αποτρέψετε τις επιθέσεις υπερχείλισης buffer;
Οι επιθέσεις υπερχείλισης buffer μπορούν να μετριαστούν χρησιμοποιώντας προστασίες χρόνου εκτέλεσης λειτουργικού συστήματος, ασφαλείς γλώσσες προγραμματισμού, τυχαιοποίηση διάταξης χώρου διευθύνσεων και διασφάλιση γενικών κατάλληλων μέτρων ασφαλείας.
1. Χρήση της Προστασίας χρόνου εκτέλεσης του λειτουργικού συστήματος
Η προστασία χρόνου εκτέλεσης είναι επίσης γνωστή ως έλεγχος ορίων πίνακα χρόνου εκτέλεσης. Αυτό διασφαλίζει ότι κάθε πρόγραμμα που εκτελείται βρίσκεται εντός του διαθέσιμου χώρου προσωρινής αποθήκευσης ή μνήμης. Και ελέγχει όλα τα δεδομένα που είναι γραμμένα στη μνήμη του συστήματος. Αυτό καθιστά δύσκολο για τους χάκερ να αντικαταστήσουν δεδομένα στο σύστημα και να εκμεταλλευτούν την ευπάθεια.
2. Χρήση Ασφαλών Γλωσσών Προγραμματισμού
Γλώσσες προγραμματισμού όπως η C και η C++ δεν εφαρμόζουν τον έλεγχο των ορίων του πίνακα χρόνου εκτέλεσης επειδή απαιτείται επιπλέον κώδικας για να ελεγχθεί κάθε πρόγραμμα που είναι γραμμένο στο σύστημα και το επιβραδύνει. Επομένως, είναι πιο επιρρεπείς σε επιθέσεις υπερχείλισης buffer. Η χρήση πιο ασφαλών γλωσσών όπως η C#, η Java και η Python είναι καλύτερη επειδή διατρέχουν μικρότερο κίνδυνο επιθέσεων υπερχείλισης buffer.
3. Χρήση τυχαιοποίησης διάταξης χώρου διευθύνσεων (ASLR)
Αυτό το μέτρο ασφαλείας εκχωρεί τυχαία τις διευθύνσεις προγραμμάτων και λειτουργιών στη μνήμη ενός συστήματος σε διαφορετικές περιοχές δεδομένων. Καθιστά δύσκολο για έναν εισβολέα να πλοηγηθεί σε ευαίσθητες λειτουργίες στη μνήμη.
4. Διασφάλιση αυστηρών πολιτικών ασφαλείας
Αυτό περιλαμβάνει την τακτική ενημέρωση του συστήματος, την επικύρωση κάθε δεδομένων που είναι εγγεγραμμένα στο σύστημα και την εκχώρηση των λιγότερων προνομίων στους χρήστες. Με τις κατάλληλες πολιτικές ασφαλείας, δεν θα πρέπει να ανησυχείτε για επίθεση υπερχείλισης buffer.
Η διατήρηση της ασφάλειας σας είναι απαραίτητη για την καταπολέμηση των επιθέσεων υπερχείλισης του buffer
Σύμφωνα με μια δημοφιλή παροιμία στην ασφάλεια, «όσο ένα σύστημα χρησιμοποιείται από ανθρώπους, υπάρχει μια ευπάθεια», κάτι που είναι αληθινό και αναπόφευκτο. Ωστόσο, μπορεί κανείς πάντα να μειώσει τις πιθανότητες επίθεσης διασφαλίζοντας ότι εφαρμόζονται τα κατάλληλα μέτρα ασφαλείας και ότι τηρούνται αυστηρά.
Να θυμάστε ότι οι χάκερ βρίσκουν συνεχώς νέους τρόπους για να εκμεταλλευτούν ευπάθειες όπως αυτή. Ως εκ τούτου, εναπόκειται σε εσάς να μείνετε μπροστά από αυτούς, παρακολουθώντας τις τελευταίες εξελίξεις στον τομέα της κυβερνοασφάλειας.