ProxyChains-NG ne stvara tunel. 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 razini uređaja. Ta razlika odlučuje što 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 što 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čunalu.

Sudjeluju samo dinamički povezani programi, a setuid binarne datoteke 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 trenutačno 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 prisutnost presretačke biblioteke, što je nužno, ali ne i dovoljno. Prazan rezultat obično znači da ste pregledali drugi proces, primjerice preglednik koji je URL predao instanci pokrenutoj prije pokretača. Provjerite pomoću ldd da je binarna datoteka dinamički povezana prije nego što potražite bilo što drugo, jer statička gradnja uopće ne može učitati prethodno učitavanje. Zatim pročitajte popis 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

Prisutnost biblioteke ne dokazuje da je svaki poziv prepisan, zato pratite sistemske pozive. Pokrenite jedan zahtjev pod tragačem i pročitajte kamo 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 trebao pokazati samo veze prema vašoj proxy krajnjoj točki, s portom koji odgovara unosu u konfiguracijskoj datoteci. Ako se odredišne adrese ciljnog web-mjesta pojave izravno u tragu, taj je poziv zaobišao presretač, i to je upravo nalaz koji ste tražili. Usporedite brojeve portova s popisom proxyja umjesto da vjerujete imenu datoteke, jer zaostala konfiguracija iz drugog projekta čest je izvor tihog izravnog pristupa. Sačuvajte trag za zapis o prihvaćanju; traje sekundama i rješava rasprave o pokrivenosti.

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

Projekt 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 poslužitelja kroz proxy nije razlog da isključite provjere identiteta.

Ako izravni povratak mora biti nemoguć, upotrijebite granicu prisile koja kontrolira sam promet, 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. Zabilježite program, točnu naredbu, proxy port viđen u tragu i je li DNS razriješen daljinski; te četiri činjenice razlika su između provjerenog obuhvata i obuhvata nade.

Povezani članci