Computer and Network Security · CN6003
Εβδομάδα 0: Βασικές γνώσεις (προαπαιτούμενα)
Σημειώσεις επανάληψης βασισμένες στο υλικό «Εβδομάδα 0: Βασικές γνώσεις». Ο καθηγητής ανεβάζει το αρχικό υλικό στο Moodle για περιορισμένο χρονικό διάστημα, οπότε οι σημειώσεις αυτές είναι γραμμένες ώστε να στέκονται και μόνες τους.
Για να καταλάβεις πώς παραβιάζεται ένα σύστημα, πρέπει πρώτα να ξέρεις πώς δουλεύει. Γι’ αυτό, πριν από την Ενότητα 1, κάνουμε μια γρήγορη επανάληψη σε όσα θεωρούνται γνωστά: λειτουργικά συστήματα, δίκτυα, διαδίκτυο και προγραμματισμό, μαζί με τις «μη τεχνικές» δεξιότητες που χρειάζεται ένας επαγγελματίας της ασφάλειας.
Πώς δουλεύει το μάθημα
- Διαλέξεις: κράτα σημειώσεις. Οι διαφάνειες δεν τα λένε όλα και δεν μένουν για πάντα στο Moodle.
- Εργαστήρια και πρακτικές ασκήσεις: εξάσκηση σε εργαλεία αξιολόγησης ασφάλειας, σε ένα απομονωμένο εικονικό εργαστήριο (βλ. Εβδομάδα 1).
- Moodle: το βασικό κανάλι επικοινωνίας, με διαφάνειες, σημειώσεις, εξωτερικές πηγές και ερευνητικό υλικό.
- Weekly Security Missions, case studies, role playing: μικρές εβδομαδιαίες αποστολές που μοιάζουν με πραγματικές εργασίες ενός επαγγελματία της ασφάλειας.
- Office 365: email, Office και OneDrive για την επικοινωνία και τα αρχεία.
Τα προαπαιτούμενα με μια ματιά
- Επαγγελματική ηθική: στην ασφάλεια μαθαίνεις τεχνικές επίθεσης· τις χρησιμοποιείς μόνο με άδεια και για να προστατέψεις.
- Αγγλικά: η ορολογία, η τεκμηρίωση και οι περισσότερες πηγές είναι στα αγγλικά.
- Δεξιότητες έρευνας: οι απειλές αλλάζουν συνεχώς, οπότε πρέπει να ξέρεις να βρίσκεις και να αξιολογείς πηγές.
- Λειτουργικά συστήματα, δίκτυα, διαδίκτυο, προγραμματισμός: τα «εδάφη» όπου γίνονται οι επιθέσεις και οι άμυνες.
Επαγγελματική ηθική και δεοντολογία
Κάθε επαγγελματική και ακαδημαϊκή δραστηριότητα στηρίζεται σε έναν κώδικα δεοντολογίας (code of conduct): λίγες, σταθερές αρχές που δεν διαπραγματεύονται. Στην ασφάλεια αυτό έχει ιδιαίτερο βάρος. Η ίδια γνώση που προστατεύει ένα δίκτυο μπορεί να χρησιμοποιηθεί για να το παραβιάσει.
Ένας τρόπος να το θυμάσαι: επαγγελματισμός = αξιοπιστία + φερεγγυότητα + συνέπεια + νομιμότητα. Στην πράξη σημαίνει ότι δοκιμάζεις την ασφάλεια ενός συστήματος μόνο όταν έχεις γραπτή άδεια, ότι δεν εκμεταλλεύεσαι όσα ανακαλύπτεις και ότι αναφέρεις τις αδυναμίες σε όσους μπορούν να τις διορθώσουν.
Αναζήτηση σε ακαδημαϊκές πηγές
Για εργασίες και έρευνα, οι γενικές μηχανές αναζήτησης δεν αρκούν. Χρήσιμα σημεία εκκίνησης είναι το Google Scholar, η dblp για δημοσιεύσεις Πληροφορικής και το RefSeek. Για μηχανική και Πληροφορική υπάρχει επίσης η βάση Inspec του IET.
Πριν χρησιμοποιήσεις μια πηγή, ρώτα: ποιος τη γράφει, πότε, πού δημοσιεύτηκε και πόσο συχνά αναφέρεται από άλλους. Για το τελευταίο βοηθά το δωρεάν εργαλείο Publish or Perish, που μετρά τις αναφορές (citations) ενός άρθρου ή ενός συγγραφέα.
Λειτουργικά συστήματα
Το λειτουργικό σύστημα (ΛΣ) είναι το λογισμικό που διαχειρίζεται το υλικό του υπολογιστή και δίνει στις εφαρμογές έναν ασφαλή, κοινό τρόπο να το χρησιμοποιούν. Μπορείς να το φανταστείς ως ένα στρώμα ανάμεσα σε δύο άλλα:
Χρήστης → Εφαρμογή → Λειτουργικό σύστημα → Υλικό
Ο χρήστης μιλά με την εφαρμογή, η εφαρμογή ζητά από το ΛΣ, και μόνο το ΛΣ αγγίζει το υλικό. Βασικές έννοιες:
- Πυρήνας (kernel): το κεντρικό κομμάτι του ΛΣ, που έχει πλήρη πρόσβαση στο υλικό. Οι εφαρμογές δεν μιλούν απευθείας στο υλικό· ζητούν από τον πυρήνα μέσω κλήσεων συστήματος (system calls).
- Διεργασίες (processes): προγράμματα που εκτελούνται, η καθεμία με τη δική της μνήμη. Το ΛΣ τις απομονώνει ώστε η μία να μη διαβάζει τη μνήμη της άλλης.
- Χρήστες και δικαιώματα: κάθε αρχείο και διεργασία ανήκει σε έναν χρήστη. Ο διαχειριστής (administrator ή root) μπορεί να κάνει τα πάντα, γι’ αυτό είναι ο πιο πολύτιμος στόχος για έναν επιτιθέμενο.
- Σύστημα αρχείων: πώς οργανώνονται και προστατεύονται τα αρχεία στον δίσκο.
Τα βασικά «καθήκοντα» ενός ΛΣ ομαδοποιούνται ως εξής:
| Περιοχή | Τι περιλαμβάνει |
|---|---|
| Διαχείριση διεργασιών | διεργασίες, νήματα (threads), χρονοπρογραμματισμός της CPU, συγχρονισμός, αδιέξοδα (deadlocks) |
| Διαχείριση μνήμης | κύρια μνήμη, εικονική μνήμη (virtual memory) |
| Διαχείριση αποθήκευσης | σύστημα αρχείων, δίσκοι, συσκευές εισόδου/εξόδου (I/O) |
| Προστασία και ασφάλεια | ποιος μπορεί να κάνει τι σε ποιον πόρο |
Λειτουργία χρήστη και λειτουργία πυρήνα
Ο επεξεργαστής τρέχει κώδικα σε δύο επίπεδα δικαιωμάτων:
- Λειτουργία χρήστη (user mode): εδώ τρέχουν οι εφαρμογές. Δεν μπορούν να αγγίξουν απευθείας το υλικό ή τη μνήμη άλλων διεργασιών.
- Λειτουργία πυρήνα (kernel mode): εδώ τρέχει ο πυρήνας, οι οδηγοί συσκευών (drivers) και οι βασικοί διαχειριστές του ΛΣ. Έχουν πλήρη πρόσβαση σε όλα.
Στα Windows, για παράδειγμα, η λειτουργία πυρήνα περιλαμβάνει το Hardware Abstraction Layer (HAL), που κρύβει τις διαφορές του υλικού, τους οδηγούς συσκευών και τους διαχειριστές μνήμης, διεργασιών και I/O. Ανάμεσά τους είναι και το Security Reference Monitor, που ελέγχει κάθε φορά αν μια διεργασία έχει δικαίωμα να ανοίξει ένα αρχείο ή άλλο αντικείμενο.
Γι’ αυτό ένας κακόβουλος οδηγός συσκευής είναι τόσο επικίνδυνος: τρέχει σε λειτουργία πυρήνα, άρα παρακάμπτει όλους τους ελέγχους. Πολλές επιθέσεις έχουν στόχο την κλιμάκωση δικαιωμάτων (privilege escalation): ο επιτιθέμενος ξεκινά ως απλός χρήστης και προσπαθεί να γίνει διαχειριστής ή να εκτελέσει κώδικα στον πυρήνα.
Δίκτυα
Τοπολογίες και μοντέλα
Η τοπολογία ενός δικτύου περιγράφει πώς συνδέονται οι συσκευές: σε σχήμα αστέρα (όλες σε έναν κεντρικό κόμβο), σε δακτύλιο, σε διάδρομο (bus) ή σε πλέγμα (mesh). Τα σημερινά τοπικά δίκτυα είναι κυρίως αστέρες γύρω από ένα switch.
Για να μιλάμε για την επικοινωνία, τη χωρίζουμε σε επίπεδα. Το μοντέλο OSI έχει 7 επίπεδα· το πρακτικό μοντέλο TCP/IP τα συμπτύσσει σε 4:
| Επίπεδο TCP/IP | Τι κάνει | Παραδείγματα |
|---|---|---|
| Εφαρμογής | η υπηρεσία που βλέπει ο χρήστης | HTTP, DNS, SMTP |
| Μεταφοράς | παράδοση μεταξύ εφαρμογών (θύρες) | TCP, UDP |
| Δικτύου | δρομολόγηση μεταξύ δικτύων | IP |
| Πρόσβασης δικτύου | μετάδοση μέσα στο τοπικό δίκτυο | Ethernet, Wi-Fi |
Hub, switch και διευθύνσεις MAC
Κάθε κάρτα δικτύου έχει μια διεύθυνση MAC, ένα «σειριακό αριθμό» 48 bit,
γραμμένο συνήθως ως 00:1A:2B:3C:4D:5E.
- Ένα hub στέλνει ό,τι λαμβάνει σε όλες τις θύρες του. Όποιος είναι συνδεδεμένος βλέπει όλη την κίνηση, κάτι πολύ βολικό για υποκλοπή.
- Ένα switch μαθαίνει ποια MAC βρίσκεται σε ποια θύρα και στέλνει κάθε πλαίσιο μόνο εκεί που πρέπει. Είναι πιο γρήγορο και πιο ασφαλές.
Τα VLAN (εικονικά τοπικά δίκτυα) χωρίζουν ένα φυσικό switch σε πολλά λογικά δίκτυα, π.χ. ένα για το προσωπικό και ένα για τους επισκέπτες, ώστε να μη βλέπουν το ένα την κίνηση του άλλου.
Πακέτα IP και TCP
Τα δεδομένα ταξιδεύουν σε πακέτα. Κάθε πακέτο IP έχει μια κεφαλίδα με τη διεύθυνση αποστολέα, τη διεύθυνση παραλήπτη και άλλες πληροφορίες, και μετά το περιεχόμενο.
Το TCP εγγυάται αξιόπιστη παράδοση. Πριν ανταλλάξουν δεδομένα, οι δύο άκρες κάνουν τη χειραψία τριών βημάτων: SYN → SYN-ACK → ACK. Μετά, κάθε τμήμα που φτάνει επιβεβαιώνεται με ένα ACK· ό,τι δεν επιβεβαιωθεί ξαναστέλνεται. Το UDP, αντίθετα, απλώς στέλνει: είναι γρηγορότερο αλλά χωρίς εγγυήσεις, γι’ αυτό χρησιμοποιείται π.χ. για DNS και βίντεο σε πραγματικό χρόνο.
Broadcast και ARP
Ένα πακέτο broadcast πηγαίνει σε όλες τις συσκευές του τοπικού δικτύου. Το χρησιμοποιεί, μεταξύ άλλων, το ARP: όταν ένας υπολογιστής ξέρει την IP του παραλήπτη αλλά όχι τη MAC του, ρωτά όλο το δίκτυο «ποιος έχει την IP 192.168.1.1;» και κρατά την απάντηση στον πίνακα ARP του.
Το ARP δεν ελέγχει αν η απάντηση είναι αληθινή. Αυτό εκμεταλλεύεται το ARP spoofing της Ενότητας 1: ο επιτιθέμενος απαντά ψέματα και η κίνηση περνά από αυτόν.
Διευθύνσεις IP, μάσκες και υποδίκτυα
Μια διεύθυνση IPv4 έχει 32 bit, γραμμένα ως τέσσερις αριθμοί 0–255, π.χ.
192.168.10.77. Η μάσκα λέει ποιο κομμάτι της διεύθυνσης δείχνει το
δίκτυο και ποιο τον υπολογιστή μέσα σε αυτό.
Παλιότερα οι διευθύνσεις χωρίζονταν σε σταθερές κλάσεις (A, B, C). Σήμερα
χρησιμοποιείται το CIDR: γράφεις μετά την κάθετο πόσα bit ανήκουν στο
δίκτυο. Το /24 σημαίνει μάσκα 255.255.255.0, άρα 256 διευθύνσεις, από τις
οποίες οι 254 χρησιμοποιούνται από υπολογιστές· η πρώτη είναι η διεύθυνση του
δικτύου και η τελευταία η διεύθυνση broadcast.
Παράδειγμα υποδικτύωσης: θέλουμε να χωρίσουμε το 192.168.10.0/24 σε 4 ίσα
υποδίκτυα. Δανειζόμαστε 2 bit (2² = 4), άρα κάθε υποδίκτυο είναι /26, με μάσκα
255.255.255.192 και 64 διευθύνσεις:
| Υποδίκτυο | Υπολογιστές | Broadcast |
|---|---|---|
| 192.168.10.0/26 | .1 – .62 | .63 |
| 192.168.10.64/26 | .65 – .126 | .127 |
| 192.168.10.128/26 | .129 – .190 | .191 |
| 192.168.10.192/26 | .193 – .254 | .255 |
Κάθε υποδίκτυο έχει 62 διευθύνσεις για υπολογιστές. Ο υπολογιστής 192.168.10.77
ανήκει στο δεύτερο.
DHCP, δρομολόγηση και NAT
- Το DHCP δίνει αυτόματα σε κάθε συσκευή που συνδέεται μια διεύθυνση IP, τη μάσκα, την πύλη (gateway) και τον διακομιστή DNS.
- Ο δρομολογητής (router) συνδέει διαφορετικά δίκτυα και αποφασίζει από πού θα στείλει κάθε πακέτο, με βάση τον πίνακα δρομολόγησης. Όταν υπάρχουν πολλές διαδρομές, διαλέγει αυτή με τη μικρότερη μετρική (metric), δηλαδή το μικρότερο «κόστος».
- Το NAT επιτρέπει σε πολλές συσκευές με ιδιωτικές διευθύνσεις (π.χ. 192.168.x.x) να βγαίνουν στο διαδίκτυο με μία δημόσια διεύθυνση. Η πιο συνηθισμένη μορφή του, το PAT, ξεχωρίζει τις συνδέσεις από τον αριθμό θύρας. Αυτό κάνει το router του σπιτιού σου.
Διαβάζοντας έναν πίνακα δρομολόγησης. Και ο δικός σου υπολογιστής έχει
πίνακα δρομολόγησης· στα Windows τον βλέπεις με την εντολή route print. Ένα
απλοποιημένο απόσπασμα:
| Network Destination | Netmask | Gateway | Interface | Metric |
|---|---|---|---|---|
| 0.0.0.0 | 0.0.0.0 | 10.12.14.1 | 10.12.14.201 | 25 |
| 10.12.14.0 | 255.255.255.0 | On-link | 10.12.14.201 | 281 |
| 127.0.0.0 | 255.0.0.0 | On-link | 127.0.0.1 | 306 |
- Η γραμμή
0.0.0.0 / 0.0.0.0είναι η προεπιλεγμένη διαδρομή (default route): ό,τι δεν ταιριάζει σε άλλη γραμμή πηγαίνει στην πύλη10.12.14.1, δηλαδή στο router προς το διαδίκτυο. - Η γραμμή
10.12.14.0 / 255.255.255.0λέει ότι το τοπικό δίκτυο είναι On-link: τα πακέτα πηγαίνουν απευθείας στον παραλήπτη, χωρίς router. - Το
127.0.0.0/8είναι η διεύθυνση loopback: ο υπολογιστής μιλά με τον εαυτό του.
Ένας επιτιθέμενος που αλλάζει αυτόν τον πίνακα (ή την πύλη που δίνει το DHCP) μπορεί να στείλει όλη την κίνηση μέσα από τη δική του συσκευή.
Παράδειγμα NAT/PAT. Ο υπολογιστής 192.168.1.12 ζητά μια ιστοσελίδα από τον
διακομιστή 207.1.15.22, θύρα 80:
| Βήμα | Από | Προς |
|---|---|---|
| Φεύγει από τον υπολογιστή | 192.168.1.12:7000 | 207.1.15.22:80 |
| Φεύγει από το router (μετά το NAT) | 208.190.121.12:7500 | 207.1.15.22:80 |
Το router αλλάζει τη διεύθυνση και τη θύρα αποστολέα στη δική του δημόσια
διεύθυνση και σημειώνει την αντιστοίχιση 7500 → 192.168.1.12:7000 στον
πίνακα μετάφρασης. Ο διακομιστής βλέπει μόνο το 208.190.121.12:7500. Όταν
έρθει η απάντηση, το router κοιτά τον πίνακα και την προωθεί στον σωστό
υπολογιστή.
Διαδίκτυο
Το διαδίκτυο είναι ένα «δίκτυο από δίκτυα»: χιλιάδες ανεξάρτητα δίκτυα (παρόχων, πανεπιστημίων, εταιρειών) συνδέονται μεταξύ τους με δρομολογητές.
Οι περισσότερες υπηρεσίες ακολουθούν το μοντέλο πελάτη–διακομιστή: ο πελάτης (π.χ. ο browser) στέλνει ένα αίτημα και ο διακομιστής απαντά. Κάθε υπηρεσία «ακούει» σε μια θύρα (port), ώστε ο ίδιος διακομιστής να προσφέρει πολλές υπηρεσίες:
| Θύρα | Πρωτόκολλο | Χρήση |
|---|---|---|
| 22 | SSH | ασφαλής απομακρυσμένη σύνδεση |
| 25 | SMTP | αποστολή email |
| 53 | DNS | μετάφραση ονομάτων σε διευθύνσεις |
| 80 | HTTP | ιστοσελίδες χωρίς κρυπτογράφηση |
| 443 | HTTPS | ιστοσελίδες με κρυπτογράφηση |
Άλλα γνωστά πρωτόκολλα εφαρμογής είναι το FTP για μεταφορά αρχείων και το IRC για συνομιλία. Οι εταιρείες μπορούν επίσης να φτιάχνουν δικά τους πρωτόκολλα για τις εφαρμογές τους.
Το DNS είναι ο «τηλεφωνικός κατάλογος» του διαδικτύου: μεταφράζει ένα όνομα
όπως example.com στη διεύθυνση IP του διακομιστή. Επειδή όλοι το εμπιστεύονται,
είναι συχνός στόχος επιθέσεων, όπως το DNS spoofing και η ενίσχυση μέσω DNS που
βλέπουμε στην Ενότητα 1.
Προγραμματισμός
Δεν χρειάζεται να είσαι προγραμματιστής για να δουλέψεις στην ασφάλεια, αλλά πρέπει να διαβάζεις κώδικα. Πολλές ευπάθειες, όπως το SQL injection και το XSS, είναι στην ουσία λάθη προγραμματισμού.
Το λογισμικό χωρίζεται σε δύο μεγάλες κατηγορίες:
| Κατηγορία | Τι κάνει | Παραδείγματα |
|---|---|---|
| Λογισμικό συστήματος | ελέγχει τη λειτουργία του ίδιου του υπολογιστή | ΛΣ, οδηγοί συσκευών, βοηθητικά προγράμματα· και τα εργαλεία ανάπτυξης: γλώσσες, μεταγλωττιστές, linkers, loaders |
| Λογισμικό εφαρμογών | κάνει μια συγκεκριμένη δουλειά για τον χρήστη | γενικής χρήσης (επεξεργαστής κειμένου, λογιστικό φύλλο) ή ειδικής (σύστημα κρατήσεων, τιμολόγησης) |
- Λογισμικό: ο κώδικας που γράφεις γίνεται εκτελέσιμο πρόγραμμα είτε με μεταγλώττιση (π.χ. C, Java) είτε με διερμηνέα (π.χ. Python, JavaScript).
- Αντικειμενοστραφής προγραμματισμός (OOP): ο κώδικας οργανώνεται σε κλάσεις και αντικείμενα. Ένα αντικείμενο «Αυτοκίνητο» έχει ιδιότητες (μάρκα, μοντέλο, χρώμα), μεθόδους, δηλαδή ενέργειες που μπορεί να κάνει (ξεκίνα, οδήγησε, πάρκαρε), και γεγονότα (events) στα οποία αντιδρά (όταν ξεκινήσει, όταν φρενάρει). Η ενθυλάκωση (encapsulation), δηλαδή η απόκρυψη των εσωτερικών δεδομένων, είναι και πρακτική ασφάλειας.
- Web: μια ιστοσελίδα συνδυάζει HTML (δομή), CSS (εμφάνιση) και JavaScript (συμπεριφορά) στον browser, με κώδικα και βάση δεδομένων στον διακομιστή. Κάθε σημείο όπου ο χρήστης στέλνει δεδομένα είναι πιθανή πόρτα εισόδου για επίθεση.
Ερωτήσεις αυτοαξιολόγησης
1. Γιατί ένα hub διευκολύνει την υποκλοπή περισσότερο από ένα switch;
Γιατί το hub στέλνει κάθε πλαίσιο σε όλες τις θύρες του, οπότε κάθε συνδεδεμένη συσκευή βλέπει όλη την κίνηση. Το switch στέλνει κάθε πλαίσιο μόνο στη θύρα του παραλήπτη.
2. Ποια είναι τα τρία βήματα της χειραψίας TCP;
SYN (ο πελάτης ζητά σύνδεση), SYN-ACK (ο διακομιστής αποδέχεται και επιβεβαιώνει), ACK (ο πελάτης επιβεβαιώνει). Μετά ξεκινά η ανταλλαγή δεδομένων.
3. Πόσες διευθύνσεις για υπολογιστές έχει ένα δίκτυο /26 και γιατί;
- Ένα /26 αφήνει 32 − 26 = 6 bit για υπολογιστές, άρα 2⁶ = 64 διευθύνσεις. Αφαιρούμε τη διεύθυνση του δικτύου και τη διεύθυνση broadcast.
4. Γιατί το ARP είναι ευάλωτο σε spoofing;
Γιατί δεν ελέγχει αν μια απάντηση είναι γνήσια. Όποιος απαντήσει «εγώ έχω αυτή την IP» καταγράφεται στον πίνακα ARP, ακόμη κι αν λέει ψέματα.
5. Σε ποια θύρα ακούει συνήθως το HTTPS και τι το ξεχωρίζει από το HTTP;
Στη θύρα 443. Το HTTPS κρυπτογραφεί την επικοινωνία, οπότε κάποιος που υποκλέπτει την κίνηση δεν μπορεί να τη διαβάσει.
6. Σε έναν πίνακα δρομολόγησης, τι σημαίνει η γραμμή με προορισμό 0.0.0.0 και μάσκα 0.0.0.0;
Είναι η προεπιλεγμένη διαδρομή (default route). Ταιριάζει με κάθε διεύθυνση, οπότε ό,τι δεν καλύπτεται από πιο συγκεκριμένη γραμμή στέλνεται στην πύλη (gateway) που αναγράφει, συνήθως στο router προς το διαδίκτυο.
7. Γιατί ένας κακόβουλος οδηγός συσκευής (driver) είναι πιο επικίνδυνος από μια κακόβουλη εφαρμογή;
Γιατί οι οδηγοί τρέχουν σε λειτουργία πυρήνα (kernel mode), με πλήρη πρόσβαση στο υλικό και σε όλη τη μνήμη. Μια εφαρμογή τρέχει σε λειτουργία χρήστη και περνά από τους ελέγχους του ΛΣ.