Πώς κλείνεις την πόρτα σε όποιον δοκιμάζει όλες τις κλειδαριές

Από Κωνσταντίνος ΧαϊτάςΔημοσιεύτηκε Τελευταία ενημέρωση 7 λεπτά

Εικονογράφηση: ένας σαρωτής που δοκιμάζει πολλές πόρτες αναγνωρίζεται από τη συμπεριφορά του

Φαντάσου έναν φύλακα σε μια πολυκατοικία. Βλέπει κάποιον να δοκιμάζει το χερούλι κάθε πόρτας, μία μία. Δεν χρειάζεται να ξέρει το όνομά του. Καταλαβαίνει από αυτό που κάνει ότι κάτι δεν πάει καλά.

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

Με μια ματιά: AWS WAF

  • Οι λίστες με γνωστούς κακοποιούς είναι πάντα πίσω, γιατί ο κακοποιός αλλάζει στοιχεία εύκολα
  • Ο επισκέπτης που κάνει κακό φαίνεται από τις κινήσεις του, όχι από το ποιος είναι
  • Το σύστημα στήθηκε με τέσσερις υπηρεσίες του AWS, που εξηγούνται απλά παρακάτω
  • Το μπλοκάρισμα γίνεται μόνο του, χωρίς να χρειάζεται άνθρωπος
  • Το σύστημα έτρεχε στην πραγματική υποδομή μιας πλατφόρμας υγείας στην Αμερική

Γιατί οι λίστες με γνωστούς κακοποιούς είναι πάντα πίσω;

Μια τέτοια λίστα γράφει ποιες διευθύνσεις του διαδικτύου έκαναν ήδη κακό. Η διεύθυνση είναι σαν τον αριθμό ενός τηλεφώνου. Ο κακοποιός την αλλάζει εύκολα και φτηνά. Έτσι, όταν μπει στη λίστα, εκείνος έχει ήδη αλλάξει. Η λίστα περιγράφει πάντα το χθες.

Υπάρχει και δεύτερο πρόβλημα. Η λίστα δεν ξέρει το δικό σου site. Μια διεύθυνση που έκανε φασαρία κάπου αλλού μπορεί να μη σε αφορά καθόλου. Μια καθαρή διεύθυνση μπορεί να ψάχνει τις σελίδες σου αυτή τη στιγμή.

Ο επισκέπτης που ψάχνει αδύναμα σημεία έχει κάτι που δεν αλλάζει εύκολα: τον τρόπο που κινείται. Ζητά σελίδες που δεν υπάρχουν στο site σου. Δοκιμάζει σελίδες διαχείρισης από άλλα προγράμματα. Ζητά αρχεία με ρυθμίσεις. Ένας κανονικός επισκέπτης δεν κάνει τίποτα από αυτά.

Αυτή η διαφορά είναι ο λόγος που κοιτάζω τη συμπεριφορά. Στην πλατφόρμα υγείας στην Αμερική έστησα μόνος μου την υποδομή. Η έτοιμη προστασία δεν αρκούσε. Ήθελα ένα σύστημα που καταλαβαίνει ποιος δοκιμάζει τις πόρτες.

Πώς καταλαβαίνεις τι κάνει όποιος ψάχνει αδύναμα σημεία;

Το καταλαβαίνεις όταν κοιτάς πολλές κινήσεις μαζί και όχι μία. Αν κάποιος ζητά σε λίγα δευτερόλεπτα πολλές σελίδες που δεν υπάρχουν, δεν χρησιμοποιεί το site. Ψάχνει πόρτες ανοιχτές. Μία λανθασμένη κίνηση δεν δείχνει τίποτα. Το σύνολο των κινήσεων δείχνει τα πάντα.

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

Γι' αυτό η απόφαση δεν παίρνεται για κάθε κίνηση χωριστά. Παίρνεται για κάθε επισκέπτη και για ένα μικρό διάστημα. Το σύστημα μετράει πόσες τέτοιες κινήσεις έγιναν και τι είδους. Μόνο όταν το σύνολο περάσει ένα όριο, ο επισκέπτης θεωρείται ύποπτος.

Ο πίνακας δείχνει τη διαφορά ανάμεσα σε έναν κανονικό επισκέπτη και σε αυτόν που ψάχνει αδύναμα σημεία.

Τι κοιτάζειςΚανονικός επισκέπτηςΌποιος ψάχνει αδύναμα σημεία
Ποιες σελίδες ζητάΑυτές που υπάρχουν στο siteΠολλές που δεν υπάρχουν
Πώς περνά από σελίδα σε σελίδαΠατά τους συνδέσμουςΤρέχει μια λίστα με γνωστά αδύναμα σημεία
Πόσο συχνά ζητά σε λίγο χρόνοΣπάνιαΣυχνά
Τι κάνει όταν δεν βρει κάτιΣταματά ή αλλάζει σελίδαΔοκιμάζει αμέσως το επόμενο

Τι δεν προσέχει ο έτοιμος φύλακας του AWS;

Ο έτοιμος φύλακας του AWS μετράει πόσο γρήγορα έρχονται τα αιτήματα, όχι τι ζητούν. Αν κάποιος πηγαίνει αργά, κάτω από το όριο, περνά απαρατήρητος. Αν πολλοί κανονικοί επισκέπτες μπαίνουν από την ίδια διεύθυνση, όπως σε ένα γραφείο, μπορεί να κοπούν άδικα. Το δικό μου σύστημα καλύπτει αυτό το κενό.

Το AWS είναι η υπηρεσία της Amazon που φιλοξενεί τα συστήματα εταιρειών. Μέσα του υπάρχει το AWS WAF. Είναι ένας φύλακας στην είσοδο που βλέπει κάθε αίτημα προς το site. Έχει έναν έτοιμο κανόνα που περιορίζει όποιον στέλνει υπερβολικά πολλά αιτήματα σε λίγο χρόνο. Το όριο και το διάστημα τα ορίζεις εσύ.

Αυτός ο κανόνας δεν ξέρει αν τα αιτήματα πάνε προς σελίδες που ένας κανονικός επισκέπτης δεν θα ζητούσε ποτέ. Εκεί μπαίνει το δικό μου σύστημα. Είναι ένα επιπλέον στρώμα προστασίας και όχι αντικατάσταση του έτοιμου.

Πώς δουλεύει το σύστημα βήμα βήμα;

Το σύστημα έχει τέσσερα κομμάτια και ο καθένας κάνει μία δουλειά. Ο φύλακας (AWS WAF) βλέπει κάθε αίτημα. Ένα μικρό πρόγραμμα (Lambda) κρίνει τη συμπεριφορά. Ένα τετράδιο (DynamoDB) κρατά σημειώσεις. Ένα ξυπνητήρι (EventBridge) τα συντονίζει. Όταν κάποιος ξεπεράσει το όριο, ο φύλακας τον διώχνει.

Θα εξηγήσω τα τρία ονόματα, γιατί δεν είναι αυτονόητα. Η Lambda είναι ένα μικρό πρόγραμμα που ξυπνά μόνο όταν υπάρχει δουλειά και πληρώνεις μόνο για τον χρόνο που δούλεψε. Το DynamoDB είναι ένα ψηφιακό τετράδιο, όπου γράφεις και διαβάζεις γρήγορα τι έκανε ο καθένας. Το EventBridge είναι ένα ξυπνητήρι που ειδοποιεί τα υπόλοιπα κομμάτια την ώρα που πρέπει.

Διάλεξα αυτή τη λύση για πρακτικό λόγο. Η άμυνα πρέπει να δουλεύει πάντα. Δεν πρέπει να εξαρτάται από έναν υπολογιστή που μπορεί να σταματήσει. Και πρέπει να κοστίζει ανάλογα με τη χρήση. Στην πράξη δεν έστησα ούτε δικό μου υπολογιστή, ούτε βάση, ούτε δικό μου ρολόι.

Τα βήματα της ροής

Η ροή, με απλά λόγια, είναι αυτή:

  1. Ο φύλακας (AWS WAF) βλέπει κάθε αίτημα προς την εφαρμογή και κρατά ημερολόγιο.
  2. Τα στοιχεία του ημερολογίου φτάνουν σε ένα μικρό πρόγραμμα (Lambda), που κρίνει τι κάνει ο κάθε επισκέπτης.
  3. Το τετράδιο (DynamoDB) κρατά το ιστορικό και μια βαθμολογία για κάθε επισκέπτη, για το διάστημα που μας ενδιαφέρει.
  4. Το ξυπνητήρι (EventBridge) ειδοποιεί πότε να γίνει η κρίση και οι ενέργειες. Δεν χρειάστηκε να φτιάξω δικό μου ρολόι.
  5. Όταν κάποιος ξεπεράσει το όριο, η διεύθυνσή του μπαίνει στους κανόνες του φύλακα και η πόρτα κλείνει.
  6. Το μπλοκάρισμα γράφεται στο ημερολόγιο, ώστε να φαίνεται τι έγινε και γιατί.

Πώς αποφεύγεται να κοπεί ένας κανονικός πελάτης

Ο μεγαλύτερος κίνδυνος είναι να κλείσεις την πόρτα σε πραγματικό πελάτη. Γι' αυτό η απόφαση βασίζεται σε πολλές κινήσεις και όχι σε μία. Επίσης το μπλοκάρισμα είναι ελεγχόμενο και αναστρέψιμο. Κάποιος που μπλοκαρίστηκε μπορεί να ξεμπλοκαριστεί.

Το σύστημα δεν δούλευε μόνο του. Δούλευε μαζί με άλλα εργαλεία της υποδομής. Το GuardDuty ειδοποιεί όταν δει ύποπτη κίνηση. Το CloudTrail κρατά ίχνος για κάθε ενέργεια. Το Security Hub μαζεύει τις ειδοποιήσεις σε ένα σημείο. Το CloudWatch παρακολουθεί καθημερινά αν όλα πάνε καλά. Ο κανόνας είναι ότι κάθε εργαλείο καλύπτει ό,τι δεν βλέπει το άλλο.

Αν σε ενδιαφέρει κάτι παρόμοιο για τη δική σου υποδομή, γράψε μου. Η ευρύτερη εικόνα της υποδομής είναι στην ενότητα AWS της αρχικής σελίδας. Ένα άλλο παράδειγμα συστήματος που αποφασίζει μόνο του, αυτή τη φορά για κώδικα, είναι ο έλεγχος ενός AI που γράφει προγράμματα.

Συχνές ερωτήσεις: AWS WAF

Είναι ένα αυτόματο πρόγραμμα που δοκιμάζει μαζικά διευθύνσεις ενός site. Ψάχνει σελίδες διαχείρισης, αρχεία με ρυθμίσεις και παλιές εκδόσεις προγραμμάτων. Δεν σε στοχεύει προσωπικά. Δοκιμάζει όλες τις πόρτες και μπαίνει από όποια βρει ανοιχτή.

Βοηθά πολύ όταν κάποιος στέλνει τεράστιο όγκο αιτημάτων. Μετράει όμως ταχύτητα και όχι πρόθεση. Όποιος πηγαίνει αργά, κάτω από το όριο, δεν θα περιοριστεί. Η παρακολούθηση της συμπεριφοράς καλύπτει αυτό το κενό.

Σε κάθε αυτόματο σύστημα είναι πιθανό. Γι' αυτό η απόφαση βασίζεται σε πολλές κινήσεις και όχι σε μία. Οι γνωστές διευθύνσεις εξαιρούνται ρητά και κάθε μπλοκάρισμα μπορεί να αναιρεθεί.

Πηγές: AWS WAF

Τελευταία ενημέρωση: