SSF (Secure Socket Funneling)는 네트워크 도구 및 툴킷입니다.
단일 보안 TLS 터널을 통해 여러 소켓 (TCP 또는 UDP)에서 데이터를 원격 컴퓨터로 전달하는 간단하고 효율적인 방법을 제공합니다.
SSF는 크로스 플랫폼 (Windows, Linux, OSX)이며 독립형 실행 파일로 제공됩니다.
특징:
사전 빌드 바이너리를 다운로드하십시오
선적 서류 비치
창을 구축하십시오
UNIX/Linux를 구축하십시오
크로스 컴파일 SSF (예 : Raspberry Pi)
사용법 : ssf[.exe] [options] server_address
옵션 :
-v verbose_level : Verbosity : Critical | 오류 | 경고 | 정보 | 디버그 (기본값 : 정보)
-q : 조용한 모드. 로그를 인쇄하지 마십시오
-p port : 원격 포트 (기본값 : 8011)
-c config_file_path : 구성 파일을 지정합니다. 설정하지 않으면 'config.json'이 현재 작업 디렉토리에서로드됩니다.
-m attempts : 중지하기 전에 최대 실패 연결 시도 (기본값 : 1)
-t delay : 몇 초 만에 다시 연결하기 전에 기다릴 시간 (기본값 : 60)
-n : 연결이 중단되면 클라이언트를 다시 연결하지 마십시오.
-g : 게이트웨이 포트를 허용합니다. 클라이언트는 "LocalHost"가 아닌 특정 주소에 서비스를 위해 로컬 소켓을 바인딩하도록 허용합니다.
-S : 디스플레이 마이크로 서비스 상태 (온/꺼짐)
서비스 옵션 :
-D [[bind_address]:]port : [[bind_address]:]port 로컬 측에서 액세스 할 수있는 서버에서 양말 프록시를 실행합니다.
-F [[bind_address]:]port : [[bind_address]:]port 서버에서 액세스 할 수있는 로컬 호스트에서 양말 프록시를 실행합니다.
-X [[bind_address]:]port : 전방 서버 쉘 I/O를 로컬 쪽의 지정된 포트로 향합니다. 각 연결은 새로운 쉘 프로세스를 만듭니다
-Y [[bind_address]:]port : 서버의 지정된 포트로 로컬 쉘 I/O 전방
-L [[bind_address]:]port:host:hostport : [[bind_address]:]port : host:hostport
-R [[bind_address]:]port:host:hostport : [[bind_address]:]port : host:hostport
-U [[bind_address]:]port:host:hostport : [[bind_address]:]port 에서 host:hostport
-V [[bind_address]:]port:host:hostport : [[bind_address]:]port : host:hostport
사용법 : ssfd[.exe] [options]
옵션 :
-v verbose_level : Verbosity : Critical | 오류 | 경고 | 정보 | 디버그 (기본값 : 정보)
-q : 조용한 모드. 로그를 인쇄하지 마십시오
-c config_file_path : 구성 파일을 지정합니다. 설정하지 않으면 'config.json'이 현재 작업 디렉토리에서로드됩니다.
-p port : 로컬 포트 (기본값 : 8011)
-R : 서버는 연결 만 릴레이합니다
-l host : 서버 바인드 주소를 설정합니다
-g : 게이트웨이 포트를 허용합니다. 클라이언트는 "LocalHost"가 아닌 특정 주소에 서비스를 위해 로컬 소켓을 바인딩하도록 허용합니다.
-S : 디스플레이 마이크로 서비스 상태 (온/꺼짐)
복사 기능은 클라이언트 및 서버 구성 파일 모두에서 활성화되어야합니다.
{
"ssf" : {
"services" : {
"copy" : { "enable" : true }
}
}
} 사용법 : ssfcp[.exe] [options] [host@]/absolute/path/file [[host@]/absolute/path/file]
옵션 :
-v verbose_level : Verbosity : Critical | 오류 | 경고 | 정보 | 디버그 (기본값 : 정보)
-q : 조용한 모드. 로그를 인쇄하지 마십시오
-c config_file_path : 구성 파일을 지정합니다. 설정하지 않으면 'config.json'이 현재 작업 디렉토리에서로드됩니다.
-p port : 원격 포트 (기본값 : 8011)
-t : stdin을 입력으로 사용하십시오
--resume : 대상 파일이 있으면 파일 전송을 재개하려고합니다.
--check-integrity : 전송이 끝날 때 파일 무결성 확인
-r : 파일을 재귀 적으로 복사합니다
--max-transfers arg : 병렬로 Max 전송 (기본값 : 1)
클라이언트는 포트 9000에서 양말 프록시를 실행하고 연결 요청을 서버 192.168.0.1:8000 으로 전송합니다.
ssf -D 9000 -c config.json -p 8000 192.168.0.1
서버는 모든 네트워크 인터페이스에서 포트 8011 에 바인딩됩니다.
ssfd
서버는 192.168.0.1:9000 으로 연결됩니다
ssfd -p 9000 -l 192.168.0.1
ssfcp [-c config_file] [-p port] path/to/file host@absolute/path/directory_destination
ssfcp [-c config_file] [-p port] path/to/file* host@absolute/path/directory_destination
ssfcp [-c config_file] [-p port] -r path/to/dir host@absolute/path/directory_destination
data_in_stdin | ssfcp [-c config_file] [-p port] -t host@path/to/destination/file_destination
ssfcp [-c config_file] [-p port] remote_host@path/to/file absolute/path/directory_destination
ssfcp [-c config_file] [-p port] remote_host@path/to/file* absolute/path/directory_destination
ssfcp [-c config_file] [-p port] -r remote_host@path/to/dir absolute/path/directory_destination
{
"ssf" : {
"arguments" : " " ,
"circuit" : [],
"http_proxy" : {
"host" : " " ,
"port" : " " ,
"user_agent" : " " ,
"credentials" : {
"username" : " " ,
"password" : " " ,
"domain" : " " ,
"reuse_ntlm" : true ,
"reuse_nego" : true
}
},
"socks_proxy" : {
"version" : 5 ,
"host" : " " ,
"port" : " 1080 "
},
"tls" : {
"ca_cert_path" : " ./certs/trusted/ca.crt " ,
"cert_path" : " ./certs/certificate.crt " ,
"key_path" : " ./certs/private.key " ,
"key_password" : " " ,
"dh_path" : " ./certs/dh4096.pem " ,
"cipher_alg" : " DHE-RSA-AES256-GCM-SHA384 "
},
"services" : {
"datagram_forwarder" : { "enable" : true },
"datagram_listener" : {
"enable" : true ,
"gateway_ports" : false
},
"stream_forwarder" : { "enable" : true },
"stream_listener" : {
"enable" : true ,
"gateway_ports" : false
},
"copy" : { "enable" : false },
"shell" : {
"enable" : false ,
"path" : " /bin/bash|C: \ windows \ system32 \ cmd.exe " ,
"args" : " "
},
"socks" : { "enable" : true }
}
}
}| 구성 키 | 설명 |
|---|---|
| 논쟁 | 주어진 CLI 인수 대신 구성 인수를 사용하십시오 ( -c 제외) |
arguments 키를 통해 사용자는 구성 파일에서 명령 줄 인수를 사용자 정의 할 수 있습니다. 이 기능은 다른 클라이언트 연결 프로파일을 저장하는 편리한 방법입니다.
다음 구성 파일 conf.json :
{
"ssf" : {
"arguments" : " 10.0.0.1 -p 443 -D 9000 -L 11000:localhost:12000 -v debug "
}
} SSF는 주어진 인수를 추출하여 초기 인수 ( -c 제외)의 대체물로 사용합니다.
예를 들어, ssf -c conf.json ssf 10.0.0.1 -p 443 -D 9000 -L 11000:localhost:12000 -v debug 와 같습니다.
10.0.0.1:443 ( 10.0.0.1 -p 443 )에 연결하십시오.-D 9000 )-L 11000:localhost:12000 )-v debug )에 대한 Verbosity 레벨 설정 | 구성 키 | 설명 |
|---|---|
| 회로 | 원격 서버에 대한 연결을 설정하는 데 사용되는 릴레이 체인 서버 |
회로는 바운스 서버와 포트를 포함하는 JSON 어레이입니다. 연결을 설정하는 데 사용됩니다. 그들은 다음으로 나열됩니다.
{
"ssf" : {
"circuit" : [
{ "host" : " SERVER1 " , "port" : " PORT1 " },
{ "host" : " SERVER2 " , "port" : " PORT2 " },
{ "host" : " SERVER3 " , "port" : " PORT3 " }
]
}
}이 구성은 다음 연결 체인을 만듭니다.
CLIENT -> SERVER1:PORT1 -> SERVER2:PORT2 -> SERVER3:PORT3 -> TARGET
SSF는 다음을 통해 연결을 지원합니다.
CONNECT HTTP 메소드를 사용하여 HTTP 프록시| 구성 키 | 설명 |
|---|---|
| http_proxy.host | HTTP 프록시 호스트 |
| http_proxy.port | HTTP 프록시 포트 |
| http_proxy.user_agent | HTTP Connect 요청의 사용자 에이전트 헤더 값 |
| http_proxy.credentials.username | 프록시 사용자 이름 자격 증명 (모든 플랫폼 : 기본 또는 다이제스트, Windows : NTLM 및 REUSE = FALSE가 협상) |
| http_proxy.credentials.password | 프록시 비밀번호 자격 증명 (모든 플랫폼 : 기본 또는 다이제스트, Windows : NTLM 및 재사용이면 협상 = 거짓) |
| http_proxy.credentials.domain | 사용자 도메인 (NTLM 및 Windows에서만 인증 협상) |
| http_proxy.credentials.reuse_ntlm | 프록시 NTLM 인증 (SSO)으로 인증하려면 현재 컴퓨터 사용자 자격 증명을 재사용합니다. |
| http_proxy.credentials.reuse_kerb | 프록시 협상 인증 (SSO)으로 인증하려면 현재 컴퓨터 사용자 자격 증명 (Kerberos 티켓) 재사용 재사용 |
지원되는 인증 체계 :
| 구성 키 | 설명 |
|---|---|
| SOCKS_PROXY.VERSION | 양말 버전 (4 또는 5) |
| SOCKS_PROXY.HOST | 양말 프록시 호스트 |
| 양말 _proxy.port | 양말 프록시 포트 |
인증 체계가 지원되지 않습니다.
| 구성 키 | 설명 |
|---|---|
| tls.ca_cert_path | CA 인증서 파일에 대한 상대적 또는 절대 파일 |
| tls.cert_path | 인스턴스 인증서 파일에 대한 상대적 또는 절대 파일 |
| tls.key_path | 개인 키 파일에 대한 상대적 또는 절대 파일 |
| tls.key_password | 키 비밀번호 |
| tls.dh_path | Diffie-Hellman 파일에 대한 상대적 또는 절대 파일 (서버 만 해당) |
| tls.cipher_alg | 암호 알고리즘 |
기본 옵션을 사용하면 다음 파일과 폴더는 클라이언트 또는 서버의 작업 디렉토리에 있어야합니다.
./certs/dh4096.pem./certs/certificate.crt./certs/private.key./certs/trusted/ca.crt어디:
다른 경로에서 해당 파일을 원한다면 TLS 경로 키 덕분에 파일을 사용자 정의 할 수 있습니다.
{
"ssf" : {
"tls" : {
"ca_cert_path" : " ./certs/trusted/ca.crt " ,
"cert_path" : " ./certs/certificate.crt " ,
"key_path" : " ./certs/private.key " ,
"key_password" : " " ,
"dh_path" : " ./certs/dh4096.pem " ,
"cipher_alg" : " DHE-RSA-AES256-GCM-SHA384 "
}
}
}| 구성 키 | 설명 |
|---|---|
| tls.ca_cert_buffer | PEM 형식의 CA 인증서 파일 콘텐츠 (: 경고 : n 데이터와 PEM 헤더/바닥 글 사이) |
| tls.cert_buffer | PEM 형식의 인스턴스 인증서 파일 콘텐츠 (: 경고 : n 데이터와 PEM 헤더/바닥 글 사이) |
| tls.key_buffer | PEM 형식의 비공개 키 파일 내용 (: 경고 : n 데이터와 PEM 헤더/바닥 글 사이) |
| tls.key_password | 키 비밀번호 |
| tls.dh_buffer | diffie-hellman 매개 변수 파일 컨텐츠는 PEM 형식의 파일 콘텐츠 (: 경고 : n 데이터와 PEM 헤더/바닥자, 서버 만) |
| tls.cipher_alg | 암호 알고리즘 |
tls.ca_cert_buffer , tls.cert_buffer , tls.key_buffer 및 tls.dh_buffer 키를 사용하여 tls 매개 변수를 구성 파일에 직접 통합 할 수 있습니다.
{
"ssf" : {
"tls" : {
"ca_cert_buffer" : " -----BEGIN CERTIFICATE----- n ... n -----END CERTIFICATE----- " ,
"cert_buffer" : " -----BEGIN CERTIFICATE----- n ... n -----END CERTIFICATE----- " ,
"key_buffer" : " -----BEGIN RSA PRIVATE KEY----- n ... n -----END RSA PRIVATE KEY----- " ,
"key_password" : " " ,
"dh_buffer" : " -----BEGIN DH PARAMETERS----- n ... n -----END DH PARAMETERS----- " ,
"cipher_alg" : " DHE-RSA-AES256-GCM-SHA384 "
}
}
} 인증서, 개인 키 및 DH 매개 변수는 PEM 형식이어야합니다.n 데이터와 PEM 헤더/바닥 글 사이의 필수입니다.
| 구성 키 | 설명 |
|---|---|
| 서비스.*. 활성화 | 마이크로 서비스를 활성화/비활성화합니다 |
| 서비스.*. Gateway_ports | 게이트웨이 포트를 활성화/비활성화합니다 |
| services.shell.path | 쉘 생성에 사용되는 이진 경로 |
| Services.shell.args | 쉘 생성에 사용되는 이진 인수 |
SSF의 기능은 마이크로 서비스 (TCP 전달, 원격 양말, ...)를 사용하여 구축됩니다.
7 개의 마이크로 서비스가 있습니다.
각 기능은 하나 이상의 클라이언트 측 마이크로 서비스와 하나의 서버 측 마이크로 서비스의 조합입니다.
이 테이블은 각 기능 조립 방법을 요약합니다.
| SSF 기능 | 마이크로 서비스 클라이언트 측 | 마이크로 서비스 서버 측 |
|---|---|---|
-L : TCP 전달 | stream_listener | stream_forwarder |
-R : 원격 TCP 전달 | stream_forwarder | stream_listener |
-U : UDP 전달 | Datagram_listener | Datagram_forwarder |
-V : 원격 UDP 전달 | Datagram_forwarder | Datagram_listener |
-D : 양말 | stream_listener | 양말 |
-F : 원격 양말 | 양말 | stream_listener |
-X : 쉘 | stream_listener | 껍데기 |
-Y : 원격 쉘 | 껍데기 | stream_listener |
이 아키텍처를 사용하면 원격 기능을보다 쉽게 구축 할 수 있습니다. 동일한 마이크로 서비스를 사용하지만 반대쪽에는 사용됩니다.
ssf 및 ssfd 에는 사전 지원 마이크로 서비스가 제공됩니다. 기본 마이크로 서비스 구성은 다음과 같습니다.
{
"ssf" : {
"services" : {
"datagram_forwarder" : { "enable" : true },
"datagram_listener" : { "enable" : true },
"stream_forwarder" : { "enable" : true },
"stream_listener" : { "enable" : true },
"socks" : { "enable" : true },
"copy" : { "enable" : false },
"shell" : { "enable" : false }
}
}
} 마이크로 서비스를 활성화하거나 비활성화하려면 enable 키를 true 또는 false 로 설정하십시오.
비활성화 된 마이크로 서비스가 필요한 기능을 사용하려고하면 오류 메시지가 발생합니다.
openssl dhparam 4096 -outform PEM -out dh4096.pem우선, 다음 줄이 포함 된 extfile.txt 라는 파일을 만듭니다.
[ v3_req_p ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
그런 다음 자체 서명 된 인증서 (CA) CA.CRT 및 개인 키 CA.Key를 생성합니다.
openssl req -x509 -nodes -newkey rsa:4096 -keyout ca.key -out ca.crt -days 3650Private Key Private.key 및 인증서 서명 요청 인증서를 생성하십시오 .CSR :
openssl req -newkey rsa:4096 -nodes -keyout private.key -out certificate.csrCA ( CA.CRT , CA.Key )와 CSR에 서명하여 인증서 ( Certificate.pem )를 생성하십시오.
openssl x509 -extfile extfile.txt -extensions v3_req_p -req -sha1 -days 3650 -CA ca.crt -CAkey ca.key -CAcreateserial -in certificate.csr -out certificate.pem