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

Δύο ισχυρισμοί, και μόνο ο ένας ξεκινά από τον επισκέπτη

Ο πρώτος ισχυρισμός αφορά ένα πρόσωπο: ένας επισκέπτης με πρόγραμμα περιήγησης και έγκυρη συνεδρία μπορεί να ανοίξει μία εφαρμογή και τίποτε άλλο. Ένα σημείο εισόδου μόνο για web απαντά καλά σε αυτόν τον ισχυρισμό, επειδή ο επισκέπτης λαμβάνει σελίδα και όχι διαδρομή. Αυτή η απάντηση αξίζει να υπάρχει, και είναι επίσης ο μόνος ισχυρισμός που καταγράφουν τα περισσότερα διαγράμματα.

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

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

Μια επεξεργασμένη υπηρεσία εξόδων και οι δύο τρόποι με τους οποίους χάνει

Πάρτε μια υπηρεσία εξόδων: μια δημόσια πύλη στο 10.60.4.10 επαληθεύει το προσωπικό και προωθεί εγκεκριμένα αιτήματα σε έναν ακροατή εφαρμογής στη θύρα 8443, και αυτή η εφαρμογή προσεγγίζει έναν ακροατή PostgreSQL στο 10.60.4.20:5432 ως ο ρόλος expenses_app. Οι εργαζόμενοι δεν προορίζονται να λαμβάνουν γενική εσωτερική πρόσβαση. Υπό κανονική λειτουργία ο σχεδιασμός παρέχει πράγματι είσοδο ειδική για την εφαρμογή χωρίς να δημοσιεύει τον ακροατή της βάσης δεδομένων πουθενά. Οι διευθύνσεις μετρούν, επειδή κάθε έλεγχος αργότερα σε αυτό το άρθρο τις ονομάζει.

Τώρα αφαιρέστε την πύλη από το αξιόπιστο σύνολο. Ποιους προορισμούς μπορεί να προσεγγίσει το 10.60.4.10 όταν η διεργασία του ανήκει σε επιτιθέμενο; Το φίλτρο URL που περιόριζε τους επισκέπτες δεν λέει τίποτε για μια σύνδεση που ανοίγει ο κεντρικός υπολογιστής της πύλης προς το υποδίκτυο της βάσης δεδομένων.

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

Χαρτογραφήστε την εξουσία που κατέχει πράγματι κάθε μέρος

Ένα συμβόλαιο γραμμένο ως προβλεπόμενες άδειες τείνει να σας επαναλαμβάνει τον σχεδιασμό. Γράψτε το ως κατεχόμενη εξουσία, τον έλεγχο που διαψεύδει την υπέρβαση και τον ιδιοκτήτη αυτού του ελέγχου, και κάθε γραμμή γίνεται ελέγξιμη. Αυτός ο πίνακας είναι πρόταση για το παραπάνω παράδειγμα, όχι ισχυρισμός προϊόντος:

ComponentAuthority it actually holdsCheck that proves the denialOwner of the check
Identity providerIssues assertions and session cookies, and holds no network path of its ownA request to the application URL without a session is redirected to the login pageIdentity team
Public gateway hostTCP reachability to whatever its routing table and egress rules permitAn egress rule drops 10.60.4.20:5432 and the probe reports the port filteredNetwork platform team
Application roleSQL privileges granted to expenses_app inside the expenses databaseA privilege query shows no ownership or create right on any other schemaApplication team
Database listenerAccepts connections only from the source ranges named in its host-based rulesA connection from an unlisted address is refused before authenticationDatabase administrator
Management pathAdministrative access reserved for patching, monitoring and recoveryA staff workstation cannot reach the administrative port or jump through itPlatform owner

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

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

Απαριθμήστε τι μπορεί να προσεγγίσει η πύλη αντί να το ισχυριστείτε

Ένας ισχυρισμός ορίου είναι τόσο καλός όσο η απαρίθμηση πίσω του. Στον κεντρικό υπολογιστή της πύλης, τρεις εντολές καλύπτουν την επιλογή διαδρομής, έναν ζωντανό έλεγχο και την πολιτική εξόδου:

ip route get 10.60.4.20
nc -zv 10.60.4.20 5432
sudo nft list chain inet filter output

Διαβάστε την έξοδο με αυτή τη σειρά. Η διαδρομή λέει αν το 10.60.4.20 επιλέγεται καν από αυτόν τον κεντρικό υπολογιστή· ο έλεγχος λέει αν ο ακροατής απαντά· η λίστα κανόνων δείχνει αν η πολιτική σταματά το πακέτο ή αν δεν υπήρχε ποτέ τίποτε στη διαδρομή του.

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

psql -h 10.60.4.20 -U expenses_app -d expenses -c 'select rolname, rolsuper, rolcreatedb from pg_roles'

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

Καταγράψτε τις αρνήσεις και μετά χρονολογήστε την αναθεώρηση

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

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

Χρονολογήστε την αναθεώρηση και ονομάστε τον ιδιοκτήτη της. Εκτελέστε ξανά την απαρίθμηση και το ερώτημα προνομίων μετά από οποιαδήποτε αλλαγή στην εικόνα της πύλης, στον πίνακα δρομολόγησης ή στον ρόλο της εφαρμογής.

Σχετικά άρθρα