ProxyChains-NG ver 4.17 README
ProxyChains는 UNIX 프로그램으로, 동적으로 링크된 프로그램에서
사전 로드된 DLL(dlsym(), LD_PRELOAD)을 통해 네트워크 관련 libc 함수를 후킹하고
SOCKS4a/5 또는 HTTP 프록시를 통해 연결을 리디렉션합니다.
TCP만 지원합니다 (UDP/ICMP 등은 지원하지 않음).
작동 방식은 기본적으로 HACK입니다. 따라서 일부 프로그램에서 작동하지 않을 수 있습니다.
특히 스크립트이거나 백그라운드 데몬처럼 많은 프로세스를 시작하거나
dlopen()을 사용하여 "모듈"을 로드하는 경우 (glibc dynlinker의 버그) 문제가 발생할 수 있습니다.
그러나 간단한 컴파일된 (C/C++) 동적 링크 프로그램에서는 작동해야 합니다.
프로그램이 proxychains와 작동하지 않으면 대신 iptables 기반 솔루션을 사용하는 것이 좋습니다.
이 방법이 훨씬 더 견고합니다.
지원 플랫폼: Linux, BSD, Mac, Haiku.
*********** 주의 ***********
이 프로그램은 검열을 우회하는 데 사용될 수 있습니다.
특정 국가에서는 이렇게 하는 것이 매우 위험할 수 있습니다.
진지한 용도로 사용하기 전에 PROXYCHAINS가 예상대로 작동하는지
반드시 확인하십시오.
이는 프로그램과 사용하려는 프록시 모두에 해당됩니다.
예를 들어, ifconfig.me와 같은 "내 IP는 무엇인가" 서비스에 연결하여
실제 IP를 사용하지 않는지 확인할 수 있습니다.
자신이 무엇을 하고 있는지 알 때만 PROXYCHAINS를 사용하십시오.
PROXYCHAINS의 저자와 유지보수자는 이 소프트웨어의 오용 또는 남용과
그로 인한 결과에 대해 어떠한 책임도 지지 않습니다.
*** 설치 ***
작동 중인 C 컴파일러가 필요합니다. 가급적 gcc 권장
./configure --prefix=/usr --sysconfdir=/etc
make
[선택] sudo make install
[선택] sudo make install-config (proxychains.conf 설치)
설치하지 않으면 빌드 디렉토리에서 다음과 같이 proxychains를 사용할 수 있습니다:
./proxychains4 -f src/proxychains.conf telnet google.com 80
변경 로그:
버전 4.17
- close_range 함수 후크 추가, 최신 openssh 버전 수정
- mac용 fat-binary-m1 옵션
- proxy_dns_old에서 DNS 오류 처리 수정
- 초기화 코드 단순화
- openbsd 프리로딩 수정
- 멀티스레드 앱에서 이중 close 수정
- configure 스크립트의 다양한 개선
버전 4.16
- configure 스크립트 링커 플래그 감지의 회귀 수정
- 잘못된 glibc getnameinfo 서명에 대한 10년 된 우회 제거
- OSX Monterey를 위한 새로운 DYLD 후킹 방법 지원
- netbsd 컴파일 수정
- IPv6 로컬 네트워크 지원
- execvp 실패 시 더 사용자 친화적인 오류 메시지
- proxy_getaddrinfo(): 요청 시 ai_socktype 채움
버전 4.15
- 버그가 있는 binutils 버전에 대한 configure 스크립트 수정
- rand_seed를 나노초 단위로 초기화
- getaddrinfo에서 숫자 ipv6 지원 추가
- node가 null이고 !passive일 때 getaddrinfo 버그 수정
- dnat 기능 추가
- raw 프록시 유형 추가
- haiku 지원 추가
- proxychains 3.1 동작을 에뮬레이트하는 proxy_dns_old 추가
- 새로운 proxy_dns_daemon 기능 추가 (실험적)
- 기타 여러 수정
버전 4.14
- proxylist에 대체 proto://user:pass@ip:port 구문 허용
- 모든 프록시가 다운되었을 때 라운드 로빈 모드에서 무한 루프 수정 (#147)
- 안드로이드에서 컴파일 수정 (#265)
- 포크된 프로세스에서 fd 누수 수정 (#273)
- null 라우팅된 IP에 대한 연결 시도 건너뛰기
- 특정 조건에서 proxylist에 호스트 이름 허용
버전 4.13
- DNS 조회 스레드의 견고성 및 세그폴트 수정
- 비준수 서버에서 socks5 사용자/비밀번호 인증 수정
- 메모리 누수 수정
- Solaris 지원 추가
버전 4.12
- 여러 빌드 문제 수정
- MAC의 경우
- -pie 옵션 사용 시
- 사용자 지정 CC 사용 시
- 일부 GUI 앱과의 호환성 수정 (8870140)
- 일부 HTTP 프록시와의 호환성 수정 (cf9a16d)
- 데비안에서 더 깨끗한 빌드를 위한 여러 경고 수정
- OSX에서 random_chain 수정 (0f6b226)
버전 4.11
- 예비 IPv6 지원
- hostsreader 버그 수정
- OpenBSD 사용을 위한 예비 지원 (caveat emptor)
버전 4.10
- 사용자 지정 LDFLAGS로 링크 순서 회귀 수정
- 약 400개 이상의 다른 조회를 수행하는 프로그램의 DNS 매핑 코드에서 세그폴트 수정
버전 4.9
- 보안 문제 CVE-2015-3887 수정
- MSG_FASTOPEN 플래그를 처리하기 위한 sendto 후크 추가
- 문제가 있는 hostentdb를 hostsreader로 대체
- OpenBSD에서 컴파일 수정 (그러나 작동하지 않음)
버전 4.8.1:
- 4.8 install-config Makefile 대상의 회귀 수정
버전 4.8:
- getaddrinfo가 AI_NUMERICHOST와 함께 숫자 IP를 테스트하는 이상한 경계 사례 수정 (해결 대신) (nmap 수정)
- LD_PRELOAD에 의존하는 프로그램과 함께 사용 가능
- 설정 파일의 잘못된 항목 거부
- 시작 시 버전 번호 출력
버전 4.7:
- crass의 새로운 round_robin 체인 유형
- GCC 생성자가 사용되지 않을 때 지연 할당 버그 수정
- OS X에서 "fat" 바이너리/라이브러리를 생성하는 새로운 configure 플래그 --fat-binary
- close 후크에서 EINTR 대신 EBADF 반환
close() 호출이 EINTR을 받으면 재시도하는 것이 합법적이며, 이는 chromium에서 볼 수 있는 무한 루프를 유발할 수 있음
버전 4.6:
- Makefile의 일부 미용 수정, 숫자가 아닌 IP가 프록시 서버 주소로 사용될 때 버그 수정
버전 4.5:
- OpenSSH가 내부 인프라를 망치는 것을 방지하기 위해 close() 후킹
이로 인해 프록시화된 ssh 클라이언트가 세그폴트 발생했음
버전 4.4:
- FreeBSD 포트
- 데비안과 Mac에서 일부 설치 문제 수정
버전 4.3:
- irssi와 같이 자식 프로세스(fork())에서 DNS 조회를 수행하는 프로그램 수정
이를 위해 pthreads 없이 컴파일하는 지원을 희생
- gethostent() 호출의 스레드 안전성 수정
- hostent db가 캐시되므로 DNS 처리 속도 향상
버전 4.2:
- 우분투 12.04 툴체인으로 컴파일 문제 수정
- 드문 코드 경로에서 세그폴트 수정
버전 4.1
- Mac OS X (모든 아키텍처) 지원
- -DTHREAD_SAFE (기본값)로 컴파일 시 모든 내부 함수가 스레드 안전
버전 4.0
- DNS 확인자 스크립트 (동적으로 링크된 "dig" 바이너리가 필요했음)를 원격 DNS 조회로 대체
이전 스크립트는 TCP를 사용해야 했기 때문에 DNS 관련 작업 속도 향상
또한 TOR와 함께 사용 시 .onion URL 사용 가능
- 잘못된 autoconf 빌드 시스템을 간단한 Makefile로 대체
편의를 위해 ./configure 스크립트는 유지
명령줄 스위치/환경 변수를 통해 설정 파일 전달 지원 추가
버전 3.0
- 프록시를 통한 DNS 확인 지원
SOCKS4, SOCKS5 및 HTTP CONNECT 프록시 서버 지원
인증 유형: socks - "user/pass" , http - "basic"
언제 사용하나요?
- LAN에서 "외부"로 나가는 유일한 방법이 프록시 서버일 때
- 나가는 포트를 필터링하는 제한적인 방화벽 뒤에서 벗어날 때
- 두 개 이상의 프록시를 체인으로 사용할 때:
예: your_host <--> proxy1 <--> proxy2 <--> target_host
- 내장 프록시 지원이 없는 프로그램(telnet 등)을 "프록시화"할 때
- 외부에서 프록시를 통해 인트라넷에 접근할 때
- 프록시 뒤에서 DNS를 사용할 때
- 숨겨진 토르 온ion 서비스에 접근할 때
몇 가지 멋진 기능:
- 이 프로그램은 동일한 체인에서 다른 프록시 유형을 혼합할 수 있음
예: your_host <-->socks5 <--> http <--> socks4 <--> target_host
- 다양한 체인 옵션 지원
목록에서 무작위 순서 (사용자 정의 체인 길이)
정확한 순서 (목록에 나타난 순서대로)
동적 순서 (죽은 프록시를 체인에서 제외)
- 표준 libc 기능을 사용하는 대부분의 TCP 클라이언트 애플리케이션과 함께 사용 가능
심지어 네트워크 스캐너도 가능 (단, pcap 기반 스캐닝은 작동하지 않음)
- squid, sendmail 등 서버와 함께 사용 가능
- 프록시를 통한 DNS 확인 가능
설정:
proxychains는 다음 순서로 설정 파일을 찾습니다:
- 환경 변수 PROXYCHAINS_CONF_FILE에 지정된 파일 또는
proxychains 스크립트나 바이너리에 -f 인수로 제공된 파일
- ./proxychains.conf
- $(HOME)/.proxychains/proxychains.conf
- $(sysconfdir)/proxychains.conf **
** 일반적으로 /etc/proxychains.conf
사용 예:
$ proxychains telnet targethost.com
이 예에서는 proxychains.conf에 지정된 프록시(또는 프록시 체인)를 통해 telnet을 실행합니다.
사용 예:
$ proxychains -f /etc/proxychains-other.conf telnet targethost2.com
이 예에서는 다른 설정 파일(proxychains.conf 대신)을 사용하여 targethost2.com 호스트에 연결합니다.
사용 예:
$ proxyresolv targethost.com
이 예에서는 proxychains.conf에 지정된 프록시(또는 프록시 체인)를 통해 targethost.com을 확인합니다.
알려진 문제점:
-
최신 버전의 nmap은 필요하지 않은 경우에도 사용할 네트워크 인터페이스를 확인하려고 시도합니다
(예: 표준 POSIX 소켓 API를 사용하는 간단한 SYN 스캔의 경우).
이로 인해 proxychains가 예약된 주소 공간의 IP 주소를 제공할 때 오류가 발생합니다.
가능한 해결 방법: proxy_dns 비활성화, 숫자 IP 사용, 또는 nmap의 기본 SOCKS 프록시 지원 사용.
-
Mac OS X 10.11 (El Capitan)에는 SIP라는 새로운 보안 기능이 포함되어
시스템 앱의 후킹을 방지합니다.
해결 방법은 복구 모드에서 csrutil enable --without debug 명령을 실행하여
SIP를 부분적으로 비활성화하거나,
시스템 바이너리를 홈 디렉토리로 복사하여 거기서 실행하는 것입니다.
자세한 내용은 GitHub 이슈 #78을 참조하십시오.
-
glibc dynlinker에는 dlopen()된 모듈이 메인 프로그램에 설치된 것과 동일한
dlsym 후크의 적용을 받지 못하게 하는 버그 또는 보안 기능이 있습니다.
이는 주로 C로 작성된 모듈을 위해 dlopen()에 크게 의존하는 perl이나 python과 같은
스크립팅 언어에 영향을 미칩니다.
root로 실행하면 작동한다는 확인되지 않은 보고가 있습니다.
musl libc는 이 버그의 영향을 받지 않습니다.
유용한 링크
다음 사이트는 누출 확인에 유용할 수 있습니다:
https://ipfighter.com/
https://browserleaks.com/webrtc
https://dnsleaktest.com
http://check.torproject.org - tor 전용
http://ifconfig.me - curl을 통해 사용 가능
http://ifconfig.io/
커뮤니티:
#proxychains on irc.libera.chat
기부:
비트코인 기부는 환영합니다 - 다음 주소로 보내주세요:
1C9LBpuy56veBqw5N33sZMoZW8mwCw3tPh