ProxyChains-NG baut keinen Tunnel auf. Es lädt vorab eine Bibliothek, die netzwerkbezogene libc-Aufrufe innerhalb des einen Programms ersetzt, das es startet, also ist die Grenze ein Aufruf in einem Prozess und keine geräteweite Route. Dieser Unterschied entscheidet, was ein erfolgreicher Test tatsächlich belegt. Ein funktionierendes curl durch die Kette bestätigt einen abgefangenen Aufruf, nicht dass Namensauflösung, UDP oder jeder Kindprozess denselben Weg genommen haben. Die Anleitung unten prüft die Abdeckung in drei Schritten und listet dann auf, was der Haken nicht erreicht.

Wie das Vorabladen eine Verbindung erreicht

Beim Start legt der Launcher libproxychains in LD_PRELOAD und führt dann das Zielprogramm aus. Die Bibliothek löst die echten libc-Symbole auf und ersetzt sie durch eigene Versionen von Funktionen wie connect und getaddrinfo. Aufrufe, die über diese Symbole laufen, werden auf den SOCKS- oder HTTP-Proxy aus der Konfigurationsdatei umgeschrieben. Aufrufe, die einen anderen Weg nehmen, treffen den Haken nie, weshalb die Garantie pro Aufruf und nicht pro Rechner gilt.

Nur dynamisch gelinkte Programme nehmen teil, und setuid-Binaries unter sicherer Ausführung ignorieren das Vorabladen vollständig. Kindprozesse erben die Umgebung, aber nur solange der Launcher sie an Ort und Stelle hält.

Bestätigen Sie, dass die Bibliothek in diesem Prozess geladen ist

Starten Sie die Anfrage und untersuchen Sie den laufenden Prozess statt der Shell, die ihn gestartet hat. Die Datei maps zeigt jedes Shared Object, das derzeit in den Prozess eingeblendet ist.

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

Ein Treffer bestätigt, dass die eingehakte Bibliothek vorhanden ist, was notwendig, aber nicht ausreichend ist. Ein leeres Ergebnis bedeutet meist, dass Sie einen anderen Prozess untersucht haben, etwa einen Browser, der die URL an eine Instanz weitergab, die vor dem Launcher gestartet wurde. Prüfen Sie mit ldd, ob das Binary dynamisch gelinkt ist, bevor Sie etwas anderes verfolgen, denn ein statischer Build kann das Vorabladen überhaupt nicht laden. Lesen Sie dann die Proxy-Liste in der Konfiguration, die der Launcher tatsächlich verwendet hat, denn ein veralteter Pfad oder ein geschlossener Port ergibt einen funktionierenden Haken ohne funktionierende Kette.

Verfolgen Sie die Verbindungen, die den Prozess verlassen

Die Anwesenheit der Bibliothek belegt nicht, dass jeder Aufruf umgeschrieben wurde, folgen Sie deshalb den Systemaufrufen. Führen Sie eine Anfrage unter dem Tracer aus und lesen Sie, wohin die Sockets tatsächlich gingen.

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

Die Ablaufverfolgung sollte nur Verbindungen zu Ihrem Proxy-Endpunkt zeigen, mit dem Port, der dem Eintrag in der Konfigurationsdatei entspricht. Erscheinen die Zieladressen der Zielseite direkt in der Ablaufverfolgung, hat dieser Aufruf den Haken umgangen, und genau das ist der Befund, nach dem Sie gesucht haben. Vergleichen Sie die Portnummern mit der Proxy-Liste, statt dem Dateinamen zu vertrauen, denn eine übrig gebliebene Konfiguration aus einem anderen Projekt ist eine häufige Quelle stillen Direktzugriffs. Behalten Sie die Ablaufverfolgung für den Abnahmenachweis; sie dauert Sekunden und beendet Diskussionen über die Abdeckung.

Entscheiden Sie, was der Haken nicht abdecken kann

Das proxychains-ng-Projekt beschränkt die Umleitung auf TCP und warnt, dass Skripte, Hintergrundprozesse und geladene Module sich anders als das Hauptprogramm verhalten können. UDP und ICMP liegen außerhalb des Mechanismus, also braucht alles, was darauf beruht, einen eigenen unterstützten Weg. DNS folgt der Einstellung proxy_dns und dem eigenen Resolver-Verhalten der Anwendung, was bedeutet, dass eine erfolgreiche HTTPS-Anfrage Ihnen nichts über die Namensauflösung sagt. Lassen Sie auch die Zertifikatsprüfung, wo sie hingehört: einen Server über einen Proxy zu erreichen ist kein Grund, Identitätsprüfungen abzuschalten.

Wenn ein direkter Rückfall unmöglich sein muss, verwenden Sie eine Durchsetzungsgrenze, die den Verkehr selbst steuert, etwa einen Netzwerk-Namespace, Firewall-Regeln oder ein VPN, und halten Sie sie getrennt vom Bibliothekshaken. Der Haken ist ein Kompatibilitätswerkzeug für ein benanntes Programm, kein Kill Switch. Notieren Sie das Programm, den genauen Befehl, den im Trace gesehenen Proxy-Port und ob DNS remote aufgelöst wurde; diese vier Fakten unterscheiden einen geprüften Umfang von einem erhofften.

Ähnliche Artikel