ProxyChains-NG ne stvara tunel. On unaprijed učitava biblioteku koja zamjenjuje 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 uspješan test zapravo dokazuje. Radni curl kroz lanac potvrđuje jedan presretnuti poziv, a ne da su razrješavanje imena, UDP ili svaki podređeni proces slijedili isti put. Uputa ispod provjerava pokrivenost u tri koraka, a zatim navodi šta presretač ne može dosegnuti.

Kako prethodno učitavanje dolazi do veze

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

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

Potvrdite da je biblioteka učitana u tom procesu

Pokrenite zahtjev i pregledajte živi proces, a ne ljusku koja ga je pokrenula. Datoteka maps prikazuje svaki dijeljeni objekt 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 primjer preglednik koji je URL predao instanci pokrenutoj prije pokretača. Provjerite pomoću ldd da je binarni program dinamički povezan prije nego što potražite bilo šta drugo, jer statička gradnja uopće ne može učitati prethodno učitavanje. Zatim pročitajte listu proxyja u konfiguraciji koju je pokretač stvarno koristio, jer zastarjela 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 zahtjev 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 treba pokazati samo veze prema vašoj proxy krajnjoj točki, s portom koji odgovara unosu u konfiguracijskoj datoteci. Ako se odredišne adrese ciljnog sajta pojave direktno u tragu, taj je poziv zaobišao presretač, i to je nalaz koji ste tražili. Uporedite brojeve portova s listom proxyja umjesto da vjerujete imenu datoteke, jer zaostala konfiguracija iz drugog projekta čest je izvor tihog direktnog pristupa. Sačuvajte trag za zapis o prihvatanju; traje sekundama i rješava rasprave o pokrivenosti.

Odlučite šta presretač ne može pokriti

Projekat proxychains-ng ograničava preusmjeravanje 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 slijedi postavku proxy_dns i vlastito ponašanje razrješivača aplikacije, što znači da vam jedan uspješan HTTPS zahtjev ne govori ništa o razrješavanju imena. Zadržite i provjeru certifikata na mjestu: dolazak do servera kroz proxy nije razlog da isključite provjere identiteta.

Ako direktni povratak mora biti nemoguć, upotrijebite granicu prisile koja kontrolira sam promet, kao što je mrežni prostor imena, pravila vatrozida ili VPN, i držite je odvojeno od bibliotečnog presretača. Presretač je alat za kompatibilnost određenog programa, a ne kill switch. Zabilježite program, tačnu naredbu, proxy port viđen u tragu i da li je DNS razriješen daljinski; te četiri činjenice razlika su između provjerenog obuhvata i obuhvata nade.

Povezani članci