Καλώς ήρθατε στο μάθημα τρία.
Η μνήμη δεν είναι απλώς αποθήκευση, είναι ο χώρος που χρησιμοποιεί το σύστημά σας για να τρέξει
εφαρμογές, να επεξεργαστεί δεδομένα και να φορτώσει προγράμματα.
Όταν η διαχείριση μνήμης πάει στραβά, οι επιτιθέμενοι μπορούν να την κάνουν exploit,
παίρνοντας μερικές φορές τον πλήρη έλεγχο μιας συσκευής.
Σε αυτό το μάθημα, θα καλύψουμε τι είναι το memory corruption,
πώς γίνεται exploited, και τις άμυνες που χρησιμοποιούν τα σύγχρονα συστήματα
για να σταματήσουν αυτές τις επιθέσεις.
Το Memory corruption συμβαίνει όταν ένα πρόγραμμα γράφει έξω από την ανατεθειμένη περιοχή
μνήμης του, αντικαθιστώντας κατά λάθος άλλα δεδομένα ή οδηγίες.
Ένα κλασικό παράδειγμα είναι το buffer overflow.
Φανταστείτε ένα δοχείο κατασκευασμένο για να χωράει δέκα αντικείμενα.
Αν πιέσετε 20 αντικείμενα μέσα σε αυτό, τα επιπλέον χύνονται έξω,
πιθανώς αντικαθιστώντας κοντινές σημαντικές πληροφορίες.
Στην πληροφορική, αυτή η υπερχείλιση μπορεί να γίνει exploit από επιτιθέμενους για να κρασάρουν (crash)
ένα πρόγραμμα, να κάνουν hijack τη συμπεριφορά του, ή να κάνουν inject κακόβουλο κώδικα.
Οι επιτιθέμενοι λατρεύουν
τα ελαττώματα μνήμης επειδή μπορούν να κάνουν πολλά με ένα μικρό λάθος.
Εδώ είναι η τυπική ροή.
Crash του προγράμματος προκαλώντας ένα buffer overflow ή παρόμοιο σφάλμα.
Ανακατεύθυνση της εκτέλεσης αντικαθιστώντας return addresses ή pointers.
Inject κακόβουλου κώδικα στον παραβιασμένο χώρο μνήμης
σχεδιάζοντας προσεκτικά το overflow τους.
Οι επιτιθέμενοι μπορούν να πάρουν τον πλήρη έλεγχο του operating system
ή να εγκαταστήσουν malware αόρατα.
Τα σύγχρονα operating systems χρησιμοποιούν Data Execution
Prevention, ή DEP για να μπλοκάρουν πολλές επιθέσεις μνήμης.
Κανονικά, η μνήμη κρατά είτε δεδομένα
είτε executable code, αλλά όχι και τα δύο.
Το DEP διασφαλίζει ότι οι περιοχές που έχουν σημανθεί ως δεδομένα δεν μπορούν να εκτελεστούν,
ακόμη και αν ένας επιτιθέμενος κάνει inject κακόβουλο κώδικα στη μνήμη.
Το DEP τον εμποδίζει από το να τρέξει.
Είναι σαν να βάζεις κλειδαριές ασφαλείας σε πόρτες που δεν πρέπει να ανοίγουν ποτέ.
Μια άλλη ισχυρή άμυνα είναι το Address
Space Layout Randomization, ή ASLR
χωρίς ASLR.
Μέρη της μνήμης βρίσκονται σε προβλέψιμες θέσεις.
Με το ASLR, οι διευθύνσεις μνήμης τυχαιοποιούνται κάθε φορά που τρέχει ένα πρόγραμμα.
Αυτό το καθιστά
απίστευτα δύσκολο για έναν επιτιθέμενο να μαντέψει πού πρέπει να πάει το payload του.
Ακόμα κι αν βρουν ένα ελάττωμα μνήμης, δεν μπορούν να χτυπήσουν αξιόπιστα τον σωστό στόχο.
Τα σύγχρονα συστήματα χρησιμοποιούν πρόσθετες τεχνικές για να σταματήσουν τις επιθέσεις μνήμης.
Stack canaries ειδικές τιμές τοποθετημένες στο stack
αν αλλοιωθούν, το πρόγραμμα γνωρίζει ότι δέχεται επίθεση και τερματίζεται
compiler και runtime protections.
Πολλοί compilers προσθέτουν bounds checking για την πρόληψη των overflows.
Memory safe programming languages.
Γλώσσες όπως η Rust και η Go κάνουν τα bugs memory corruption πολύ πιο δύσκολο να δημιουργηθούν.
Μαζί, αυτές οι άμυνες σχηματίζουν μια ισχυρή ασπίδα ενάντια σε επιθέσεις βάσει μνήμης.
Έτοιμοι για ένα μικρό επαναληπτικό κουίζ;
Ερώτηση πρώτη.
Τι είναι ένα buffer overflow;
Α κατέβασμα πάρα πολλών αρχείων ταυτόχρονα.
Β αποστολή spam emails γρήγορα.
Γ εκτέλεση πάρα πολλών εφαρμογών ταυτόχρονα.
Δ αντικατάσταση μνήμης γράφοντας πέρα από ένα buffer boundary.
Παύση και αποφασίστε.
Η σωστή απάντηση είναι Δ.
Το Buffer overflow συμβαίνει όταν ένα πρόγραμμα γράφει πέρα από τον χώρο
που έχει διατεθεί για δεδομένα.
Ερώτηση δύο ποιος είναι ο σκοπός του Data Execution
Prevention (DEP)
Α κρυπτογραφεί όλα τα αρχεία.
Β εμποδίζει περιοχές δεδομένων της μνήμης από το να τρέξουν κώδικα.
Γ αυξάνει την ταχύτητα λήψης.
Δ τυχαιοποιεί τους κωδικούς πρόσβασης.
Σκεφτείτε προσεκτικά.
Η σωστή απάντηση είναι Β.
Το DEP σταματά τον injected κακόβουλο κώδικα από το να εκτελεστεί.
Τελευταία ερώτηση ποιος είναι ο κύριος στόχος του Address Space Layout Randomization;
ASLR
Α να επιταχύνει την CPU.
Β να κάνει τη μνήμη πιο δύσκολη στην πρόβλεψη.
Γ να κρύβει αρχεία συστήματος.
Δ να εξοικονομεί διάρκεια μπαταρίας.
Παύση για σκέψη.
Η σωστή απάντηση είναι
Β το ASLR τυχαιοποιεί τη διάταξη της μνήμης,
καθιστώντας δύσκολο για τους επιτιθέμενους να προβλέψουν διευθύνσεις μνήμης.
Μπράβο.
Τώρα καταλαβαίνετε τι είναι το memory corruption, πώς γίνεται exploited,
και πώς άμυνες όπως το DEP και το ASLR προστατεύουν τα σύγχρονα συστήματα.
Αυτά τα επίπεδα ασφαλείας κάνουν μια τεράστια διαφορά στην άμυνα του πραγματικού κόσμου.
Στη συνέχεια, θα μεταβούμε σε ένα hands-on lab όπου θα εξασκηθείτε
στην εφαρμογή πολιτικών ασφαλείας και στο hardening του δικού σας virtual machine.
Ας πιάσουμε δουλειά.