ProxyChains-NG ne stvara tunel. Unapred učitava biblioteku koja zamenjuje mrežne pozive libc unutar jednog programa koji pokreće, pa je granica poziv u procesu, a ne ruta na nivou uređaja. Ta razlika odlučuje šta uspešan test zapravo dokazuje. Radni curl kroz lanac potvrđuje jedan presretnuti poziv, a ne da su razrešavanje imena, UDP ili svaki podređeni proces sledili isti put. Uputstvo ispod proverava pokrivenost u tri koraka, a zatim navodi šta presretač ne može da dosegne.

Kako prethodno učitavanje dolazi do veze

Pri pokretanju pokretač stavlja libproxychains u LD_PRELOAD i zatim izvršava ciljni program. Biblioteka razrešava prave simbole libc i zamenjuje ih svojim verzijama funkcija kao što su connect i getaddrinfo. Pozivi koji prolaze kroz te simbole prepisuju se na SOCKS ili HTTP proxy iz konfiguracione datoteke. Pozivi koji idu drugim putem nikada ne susreću presretač, zbog čega garancija važi po pozivu, a ne po računaru.

Učestvuju samo dinamički povezani programi, a setuid binarne datoteke pod sigurnim izvršavanjem u potpunosti zanemaruju prethodno učitavanje. Podređeni procesi nasleđuju okruženje, ali samo dok ga pokretač drži na mestu.

Potvrdite da je biblioteka učitana u tom procesu

Pokrenite zahtev i pregledajte živi proces, a ne ljusku koja ga je pokrenula. Datoteka maps prikazuje svaki deljeni objekat trenutno mapiran u proces.

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

Podudaranje potvrđuje prisustvo presretačke biblioteke, što je nužno, ali ne i dovoljno. Prazan rezultat obično znači da ste pregledali drugi proces, na primer pregledač koji je URL predao instanci pokrenutoj pre pokretača. Proverite pomoću ldd da je binarna datoteka dinamički povezana pre nego što potražite bilo šta drugo, jer statička gradnja uopšte ne može da učita prethodno učitavanje. Zatim pročitajte listu proxyja u konfiguraciji koju je pokretač stvarno koristio, jer zastarela putanja ili zatvoren port daju radni presretač bez radnog lanca.

Pratite veze koje napuštaju proces

Prisustvo biblioteke ne dokazuje da je svaki poziv prepisan, zato pratite sistemske pozive. Pokrenite jedan zahtev pod tragačem i pročitajte kuda su utičnice stvarno otišle.

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

Trag bi trebalo da pokaže samo veze prema vašoj proxy krajnjoj tački, s portom koji odgovara unosu u konfiguracionoj datoteci. Ako se odredišne adrese ciljnog sajta pojave direktno u tragu, taj je poziv zaobišao presretač, i to je upravo nalaz koji ste tražili. Uporedite brojeve portova s listom proxyja umesto da verujete imenu datoteke, jer zaostala konfiguracija iz drugog projekta čest je izvor tihog direktnog pristupa. Sačuvajte trag za zapis o prihvatanju; traje sekundama i rešava rasprave o pokrivenosti.

Odlučite šta presretač ne može da pokrije

Projekat proxychains-ng ograničava preusmeravanje na TCP i upozorava da se skripte, pozadinski procesi i učitani moduli mogu ponašati drugačije od glavnog programa. UDP i ICMP stoje izvan mehanizma, pa sve što se na njih oslanja treba vlastitu podržanu putanju. DNS sledi postavku proxy_dns i vlastito ponašanje razrešivača aplikacije, što znači da vam jedan uspešan HTTPS zahtev ne govori ništa o razrešavanju imena. Zadržite i proveru sertifikata na mestu: dolazak do servera kroz proxy nije razlog da isključite provere identiteta.

Ako direktni povratak mora biti nemoguć, upotrebite granicu prisile koja kontroliše sam saobraćaj, poput mrežnog prostora imena, pravila vatrozida ili VPN-a, i držite je odvojeno od bibliotečnog presretača. Presretač je alat za kompatibilnost određenog programa, a ne kill switch. Zabeležite program, tačnu naredbu, proxy port viđen u tragu i da li je DNS razrešen daljinski; te četiri činjenice razlika su između proverenog obuhvata i obuhvata nade.

Povezani članci