ΕΠΙΘΕΣΕΙΣ & ΠΡΟΣΤΑΣΙΑ



Σχετικά έγγραφα
ΤΕΧΝΟΛΟΓΙΑ ΔΙΚΤΥΩΝ ΕΠΙΚΟΙΝΩΝΙΩΝ

Κεφάλαιο 2.3: Προγραμματισμός. Επιστήμη ΗΥ Κεφ. 2.3 Καραμαούνας Πολύκαρπος

Μαλούτα Θεανώ Σελίδα 1

ΚΕΦΑΛΑΙΟ 5. Κύκλος Ζωής Εφαρμογών ΕΝΟΤΗΤΑ 2. Εφαρμογές Πληροφορικής. Διδακτικές ενότητες 5.1 Πρόβλημα και υπολογιστής 5.2 Ανάπτυξη εφαρμογών

Εισαγωγή στη Σχεδίαση Λογισμικού

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ

ΚΕΦΑΛΑΙΟ 10 ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ

Τεχνικές σχεδίασης προγραμμάτων, Προγραμματιστικά Περιβάλλοντα

Τείχος Προστασίας Εφαρμογών Διαδικτύου

Συγγραφή κώδικα, δοκιμασία, επαλήθευση. Γιάννης Σμαραγδάκης

ΔΙΑΧΕΙΡΙΣΗ ΔΙΚΤΥΩΝ Διαχείριση Ασφαλείας (Ι) Απειλές Ασφαλείας Συμμετρική & Μη-Συμμετρική Κρυπτογραφία

φροντιστήρια Θέματα Ανάπτυξης Εφαρμογών σε Προγραμματιστικό Περιβάλλον Γ λυκείου Προσανατολισμός Σπουδών Οικονομίας και Πληροφορικής

Ασφάλεια Υπολογιστικών Συστηµάτων

ΕΠΛ 003: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ

5 ΕΙΣΑΓΩΓΗ ΣΤΗ ΘΕΩΡΙΑ ΑΛΓΟΡΙΘΜΩΝ

Πρότυπο Αναφοράς Open Systems Interconnection (OSI) Επικοινωνίες Δεδομένων Μάθημα 5 ο

ΑΡΧΗ 2ΗΣ ΣΕΛΙΔΑΣ Γ Α... Β

ΑΕΠΠ Ερωτήσεις θεωρίας

Ηλεκτρονικό εμπόριο. HE 6 Ασφάλεια

2. Αλγόριθμοι, δομές δεδομένων και πολυπλοκότητα

Αρχιτεκτονική Λογισμικού

ΜΑΘΗΜΑ: Εργαλεία Ανάπτυξης εφαρμογών internet.

Ασφάλεια Πληροφοριακών Συστημάτων

Ασφάλεια Υπολογιστικών Συστηµάτων

Υλοποίηση ενός προγραμματιστικού κελύφους εργασίας

ΕΠΑΝΑΛΗΠΤΙΚΟ ΤΕΣΤ ΣΤΗΝ ΕΝΟΤΗΤΑ

Ασφάλεια, Διαθεσιμότητα και Ταχύτητα για τις Web Εφαρμογές

ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ ΘΕΜΑ Α

ΚΕΦΑΛΑΙΟ 1.7. Πρωτόκολλα και Αρχιτεκτονική Δικτύου

Δομή Ηλεκτρονικού υπολογιστή

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ Π ΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ Π ΕΡΙΒΑΛΛΟΝ

Κεφάλαιο 7. ΕΠΑΛ Σύμης Εφαρμογές πληροφορικής Ερωτήσεις επανάληψης

Αρχιτεκτονική του πληροφοριακού συστήµατος Cardisoft Γραµµατεία 2003 ιαχείριση Προσωπικού

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ - ΓΛΩΣΣΑ

GDPR και Τεχνικά Μέτρα Ασφάλειας Πληροφοριακών Συστημάτων

Αποµακρυσµένη κλήση διαδικασιών

Κεφάλαιο 10 ο Υποπρογράµµατα

6.2 Υπηρεσίες Διαδικτύου

ΕΡΓΑΣΙΑ. (στο μάθημα: Τεχνολογίες Εφαρμογών Διαδικτύου του Η εξαμήνου σπουδών του Τμήματος Πληροφορικής & Τηλ/νιών)

1. Τι είναι ακεραιότητα δεδομένων, με ποιους μηχανισμούς επιτυγχάνετε κ πότε θα χρησιμοποιούσατε τον καθένα εξ αυτών;

Φύλλο Κατανόησης 1.8

Προγραμματισμός ΙI (Θ)

Οδηγίες αρθρογράφησης στην ιστοσελίδα του 2ου ΓΕΛ Καματερού

53 Χρόνια ΦΡΟΝΤΙΣΤΗΡΙΑ ΜΕΣΗΣ ΕΚΠΑΙΔΕΥΣΗΣ Σ Α Β Β Α Ϊ Δ Η Μ Α Ν Ω Λ Α Ρ Α Κ Η

Σύντομη παρουσίαση των εργαλείων/εντολών telnet, ping, traceroute nslookup και nmap, zenmap

ΘΕΜΑ Α. Α2. Να αναφέρετε από τι εξαρτάται η επιλογή του καλύτερου αλγορίθμου ταξινόμησης. Μονάδες 4. Σελίδα 1 από 8

ΠΕΡΙΕΧΟΜΕΝΑ. Πρόλογος Κεφάλαιο 1 ο Αρχές Διαχείρισης πληροφορίας στον Παγκόσμιο Ιστό... 15

Ασφαλή Συστήματα Μέθοδοι ελέγχου και εξακρίβωσης ορθής λειτουργίας

Μέρος 3 ο : Βασικές Έννοιες για δυναμικές ιστοσελίδες

ΑΣΚΗΣΗ. Δημιουργία Ευρετηρίων Συλλογής Κειμένων

TEC610 Δυναμικές Εφαρμογές Διαδικτύου (ΣΤ εξάμηνο)

10 η Διάλεξη Python Βάσεις δεδομένων στη python

Γενικά Στοιχεία Ηλεκτρονικού Υπολογιστή

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΔΙΑΓΩΝΙΣΜΑ ΠΡΟΣΟΜΟΙΩΣΗΣ 23/04/2012. Α. Να απαντήσετε με Σ ή Λ στις παρακάτω προτάσεις:

SOS Ερωτήσεις Δίκτυα Υπολογιστών ΙΙ

Θέμα Α Α3.1 ΤΕΛΟΣ 1ΗΣ ΑΠΟ 9 ΣΕΛΙΔΕΣ

Δομές Ακολουθίας- Επιλογής - Επανάληψης. Δομημένος Προγραμματισμός

Η Διαδικασία Σχεδιασμού Συστημάτων

Επαναληπτικές Ασκήσεις Μαθήματος

ΑΣΦΑΛΕΙΕΣ ΣΤΑ ΔΙΚΤΥΑ

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ ΠΡΟΣΟΜΟΙΩΣΗΣ ΠΑΝΕΛΛΑΔΙΚΩΝ ΣΧΟΛΙΚΟΥ ΕΤΟΥΣ

Εργαστήριο Βάσεων Δεδομένων. Εισαγωγικό Φροντιστήριο Βασικές Έννοιες - Ανάλυση Απαιτήσεων

ΤΕΙ ΚΑΒΑΛΑΣ. Πτυχιακή εργασία ΕΙΣΑΓΩΓΗ. Μιλτιάδης Κακλαμάνης

ΕΡΓΑΣΙΑ. (στο µάθηµα: Τεχνολογίες Εφαρµογών ιαδικτύου του Η εξαµήνου σπουδών του Τµήµατος Πληροφορικής & Τηλ/νιών)

Ανάπτυξη & Σχεδίαση Λογισμικού (ΗΥ420)

Ασφάλεια Υπολογιστικών Συστημάτων

Επαναληπτικό Διαγώνισμα

ΤΕΧΝΟΛΟΓΙΕΣ & ΑΣΦΑΛΕΙΑ ΠΛΗΡΟΦΟΡΙΩΝ ΙΩΑΝΝΗ Δ. ΙΓΓΛΕΖΑΚΗ

«Δουλεύω Ηλεκτρονικά, Δουλεύω Γρήγορα και με Ασφάλεια - by e-base.gr»

Κεφ. 2 Θέματα Θεωρητικής Επιστήμης Υπολογιστών. Κοντογιάννης Βασίλειος ΠΕ19

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ Τελικό επαναληπτικό διαγώνισμα Επιμέλεια: Δρεμούσης Παντελής

Πολιτική Ασφαλείας Προσωπικών Δεδομένων GDPR General Data Protection Regulation

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ ΣΧΟΛΙΚΟΥ ΕΤΟΥΣ

Τμήμα Οικιακής Οικονομίας και Οικολογίας. Οργάνωση Υπολογιστών

Κεφάλαιο 4 ο. Ο Προσωπικός Υπολογιστής

Επεξεργασία Ερωτήσεων

ΕΙΔΗ,ΤΕΧΝΙΚΕΣ ΚΑΙ ΠΕΡΙΒΑΛΛΟΝΤΑ ΠΡΟΓΡΑΜΜΑΤΙ- ΣΜΟΥ

Διαχείριση Ασφάλειας και Εμπιστοσύνης σε Πολιτισμικά Περιβάλλοντα

FORTRAN και Αντικειμενοστραφής Προγραμματισμός

ΤΕΛΙΚΟ ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ

Σχεδιάζοντας Εφαρμογές για το Διαδίκτυο

ΕΠΙΜΟΡΦΩΣΗ ΕΚΠΑΙΔΕΥΤΙΚΩΝ ΜΕΣΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΓΙΑ ΤΑ ΝΕΑ ΑΝΑΛΥΤΙΚΑ ΠΡΟΓΡΑΜΜΑΤΑ ΝΕΟ ΑΝΑΛΥΤΙΚΟ ΠΡΟΓΡΑΜΜΑ Γ ΓΥΜΝΑΣΙΟΥ

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΜΑΡΙΑ Σ. ΖΙΩΓΑ ΚΑΘΗΓΗΤΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

Κακόβουλο Λογισμικό Ηλιάδης Ιωάννης

a. b. c. d ΤΕΧΝΟΛΟΓΙΑ ΔΙΚΤΥΩΝ ΕΠΙΚΟΙΝΩΝΙΩΝ

ΘΕΜΑ 1ο. Μονάδες 10. Β. ίνεται το παρακάτω τμήμα αλγορίθμου: Όσο Ι < 10 επανάλαβε Εμφάνισε Ι Ι Ι + 3 Τέλος_επανάληψης ΑΡΧΗ 1ΗΣ ΣΕΛΙ ΑΣ

Πρόβλημα 37 / σελίδα 207

Βάσεις Δεδομένων. Τ.Ε.Ι. Ιονίων Νήσων Σχολή Διοίκησης και Οικονομίας - Λευκάδα

Επικοινωνία:

Γ ΓΥΜΝΑΣΙΟΥ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕ ΤΗ ΓΛΩΣΣΑ MicroWorlds Pro

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

Σου προτείνω να τυπώσεις τις επόμενες τέσσερις σελίδες σε ένα φύλο διπλής όψης και να τις έχεις μαζί σου για εύκολη αναφορά.

ΟΙΚΟΝΟΜΙΚΗ ΠΡΟΣΦΟΡΑ ΣΧΕ ΙΑΣΗΣ ΚΑΙ ΚΑΤΑΣΚΕΥΗΣ web εφαρµογής - ηλεκτρονικού κατατήµατος για έξυπνα κινητά

Θέμα Α 1. 1 Τα θέματα προέρχονται από Επαναληπτικά Διαγωνίσματα από το "Στέκι των Πληροφορικών" και Π. Τσιωτάκη

Παράρτημα A: PHP, HTML φόρμες και το πρωτόκολλο HTTP.

Επιλέξτε Σωστό ή Λάθος για καθένα από τα παρακάτω:

Επεξεργασία Ερωτήσεων

ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΑ ΕΡΓΑΛΕΙΑ ΓΙΑ ΤΟ ΔΙΑΔΙΚΤΥΟ

κρυπτογραϕία Ψηφιακή ασφάλεια και ιδιωτικότητα Γεώργιος Σπαθούλας Msc Πληροφορική και υπολογιστική βιοιατρική Πανεπιστήμιο Θεσσαλίας

Transcript:

ΕΠΙΘΕΣΕΙΣ & ΠΡΟΣΤΑΣΙΑ Αρχιτεκτονική/σχεδίαση Επιθέσεις που στοχεύουν σε τρωτά σημεία του συστήματος λόγω της αρχιτεκτονικής/σχεδίασης του. Υλοποίηση Επιθέσεις που στοχεύουν σε τρωτά σημεία του συστήματος λόγω της υλοποίησής του. Λειτουργία Επιθέσεις που στοχεύουν σε κενά της λειτουργίας του συστήματος, δηλαδή όταν αυτό βρίσκεται σε χρήση. ΑΞΙΟΠΙΣΤΙΑ & ΑΣΦΑΛΕΙΑ ΛΟΓΙΣΜΙΚΟΥ

2 Ορολογία ασφάλειας Πολιτική ασφάλειας (security policy) είναι ένα σύνολο κανόνων/πρακτικών που διευθετούν το πώς ένα σύστημα παρέχει υπηρεσίες ασφάλειας για την προστασία ευαίσθητων/κρίσιμων πόρων του συστήματος. Διαθεσιμότητα (availability): ετοιμότητα παροχής υπηρεσίας μόνο σε εξουσιοδοτημένους χρήστες Εμπιστευτικότητα (confidentiality): αποτροπή ενδεχόμενης μη εξουσιοδοτημένης διάθεσης πληροφοριών Ακεραιότητα (integrity): απουσία μη εξουσιοδοτημένων μεταβολών του συστήματος

3 Ορολογία ασφάλειας Ελάττωμα ασφάλειας (security flaw) ή ευπάθεια είναι κάθε ατέλεια στο λογισμικό που ανοίγει έναν ενδεχόμενο κίνδυνο ασφάλειας (security risk). Τρωσιμότητα ή τρωτότητα (vulnerability) είναι οι συνθήκες κάτω από τις οποίες ένας επιτιθέμενος μπορεί να παραβιάσει μία (φανερή ή υπονοούμενη) πολιτική ασφάλειας. Ένα ελάττωμα ασφαλείας μπορεί να καταστήσει ένα λογισμικό τρωτό, όταν τα δεδομένα εισόδου τελικά παραβιάζουν τις συνθήκες ασφάλειας. Παράδειγμα 1: ένα πρόγραμμα με ελάττωμα ασφαλείας εγκαθίσταται με προνόμια εκτέλεσης (χρήσης πόρων) μεγαλύτερα από αυτά που έχει ο χρήστης του Παράδειγμα 2: χρησιμοποιείται μία δικτυακή υπηρεσία (π.χ. web) μέσω της οποίας φτάνουν τα δεδομένα εισόδου του λογισμικού.

4 Ορολογία ασφάλειας Ένα ελάττωμα ασφάλειας από μόνο του δεν είναι αρκετό ώστε να συντρέχουν όλες οι συνθήκες τρωσιμότητας και αντίστροφα, μπορεί να υπάρχει τρωσιμότητα που δεν οφείλεται σε ελάττωμα ασφάλειας. Υπάρχει αντισταθμιστική σχέση (tradeoff) της ασφάλειας με άλλα ποιοτικά χαρακτηριστικά του λογισμικού όπως είναι η απόδοση. Έτσι, συχνά επιλέγεται ένας συμβιβασμός στο βαθμό ασφάλειας προκειμένου να επιτευχθεί ένα καλύτερο επίπεδο απόδοσης.

5 Ορολογία ασφάλειας Ικανότητα (exploit) είναι το λογισμικό ή η τεχνική που εκμεταλλεύεται κάποια τρωσιμότητα για να παραβιάσει μία πολιτική ασφάλειας. Τα exploits προβληματίζουν τους αναλυτές ασφάλειας, αν και συχνά αυτά επινοούνται ή σχεδιάζονται με σκοπό να αποδείξουν την τρωσιμότητα. Μία απειλή (threat) εσωτερική ή εξωτερική σε συνδυασμό με μία τρωσιμότητα μπορεί να οδηγήσει σε αποτυχία ασφάλειας, δηλαδή σε παραβίαση της πολιτικής ασφάλειας. Η ύπαρξη ενός exploit είναι απειλή.

6 Ορολογία ασφάλειας Αντιμετώπιση (mitigation) είναι μία μέθοδος, τεχνική, διεργασία, εργαλείο ή βιβλιοθήκη, που μπορεί να παρεμποδίσει ή να περιορίσει exploits τα οποία στρέφονται κατά περιπτώσεων τρωσιμότητας. Ηασφάλειαυπακούειστονόμο του πιο αδύναμου κρίκου: ανεξάρτητα από το πόσο καλά έχετε ασφαλίσει ένα μέρος του συστήματός σας, οι προσπάθειές σας θα αποδειχθούν μάταιες αν υπάρχει ένα κενό ασφαλείας σε κάποιο άλλο μέρος του και βρεθείτε αντιμέτωποι με κάποιον αποφασισμένο αντίπαλο.

Αρχιτεκτονική/σχεδίαση 7 Η αποκατάσταση τρωσιμότητας που οφείλεται στην επιλεγείσα αρχιτεκτονική/σχεδίαση είναι πολύ πιο δύσκολη από άλλες περιπτώσεις τρωτοτήτων. Η αρχιτεκτονική συστήματος ορίζει τα μέρη από τα οποία αυτό αποτελείται, πώς αυτά διαρθρώνονται λογικά καιφυσικάμέσαστοσύστημακαιπώςαλληλεπιδρούν. Μία ακατάλληλη αρχιτεκτονική/σχεδίαση δεν είναι απαραίτητα προϊόν λάθους. π.χ. το telnet ως πρόγραμμα επικοινωνίας δεν είναι κατάλληλη επιλογή σε ένα δυνητικά «εχθρικό» υπολογιστικό περιβάλλον, επειδή δεν χρησιμοποιεί κρυπτογράφηση για το username/ password (το ssh είναι πιο κατάλληλο)

8 Αρχιτεκτονική/σχεδίαση Επιθέσεις ενδιάμεσου (man in the middle) Επιθέσεις συνθήκης ανταγωνισμού (race condition) Επιθέσεις επαναληπτικής εκτέλεσης (replay attacks) Επιθέσεις υποκλοπής (sniffer attacks) Επιθέσεις υφαρπαγής συνόδου (session hijacking) Επιθέσεις τερματισμού συνόδου

9 Υλοποίηση Επιθέσεις υπερχείλισης buffer (buffer overflows) Επιθέσεις πίσω πόρτας (back door attacks) Επιθέσειςλάθουςανάλυσηςεισόδου(parsing error attacks)

10 Τρωτά σημεία κώδικα C (vulnerabilities) Παραδείγματα: http://mathind.csd.auth.gr/static_analysis_test_suite/

11 Λειτουργία Επιθέσεις άρνησης υπηρεσίας (denial of service attacks) Επιθέσεις προεπιλεγμένου λογαριασμού (default account attacks) Επιθέσεις διάρρηξης συνθηματικού (password cracking)

12 Αρχιτεκτονική: επιθέσεις ενδιάμεσου Ένας ενδιάμεσος (ή ωτακουστής) παρεμβάλλεται στη δικτυακή επικοινωνία μεταξύ δύο σταθμών και στη συνέχεια «μεταμφιέζεται» και υποκαθιστά το ένα μέρος της επικοινωνίας, πιθανώς εισάγοντας επιπλέον παρεμβολές στο διάλογο. Προστασία: εκτεταμένη χρήση κρυπτογράφησης ειδικά για αυθεντικοποίηση. Βοηθά επίσης η χρήση checksums συνόδου και κοινών μυστικών όπως π.χ. cookies.

13 Αρχιτεκτονική: επιθέσεις συνθήκης ανταγωνισμού Κάποιες λειτουργίες του λογισμικού εκτελούνται σε διαδοχικά βήματα, παρόλο που θα μπορούσαμε να τις αντιληφθούμε ως ενιαίες. Ο χρόνος μέχρι την ολοκλήρωση των διαδοχικών βημάτων ανοίγει ένα παράθυρο ευκαιρίας στον επιτιθέμενο για να παγιδεύσει την εκτέλεση της εφαρμογής. Παράδειγμα: μια εφαρμογή εγγράφει σε ένα αρχείο με συγκεκριμένο όνομα. Αν ο επιτιθέμενος πριν από την εκτέλεση της εγγραφής δημιουργήσει συμβολική σύνδεση μεταξύ ενός ευαίσθητου αρχείου συστήματος και του ονόματος του προσωρινού αρχείου τότε η εφαρμογή θα εγγράψει στο ευαίσθητο αρχείο του συστήματος. Προστασία: κατανόηση της διαφοράς μεταξύ των ατομικών και των μη ατομικών λειτουργιών και αποφυγή των τελευταίων.

14 Αρχιτεκτονική: επιθέσεις επαναληπτικής εκτέλεσης Αν ο επιτιθέμενος μπορεί να υφαρπάξει την εγγραφή μιας συναλλαγής μεταξύ ενός πελάτη και ενός εξυπηρετητή, τότε μπορεί ενδεχομένως να επαναλάβει μέρος του διαλόγου με δόλο. Η αντιποίηση του πελάτη ή του εξυπηρετητή μπορεί να έχει σοβαρές συνέπειες στην ασφάλεια. Kerberos replay attack Το Kerberos είναι μια υπηρεσία αυθεντικοποίησης που στηρίζεται στο πρωτόκολλο Needham Schroeder, κατάλληλη για χρήση σε κατανεμημένα συστήματα. Προστασία: όπως και στις επιθέσεις ενδιάμεσου. Επιπλέον, η ενσωμάτωση στο διάλογο κάποιου στοιχείου που θα διαφέρει από σύνοδο σε σύνοδο, συνεπάγεται ότι η επανάληψη byte προς byte θα αποτυγχάνει πάντα.

15 Αρχιτεκτονική: επιθέσεις υποκλοπής Το πρόγραμμα που κρυφά καταγράφει όλη την κίνηση σε ένα τοπικό δίκτυο ονομάζεται υποκλοπέας (sniffer). Ως υποκλοπείς μπορεί μερικές φορές να χρησιμοποιηθούνε κάποια σύννομα εργαλεία, για να καταγράψουν οι επιτιθέμενοι usernames και passwords που μεταδίδονται χωρίς προστασία. Προστασία: καλύτερος τρόπος προστασίας σε επίπεδο δικτύου, με προσεκτική διαμόρφωση και χρήση "switched" δρομολογητών δικτύου. Σε επίπεδο εφαρμογή συνιστάται η χρήση κρυπτογράφησης.

16 Αρχιτεκτονική: επιθέσεις υφαρπαγής συνόδου Ο επιτιθέμενος υφαρπάζει ή ανακτά τον έλεγχο μιας συνόδου. Αυτό μπορεί να συμβεί σε δύο επίπεδα: το επίπεδο του δικτύου και το επίπεδο της εφαρμογής. Σε επίπεδο δικτύου προηγείται παρεμβολή και υποκλοπή. Σε επίπεδο εφαρμογής προϋποθέτει την απόκτηση IDs συνόδων. Υπάρχουν σήμερα εργαλεία που υλοποιούνε την επίθεση. 1. Ο επιτιθέμενος συνδέεται στο site της τράπεζας ως χρήστης. 2. Αποδίδεται στον επιτιθέμενο ένα session ID, έστω 2435345. 3. Ο επιτιθέμενος στέλνει π.χ. το link www.bank.com/login. php?sessionid=2435345 στο θύμα και το παγιδεύει ώστε να το επιλέξει. 4. Μόλις το link επιλεγεί από το θύμα στέλνεται στο server της τράπεζας ένα αίτημα με login.php?sessionid=2435345. 5. Η εφαρμογή αντιλαμβάνεται ότι η σύνοδος με ID 2435345 υπάρχει και είναι ενεργή και γι αυτό δε δημιουργεί νέα σύνολο. Στησυνέχειατοθύμαστέλνειστοlogin script τα συνθηματικά του και δίνεται πρόσβαση στο λογαριασμό. Προστασία: σε επίπεδο δικτύου, η χρήση κρυπτογράφησης. Σε επίπεδο εφαρμογής, πρέπει να απορρίπτεται είσοδος σε ήδη ανοικτή σύνοδο. Άλλα μέτρα προστασίας είναι η επαλήθευση της διεύθυνσης δικτύου, η μετάδοση cookies μέσω κρυπτογραφημένων καναλιών κλπ

17 Αρχιτεκτονική: επιθέσεις τερματισμού συνόδου Συμβαίνει όταν ο επιτιθέμενος καταφέρνει να περάσει ένα κίβδηλο πακέτο/μήνυμα τερματισμού συνόδου στο θύμα (π.χ. ένα πακέτο TCP reset μπορεί να τερματίσει συνόδους TCP/IP αλλά κανονικά αυτό μπορεί να αποστέλλεται μόνο από τα μέρη της επικοινωνίας). Μπορεί να αποσκοπεί στη διακοπή της επικοινωνίας ή στην παρεμβολή σε μία συναλλαγή. Προστασία: είναι δύσκολη η άμυνα μέσα από την εφαρμογή. Μια δυνατότητα είναι αυτή να επανεκκινεί τη σύνοδο μιας διακοπείσας συναλλαγής.

18 Υλοποίηση: επιθέσεις υπερχείλισης buffer Πολλές γλώσσες (π.χ. η C) επιτρέπουν/ωθούν τον προγραμματιστή να εκχωρήσει μια περιοχή ενδιάμεσης αποθήκευσης σταθερού μεγέθους για την αποθήκευση συμβολοσειρών που εισάγει ο χρήστης, όπως π.χ. το όρισμα μιας εντολής. Μια συνθήκη υπερχείλισης συμβαίνει όταν η εφαρμογή δεν ενεργεί επαρκείς ελέγχους ορίων στις συμβολοσειρές και δέχεται μεγαλύτερες από το διαθέσιμο χώρο στην περιοχή αποθήκευσης. Ένας επιτιθέμενος μπορεί έτσι να προκαλέσει υπερχείλιση της περιοχής αποθήκευσης με τρόπο ώστε το πρόγραμμα να εκτελέσει μη αυθεντικές εντολές. Προστασία: Προτιμούμε γλώσσες (όπως η Java) που από τη σχεδίαση τους δεν επιτρέπουν υπερχείλιση περιοχής αποθήκευσης. Εναλλακτικά αποφεύγουμε την ανάγνωση συμβολοσειρών απροσδιόριστου μήκους σε σταθερού μεγέθους περιοχή αποθήκευσης εκτός και αν με ασφάλεια μπορούμε να διαβάσουμε υποσυμβολοσειρά σταθερού μήκους στην περιοχή αποθήκευσης.

19 Υλοποίηση: επιθέσεις πίσω πόρτας Αυτή η επίθεση συμβαίνει τη στιγμή της συγγραφής τους προγράμματος! Κάποιοι δόλιοι προγραμματιστές γράφουνε κώδικα μέσα στην εφαρμογή που μπορεί αργότερα κατά την εκτέλεση να παρακάμψει τον έλεγχο πρόσβασης π.χ. χρησιμοποιώντας ένα «μαγικό" όνομα χρήστη. Τέτοιου τύπου σημεία πρόσβασης ονομάζονται «πίσω πόρτες». Προστασία: Να υιοθετηθεί διαδικασία διασφάλισης ποιότητας που ελέγχει όλο τον κώδικα για «πίσω πόρτες».

20 Υλοποίηση: επιθέσεις λάθους ανάλυσης εισόδου Οι εφαρμογές συχνά δέχονται είσοδο από απομακρυσμένους χρήστες χωρίς να ελέγχουν τα δεδομένα για δόλιο περιεχόμενο. Η ανάλυση των δεδομένων εισόδου ως προς την ασφάλεια είναι σημαντική για την αποτροπή επιθέσεων. Παράδειγμα είναι η συντακτική ανάλυση που εφαρμόζουν οι web servers και αγνοεί το χαρακτήρα "../" στις συμβολοσειρές εισόδου, δίνοντας έτσι τη δυνατότητα στον επιτιθέμενο να ιχνηλατήσει το σύστημα αρχείων ενδεχομένως και σε περιοχή όπου θα έπρεπε να είχε απαγορευτεί η πρόσβαση. Ακόμη και όταν γίνεται έλεγχος, αυτός μπορεί να παρακαμφθεί χρησιμοποιώντας εναλλακτικές αναπαραστάσεις (hexadecimal ή Unicode). Προστασία: Προτείνεται η χρήση έτοιμου κώδικα που έχει γραφεί και δοκιμαστεί από ειδικούς, για το σκοπό αυτό. Αν χρειαστεί να γράψετε κώδικα μόνοι σας: είναι πιο ασφαλές αν ελέγχεται (ανάμεσα στα άλλα) ότι κάθε χαρακτήρας ανήκει σε μια λίστα «ασφαλών» χαρακτήρων, παρά το να γίνεται σύγκριση με λίστα «επικίνδυνων» χαρακτήρων.

21 Λειτουργία: επιθέσεις άρνησης υπηρεσίας Μία εφαρμογή ή ένας σταθμός ή ένα δίκτυο μπορεί να καταστούν άχρηστα στους νόμιμους χρήστες μέσα από μία αλληλουχία αιτήσεων εξυπηρέτησης, ή ενδεχομένως μια υψηλής συχνότητας εισβολής δεδομένων εισόδου. Όταν αυτό συμβεί λέμε ότι ο επιτιθέμενος «αρνείται την υπηρεσία" στους νόμιμους χρήστες. Σε μεγάλης κλίμακας επιθέσεις άρνησης υπηρεσίας, μπορεί οι επιτιθέμενοι να χρησιμοποιούν ήδη παραβιασμένους σταθμούς του Internet για να μεγεθύνουν τις επιπτώσεις της επίθεσης. Προστασία: Σχεδιάζουμε ή εκχωρούμε πόρους, και σχεδιάζουμε το λογισμικό ώστε να έχει μέτριες απαιτήσεις σε πόρους του συστήματος όπως ο χώρος στο δίσκο ή ο αριθμός των ανοικτών αρχείων. Όταν σχεδιάζουμε μεγάλα συστήματα, περιλαμβάνουμε έναν επιτηρητή της χρήσης των πόρων, και πρόνοια για να απορρίπτεται ο επιπλέον φόρτος. Δεν είναι αρκετό το λογισμικό απλά να «διαμαρτύρεται» και στη συνέχεια να πεθαίνει όταν εξαντληθούν οι πόροι.

22 Λειτουργία: επιθέσεις προεπιλεγμένου λογαριασμού Πολλά λειτουργικά συστήματα και εφαρμογές διαμορφώνονται (προκαθορισμένες ρυθμίσεις), με "standard" usernames και passwords. Αυτά τα προεπιλεγμένα usernames και passwords, όπως "guest/guest" ή "field/service", δίνουν τη δυνατότητα εισόδου σε επιτιθέμενους που γνωρίζουν (ή μπορεί να μαντέψουν τις τιμές). Προστασία: Αφαίρεσε όλους τους προεπιλεγμένους λογαριασμούς (ή διασφάλισε ότι ο διαχειριστής το έχει κάνει). Ελέγχουμε πάλι μετά από την εγκατάσταση νέου λογισμικού ή νέων εκδόσεων υπάρχοντος λογισμικού. Κάποια scripts εγκατάστασης μερικές φορές επανεγκαθιστούν προεπιλεγμένους λογαριασμούς!

23 Λειτουργία: επιθέσεις διάρρηξης συνθηματικού Οι επιτιθέμενοι προσπαθούν να μαντέψουν passwords με χαμηλή ασφάλεια χρησιμοποιώντας ειδικά προγράμματα. Τα προγράμματα αυτά χρησιμοποιούν ειδικούς αλγορίθμους και λεξικά κοινών λέξεων και φράσεων και δοκιμάζουν εκατοντάδες ή χιλιάδες πιθανά usernames/passwords. Ασθενή passwords, όπως κοινά ονόματα, ημερομηνίες γέννησης, ή η λέξη "secret" ή "system", μπορούν να εντοπιστούν προγραμματιστικά σε ένα κλάσμα του δευτερολέπτου. Προστασία: Ως χρήστες, επιλέγουμε έξυπνα τα passwords. Ως προγραμματιστές, χρησιμοποιούμε εργαλεία που επιβάλουνε τη χρήση εύρωστων passwords. Το καλύτερο είναι σε χρόνο σχεδίασης να αποφεύγεται το πρόβλημα των επαναχρησιμοποιήσιμων passwords. Άλλες εναλλακτικές η χρήση βιομετρικών συσκευών και έξυπνων καρτών.

ΑΣΦΑΛΕΙΑ ΕΦΑΡΜΟΓΩΝ ΙΣΤΟΥ (WEB) Είσοδος από το χρήστη Πώς εντοπίζεται μη έγκυρη είσοδος και γιατί δεν πρέπει να εμπιστευόμαστε τυφλά ότι προέρχεται από το χρήστη. Πέρασμα δεδομένων σε υποσυστήματα Περνούν δεδομένα σε υποσυστήματα της εφαρμογής (π.χ. βάση δεδομένων), αλλά αυτά τα «δεδομένα» συμβαίνει να περιέχουν χαρακτήρες για τους οποίους το υποσύστημα κάνει κάτι διαφορετικό από το αναμενόμενο. Διαχείριση εξόδου: πρόβλημα cross-site scripting Δεδομένα που αποστέλλονται από τον εξυπηρετητή στους φυλλομετρητές των χρηστών της εφαρμογής, αν δε φιλτράρονται μπορεί να είναι επικίνδυνα. ΑΞΙΟΠΙΣΤΙΑ & ΑΣΦΑΛΕΙΑ ΛΟΓΙΣΜΙΚΟΥ

25 Είσοδος από το χρήστη Τα προγράμματα είναι κατασκευασμένα για να δέχονται δεδομένα, να τα επεξεργάζονται, και να παράγουν αποτελέσματα (έξοδο). Ο υπολογισμός που εκτελούνε τα προγράμματα εξαρτάται από την είσοδο που δέχονται. Στις περιπτώσεις που τα δεδομένα εισόδου ακολουθούν τους κανόνες που είχε στο μυαλό του ο προγραμματιστής, με μεγάλη πιθανότητα η λειτουργία του προγράμματος θα είναι σωστή. Η υλοποίηση όμως μιας λειτουργίας δεν είναι πάντα αυτή που πρέπει, λόγω προγραμματιστικών λαθών, ελλείψεων, κακής κατανόησης του αλγορίθμου κ.α. και επομένως τα δεδομένα εισόδου μπορεί να προκαλέσουν δυσλειτουργία στην εκτέλεση του προγράμματος.

26 Είσοδος από το χρήστη Λάθος δεδομένα θα οδηγήσουν το πρόγραμμα στο να πάρει λάθος αποφάσεις και η εκτέλεσή του να είναι πιθανώς καταστροφική. Για να σιγουρευτούμε ότι η εφαρμογή λειτουργεί σωστά, πρέπει να εξετάζουμε την εγκυρότητα των δεδομένων εισόδου. Αυτή η διαδικασία λέγεται επικύρωση δεδομένων εισόδου (input validation). Η επικύρωση είναι μία διαδικασία λήψης απόφασης του αν τα δεδομένα είναι αποδεκτά βάση των κανόνων της εφαρμογής.

27 Είσοδος από το χρήστη Πρέπει να αναγνωρίζουμε και να επικυρώνουμε όλα τα δεδομένα εισόδου με κατάλληλες συναρτήσεις επικύρωσης: Ελέγχουμε τα όρια τιμών. Ελέγχουμε το μήκος της εισόδου. Ελέγχουμε την ύπαρξη null bytes. Εκτελούμε την επικύρωση πριν κάνουμε οτιδήποτε άλλο. Ελέγχουμε την αυθεντικότητα και τα δικαιώματα του χρήστη από τον οποίο προέρχεται η είσοδος. Αυτοματοποιούμε κατά το δυνατόν την επικύρωση εισόδου χρησιμοποιώντας κατάλληλες βιβλιοθήκες ή γενικές τεχνικές όπως π.χ. κανονικές εκφράσεις.

28 Είσοδος από το χρήστη Προστασία από «κακά» δεδομένα εισόδου: Όταν φιλτράρουμε τα δεδομένα, ελέγχουμε χαρακτήρες ή συνδυασμούς χαρακτήρων για να αφαιρέσουμε κάτι, να ξαναγράψουμε κάτι, ή να εντοπίσουμε κάτι. Σε μια ρύθμιση ασφαλείας, θέλουμε να φιλτράρουμε αυτό που νομίζουμε ότι είναι «κακό» και να κρατήσουμε ότι πιστεύουμε ότι είναι αβλαβές. Το φιλτράρισμα μπορεί να γίνει με δύο τρόπους: Μαύρη λίστα: Αναγνώριση «κακών» δεδομένων και αφαίρεσή τους. Διαθέτουμε μια λίστα με δεδομένα που δε θεωρούνται ασφαλή. Δυστυχώς, αυτή η προσέγγιση δεν είναι ιδιαίτερα εποικοδομητική, γιατί εξαρτάται από την αντίληψη του προγραμματιστή. Λευκή λίστα: Αναγνώριση καλών δεδομένων και αφαίρεση των υπολοίπων (αρχή της εξορισμού άρνησης). Διαθέτουμε μια λίστα των δεδομένων που θεωρούμε ακίνδυνα. Κάθε φορά που διαβάζουμε κάτι που δεν υπάρχει στη λίστα, υποθέτουμε ότι μπορεί αυτό να είναι επιβλαβές, και το αφαιρούμε.

29 Πέρασμα δεδομένων σε υποσυστήματα Οι εφαρμογές ιστού περνάνε δεδομένα σε ένα ή περισσότερα υποσυστήματα (βάσεις SQL, λειτουργικά συστήματα, βιβλιοθήκες, διερμηνευτές εντολών κελύφους, έγγραφα XML και παλαιές εφαρμογές). Η επικοινωνία με τα υποσυστήματα συχνά γίνεται δημιουργώντας συμβολοσειρές (strings) με δεδομένα ή πληροφορίες ελέγχου. Τα υποσυστήματα διαθέτουν ένα διερμηνευτή (parser), που αποκωδικοποιεί τις εισερχόμενες συμβολοσειρές διαβάζοντας ένανπρος έναν τους χαρακτήρες τους και αποφασίζει το πώς θα εκτελέσει τις εργασίες που αντιστοιχούν σε αυτές.

30 Πέρασμα δεδομένων σε υποσυστήματα Για την εφαρμογή ιστού τα δεδομένα που στέλνονται στα υποσυστήματα είναι συμβολοσειρές, δηλ. ακολουθίες χαρακτήρων. Όταν τα δεδομένα περνάνε στα υποσυστήματα, τότε ένας ή περισσότεροι χαρακτήρες μπορεί εκεί να μην αντιμετωπίζονται ως κανονικοί χαρακτήρες, αλλά ως χαρακτήρες με ειδική σημασία (μεταχαρακτήρες), που επηρεάζουν την εκτέλεση μιας εργασίας. Προβλήματα ασφάλειας έχουμε όταν οι προγραμματιστές προσπαθώντας να περάσουν «καθαρά» δεδομένα στα υποσυστήματα, συμβαίνει να περνάνε δεδομένα με μετα χαρακτήρες, που εκτρέπουν ένα υποσύστημα σε μη αναμενόμενη συμπεριφορά. Όταν ένα υποσύστημα συναντήσει μετα χαρακτήρα, τότε σταματά πλέον να διαβάζει το δεδομένο. Διαβάζει εντολές ή εκτρέπεται η ανάγνωση σε ένα διαφορετικό σύνολο δεδομένων. Αν ο επιτιθέμενος περάσει πληροφορία ελέγχου σε ένα υποσύστημα, τότε μπορεί δυνητικά να το κατευθύνει σε εργασίες που δεν έχουν προβλεφθεί από τη σχεδίαση της εφαρμογής.

31 Πέρασμα δεδομένων σε υποσυστήματα Κατηγοριοποίηση επιθέσεων εισαγωγής κώδικα

32 Ένεση SQL εντολών (SQL injection) Κατά την ένεση SQL εντολών, ο επιτιθέμενος τροποποιεί ή εισάγει ερωτήματα SQL σε υποκείμενη βάση δεδομένων συνθέτοντας κατάλληλη είσοδο για μια εφαρμογή. Η επίθεση εφαρμόζεται όταν το πρόγραμμα κατασκευάζει ερωτήματα στηριζόμενο σε συμβολοσειρές του χρήστη και εφαρμόζει τα ερωτήματα σε σύστημα βάσης δεδομένων χωρίς να διαχειρίζεται κατάλληλα τους χαρακτήρες που έχουν ειδική σημασία για τη βάση δεδομένων.

33 Παράδειγμα ένεσης SQL εντολών Έστω ότι ένας χρήστης εγγράφει μόνο το πραγματικό του όνομα και το πρόγραμμα Java της εφαρμογής παίρνει το όνομα αυτό από τη φόρμα εγγραφής και το αποθηκεύει σε μία βάση δεδομένων: name = request.getparameter("name"); query="insert INTO Usr (RealName) VALUES ( " + name + " )"; Ένας καλοπροαίρετος χρήστης θα έγραφε, π.χ. Panagiotis Katsaros, και αυτό θα είχε ως συνέπεια να δημιουργηθεί το ερώτημα: INSERT INTO Usr (RealName) VALUES ( Panagiotis Katsaros ) Ένας άλλος χρήστης θα μπορούσε να γράψει, π.χ. JamesO Connor, και αυτό θα είχε ως συνέπεια να δημιουργηθεί το ερώτημα: INSERT INTO Usr (RealName) VALUES ( James O Connor ) Το ερώτημα θα προκαλούσε μήνυμα λάθους, επειδή το που εδώ είναι μέρος της συμβολοσειράς χρησιμοποιείται από την SQL ως μεταχαρακτήρας για να δηλώσει την αρχή και το τέλος της συμβολοσειράς.

34 Παράδειγμα ένεσης SQL εντολών Τώρα αρχίζει η επίθεση. Υποθέτουμε ότι έχουμε κατασκευάσει που απαιτεί οι χρήστες να κάνουν log in μέσω μιας φόρμας. username = request.getparameter("user"); password = request.getparameter("pass"); query = "SELECT * FROM Usr " + "WHERE UserName= " + username + " " + "AND Password= " + password + " "; Ο επιτιθέμενος γνωρίζει, ή μαντεύει, ότι ένας ή περισσότεροι χρήστες ονομάζονται john. Βάζει λοιπόν στο πεδίο user name john -- καιαφήνεικενότοpassword. Τελικάηεφαρμογήστέλνειστηβάσητο SELECT * FROM Usr WHERE UserName= john -- AND Password= Οι χαρακτήρες αντιμετωπίζονται από την SQL ως αρχή σχολίου και έτσι απενεργοποιείται ο έλεγχος για το password!

35 Παράδειγμα 2 ένεσης SQL εντολών Έστω ένα ASP πρόγραμμα που αναζητά πληροφορίες για έναν πελάτη με βάση ένα customer ID. Το customer ID δίνεται από το χρήστη, π.χ. σε μία URL παράμετρο και αποθηκεύεται στη μεταβλητή custid: custid = Request.QueryString("id") query = "SELECT * FROM Customer WHERE CustId=" & custid Εδώ υποτίθεται ότι το custid έχει αριθμητική τιμή (δεν υπάρχουν ) αλλά η γλώσσα VBScript του ASP δεν κάνει έλεγχο τύπων και δεν είναι η μόνη που δεν το κάνει. Έτσι ο επιτιθέμενος περιλαμβάνει στην custid όχι μόνο αριθμητικά ψηφία αλλά και χαρακτήρας και τελικά καταφέρνει να περάσει ως τιμή της custid την: 1; DELETE FROM Customer Η εφαρμογή μας τελικά συνθέτει το ερώτημα: SELECT * FROM Customer WHERE CustId=1; DELETE FROM Customer Η επίθεση πέτυχε! Όλοι οι πελάτες θα διαγραφούν από τη βάση.

36 Ένεση SQL εντολών (SQL injection) Υπάρχουν πολλοί διαφορετικοί τύποι ένεσης εντολών SQL και γενικά δεν είναι εύκολη η πρόβλεψη της δράσης του επιτιθέμενου και η σχεδίαση κατάλληλης προστασίας για όλες τις περιπτώσεις. Κατηγοριοποίηση με βάση την μέθοδο της επίθεσης Κατηγοριοποίηση με βάση τα τεχνικά χαρακτηριστικά ανάπτυξης της επίθεσης

37 Αντιμετώπιση ένεσης SQL εντολών Παραμετροποίηση ερωτήσεων: οι παράμετροι ενός SQL ερωτήματος δεν ενσωματώνονται απευθείας στο ερώτημα, αλλά αποθηκεύονται σε μεταβλητές άρρηκτα δεμένες με έναν τύπο δεδομένων και στη συνέχεια βασιζόμαστε στον έλεγχο τύπων της γλώσσας της εφαρμογής. ΑποφυγήχαρακτήρωνπουέχουνειδικήσημασίαστηνSQL. Οοδηγόςτης SQL αναφέρει όλους τους μετα χαρακτήρες και επομένως είναι εφικτό να κατασκευαστεί μια περιεκτική λίστα χαρακτήρων, που απαιτούν μετάφραση. Η τακτική εναποθετεί την ευθύνη αποφυγής μεταχαρακτήρων στον προγραμματιστή και είναι επιρρεπής σε λάθη.

38 Ένεση εντολών κελύφους (Shell command injection) Κάποιες εφαρμογές web περιέχουν προγράμματα Perl CGI. Η Perl είναι και σήμερα αρκετά διαδεδομένη γλώσσα για εφαρμογές web. Τα προγράμματα σε Perl ή παρόμοιες γλώσσες συχνά εκτελούνε εξωτερικές εντολές για να κάνουνε διάφορες εργασίες. Όταν ένα Perl πρόγραμμα πρέπει να εκτελέσει εξωτερική εντολή, σε πολλές περιπτώσεις ο διερμηνευτής της γλώσσας εκχωρεί τον έλεγχο εκτέλεσης σε ένα κέλυφος λειτουργικού συστήματος, όπως τα sh και bash του Unix. Δυστυχώς, αυτά αποδέχονται ένα αρκετά μεγάλο σύνολο μετα χαρακτήρων και αυτό ενέχει σημαντικούς κινδύνους αν δεν έχει προηγηθεί φιλτράρισμα.

39 Παράδειγμα ένεσης εντολών κελύφους ΘεωρήστεμιαιστοσελίδαμεPerlπουδίνειτηδυνατότηταναδούμε ποιοι χρήστες είναι logged σε κάποιον από τους σταθμούς Unix ενός πανεπιστημίου. Στο Unix, υπάρχει το πρόγραμμα finger που δίνει τη ζητούμενη πληροφορία αν το καλέσουμε μέσα από το πρόγραμμα Perl. $username = $form{"username"}; print finger $username ; Στην Perl, οι χαρακτήρες σημαίνουν: «εκτέλεση από το κέλυφος της εντολής ανάμεσα στα και αντικατάσταση όλων των χαρακτήρων ανάμεσα στα με το αποτέλεσμα της επεξεργασίας». Τι θα συμβεί αν ζητηθεί από το πρόγραμμα η αναζήτηση χρήστη με username qwe; rm -rf / Προσέχουμε τον μετα χαρακτήρα ;. Θα εκτελούνταν η εντολή finger qwe; rm -rf /

40 Επικοινωνία με προγράμματα C/C++ Μεγάλο μέρος του λογισμικού σήμερα είναι γραμμένο στη γλώσσα C, όπως π.χ. λειτουργικά συστήματα, εξυπηρετητές web, συστήματα βάσεων δεδομένων, παλαιά συστήματα/εφαρμογές και όλων των ειδών οι βιβλιοθήκες. Οι περισσότερες εφαρμογές ιστού επικοινωνούνε με συστήματα που έχουν γραφεί στη γλώσσα C. Ανάλογα με το ποιο λογισμικό πρόκειται μπορεί να χρειαστεί να εστιάσουμε σε διαφορετικά σύνολα μεταχαρακτήρων, αλλά όλα τα προγράμματα σε C ή C++ είναι ευαίσθητα σε ένα χαρακτήρα με ειδική σημασία: το null byte (τέλος συμβολοσειράς). Οι γλώσσες προγραμματισμού του web κωδικοποιούν τα strings με άμεση αναφορά στο μήκος και αντιμετωπίζουν το null byte ως ένα χαρακτήρα όπως όλοι οι άλλοι. Όταν περνάμε strings σε προγράμματα που έχουν γραφεί σε C, χρειάζεται προσοχή στα null bytes, για να μην πέσουμε θύματα της επίθεσης poisonous null byte.

Επίλυση προβλημάτων μετα χαρακτήρων 41 Γιαναεπιλύσουμεταπροβλήματαπουπεριγράφηκανμε τους μετα χαρακτήρες, πρέπει πάντα να κατανοούμε πώς το υποσύστημα στο επόμενο επίπεδο θα ερμηνεύσει τα δεδομένα. Αυτό δεν είναι τόσο εύκολο όσο ακούγεται. Κανόνας 1: Πάντα διαχειριζόμαστε τους μετα χαρακτήρες όταν περνάμε δεδομένα σε υποσύστημα της εφαρμογής web. Κανόνας 2: Πάντα περνάμε τα δεδομένα στα υποσυστήματα ανεξάρτητα από την πληροφορία ελέγχου της εκτέλεσης εντολών.

42 Συμβουλή Αν πρόκειται να συμπεριλάβετε στη εφαρμογή σας έτοιμο κώδικα για να γλιτώσετε κόπο, θα πρέπει να αφιερώσετε χρόνο για να εξετάσετε αν ο κώδικας αυτός περιέχει προφανή προβλήματα ασφάλειας. Δυστυχώς πολλές δημοφιλείς σήμερα έτοιμες επεκτάσεις για εφαρμογές έχουνε τέτοια προβλήματα. Συμβουλευτείτε μια βάση πληροφοριών τρωσιμότητα όπως π.χ. την SecurityFocus ή την Common Weakness Enumeration (CWE) στο http://cwe.mitre.org/.

ΜΕΣΑ ΕΠΙΤΕΥΞΗΣ ΑΞΙΟΠΙΣΤΙΑΣ (MEANS FOR DEPENDABILITY) Παρεμπόδιση Βλαβών (fault prevention) Μεθοδολογίες ανάπτυξης λογισμικού/υλικού και συστημάτων που προλαμβάνουν πιθανά ελαττωματική σχεδίαση. Αφαίρεση Βλαβών (fault removal) Κατά την ανάπτυξη ή κατά τη λειτουργία του συστήματος. Βλαβοανοχή (fault tolerance) Αποσκοπεί στην αποφυγή αποτυχιών μέσω του εντοπισμού λαθών και της ανάκαμψης (recovery) του συστήματος. Πρόβλεψη Βλαβών (fault forecasting) Λαμβάνει χώρα με εκτίμηση της συμπεριφοράς του συστήματος ως προς την εμφάνιση και την ενεργοποίηση βλαβών. ΑΞΙΟΠΙΣΤΙΑ & ΑΣΦΑΛΕΙΑ ΛΟΓΙΣΜΙΚΟΥ

2 Μέσα επίτευξης αξιοπιστίας

Παρεμπόδιση βλαβών (fault prevention) 3 Γλώσσες, φορμαλισμοί, εργαλεία standards ανάπτυξης π.χ. γλώσσες με αυστηρό σύστημα τύπων, απόκρυψη πληροφορίας, τμηματοποίηση Οργάνωση & προγραμματισμός έργου, εκτίμηση ρίσκου για την ανάπτυξη του συστήματος Ανάλυση κινδύνου (hazard analysis) κίνδυνος: υπαρκτήήδυνητικήσυνθήκηπουμπορείναοδηγήσεισε αποτυχία ανάλυση: συστηματική & επαναληπτική διαδικασία αναγνώρισης, ιεράρχησης και περιορισμού του κινδύνου (π.χ. fault tree analysis, failure mode effect & criticality analysis)

Παρεμπόδιση βλαβών (fault prevention) 4 Αρχιτεκτονική σχεδίαση Η δομή του συστήματος με τα συστατικά από τα οποία αποτελείται, τις ιδιότητες των συστατικών που είναι εξωτερικά ορατές και τις συσχετίσεις μεταξύ των συστατικών. Τα χαρακτηριστικά αξιοπιστίας των συστατικών θα πρέπει να δηλώνονται ξεκάθαρα μαζί με τις διεπαφές τους. Υλοποίηση Ασφαλής προγραμματισμός (defensive programming) Απομόνωση/διαμελισμός (segregation/partitioning) Διεργασία παρατήρησης (watchdog)

5 Αφαίρεση βλαβών (fault removal) Η αφαίρεση βλαβών εκτελείται επαναληπτικά καθ όλη τη διάρκεια του κύκλου ανάπτυξης ελέγχοντας το αποτέλεσμα της κάθε δραστηριότητας για πληρότητα, συνέπεια, συμμόρφωση σε standards και κανόνες και ιχνηλασιμότητα (traceability). Επαλήθευση Στατική ανάλυση Δυναμική ανάλυση Διάγνωση Επιδιόρθωση αποσφαλμάτωση

6 Βλαβοανοχή (fault tolerance) ταυτόχρονη ανίχνευση Ανίχνευση λαθών (error detection) επακόλουθη ανίχνευση Ανάκαμψη (recovery): μετατρέπει την κατάσταση του συστήματος που περιέχει ένα ή περισσότερα λάθη σε μία κατάσταση χωρίς λάθη Διαχείριση λάθους (error handling) rollback compensation rollforward Διαχείριση βλάβης (fault handling) διάγνωση απομόνωση (isolation) αναδιαμόρφωση (reconfiguration) επανεκκίνηση

7 Βλαβοανοχή (fault tolerance)

Πρόβλεψη βλαβών (fault forecasting) 8 Η εκτίμηση του αριθμού, της έκτασης και των συνεπειών των βλαβών σε ένα σύστημα. Στηρίζεται στην αποτίμηση της συμπεριφοράς του συστήματος ως προς την εμφάνιση και την ενεργοποίηση βλαβών: ποιοτική ή τακτική (ordinal) αποτίμηση με στόχο την αναγνώριση και την κατάταξη των καταστάσεων αποτυχίας ή των συνδυασμών γεγονότων που οδηγούν σε αποτυχίες Παράδειγμα μεθόδου: Failure Mode and Effect Analysis (FMEA) ποσοτική ή πιθανοκρατική αποτίμηση για την εκτίμηση της πιθανότητας να ικανοποιούνται κάποιες ιδιότητες, που αποκαλούμε μέτρα. Παράδειγμα μεθόδου: αλυσίδες Markov, στοχαστικά δίκτυα Petri

9 Τύποι βλαβών Έχουμε πολλούς τύπους βλαβών με διαφορετικές υποθέσεις για τα χαρακτηριστικά εμφάνισής τους. Οι βλάβες που αντιμετωπίζονται με τεχνικές παρεμπόδισης είναι άλλες από αυτές που αντιμετωπίζονται με βλαβοανοχή ή αυτές για τις οποίες μπορεί να επιδιωχθεί η αφαίρεσή τους. Παράδειγμα: Κάποιες τεχνικές επαλήθευσης είναι κατάλληλες μόνο για τον εντοπισμό κάποιων συγκεκριμένων βλαβών, ανάλογα με τη θέση τους και τους περιορισμούς που καθορίζουν το κατά πόσο είναι παρατηρήσιμες. Οι υποθέσεις για τα χαρακτηριστικά βλαβών που εξετάζονται με τεχνικές πρόβλεψης είναι γενικά πιο απαισιόδοξες/ρεαλιστικές από αυτές που θεωρούμε για τις άλλες τεχνικές (παρεμπόδιση, βλαβοανοχή και αφαίρεση).

10 Αφαίρεση βλαβών: επαλήθευση με στατική ανάλυση Πηγαίος κώδικας γράφος ροής ελέγχου (control flow graph) bb0 if (a if (a!= > NULL) b) π.χ. ανάλυση ροής δεδομένων (data flow analysis) if (a!= NULL) { b = a.get(); } else { b = NULL;} a.callmethod(); bb1 nconsec b = a.get(); = 0; b = NULL; bb3 a.callmethod(); bb2

11 Αφαίρεση βλαβών: επαλήθευση με model checking

12 Αφαίρεση βλαβών: επαλήθευση με δοκιμές (testing)

Βλαβοανοχή: τύποι βλαβών 13 Σταθερές βλάβες (solid/hard faults): η ενεργοποίησή τους αναπαράγεται π.χ. από φυσικό παράγοντα ή λόγω απρόβλεπτης αλληλεπίδρασης Λανθάνουσες βλάβες (elusive/soft faults): δεν ενεργοποιούνται σε σταθερή βάση π.χ. βλάβες από την ανάπτυξη λογισμικού, βλάβες σε μνήμες ημιαγωγών, από αλλαγές σε παραμέτρους λειτουργίας στοιχείων hardware, συνθήκες που εμφανίζονται όταν ο φόρτος του συστήματος υπερβαίνει ένα επίπεδο Οι βλάβες σε στοιχεία hardware ή σε στοιχεία που αλληλεπιδρούν με το περιβάλλον (π.χ. sensors) λέγονται επίσης εφήμερες βλάβες. Οι λανθάνουσες και οι εφήμερες βλάβες επιδέχονται παρόμοιες στρατηγικές βλαβοανοχής. Και οι δύο λέμε ότι εμφανίζονται ως ασυνεχείς βλάβες (intermittent faults). Τα λάθη που προκαλούνται από ασυνεχείς βλάβες λέγονται soft errors.

14 Στρατηγικές βλαβοανοχής

15 Στρατηγικές βλαβοανοχής

16 Βλαβοανοχή λογισμικού Η βλαβοανοχή λογισμικού εξαρτάται τόσο από τη λογική του οργάνωση (σχεδίαση), όσο και από τη φυσική του οργάνωση (π.χ. αριθμός διεργασιών στις οποίες εκτελείται ή σειριακή εκτέλεση με κλήση procedures). Η βλαβοανοχή μπορεί να εφαρμοστεί επιλεκτικά στα συστατικά εκείνα, που λόγω της πολυπλοκότητάς τους είναι πιο πιθανό να έχουν σχεδιαστικά λάθη.

17 Βλαβοανοχή λογισμικού Η βλαβοανοχή σε μία εκτελούμενη έκδοση λογισμικού υλοποιεί πρόνοιες ανίχνευσης, απομόνωσης και διαχείρισης λαθών. Όλα τα λάθη ενεργοποιούνται από προϋπάρχουσες βλάβες λόγω σχεδιαστικών παραλείψεων. Η βλαβοανοχή σε πολλές εκδόσεις του λογισμικού επιστρατεύει διαφορετικές παραλλαγές υλοποίησης με ένα δομημένο τρόπο (π.χ. ζεύγη διεργασιών σε ρόλο βασικής εφεδρικής), έτσι ώστε οι σχεδιαστικές παραλείψεις σε μία έκδοση να μην οδηγούν σε αποτυχίες.