Ką ProxyChains perima, o ką palieka ramybėje
ProxyChains užkabina bibliotekos iškvietimus paleistoje programoje. Patikrinkite TCP aprėptį su maps, strace ir viena užklausa, o paskui nustokite manyti, kad DNS ar UDP seka.
ProxyChains-NG nesukuria tunelio. Jis iš anksto įkelia biblioteką, kuri pakeičia su tinklu susijusius libc iškvietimus vienos paleistos programos viduje, todėl riba yra iškvietimas procese, o ne viso įrenginio maršrutas. Būtent šis skirtumas nulemia, ką iš tikrųjų įrodo sėkmingas testas. Veikiantis curl per grandinę patvirtina vieną užkabintą iškvietimą, o ne tai, kad vardų skyrimas, UDP ar kiekvienas vaikinis procesas ėjo tuo pačiu keliu. Toliau pateiktas vadovas trimis žingsniais patikrina aprėptį, o paskui išvardija, ko kablys negali pasiekti.
Kaip išankstinis įkėlimas pasiekia ryšį
Paleidimo metu paleidėjas įrašo libproxychains į LD_PRELOAD ir tada vykdo tikslinę programą. Biblioteka išsprendžia tikruosius libc simbolius ir pakeičia juos savo funkcijų, tokių kaip connect ir getaddrinfo, versijomis. Iškvietimai, einantys per šiuos simbolius, perrašomi į SOCKS arba HTTP tarpinį serverį iš konfigūracijos failo. Iškvietimai, pasukę kitu keliu, niekada nesusitinka su kabliu, todėl garantija galioja kiekvienam iškvietimui, o ne visai mašinai.
Dalyvauja tik dinamiškai susietos programos, o setuid binariniai failai saugaus vykdymo sąlygomis visiškai nepaiso išankstinio įkėlimo. Vaikiniai procesai paveldi aplinką, bet tik tol, kol paleidėjas ją išlaiko savo vietoje.
Patvirtinkite, kad biblioteka įkelta į tą procesą
Pradėkite užklausą ir apžiūrėkite gyvą procesą, o ne jį paleidusį apvalkalą. Failas maps rodo kiekvieną bendrinamą objektą, šiuo metu susietą su procesu.
proxychains4 -q curl -sS --max-time 8 https://example.com/ -o /dev/null &
pgrep -a curl
grep libproxychains /proc/$(pgrep -n curl)/mapsSutapimas patvirtina, kad užkabinta biblioteka yra, ir tai būtina, bet nepakankama. Tuščias rezultatas paprastai reiškia, kad apžiūrėjote kitą procesą, pavyzdžiui, naršyklę, kuri URL perdavė egzemplioriui, paleistam prieš paleidėją. Prieš imdamiesi ko nors kito patikrinkite su ldd, ar binarius failas susietas dinamiškai, nes statinis rinkinys apskritai negali įkelti išankstinio įkėlimo. Tada perskaitykite tarpinių serverių sąrašą konfigūracijoje, kurią paleidėjas tikrai naudojo, nes pasenęs kelias ar uždarytas prievadas duoda veikiantį kablį be veikiančios grandinės.
Sekite ryšius, kurie palieka procesą
Bibliotekos buvimas neįrodo, kad kiekvienas iškvietimas buvo perrašytas, todėl sekite sistemos iškvietimus. Paleiskite vieną užklausą su sekėju ir perskaitykite, kur lizdai iš tikrųjų nuėjo.
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 -uPėdsakas turėtų rodyti tik ryšius į jūsų tarpinio serverio galinį tašką, o prievadas turi atitikti konfigūracijos failo įrašą. Jei tikslinės svetainės paskirties adresai pėdsake pasirodo tiesiogiai, tas iškvietimas apėjo kablį, ir tai yra būtent ta išvada, kurios ieškojote. Palyginkite prievadų numerius su tarpinių serverių sąrašu, o ne pasitikėkite failo pavadinimu, nes kito projekto likusi konfigūracija yra dažnas tylaus tiesioginio prieigos šaltinis. Išsaugokite pėdsaką priėmimo protokolui; tai užima sekundes ir užbaigia ginčus dėl aprėpties.
Nuspręskite, ko kablys negali apimti
proxychains-ng projektas apriboja peradresavimą TCP ir įspėja, kad scenarijai, foniniai procesai ir įkelti moduliai gali elgtis kitaip nei pagrindinė programa. UDP ir ICMP yra už mechanizmo ribų, todėl viskam, kas jais remiasi, reikia savo palaikomo kelio. DNS vadovaujasi proxy_dns nuostata ir pačios programos sprendėjo elgsena, o tai reiškia, kad viena sėkminga HTTPS užklausa nieko nesako apie vardų skyrimą. Taip pat palikite sertifikatų tikrinimą ten, kur jam vieta: pasiekti serverį per tarpinį serverį nėra priežastis išjungti tapatybės patikras.
Jei tiesioginis atsarginis kelias turi būti neįmanomas, naudokite vykdymo ribą, kuri valdo patį srautą, pavyzdžiui, tinklo vardų erdvę, ugniasienės taisykles arba VPN, ir laikykite ją atskirai nuo bibliotekos kablio. Kablys yra suderinamumo įrankis konkrečiai programai, o ne kill switch. Užrašykite programą, tikslią komandą, pėdsake matytą tarpinio serverio prievadą ir tai, ar DNS buvo išspręstas nuotoliniu būdu; šie keturi faktai skiria patikrintą apimtį nuo viltimi pagrįstos apimties.