Μετάβαση στο περιεχόμενο
EuroVPSEuroVPS
Περιοχή πελατών

Firewall ή WAF: τι βλέπει και τι σταματά το καθένα

Ένα stateful firewall διαβάζει διευθύνσεις, ports και κατάσταση σύνδεσης. Ένα WAF διαβάζει το ίδιο το αίτημα HTTP. Μια φόρμα login χρειάζεται και τα δύο, σε σειρά.

Από EuroVPS EngineeringΤο μηχανοστάσιο

6 λεπτά ανάγνωσης
Σε αυτό το άρθρο 5 ενότητες
Εν συντομία
  • Ένα stateful firewall αποφασίζει με βάση τον φάκελο: πηγή, προορισμό, port και κατάσταση σύνδεσης. Ένα bot που μαντεύει κωδικούς σε μια φόρμα login στέλνει καλοσχηματισμένα αιτήματα σε ένα port που πρέπει να είναι ανοιχτό, οπότε το firewall τα αφήνει να περάσουν.
  • Ένα WAF, ή ένας reverse proxy που κάνει δουλειά WAF, αποφασίζει με βάση το περιεχόμενο: path, μέθοδο, body, κωδικό απόκρισης και ρυθμό ανά client. Τα αποτυχημένα logins, οι απόπειρες injection και οι scrapers φαίνονται μόνο εκεί.
  • Τα δύο ταιριάζουν σε σειρά. Το firewall περιορίζει τι μπορεί καν να φτάσει στον proxy. Ο proxy εντοπίζει την κατάχρηση στη ροή των αιτημάτων και μπορεί να παραδώσει μια διεύθυνση πίσω στο packet filter, με ημερομηνία λήξης και με allow-list για τον διαχειριστή.

Τι αποφασίζει ένα stateful firewall

Ένα firewall Layer 3/4 παρακολουθεί συνδέσεις και κρίνει κάθε νέα με βάση τις διευθύνσεις της, το port της και την κατάσταση της ροής στην οποία ανήκει. Το Cisco Firepower, το OPNsense και το netfilter το κάνουν όλα καλά: ένα port που δεν ανοίγει κανένας κανόνας είναι κλειστό, μια απάντηση επιτρέπεται μόνο για σύνδεση που ξεκίνησε από μέσα, και τα ports διαχείρισης απαντούν μόνο στα εύρη που βρίσκονται στην allow-list. Η οπτική του σταματά στο επίπεδο μεταφοράς. Με TLS στη διαδρομή δεν μπορεί να δει καθόλου μέσα στο payload, εκτός αν τερματίζει τη συνεδρία, και ακόμα και σε καθαρή κίνηση δεν έχει καμία έννοια URL, header, κωδικού απόκρισης ή login.

Τι προσθέτει ένα WAF

Ένα web application firewall διαβάζει τη συναλλαγή HTTP μετά τον τερματισμό του TLS, που στην πράξη σημαίνει ότι ζει μέσα ή δίπλα στον reverse proxy. Προσθέτει τρία είδη ελέγχου που το firewall δεν μπορεί να εκφράσει. Οι κανόνες υπογραφών, όπως το ModSecurity με το OWASP Core Rule Set, ταιριάζουν injection, traversal και γνωστά exploit payloads μέσα στο αίτημα. Οι κανόνες συμπεριφοράς μετρούν ανά client και ανά path: αιτήματα το λεπτό στη διαδρομή login, αποκρίσεις αποτυχημένου login ανά διεύθυνση, ενδείξεις bot σε headers και χρονισμό. Οι θετικοί κανόνες δηλώνουν τι δέχεται ένα path, όπως ποιες μεθόδους, ποιους τύπους περιεχομένου και τι μέγεθος body, και απορρίπτουν τα υπόλοιπα.

Ένα WAF δεν υποκαθιστά το firewall. Βλέπει μόνο την κίνηση που φτάνει σε αυτό, και δεν ξέρει τίποτα για SSH, ports βάσεων δεδομένων ή το επίπεδο διαχείρισης.

Πού γίνεται ορατή η κατάχρηση του login

Ένα αποτυχημένο login είναι ένα γεγονός στην απόκριση. Η εφαρμογή απαντά σε ένα POST προς το path του login με έναν κωδικό ή μια ανακατεύθυνση που ξεχωρίζει την αποτυχία από την επιτυχία, και ο proxy το γράφει στο access log του σε κάθε απόπειρα. Το να μετρήσετε τις αποτυχίες ανά client ανά λεπτό είναι μία γραμμή awk πάνω σε αυτό το log, και είναι το σήμα που ένα packet filter δεν έχει κανέναν τρόπο να δει.

Ο έλεγχος πρέπει να κλειδώνει στον client, όχι στον λογαριασμό. Το κλείδωμα λογαριασμού από μόνο του σταματά τις απόπειρες εναντίον ενός username και κλειδώνει έξω τον κάτοχό του, ενώ το bot προχωρά στο επόμενο όνομα της λίστας του. Ένα όριο ρυθμού ανά client στη διαδρομή login κάνει αυτό που το κλείδωμα δεν μπορεί:

TERMINAL
# nginx: at most 5 login attempts a minute per client, small burst allowed
limit_req_zone $binary_remote_addr zone=login:10m rate=5r/m;

location = /login {
    limit_req zone=login burst=5 nodelay;
    proxy_pass http://app;
}

Το HAProxy εκφράζει την ίδια ιδέα με ένα stick table κλειδωμένο στη διεύθυνση πηγής, και ένα σύνολο κανόνων WAF μπορεί να μετρήσει απευθείας τον κωδικό απόκρισης του αποτυχημένου login.

Πώς ταιριάζουν τα δύο μεταξύ τους

Η σειρά είναι firewall, μετά τερματισμός TLS και ο proxy με τους κανόνες WAF του, μετά η εφαρμογή. Η ανίχνευση ανήκει στο Layer 7, γιατί εκεί βρίσκονται τα στοιχεία. Η επιβολή μπορεί να γίνει σε οποιοδήποτε από τα δύο επίπεδα. Ο proxy μπορεί να απαντήσει στον παραβάτη client με 429 ή 403 στο επόμενο αίτημά του, που αρκεί για τις περισσότερες καταχρήσεις. Για έναν client που επιμένει, ο proxy μπορεί να στείλει τη διεύθυνση στον δυναμικό πίνακα του packet filter για ορισμένο διάστημα, κάτι που κόβει και τις υπόλοιπες συνδέσεις αυτού του client και δεν κοστίζει τίποτα στο firewall ανά πακέτο.

Δύο σημεία σχεδιασμού προηγούνται της ενεργοποίησης αυτού του βρόχου ανάδρασης. Τα εύρη διαχείρισης και παρακολούθησης του διαχειριστή μπαίνουν πρώτα στην allow-list, ώστε μια δοκιμή ή ένα τυπογραφικό λάθος να μην μπορεί να κλειδώσει έξω τους ανθρώπους που λειτουργούν την πλατφόρμα. Και οι κοινόχρηστες διευθύνσεις είναι υπαρκτές: ένα NAT γραφείου ή ένα carrier-grade NAT βάζει πολλούς ανθρώπους πίσω από μία διεύθυνση, οπότε τα blocks έχουν σύντομη λήξη και τεκμηριωμένο τρόπο άρσης. Ολόκληρη η αλυσίδα δοκιμάζεται έπειτα από host εκτός δικτύου, όπως θα τη συναντούσε ένας επιτιθέμενος, πριν βασιστεί κανείς σε αυτή.

Τι δεν βλέπει κανένα από τα δύο

Έναν σωστό κωδικό. Το credential stuffing με έναν διαρρεύσαντα, έγκυρο κωδικό μοιάζει με επιτυχημένο login σε κάθε επίπεδο. Αυτό το κενό κλείνει με multi-factor authentication στον λογαριασμό και με allow-list των διαχειριστικών paths στο firewall, ώστε ένα έγκυρο credential να είναι άχρηστο από διεύθυνση που δεν είναι δική σας.

Ευθείες απαντήσεις

Ποια είναι η διαφορά ανάμεσα σε ένα firewall και ένα WAF;+

Ένα stateful firewall δουλεύει στο Layer 3/4 και αποφασίζει με βάση διευθύνσεις, ports και κατάσταση σύνδεσης. Ένα WAF δουλεύει στο Layer 7 και αποφασίζει με βάση το περιεχόμενο του αιτήματος και της απόκρισης HTTP. Μια απόπειρα login είναι γεγονός του Layer 7, οπότε μόνο το WAF ή ο proxy μπορεί να πει αν απέτυχε.

Μπορεί ένα firewall να σταματήσει το credential stuffing σε μια φόρμα login;+

Όχι από μόνο του. Οι απόπειρες είναι καλοσχηματισμένα αιτήματα σε ένα ανοιχτό port, που είναι ακριβώς αυτό που το firewall είναι φτιαγμένο να επιτρέπει. Η αποτυχία βρίσκεται στην απόκριση, ένα επίπεδο πιο πάνω. Μετρήστε την στον proxy και αφήστε τον proxy να αποφασίσει, ή τροφοδοτήστε το firewall από αυτή την απόφαση.

Χρειάζομαι WAF appliance αν ήδη τρέχω nginx ή HAProxy;+

Συχνά όχι. Το ModSecurity τρέχει ως module σε nginx και Apache, το HAProxy έχει stick tables για παρακολούθηση ρυθμού και κατάχρησης, και τα δύο καταγράφουν τους κωδικούς απόκρισης που αποκαλύπτουν την κατάχρηση του login. Ο proxy που ήδη έχετε βλέπει ό,τι θα έβλεπε ένα WAF. Το ερώτημα είναι αν έχει γράψει κανείς τους κανόνες.

Τα blocks πρέπει να γίνονται στον proxy ή στο firewall;+

Ανιχνεύστε στον proxy, γιατί εκεί είναι τα στοιχεία. Επιβάλετε στον proxy για τις περισσότερες περιπτώσεις, και κλιμακώστε στο packet filter για επίμονες πηγές, με λήξη, allow-list διαχειριστή και διαδρομή άρσης για κοινόχρηστες διευθύνσεις.

Η κατάχρηση του login είναι πρόβλημα Layer 7.

Μιλήστε με έναν μηχανικό για το πού παρακολουθείται το δικό σας.

Μιλήστε με έναν μηχανικό

Φτάσατε στο τέλος.

Βάλτε την ανάγνωση σε εφαρμογή

Τι τρέχετε;

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

Γραμμένο από τους μηχανικούς που χτίζουν και λειτουργούν την υποδομή που περιγράφει.
Μιλήστε με έναν μηχανικό
XIn

6 λεπτά ακόμη