Το ProxyChains-NG δεν δημιουργεί σήραγγα. Προφορτώνει μια βιβλιοθήκη που αντικαθιστά τις σχετικές με το δίκτυο κλήσεις libc μέσα στο ένα πρόγραμμα που εκκινεί, άρα το όριο είναι μια κλήση μέσα σε μια διεργασία και όχι μια διαδρομή για όλη τη συσκευή. Αυτή η διάκριση καθορίζει τι αποδεικνύει στην πραγματικότητα μια επιτυχημένη δοκιμή. Ένα curl που λειτουργεί μέσα από την αλυσίδα επιβεβαιώνει μία αγκιστρωμένη κλήση, όχι ότι η επίλυση ονομάτων, το UDP ή κάθε θυγατρική διεργασία ακολούθησαν την ίδια διαδρομή. Ο οδηγός παρακάτω επαληθεύει την κάλυψη σε τρία βήματα και μετά απαριθμεί ό,τι δεν μπορεί να φτάσει το άγκιστρο.

Πώς η προφόρτωση φτάνει σε μια σύνδεση

Κατά την εκκίνηση ο εκκινητής τοποθετεί το libproxychains στο LD_PRELOAD και μετά εκτελεί το πρόγραμμα-στόχο. Η βιβλιοθήκη επιλύει τα πραγματικά σύμβολα της libc και τα αντικαθιστά με τις δικές της εκδοχές συναρτήσεων όπως η connect και η getaddrinfo. Οι κλήσεις που περνούν από αυτά τα σύμβολα ξαναγράφονται προς τον διακομιστή μεσολάβησης SOCKS ή HTTP από το αρχείο ρυθμίσεων. Οι κλήσεις που παίρνουν άλλη διαδρομή δεν συναντούν ποτέ το άγκιστρο, γι’ αυτό η εγγύηση ισχύει ανά κλήση και όχι ανά μηχάνημα.

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

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

Ξεκινήστε το αίτημα και εξετάστε τη ζωντανή διεργασία και όχι το κέλυφος που την ξεκίνησε. Το αρχείο maps δείχνει κάθε κοινόχρηστο αντικείμενο που είναι αυτή τη στιγμή χαρτογραφημένο στη διεργασία.

proxychains4 -q curl -sS --max-time 8 https://example.com/ -o /dev/null &
pgrep -a curl
grep libproxychains /proc/$(pgrep -n curl)/maps

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

Ιχνηλατήστε τις συνδέσεις που φεύγουν από τη διεργασία

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

strace -f -e trace=connect -o /tmp/pc.trace proxychains4 -q curl -sS https://example.com/ -o /dev/null
grep -o "sin_port=htons([0-9]*)" /tmp/pc.trace | sort -u

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

Αποφασίστε τι δεν μπορεί να καλύψει το άγκιστρο

Το έργο proxychains-ng περιορίζει την ανακατεύθυνση στο TCP και προειδοποιεί ότι τα σενάρια, οι διεργασίες στο παρασκήνιο και οι φορτωμένες μονάδες μπορούν να συμπεριφέρονται διαφορετικά από το κύριο πρόγραμμα. Το UDP και το ICMP βρίσκονται έξω από τον μηχανισμό, άρα ό,τι βασίζεται σε αυτά χρειάζεται τη δική του υποστηριζόμενη διαδρομή. Το DNS ακολουθεί τη ρύθμιση proxy_dns και τη συμπεριφορά του ίδιου του επιλυτή της εφαρμογής, που σημαίνει ότι ένα επιτυχημένο αίτημα HTTPS δεν σας λέει τίποτα για την επίλυση ονομάτων. Κρατήστε και την επικύρωση πιστοποιητικών στη θέση της: το να φτάνετε σε έναν διακομιστή μέσω μεσολαβητή δεν είναι λόγος να απενεργοποιείτε τους ελέγχους ταυτότητας.

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

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