Ένα από τα πλεονεκτήματα του να είσαι ειδικός σε θέματα ασφάλειας είναι η συνεργασία με πολλές ομάδες. Μετά από έλεγχο, οι ειδικοί σε θέματα ασφάλειας θα έχουν την ευκαιρία να συνεργαστούν με διαχειριστές βάσεων δεδομένων και αναλυτές. Για να λειτουργεί σωστά και με ασφάλεια μια εφαρμογή, αυτές οι ομάδες προσπαθούν να αντιμετωπίσουν ευπάθειες ασφαλείας που έχουν κοινή βάση. Οι διάλογοι μεταξύ αυτών των ομάδων εγείρουν ορισμένα ζητήματα με την πραγματική IP.
Proxy και Real IP Έννοιες
Οι σημερινές διαδικτυακές εφαρμογές τρέχουν σε πολλαπλούς διακομιστές εφαρμογών και συστήματα βάσεων δεδομένων. Φανταστείτε δύο διακομιστές εφαρμογών που μοιράζονται τον ίδιο πηγαίο κώδικα. Τα αιτήματα από τον χρήστη είναι έτοιμα να ικανοποιηθούν από οποιονδήποτε από αυτούς τους διακομιστές ανάλογα με την κατάσταση φόρτωσης. Ο μηχανισμός εξισορρόπησης φορτίου, ο οποίος χειρίζεται αιτήματα HTTP μπροστά από τους διακομιστές εφαρμογών, αποφασίζει ποιο αίτημα θα προωθηθεί σε ποιο διακομιστή εφαρμογής. Αυτό θέτει ένα μεγάλο ερώτημα για τους διαχειριστές συστημάτων και τους προγραμματιστές λογισμικού του ενδιάμεσου λογισμικού: ποια είναι η πραγματική διεύθυνση IP του χρήστη;
Οι πληρεξούσιοι είναι υπεύθυνοι για τη μετάδοση δεδομένων μεταξύ δύο συστημάτων. Ο εξισορροπητής φορτίου είναι ο μηχανισμός που είναι υπεύθυνος για το διακομιστή μεσολάβησης. Με άλλα λόγια, μόνο ένα σύστημα επικοινωνεί τόσο με τον χρήστη όσο και με τον διακομιστή εφαρμογών. Όσον αφορά την κίνηση δικτύου, οι διακομιστές web A ή web B επικοινωνούν πάντα με τη διεύθυνση IP του εξισορροπητή φορτίου. Το ίδιο μπορεί να ειπωθεί για τους χρήστες. Για τους επαγγελματίες ασφαλείας, οι συσκευές εξισορρόπησης φορτίου προκαλούν σοβαρά προβλήματα στις επιθέσεις έγχυσης SQL που βασίζονται στο χρόνο. Αλλά το Η κύρια εστίαση εδώ είναι η πλαστογράφηση IP.
X-Forwarded-For και Σχέση IP
Εξετάστε τη σχέση μεταξύ του X-Forwarded-For, του προγραμματιστή και του ενδιάμεσου λογισμικού. Για παράδειγμα, ας πούμε ότι το καθήκον του προγραμματιστή μιας εφαρμογής είναι να καταγράφει όλες τις δραστηριότητες, όπως λανθασμένες προσπάθειες κωδικού πρόσβασης από χρήστες, με τις διευθύνσεις IP τους. Αρχικά, ο προγραμματιστής θα καθορίσει τη διεύθυνση IP του χρήστη όταν ικανοποιηθεί το αίτημα HTTP με το ευκαιρία που παρέχεται από τη γλώσσα προγραμματισμού που χρησιμοποιεί και θα προσπαθήσει να συνεχίσει να χρησιμοποιεί αυτά τα δεδομένα στο εφαρμογή.
Δεδομένου ότι η διεύθυνση IP του θα διορθωθεί κατά τη διάρκεια της διαδικασίας ανάπτυξης, θα βλέπει πάντα την ίδια διεύθυνση κατά τη διάρκεια των δοκιμών, επειδή γενικά, οι υπολογιστές χρηστών σε τα εταιρικά δίκτυα λειτουργούν με στατική IP μέσω διεύθυνσης MAC. Η μονάδα θα εκτελέσει ορισμένες δοκιμές αποδοχής. Ωστόσο, θα υπάρξουν προβλήματα με αυτά. Η μονάδα δοκιμής θα προωθήσει αυτό το πρόβλημα στον προγραμματιστή λογισμικού.
Σε αυτό το στάδιο, ο προγραμματιστής μπορεί να γράψει έναν ελεγκτή στο περιβάλλον ανάπτυξης και να δει το αίτημα HTTP να μεταδίδεται στην εφαρμογή σε ακατέργαστη μορφή, καθώς όλοι έχουν την ίδια διεύθυνση IP. Αυτό θα έχει ως αποτέλεσμα τη συνεργασία με το X-Forwarded-For.
Πληροφορίες κεφαλίδας που ονομάζεται X-Forwarded-For θα σταλεί στον διακομιστή της εφαρμογής. Σε αυτό το στάδιο, ο προγραμματιστής λογισμικού θα δει τη διεύθυνση IP του, την οποία ελέγχει με το ipconfig, όχι το πρόγραμμα εξισορρόπησης φορτίου που βλέπει στα αρχεία καταγραφής. Πολλοί προγραμματιστές πιστεύουν ότι μπορούν να λύσουν αυτό το πρόβλημα με ένα μπλοκ κώδικα όπως αυτό:
λειτουργίαgetIPaddress() {
$ipKeys = πίνακας(
"HTTP_CLIENT_IP",
'HTTP_X_FORWARDED_FOR',
"HTTP_X_FORWARDED",
"HTTP_X_CLUSTER_CLIENT_IP",
"HTTP_FORWARDED_FOR", "HTTP_FORWARDED",
'REMOTE_ADDR'
);
για κάθε ($ipKeys όπως και $key) {
αν (κλειδί_πίνακας_υπάρχει($key, $_SERVER) αληθής) {
για κάθε (εκραγεί(',', $_SERVER[$key]) όπως και $ip) {
$ip = trim($ip);
αν (validate_ip($ip)) {
ΕΠΙΣΤΡΟΦΗ $ip;
}
}
}
}
ΕΠΙΣΤΡΟΦΗisset($_SERVER['REMOTE_ADDR'])? $_SERVER['REMOTE_ADDR']: ψευδής;
}
Αυτό δεν θα είναι αρκετό—ο προγραμματιστής πρέπει να ελέγξει εάν η εισερχόμενη τιμή είναι έγκυρη διεύθυνση IP.
Όλα τα παραπάνω ανήκαν στο τμήμα που χειριζόταν ο προγραμματιστής. Αλλά για να λειτουργεί σωστά και με ασφάλεια μια εφαρμογή, οι ομάδες-εργάζονται μαζί θεωρητικά, αλλά μέσα πραγματικότητα, σε ακραία σημεία μεταξύ τους—προσπαθήστε να αντιμετωπίσετε τα τρωτά σημεία ασφαλείας που έχουν α κοινή βάση. Τώρα προσπαθήστε να εξετάσετε το ζήτημα από την οπτική γωνία του ατόμου που είναι υπεύθυνο για τη διαμόρφωση του εξισορροπητή φορτίου.
Οι διαχειριστές συστήματος μπορεί να πιστεύουν ότι οι προγραμματιστές καταγράφουν πληροφορίες όπως το X-Forwarded-For επειδή τα δεδομένα στο αίτημα HTTP δεν είναι αξιόπιστα. Αυτοί οι διαχειριστές συχνά μεταδίδουν το X-Forwarded-For. Ωστόσο, μεταδίδουν επίσης τη διεύθυνση πηγής TCP του συστήματος που έστειλε την αίτηση ως δεύτερη τιμή κεφαλίδας. Η δομή True-Client-IP είναι ένα καλό παράδειγμα αυτού.
Όταν συνδυάζετε όλα αυτά τα πράγματα μαζί, δύο διαφορετικές μονάδες ακολουθούν διαφορετικές διαδρομές για το ίδιο πρόβλημα, γνωστό ως πλαστογράφηση IP πελάτη. Το αποτέλεσμα είναι ένα κρίσιμο ζήτημα όπου δεν θα λειτουργήσει καμία καταγραφή IP και εξουσιοδότηση που βασίζεται σε IP.
Πώς ανιχνεύεται η πλαστογράφηση IP πελάτη σε δοκιμές διείσδυσης;
Οι περισσότεροι ελεγκτές διείσδυσης χρησιμοποιούν τον Firefox για τους ελέγχους ασφαλείας τους. Ρυθμίζουν τον Firefox με ένα απλό πρόσθετο, το X-Forwarded-For: 127.0.0.1 για όλα τα αιτήματα HTTP. Και έτσι, η πιθανότητα ανίχνευσης τέτοιων τρωτών σημείων σε όλα τα τεστ διείσδυσης αυξάνεται. Διεξαγωγή ελέγχου σύμφωνα με το Λίστα ελέγχου OWASP διασφαλίζει ότι ελέγχετε για τέτοια τρωτά σημεία. Ωστόσο, για να εντοπίσετε την ευπάθεια X-Forwarded-For, χρειάζεστε μια λειτουργική μονάδα στην εφαρμογή που δείχνει τη διεύθυνση IP σας ή τις ενέργειες που έγιναν.
Πώς να λύσετε την ευπάθεια X-Forwarded-For
Οι οργανισμοί χρειάζονται ένα υποχρεωτικό έγγραφο ανάπτυξης ασφαλών εφαρμογών για όλες τις ομάδες λογισμικού και τις εταιρείες εξωτερικής ανάθεσης. Για παράδειγμα, εάν χρειάζεστε μια διεύθυνση IP χρήστη, η εταιρεία θα πρέπει να προγραμματίσει εκ των προτέρων και να την κάνει κανόνα σχετικά με τις πληροφορίες κεφαλίδας που θα χρησιμοποιήσει εδώ. Διαφορετικά, διαφορετικές ομάδες θα παράγουν διαφορετικές λύσεις. Εάν μια τέτοια κατάσταση δεν μπορεί να αντιμετωπιστεί, οι εφαρμογές εξωτερικής ανάθεσης θα μπουν στο παιχνίδι, καθιστώντας δύσκολη τη μέτρηση των πηγαίων κωδίκων. Γενικά, οι εταιρείες δεν θέλουν να ακολουθήσουν τέτοιο δρόμο.
Αλλά για να λύσετε αυτό το πρόβλημα, μπορείτε να χρησιμοποιήσετε τον ακόλουθο κανόνα F5:
όταν HTTP_REQUEST {
HTTP:: αφαίρεση κεφαλίδας X-Forwarded-Για
HTTP:: εισαγωγή κεφαλίδας X-Forwarded-Για [IP:: remote_addr]
}
Αυτό αφαιρεί το πεδίο X-Forwarded-For στο αίτημα HTTP από τον έξω κόσμο. Στη συνέχεια μεταδίδει το αίτημα προσθέτοντας τη διεύθυνση IP του συστήματος που του έστειλε το αίτημα. Με αυτόν τον τρόπο, δημιουργείται μια αξιόπιστη λίστα για λογισμικό που λειτουργεί σύμφωνα με το X-Forwarded-For.
Συνοψίζοντας, ο μεγαλύτερος στόχος εδώ είναι να πραγματοποιηθούν ορισμένοι έλεγχοι σε αιτήματα HTTP και να δημιουργηθεί ένα αξιόπιστο περιβάλλον. Το παραπάνω μπλοκ κώδικα είναι ένα καλό παράδειγμα που μπορείτε να χρησιμοποιήσετε για αυτό.
Πλαίσια Κυβερνοασφάλειας και Τεκμηρίωση για Επιχειρήσεις
Οι μονάδες που φαίνονται να είναι ανεξάρτητες η μία από την άλλη είναι στην πραγματικότητα μέρη ενός συνόλου. Γι' αυτό όλα πρέπει να λειτουργούν συστηματικά. Οι κανόνες που έχουν καθοριστεί εκ των προτέρων πρέπει να εφαρμόζονται μεταξύ κάθε μονάδας. Εάν δεν υιοθετηθεί ένα τέτοιο σύστημα εργασίας, μπορεί να προκύψουν πολλά προβλήματα όπως η ευπάθεια X-Forwarded-For. Για αυτό, όλα θα πρέπει να ληφθούν υπόψη εκ των προτέρων και θα πρέπει να χρησιμοποιηθεί όσο το δυνατόν πληρέστερη τεκμηρίωση.
Και κάθε μονάδα σε αυτό το μεγάλο σύστημα πρέπει να υιοθετήσει και να εφαρμόσει πλαίσια κυβερνοασφάλειας. Η αφετηρία σας θα πρέπει να είναι η έρευνα και η εκμάθηση της λογικής λειτουργίας αυτών των πλαισίων.