Μαθαίνοντας για την ασφάλεια ενός website
Γιατί η ασφάλεια είναι μία συνεχής διαδικασία;
Καταρχάς, θεωρούμε σημαντικό να εξηγήσουμε ότι η έννοια της ασφάλειας σε μία εφαρμογή ή ένα website είναι μία συνεχής διαδικασία. Αυτό πρακτικά σημαίνει ότι δεν υπάρχει κάποιος standard οδηγός ο οποίος θα εφαρμοστεί μία φορά και θα μας λύσει όλα τα θέματα ασφαλείας μία για πάντα για όλες τις περιπτώσεις.
Το διαδίκτυο αναπτύσσεται συνεχώς και μαζί με αυτό αναπτύσσονται τα εργαλεία και οι τρόποι με τους οποίους οι κακόβουλοι χρήστες πραγματοποιούν τις επιθέσεις τους.
Το αποτέλεσμα αυτής της διαδικασίας είναι ότι το ρίσκο που έχει ένας διαχειριστής (webmaster) μίας εφαρμογής ή ενός website να πάρουν κάποιοι τρίτοι τον έλεγχο της εφαρμογής του και να αλλάξουν τη συμπεριφορά της δεν θα είναι ποτέ μηδενικό. Επομένως, η ασφάλεια έχει να κάνει με την προσπάθεια που κάνουμε να μειώσουμε αυτό το ρίσκο και να το φθάσουμε στο μικρότερο δυνατό επίπεδο.
Αυτό γίνεται εφικτό με την εφαρμογή εκείνων των μέτρων και εκείνων των ελέγχων που θα μας βοηθήσουν στο μέγιστο δυνατό βαθμό να αντιμετωπίσουμε τα ρίσκα και τις απειλές που υπάρχουν εκεί έξω.
Τα τρία πεδία της ασφάλειας
Γενικότερα, υπάρχουν τρεις τομείς τους οποίους πρέπει να λάβουμε υπόψη όταν σχεδιάζουμε την ασφάλεια ενός συστήματος.
- Τους ανθρώπους (people),
- Τις διαδικασίες (processes),
- Την τεχνολογία (technology)
Άρα λοιπόν, η ασφάλεια ενός website/application δεν εξαρτάται αποκλειστικά και μόνο από τον developer και αυτό είναι κάτι που οι περισσότεροι διαχειριστές αγνοούν.
Εάν για παράδειγμα, ενώ ένα website είναι up-to-date και ασφαλές, αλλά ο διαχειριστής του website συνδεθεί σε αυτό από έναν υπολογιστή ο οποίος όμως είναι “μολυσμένος” με έναν ιό που στέλνει τους κωδικούς πρόσβασης σε κάποιον κακόβουλο χρήστη (keylogger software), αυτό δεν είναι κάτι που μπορεί να το ελέγξει ένας web developer.
Το ίδιο ισχύει και για τον server που φιλοξενεί το website/application. Εάν το website δεν είναι self hosted από τον web developer, τότε ο πάροχος αναλαμβάνει την ευθύνη να κρατάει ενημερωμένο όλο το software που τρέχει στον server (phpmyadmin, λειτουργικό σύστημα κ.λ.π.).
Επομένως, μιλάμε για μία αλυσίδα πραγμάτων που πρέπει να συνεργάζονται και να επικοινωνούν μεταξύ τους για τη δημιουργία ενός ασφαλούς περιβάλλοντος.
Παρακάτω θα μιλήσουμε για τρία βασικά σενάρια ασφάλειας τα οποία θα μας βοηθήσουν να εξοικειωθούμε με την ασφάλεια.
Security through obscurity
Security through obscurity ή STO είναι η πεποίθηση ότι ένα οποιοδήποτε σύστημα μπορεί να είναι ασφαλές, εφόσον κανένας τρίτος δεν επιτρέπεται να μάθει οτιδήποτε έχει να κάνει με τον εσωτερικό μηχανισμό του. Γενικά, αυτού του είδους το μέτρο, μπορεί να δυσκολέψει τον hacker στην πρώτη φάση της επίθεσης , όταν συλλέγει πληροφορίες για το σύστημα (reconnaisance). Παρ’ όλα αυτά δεν θα πρέπει να είναι το μόνο μέτρο ασφάλειας, γι’ αυτό και πολλλές φορές αναφέρεται και ως “ψευτοασφάλεια”.
Least Privilege Principle
Least Privilige Principle είναι όταν μοιράζουμε έτσι τις δυνατότητες και τα δικαιώματα των χρηστών μέσα στο website ή την εφαρμογή μας ώστε ο καθένας να έχει πρόσβαση μόνο στους πόρους που πραγματικά χρειάζεται, για το χρονικό διάστημα που πραγματικά χρειάζεται, ούτε λιγότερο ούτε περισσότερο. Εάν παρουσιαστεί η ανάγκη τότε επαναπροσδιορίζουμε το επίπεδο πρόσβασης.
Layered approach
Η ιδέα του layered approach έχει να κάνει με το ότι δεν υπάρχει μία μοναδική λύση για όλα τα ζητήματα ασφάλειας. Προωθεί τη λογική του defence in depth. Αυτή η λογική έχει το πλεονέκτημα ότι εάν ένα layer αποτύχει τότε ένα άλλο layer μπορεί να σταματήσει την επίθεση ή τουλάχιστον να βοηθήσει στον εντοπισμό της και το γρήγορο recovery.
Είναι τελικά το WordPress “τρύπιο”;
Καταρχάς, ας συμφωνήσουμε ότι το WordPress είναι πολύ δημοφιλής στόχος των hacker για δύο πολύ κατανοητούς λόγους:
- Καταλαμβάνει πάνω από το 24% του διαδικτύου.
- Είναι λογισμικό ανοικτού κώδικα (open source).
Εάν μπούμε στην θέση ενός attacker, θα δούμε ότι εάν θέλουμε να πάρουμε τον έλεγχο όσων περισσότερων website μπορούμε, το λογικό είναι να βρούμε ένα κενό ασφαλείας στο πιο δημοφιλές λογισμικό που χρησιμοποιείται για την δημιουργία website.
Επίσης, καθότι open source, ο κώδικας του WordPress είναι προσβάσιμος από όλους, πράγμα που σημαίνει ότι ο attacker μπορεί να τον μελετήσει ελεύθερα, να βρει κενά ασφαλείας και να τα χρησιμοποιήσει για τους δικούς του σκοπούς. Αντίστοιχα, μπορεί να δει τί κενά ασφαλείας είχαν εμφανιστεί σε προηγούμενες εκδόσεις του WordPress χωρίς να δαπανήσει χρόνο να μελετήσει ολόκληρο τον κώδικα.
Για τους παραπάνω λόγους οι hacker ψάχνουν να βρουν μία zero day τρύπα ασφαλείας (zero day vulnerability). Μία τέτοια τρύπα ασφαλείας, σημαίνει ότι ο developer είχε “μηδέν μέρες” περιθώριο για να την κλείσει. Δεν ήξερε ότι υπήρχε εκεί εξαρχής, επομένως ένας security researcher ή ένας hacker την βρήκε και την έκανε exploit όπως λέγεται, δηλαδή τη χρησιμοποίησε για να πάρει τον έλεγχο του συστήματος. Πρακτικά, ακόμα και εάν ο κώδικας είναι αναβαθμισμένος στην τελευταία έκδοση, η τρύπα συνεχίζει υπάρχει. Φανταστείτε να βρεθεί μία τέτοια τρύπα για το WordPress από… hacker.
Η ασφάλεια στο WordPress λαμβάνεται πολύ σοβαρά υπόψιν. Όπως σε κάθε σύστημα όμως, έτσι και σε αυτό εάν δεν λάβουμε κάποια μέτρα ασφαλείας, τότε αυξάνουμε το ρίσκο η επίθεση ενός κακόβουλου να είναι επιτυχής.
WordPress Security Team
Η ομάδα ασφάλειας του WordPress αποτελείται από περίπου 25 ειδικούς (lead developers and security researchers) οι οποίοι μάλιστα συνεργάζονται και με άλλες ομάδες ασφάλειας. Κάτι τέτοιο έγινε στην περίπτωση ενός vulnerability του XML RPC API, το οποίο λύθηκε με την κοινή προσπάθεια της ομάδας του WordPress και της αντίστοιχης του Drupal. Αυτό είναι ένα από τα δυνατά πλεονεκτήματα της κοινότητας και του ανοικτού λογισμικού. Επομένως, το WordPress δεν είναι “τρύπιο”.
Πάντως μία ματιά να ρίξει κανείς στις τελευταίες εκδόσεις θα καταλάβει ότι η ασφάλεια είναι σημαντικό θέμα για την κοινότητα του WordPress.
Tips
Πάμε λοιπόν στο αγαπημένο σημείο των users. 🙂 Με ένα απλό search μπορεί να βρει κανείς δεκάδες άρθρα που δίνουν μία λίστα από security measures και οι users θεωρούν ότι εφαρμόζοντας τα, κλείνουν το κεφάλαιο ασφάλεια. Όπως είπαμε παραπάνω η ασφάλεια δεν είναι στατική, αλλά δυναμική διαδικασία και γι’ αυτό παραθέτουμε κάποια βασικά στοιχεία και όχι έναν απόλυτο οδηγό, για το πώς να κάνουμε το website μας περισσότερο ασφαλές.
- Stay Up-to-Date: Όλος ο κώδικας που τρέχει θα πρέπει να είναι ενημερωμένος και patched.
- Website monitoring service: Χρησιμοποιείστε μία υπηρεσία scanning για να προλάβετε τον attacker και να διασώσετε την φήμη του site σας. Ειδικά για το WordPress έχετε πολλές επιλογές.
- Limit Access: Πρέπει να μειώνουμε τον αριθμό των ανθρώπων που έχουν το υψηλότερο επίπεδο πρόσβασης μειώνοντας έτσι τα entry points για έναν attacker. Επίσης, πρέπει να εγκαθιστούμε μόνο ό,τι πραγματικά χρειαζόμαστε και να μην αφήνουμε μέσα στο website κώδικα που δεν τρέχει ποτέ. Αυτό ισχύει για τα themes, τα plugins και βέβαια για τα lazy (παλιά) backups.
- Functional Isolation: Κάθε website θα πρέπει να είναι σε ξεχωριστό account μέσα στον server. Αποφεύγουμε έτσι σε περίπτωση που χακαριστεί ένα website να χακαριστούν και τα υπόλοιπα που είναι κάτω από τον ίδιο λογαριασμό.
- Backups: Τα backups μεταξύ άλλων είναι και μέτρο ασφαλείας εξασφαλίζοντάς μας ότι μπορούμε να γυρίσουμε σε μία προηγούμενη, καθαρή έκδοση του website μας.
- Consider using SSH or SFTP instead of FTP: Η δημιουργία του πρωτοκόλλου FTP χρονολογείται από τις αρχές του διαδικτύου, είναι πολύ παλιά τεχνολογία που μεταφέρει τα credentials σε μορφή καθαρού κειμένου. Το SSH/SFTP κρυπτογραφεί τα δεδομένα που μεταφέρονται στο διαδίκτυο.
- Trusted Sources: Εδώ εισάγουμε έναν όρο, nulled plugin ή theme. Αυτό σημαίνει ότι ένας hacker κατεβάζει ένα plugin/theme εγκαθιστά κακόβουλο κώδικα και το διαθέτει από άλλη ανεπίσημη πηγή. Προσοχή λοιπόν.
- Security Updates and News: Γραφτείτε στο WPVulnDB.com.
Τα περισσότερα αλιεύθηκαν βεβαίως από το WordPress Codex. Άλλες πολύ καλές πηγές το Wordfence και το Stopbadware. Για να εξοικειωθείτε λίγο περισσότερο με το λεξιλόγιο της ασφάλειας μία καλή πηγή εδώ.
Να προσέχετε και να χρησιμοποιείτε πάντα δυνατούς κωδικούς*!
*Τουλάχιστον δώδεκα χαρακτήρες με γράμματα, αριθμούς και σύμβολα.