1 00:00:03,000 --> 00:00:05,040 Καλώς ήρθατε στο μάθημα τρία. 2 00:00:05,040 --> 00:00:09,120 Η μνήμη δεν είναι απλώς αποθήκευση, είναι ο χώρος που χρησιμοποιεί το σύστημά σας για να τρέξει 3 00:00:09,120 --> 00:00:12,120 εφαρμογές, να επεξεργαστεί δεδομένα και να φορτώσει προγράμματα. 4 00:00:12,920 --> 00:00:16,240 Όταν η διαχείριση μνήμης πάει στραβά, οι επιτιθέμενοι μπορούν να την κάνουν exploit, 5 00:00:16,680 --> 00:00:19,680 παίρνοντας μερικές φορές τον πλήρη έλεγχο μιας συσκευής. 6 00:00:19,760 --> 00:00:23,000 Σε αυτό το μάθημα, θα καλύψουμε τι είναι το memory corruption, 7 00:00:23,400 --> 00:00:26,520 πώς γίνεται exploited, και τις άμυνες που χρησιμοποιούν τα σύγχρονα συστήματα 8 00:00:26,520 --> 00:00:29,520 για να σταματήσουν αυτές τις επιθέσεις. 9 00:00:30,240 --> 00:00:33,800 Το Memory corruption συμβαίνει όταν ένα πρόγραμμα γράφει έξω από την ανατεθειμένη περιοχή 10 00:00:33,800 --> 00:00:37,920 μνήμης του, αντικαθιστώντας κατά λάθος άλλα δεδομένα ή οδηγίες. 11 00:00:38,800 --> 00:00:41,800 Ένα κλασικό παράδειγμα είναι το buffer overflow. 12 00:00:42,080 --> 00:00:45,040 Φανταστείτε ένα δοχείο κατασκευασμένο για να χωράει δέκα αντικείμενα. 13 00:00:45,040 --> 00:00:48,040 Αν πιέσετε 20 αντικείμενα μέσα σε αυτό, τα επιπλέον χύνονται έξω, 14 00:00:48,240 --> 00:00:51,240 πιθανώς αντικαθιστώντας κοντινές σημαντικές πληροφορίες. 15 00:00:51,600 --> 00:00:55,200 Στην πληροφορική, αυτή η υπερχείλιση μπορεί να γίνει exploit από επιτιθέμενους για να κρασάρουν (crash) 16 00:00:55,200 --> 00:00:59,040 ένα πρόγραμμα, να κάνουν hijack τη συμπεριφορά του, ή να κάνουν inject κακόβουλο κώδικα. 17 00:01:00,560 --> 00:01:01,640 Οι επιτιθέμενοι λατρεύουν 18 00:01:01,640 --> 00:01:04,640 τα ελαττώματα μνήμης επειδή μπορούν να κάνουν πολλά με ένα μικρό λάθος. 19 00:01:04,880 --> 00:01:06,880 Εδώ είναι η τυπική ροή. 20 00:01:06,880 --> 00:01:10,520 Crash του προγράμματος προκαλώντας ένα buffer overflow ή παρόμοιο σφάλμα. 21 00:01:11,120 --> 00:01:14,760 Ανακατεύθυνση της εκτέλεσης αντικαθιστώντας return addresses ή pointers. 22 00:01:15,800 --> 00:01:18,800 Inject κακόβουλου κώδικα στον παραβιασμένο χώρο μνήμης 23 00:01:19,280 --> 00:01:21,440 σχεδιάζοντας προσεκτικά το overflow τους. 24 00:01:21,440 --> 00:01:24,360 Οι επιτιθέμενοι μπορούν να πάρουν τον πλήρη έλεγχο του operating system 25 00:01:24,360 --> 00:01:27,360 ή να εγκαταστήσουν malware αόρατα. 26 00:01:28,680 --> 00:01:31,320 Τα σύγχρονα operating systems χρησιμοποιούν Data Execution 27 00:01:31,320 --> 00:01:34,720 Prevention, ή DEP για να μπλοκάρουν πολλές επιθέσεις μνήμης. 28 00:01:35,720 --> 00:01:37,880 Κανονικά, η μνήμη κρατά είτε δεδομένα 29 00:01:37,880 --> 00:01:40,880 είτε executable code, αλλά όχι και τα δύο. 30 00:01:41,040 --> 00:01:44,840 Το DEP διασφαλίζει ότι οι περιοχές που έχουν σημανθεί ως δεδομένα δεν μπορούν να εκτελεστούν, 31 00:01:45,520 --> 00:01:48,600 ακόμη και αν ένας επιτιθέμενος κάνει inject κακόβουλο κώδικα στη μνήμη. 32 00:01:48,800 --> 00:01:50,760 Το DEP τον εμποδίζει από το να τρέξει. 33 00:01:50,760 --> 00:01:53,800 Είναι σαν να βάζεις κλειδαριές ασφαλείας σε πόρτες που δεν πρέπει να ανοίγουν ποτέ. 34 00:01:56,080 --> 00:01:57,960 Μια άλλη ισχυρή άμυνα είναι το Address 35 00:01:57,960 --> 00:02:01,000 Space Layout Randomization, ή ASLR 36 00:02:02,040 --> 00:02:03,240 χωρίς ASLR. 37 00:02:03,240 --> 00:02:06,240 Μέρη της μνήμης βρίσκονται σε προβλέψιμες θέσεις. 38 00:02:06,800 --> 00:02:11,320 Με το ASLR, οι διευθύνσεις μνήμης τυχαιοποιούνται κάθε φορά που τρέχει ένα πρόγραμμα. 39 00:02:11,960 --> 00:02:12,560 Αυτό το καθιστά 40 00:02:12,560 --> 00:02:15,960 απίστευτα δύσκολο για έναν επιτιθέμενο να μαντέψει πού πρέπει να πάει το payload του. 41 00:02:16,600 --> 00:02:20,480 Ακόμα κι αν βρουν ένα ελάττωμα μνήμης, δεν μπορούν να χτυπήσουν αξιόπιστα τον σωστό στόχο. 42 00:02:22,600 --> 00:02:25,720 Τα σύγχρονα συστήματα χρησιμοποιούν πρόσθετες τεχνικές για να σταματήσουν τις επιθέσεις μνήμης. 43 00:02:26,160 --> 00:02:29,360 Stack canaries ειδικές τιμές τοποθετημένες στο stack 44 00:02:29,880 --> 00:02:33,400 αν αλλοιωθούν, το πρόγραμμα γνωρίζει ότι δέχεται επίθεση και τερματίζεται 45 00:02:34,200 --> 00:02:36,480 compiler και runtime protections. 46 00:02:36,480 --> 00:02:39,840 Πολλοί compilers προσθέτουν bounds checking για την πρόληψη των overflows. 47 00:02:40,800 --> 00:02:43,400 Memory safe programming languages. 48 00:02:43,400 --> 00:02:47,640 Γλώσσες όπως η Rust και η Go κάνουν τα bugs memory corruption πολύ πιο δύσκολο να δημιουργηθούν. 49 00:02:48,600 --> 00:02:53,000 Μαζί, αυτές οι άμυνες σχηματίζουν μια ισχυρή ασπίδα ενάντια σε επιθέσεις βάσει μνήμης. 50 00:02:53,880 --> 00:02:56,040 Έτοιμοι για ένα μικρό επαναληπτικό κουίζ; 51 00:02:56,040 --> 00:02:57,400 Ερώτηση πρώτη. 52 00:02:57,400 --> 00:02:59,200 Τι είναι ένα buffer overflow; 53 00:02:59,200 --> 00:03:02,080 Α κατέβασμα πάρα πολλών αρχείων ταυτόχρονα. 54 00:03:02,080 --> 00:03:04,680 Β αποστολή spam emails γρήγορα. 55 00:03:04,680 --> 00:03:07,640 Γ εκτέλεση πάρα πολλών εφαρμογών ταυτόχρονα. 56 00:03:07,640 --> 00:03:11,000 Δ αντικατάσταση μνήμης γράφοντας πέρα από ένα buffer boundary. 57 00:03:11,520 --> 00:03:12,600 Παύση και αποφασίστε. 58 00:03:18,160 --> 00:03:20,000 Η σωστή απάντηση είναι Δ. 59 00:03:20,000 --> 00:03:22,920 Το Buffer overflow συμβαίνει όταν ένα πρόγραμμα γράφει πέρα από τον χώρο 60 00:03:22,920 --> 00:03:25,920 που έχει διατεθεί για δεδομένα. 61 00:03:26,280 --> 00:03:29,320 Ερώτηση δύο ποιος είναι ο σκοπός του Data Execution 62 00:03:29,320 --> 00:03:31,920 Prevention (DEP) 63 00:03:31,920 --> 00:03:34,400 Α κρυπτογραφεί όλα τα αρχεία. 64 00:03:34,400 --> 00:03:37,560 Β εμποδίζει περιοχές δεδομένων της μνήμης από το να τρέξουν κώδικα. 65 00:03:37,840 --> 00:03:40,680 Γ αυξάνει την ταχύτητα λήψης. 66 00:03:40,680 --> 00:03:43,680 Δ τυχαιοποιεί τους κωδικούς πρόσβασης. 67 00:03:43,800 --> 00:03:46,800 Σκεφτείτε προσεκτικά. 68 00:03:50,160 --> 00:03:52,200 Η σωστή απάντηση είναι Β. 69 00:03:52,200 --> 00:03:56,040 Το DEP σταματά τον injected κακόβουλο κώδικα από το να εκτελεστεί. 70 00:03:57,480 --> 00:04:01,960 Τελευταία ερώτηση ποιος είναι ο κύριος στόχος του Address Space Layout Randomization; 71 00:04:02,480 --> 00:04:04,320 ASLR 72 00:04:04,320 --> 00:04:07,320 Α να επιταχύνει την CPU. 73 00:04:07,600 --> 00:04:10,600 Β να κάνει τη μνήμη πιο δύσκολη στην πρόβλεψη. 74 00:04:11,040 --> 00:04:14,040 Γ να κρύβει αρχεία συστήματος. 75 00:04:14,240 --> 00:04:17,040 Δ να εξοικονομεί διάρκεια μπαταρίας. 76 00:04:17,040 --> 00:04:20,040 Παύση για σκέψη. 77 00:04:23,480 --> 00:04:24,560 Η σωστή απάντηση είναι 78 00:04:24,560 --> 00:04:27,560 Β το ASLR τυχαιοποιεί τη διάταξη της μνήμης, 79 00:04:27,680 --> 00:04:30,720 καθιστώντας δύσκολο για τους επιτιθέμενους να προβλέψουν διευθύνσεις μνήμης. 80 00:04:32,000 --> 00:04:33,000 Μπράβο. 81 00:04:33,000 --> 00:04:36,920 Τώρα καταλαβαίνετε τι είναι το memory corruption, πώς γίνεται exploited, 82 00:04:37,120 --> 00:04:41,160 και πώς άμυνες όπως το DEP και το ASLR προστατεύουν τα σύγχρονα συστήματα. 83 00:04:41,680 --> 00:04:45,360 Αυτά τα επίπεδα ασφαλείας κάνουν μια τεράστια διαφορά στην άμυνα του πραγματικού κόσμου. 84 00:04:45,840 --> 00:04:49,280 Στη συνέχεια, θα μεταβούμε σε ένα hands-on lab όπου θα εξασκηθείτε 85 00:04:49,280 --> 00:04:53,120 στην εφαρμογή πολιτικών ασφαλείας και στο hardening του δικού σας virtual machine. 86 00:04:53,880 --> 00:04:54,800 Ας πιάσουμε δουλειά.