ProxyChains-NG nevytvára tunel. Prednačíta knižnicu, ktorá nahrádza sieťové volania libc vnútri jediného programu, ktorý spúšťa, takže hranicou je volanie v procese, nie trasa pre celé zariadenie. Práve tento rozdiel určuje, čo úspešný test skutočne dokazuje. Fungujúci curl cez reťaz potvrdzuje jedno zaháknuté volanie, nie to, že preklad mien, UDP alebo každý podradený proces išli tou istou cestou. Nižšie uvedený postup overuje pokrytie v troch krokoch a potom vypisuje, na čo hák nedosiahne.

Ako sa prednačítanie dostane k spojeniu

Pri štarte spúšťač vloží libproxychains do LD_PRELOAD a potom spustí cieľový program. Knižnica vyrieši skutočné symboly libc a nahradí ich vlastnými verziami funkcií ako connect a getaddrinfo. Volania, ktoré prechádzajú cez tieto symboly, sa prepíšu na proxy SOCKS alebo HTTP z konfiguračného súboru. Volania, ktoré sa vydajú inou cestou, sa s hákom nikdy nestretnú, a preto platí záruka pre jednotlivé volanie, nie pre celý stroj.

Zúčastňujú sa len dynamicky linkované programy a binárky setuid pri bezpečnom vykonávaní prednačítanie úplne ignorujú. Potomkovia dedia prostredie, ale len kým ho spúšťač drží na mieste.

Overte, že knižnica je v danom procese načítaná

Začnite požiadavku a prezrite si živý proces, nie shell, ktorý ho spustil. Súbor maps zobrazuje každý zdieľaný objekt, ktorý je práve namapovaný do procesu.

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

Zhoda potvrdzuje, že zaháknutá knižnica je prítomná, čo je potrebné, ale nie postačujúce. Prázdny výsledok zvyčajne znamená, že ste prezreli iný proces, napríklad prehliadač, ktorý odovzdal URL inštancii spustenej pred spúšťačom. Predtým, než sa pustíte do čohokoľvek iného, overte pomocou ldd, že binárka je dynamicky linkovaná, pretože statické zostavenie prednačítanie vôbec nenačíta. Potom si prečítajte zoznam proxy v konfigurácii, ktorú spúšťač skutočne použil, pretože zastaraná cesta alebo zatvorený port dávajú funkčný hák bez funkčnej reťaze.

Sledujte spojenia, ktoré opúšťajú proces

Prítomnosť knižnice nedokazuje, že každé volanie bolo prepísané, preto sledujte systémové volania. Spustite jednu požiadavku pod sledovačom a prečítajte si, kam sockety skutočne išli.

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

Trasa by mala ukazovať len spojenia na váš proxy koncový bod, s portom zodpovedajúcim záznamu v konfiguračnom súbore. Ak sa v trase priamo objavia cieľové adresy cieľovej stránky, to volanie obišlo hák, a to je práve ten nález, ktorý ste hľadali. Porovnajte čísla portov so zoznamom proxy namiesto dôvery v názov súboru, pretože zvyšná konfigurácia z iného projektu je častým zdrojom tichého priameho prístupu. Trasu si uložte pre záznam o prijatí; trvá to sekundy a ukončí hádky o pokrytí.

Rozhodnite, čo hák nemôže pokryť

Projekt proxychains-ng obmedzuje presmerovanie na TCP a varuje, že skripty, procesy na pozadí a načítané moduly sa môžu správať inak ako hlavný program. UDP a ICMP stoja mimo mechanizmu, takže všetko, čo sa na ne spolieha, potrebuje vlastnú podporovanú cestu. DNS sa riadi nastavením proxy_dns a vlastným správaním resolvera aplikácie, čo znamená, že jedna úspešná HTTPS požiadavka vám o preklade mien nepovie nič. Ponechajte aj overovanie certifikátov tam, kam patrí: dosiahnutie servera cez proxy nie je dôvod vypínať kontroly identity.

Ak musí byť priamy návrat nemožný, použite hranicu vynútenia, ktorá riadi samotnú prevádzku, napríklad sieťový priestor mien, pravidlá firewallu alebo VPN, a držte ju oddelene od knižničného háku. Hák je nástroj kompatibility pre konkrétny program, nie kill switch. Zapíšte program, presný príkaz, proxy port videný v trase a to, či sa DNS prekladal vzdialene; tieto štyri údaje sú rozdielom medzi overeným rozsahom a rozsahom nádeje.

Súvisiace články