Origin IP πίσω από CDN: πώς διαρρέει και πώς το κλειδώνετε
Ένα scan του δημόσιου hostname ελέγχει το edge του CDN. Το origin συνήθως εντοπίζεται από το ίδιο το DNS του domain, οπότε βρείτε το, κάντε scan σε αυτό και κλειδώστε το στο CDN.
Σε αυτό το άρθρο 5 ενότητες
- Ένα scan του δημόσιου hostname περνάει μέσα από το CDN και αναφέρει για το CDN. Δεν λέει τίποτα για τον server από πίσω.
- Η διεύθυνση του origin συνήθως δημοσιεύεται από το ίδιο το domain: η εγγραφή SPF, οι MX hosts, ένα subdomain χωρίς proxy, ένα πιστοποιητικό στα transparency logs, ένα header Received σε εξερχόμενο email.
- Βρείτε την όπως θα την έβρισκε ένας επιτιθέμενος, καρφώστε την, κάντε scan στον ίδιο τον server από έξω, και μετά κλειδώστε το firewall του origin στα address ranges του CDN και απαιτήστε πιστοποίηση στα origin pulls, ώστε η διεύθυνση να είναι άχρηστη ακόμη κι αν γίνει γνωστή.
Η μπροστινή και η πίσω πόρτα
Ένα CDN ή ένα cloud WAF κάθεται μπροστά από τον server και εξυπηρετεί το hostname. Στρέψτε έναν scanner σε αυτό το hostname και το αίτημα πηγαίνει στο edge: το TLS του edge, τα headers του edge, τα rate limits και οι κανόνες του edge. Μια πράσινη αναφορά είναι αναφορά για το edge. Το origin, ο πραγματικός server, δεν έχει αγγιχτεί από αυτό το scan, και ό,τι εκθέτει απευθείας παραμένει εκτεθειμένο σε όποιον το φτάσει με διεύθυνση αντί με όνομα.
| Τι σκανάρεται | Τι ελέγχει | Τι αποδεικνύει για το origin |
|---|---|---|
| Το δημόσιο hostname, μέσω του CDN | Το edge: το WAF, το TLS και τα rate limits του | Τίποτα |
| Η καρφωμένη διεύθυνση του origin | Τον ίδιο τον server, όπως τον φτάνει ένας επιτιθέμενος | Τι μπορεί να αγγίξει ένας άγνωστος στο internet |
Από πού διαρρέει το origin
Η διεύθυνση σπάνια είναι καλά κρυμμένη, γιατί το domain τη δημοσιεύει για άλλους σκοπούς. Η εγγραφή SPF είναι η συνηθισμένη περίπτωση. Μια πολιτική SPF που χρησιμοποιεί τον μηχανισμό a εξουσιοδοτεί την ίδια την εγγραφή A του domain να στέλνει email, και αυτή η εγγραφή A είναι το origin πίσω από το CDN. Ο μηχανισμός mx δείχνει στους mail hosts, που συχνά βρίσκονται στο ίδιο range. Ένα κυριολεκτικό ip4: τη γράφει ολογράφως.
$ dig +short TXT example.com
"v=spf1 a mx ip4:<address> include:_spf.<mail-provider> ~all"
$ dig +short MX example.com
$ dig +short A mail.example.com ftp.example.com staging.example.com origin.example.comΠέρα από το SPF: subdomains που δεν μπήκαν ποτέ πίσω από το CDN (mail, ftp, ένα control panel, staging, ένας γυμνός origin host), που επιλύονται κατευθείαν στον server. Τα certificate transparency logs, που καταγράφουν κάθε πιστοποιητικό που εκδόθηκε για ένα όνομα, μαζί με εκείνο στον origin host. Οι βάσεις passive DNS, που κρατούν την εγγραφή A από πριν μπει το CDN. Τα headers Received σε οποιοδήποτε email στέλνει ο web server, που κατονομάζουν τον host από τον οποίο ξεκίνησε. Και λειτουργίες της εφαρμογής που κάνουν τον server να συνδέεται προς τα έξω κατόπιν αιτήματος, όπως pingbacks και δοκιμές webhook, που δείχνουν τη διεύθυνση σύνδεσης σε όποιον δέχεται την κλήση.
Καρφώστε το origin και σκανάρετε ό,τι σκανάρει ένας επιτιθέμενος
Μόλις η διεύθυνση γίνει γνωστή, κάντε τα εργαλεία να αγνοήσουν το CDN. Το curl το κάνει ανά αίτημα. Οι scanners που δεν μπορούν, παίρνουν μια εγγραφή στο hosts file. Τρέξτε το από ένα μηχάνημα που δεν βρίσκεται στο δικό σας δίκτυο και σε καμία allowlist που εμπιστεύεται το origin, γιατί ένα scan από έμπιστη διεύθυνση αναφέρει ό,τι βλέπουν οι έμπιστες διευθύνσεις.
# per request, no hosts-file change
$ curl --resolve example.com:443:<address> -sI https://example.com/
# for tools without --resolve
$ echo "<address> example.com" | sudo tee -a /etc/hostsΚρατήστε δύο στήλες στο αποτέλεσμα. Η στήλη της υποδομής: ποιες πόρτες απαντούν, ποιες εκδόσεις TLS γίνονται δεκτές, αν τα banners προσφέρουν ονόματα λογισμικού. Η στήλη της εφαρμογής: endpoints χωρίς αυθεντικοποίηση που απαριθμούν χρήστες, αρχεία debug ή logs αναγνώσιμα μέσα στο web root, διαδρομές διαχείρισης προσβάσιμες χωρίς δεύτερο παράγοντα, components πίσω από την τρέχουσα έκδοσή τους. Ένα θωρακισμένο μηχάνημα που σερβίρει μια ανοιχτή εφαρμογή δεν είναι ασφαλές site, και οι δύο στήλες δεν βγάζουν μέσο όρο σε μία ετυμηγορία.
Κλειδώστε το origin στο CDN
Η δομική διόρθωση γίνεται στο origin, όχι στο edge. Οι web πόρτες απαντούν μόνο στα δημοσιευμένα address ranges του CDN, με όλα τα υπόλοιπα να απορρίπτονται εξ ορισμού. Σε έναν host με firewalld:
# load the CDN's published ranges into an ipset, then allow only them on 443
$ firewall-cmd --permanent --new-ipset=cdn-v4 --type=hash:net
$ firewall-cmd --permanent --ipset=cdn-v4 --add-entries-from-file=cdn-ranges-v4.txt
$ firewall-cmd --permanent --zone=public --remove-service=http
$ firewall-cmd --permanent --zone=public --remove-service=https
$ firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source ipset="cdn-v4" port port="443" protocol="tcp" accept'
$ firewall-cmd --reload
$ firewall-cmd --ipset=cdn-v4 --get-entriesΔύο λεπτομέρειες κρίνουν αν αυτό θα κρατήσει. Τα ranges του CDN αλλάζουν, οπότε το αρχείο ανανεώνεται από τη δημοσιευμένη λίστα του CDN σε πρόγραμμα και το ipset ξαναφορτώνεται με αυτό. Και κάθε prefix σε μια allow list διαβάζεται ξανά μετά τη φόρτωση: ένα prefix length με έναν χαρακτήρα λάθος αφήνει να περάσει ένα μεγάλο μέρος του internet και φαίνεται φυσιολογικό μέσα στο αρχείο.
Τα address ranges είναι η πρώτη κλειδαριά, όχι η μόνη. Τα περισσότερα CDN μπορούν να πιστοποιούν τα pulls τους προς το origin με client certificate. Απαιτήστε το στον web server, ώστε ένα αίτημα από μέσα από range του CDN που δεν παρουσιάζει το πιστοποιητικό να απορρίπτεται και πάλι. Μετά αφαιρέστε τις διαρροές που απομένουν: μια εγγραφή SPF που κατονομάζει μόνο τους hosts που στέλνουν email, κανένα subdomain χωρίς proxy να δείχνει στο origin, και, όπου είναι πρακτικό, μια νέα διεύθυνση origin μόλις μπει η κλειδαριά, γιατί η παλιά μένει στο passive DNS επ' αόριστον.
Επαληθεύστε από έξω
Ξανατρέξτε το καρφωμένο scan από το ίδιο μη έμπιστο σημείο. Το origin αρνείται τη σύνδεση στην 443, και το hostname εξακολουθεί να σερβίρεται μέσω του CDN. Επαναλάβετε μετά από κάθε αλλαγή στα ranges ή στη διαμόρφωση του web server. Το πώς αυτό γίνεται μόνιμος έλεγχος αντί για μια εφάπαξ ενέργεια είναι το θέμα του αποδείξτε ότι είναι κλειστό από έξω.
$ curl --resolve example.com:443:<address> -m 5 -sI https://example.com/ ; echo "exit $?"
exit 28
# a timeout (28) or a refused connection (7) is the correct answer from the locked originΕυθείες απαντήσεις
Προστατεύει το CDN τον origin server μου;+
Μόνο για την κίνηση που περνάει μέσα από αυτό. Το WAF, το TLS και τα rate limits εφαρμόζονται στο edge. Ένα αίτημα απευθείας στη διεύθυνση του origin δεν συναντά τίποτα από αυτά, οπότε το origin πρέπει να αρνείται ό,τι δεν είναι το CDN.
Πώς βρίσκει ένας επιτιθέμενος το origin IP πίσω από ένα CDN;+
Συνήθως από το ίδιο το DNS του domain: μια εγγραφή SPF με τους μηχανισμούς a, mx ή ip4, MX hosts στο ίδιο range, subdomains που δεν μπήκαν ποτέ πίσω από proxy. Επίσης από τα certificate transparency logs, το ιστορικό passive DNS και τα headers των email που στέλνει ο server. Θεωρήστε δεδομένο ότι θα βρεθεί, και κλειδώστε το origin σαν να έχει ήδη βρεθεί.
Ποια είναι η διαφορά ανάμεσα σε scan του hostname και scan του origin;+
Το hostname επιλύεται στο CDN, οπότε το scan ελέγχει το edge. Το origin είναι ο server. Το κάρφωμα της διεύθυνσης του origin με curl --resolve ή με εγγραφή στο hosts file, από δίκτυο που το origin δεν εμπιστεύεται, ελέγχει ό,τι ελέγχει ένας επιτιθέμενος.
Μόλις το origin κλειδωθεί στο CDN, έχει ακόμη σημασία η διαρροή από το SPF;+
Οι web πόρτες δεν απαντούν πια, αλλά η διεύθυνση παραμένει γνωστή, και κάθε άλλη υπηρεσία πάνω της (SSH, email, ένα control panel) παραμένει προσβάσιμη αν δεν περιοριστεί κι αυτή. Σφίξτε την εγγραφή SPF στους πραγματικούς mail hosts, μετακινήστε το origin σε φρέσκια διεύθυνση όπου είναι πρακτικό, και βάλτε allowlist στις υπηρεσίες που απομένουν.
Θέλετε το origin να βρεθεί, να καρφωθεί και να κλειδωθεί από κάποιον που δουλεύει έξω από το δίκτυό σας;
Μιλήστε με έναν μηχανικό.
Μιλήστε με έναν μηχανικόΦτάσατε στο τέλος.
Βάλτε την ανάγνωση σε εφαρμογή
Τι τρέχετε;
Πείτε μας για τον φόρτο εργασίας, την κίνηση και τις απαιτήσεις ανάκαμψης. Ξεκινήστε από το εργαλείο διαμόρφωσης server ή συζητήστε τις λεπτομέρειες με έναν μηχανικό.
Γραμμένο από τους μηχανικούς που χτίζουν και λειτουργούν την υποδομή που περιγράφει.Μιλήστε με έναν μηχανικό
