Co ProxyChains przechwytuje, a co zostawia w spokoju
ProxyChains podczepia wywołania biblioteczne w programie, który uruchamia. Sprawdź pokrycie TCP za pomocą maps, strace i jednego żądania, a potem przestań zakładać, że DNS lub UDP podążają.
ProxyChains-NG nie tworzy tunelu. Ładuje wstępnie bibliotekę, która zastępuje wywołania libc związane z siecią w obrębie jednego uruchamianego programu, więc granicą jest wywołanie w procesie, a nie trasa dla całego urządzenia. Ta różnica decyduje, co naprawdę dowodzi udany test. Działający curl przez łańcuch potwierdza jedno podczepione wywołanie, a nie to, że rozwiązywanie nazw, UDP lub każdy proces potomny podążyły tą samą drogą. Poniższy przewodnik weryfikuje pokrycie w trzech krokach, a następnie wymienia to, czego hak nie może osiągnąć.
Jak wstępne ładowanie dociera do połączenia
Przy starcie launcher umieszcza libproxychains w LD_PRELOAD, a następnie wykonuje program docelowy. Biblioteka rozwiązuje prawdziwe symbole libc i zastępuje je własnymi wersjami funkcji takich jak connect i getaddrinfo. Wywołania przechodzące przez te symbole są przepisywane na proxy SOCKS lub HTTP z pliku konfiguracji. Wywołania, które wybierają inną drogę, nigdy nie spotykają haka, dlatego gwarancja dotyczy wywołania, a nie całej maszyny.
Uczestniczą tylko programy linkowane dynamicznie, a pliki binarne setuid w warunkach bezpiecznego wykonywania całkowicie ignorują wstępne ładowanie. Procesy potomne dziedziczą środowisko, ale tylko dopóki launcher utrzymuje je na miejscu.
Potwierdź, że biblioteka jest załadowana do tego procesu
Rozpocznij żądanie i obejrzyj żywy proces, a nie powłokę, która go uruchomiła. Plik maps pokazuje każdy obiekt współdzielony aktualnie zmapowany do procesu.
proxychains4 -q curl -sS --max-time 8 https://example.com/ -o /dev/null &
pgrep -a curl
grep libproxychains /proc/$(pgrep -n curl)/mapsDopasowanie potwierdza obecność podczepionej biblioteki, co jest konieczne, ale niewystarczające. Pusty wynik zwykle oznacza, że obejrzałeś inny proces, na przykład przeglądarkę, która przekazała URL instancji uruchomionej przed launcherem. Przed gonitwą za czymkolwiek innym sprawdź za pomocą ldd, czy plik binarny jest linkowany dynamicznie, ponieważ kompilacja statyczna w ogóle nie może załadować wstępnego ładowania. Następnie przeczytaj listę proxy w konfiguracji, której launcher faktycznie użył, bo nieaktualna ścieżka lub zamknięty port dają działający hak bez działającego łańcucha.
Śledź połączenia opuszczające proces
Obecność biblioteki nie dowodzi, że każde wywołanie zostało przepisane, więc śledź wywołania systemowe. Uruchom jedno żądanie pod tracerem i odczytaj, dokąd naprawdę poszły gniazda.
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Ślad powinien pokazywać wyłącznie połączenia do twojego punktu końcowego proxy, z portem zgodnym z wpisem w pliku konfiguracji. Jeśli adresy docelowe witryny pojawiają się bezpośrednio w śladzie, to wywołanie ominęło hak, i to jest właśnie ustalenie, którego szukałeś. Porównaj numery portów z listą proxy, zamiast ufać nazwie pliku, bo pozostała konfiguracja z innego projektu jest częstym źródłem cichego dostępu bezpośredniego. Zachowaj ślad do protokołu odbioru; trwa sekundy i rozstrzyga spory o pokrycie.
Zdecyduj, czego hak nie może objąć
projekt proxychains-ng ogranicza przekierowanie do TCP i ostrzega, że skrypty, procesy w tle i załadowane moduły mogą zachowywać się inaczej niż program główny. UDP i ICMP znajdują się poza mechanizmem, więc wszystko, co na nich polega, potrzebuje własnej obsługiwanej ścieżki. DNS podlega ustawieniu proxy_dns i zachowaniu własnego resolvera aplikacji, co oznacza, że jedno udane żądanie HTTPS nie mówi nic o rozwiązywaniu nazw. Zostaw też walidację certyfikatów tam, gdzie jej miejsce: dotarcie do serwera przez proxy nie jest powodem do wyłączania kontroli tożsamości.
Jeśli bezpośredni powrót musi być niemożliwy, użyj granicy egzekwowania, która kontroluje sam ruch, takiej jak przestrzeń nazw sieci, reguły zapory lub VPN, i trzymaj ją osobno od haka bibliotecznego. Hak jest narzędziem zgodności dla nazwanego programu, a nie kill switchem. Zapisz program, dokładne polecenie, port proxy widziany w śladzie i to, czy DNS został rozwiązany zdalnie; te cztery fakty to różnica między zweryfikowanym zakresem a zakresem opartym na nadziei.