Το Nmap δεν στέλνει πάντα το πακέτο που νομίζετε ότι ζητήσατε. Όταν οι raw υποδοχές δεν είναι διαθέσιμες, αντικαθιστά την προεπιλεγμένη σάρωση SYN με σάρωση TCP connect, οπότε μια εκτέλεση ως απλός χρήστης και μια εκτέλεση υπό sudo μπορούν να απαντήσουν διαφορετικές ερωτήσεις για την ίδια θύρα. Τα αποτελέσματα μοιάζουν με πρόβλημα δικαιωμάτων, και συνήθως είναι αλλαγή μεθόδου. Το να κάνετε τη μέθοδο ρητή είναι ο μόνος τρόπος να συγκρίνετε καθόλου τις δύο εκτελέσεις.

Δύο ανιχνεύσεις, μία θύρα, διαφορετικές διαδρομές κώδικα

Μια σάρωση SYN χτίζει η ίδια την κεφαλίδα TCP, τη στέλνει από raw υποδοχή και διαβάζει την απάντηση από το δίκτυο πριν η στοίβα TCP του πυρήνα καταγράψει ποτέ μια ολοκληρωμένη σύνδεση. Μια σάρωση connect ζητά από το λειτουργικό σύστημα να ανοίξει μια συνηθισμένη υποδοχή και αναφέρει ό,τι επιστρέφει το connect(). Και οι δύο μπορούν να χαρακτηρίσουν μια θύρα ανοιχτή, αλλά μόνο η μία αφήνει μια ημιανοιχτή απόπειρα και μόνο η μία υπόκειται σε πολιτική επιπέδου υποδοχής που συνδέεται με τη διεργασία αποστολής.

Η raw διαδρομή απαιτεί CAP_NET_RAW, γι’ αυτό η προεπιλεγμένη σάρωση υποβαθμίζεται σιωπηλά όταν λείπει αυτή η δυνατότητα. Η δική του αναφορά τεχνικών σάρωσης του Nmap τεκμηριώνει την αντικατάσταση: η σάρωση connect είναι η εφεδρική, επειδή δεν απαιτεί καθόλου ειδικά δικαιώματα. Η εναλλαγή γίνεται χωρίς προειδοποίηση στις περισσότερες εκτελέσεις, και ακριβώς αυτό την κάνει τόσο εύκολη στην παρερμηνεία. Μόλις μάθετε ότι υπάρχει η εφεδρική, το «ανοιχτό ως root, κλειστό ως χρήστης» παύει να ακούγεται σαν σφάλμα δικαιωμάτων και αρχίζει να ακούγεται σαν δύο διαφορετικές μετρήσεις.

Τι αλλάζει πραγματικά το sudo στη σάρωση

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

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

Κρατήστε τη μέθοδο σταθερή και στις δύο εκτελέσεις

Επιβάλετε την ίδια τεχνική και στις δύο κλήσεις και η σύγκριση αρχίζει να σημαίνει κάτι. Η σημαία -sT ζητά ρητά σάρωση connect, η -Pn αφαιρεί την ανακάλυψη κεντρικών υπολογιστών, η -n αφαιρεί την επίλυση ονομάτων, και μία μόνο -p αφαιρεί διαφορές στη λίστα θυρών.

nmap -sT -Pn -n -p 8443 198.51.100.77
sudo nmap -sT -Pn -n -p 8443 198.51.100.77

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

Το πλαίσιο λογαριασμού δεν είναι μόνο σημαία δικαιωμάτων

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

Εξετάστε την πολιτική και όχι το δικαίωμα. Στο Linux το nftables το εκφράζει με meta skuid και το iptables με την αντιστοίχιση ιδιοκτήτη, και οποιοδήποτε από τα δύο μπορεί να στείλει ένα UID μέσα από σήραγγα ενώ το άλλο συνεχίζει να χρησιμοποιεί τη φυσική προεπιλεγμένη διαδρομή.

sudo nft list ruleset | grep -n skuid
sudo iptables-save | grep -n uid-owner
ip rule show
ip route get 198.51.100.77

Επιβεβαιώστε την ανίχνευση πριν συγκρίνετε αποτελέσματα

Πριν βγάλετε συμπεράσματα, αποδείξτε ποια ανίχνευση εκτελέστηκε. Το Nmap ονομάζει την τεχνική στην έξοδό του, και το --reason προσθέτει τα στοιχεία πίσω από κάθε κατάσταση, που είναι το μέρος που σας λέει αν μια χειραψία ολοκληρώθηκε πραγματικά.

nmap --reason -sT -Pn -n -p 8443 198.51.100.77
sudo nmap --reason -sS -Pn -n -p 8443 198.51.100.77
getcap "$(command -v nmap)"
capsh --print | grep -i net_raw

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

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