Secure Socket Funneling(SSF)は、ネットワークツールとツールキットです。
単一の安全なTLSトンネルを介して、複数のソケット(TCPまたはUDP)からデータをリモートコンピューターに転送するシンプルで効率的な方法を提供します。
SSFはクロスプラットフォーム(Windows、Linux、OSX)であり、スタンドアロン実行可能ファイルとして提供されます。
特徴:
事前に作成されたバイナリをダウンロードします
ドキュメント
Windowsの上に構築します
Unix/Linuxの上に構築します
クロスコンパイルSSF(例:RaspberryPi)
使用法: ssf[.exe] [options] server_address
オプション:
-v verbose_level :verbosity:クリティカル|エラー|警告|情報|デバッグ|トレース(デフォルト:情報)
-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 :forward tcp接続[[bind_address]:]port host:hostport
-R [[bind_address]:]port:host:hostport :forward tcp接続[[bind_address]:]port host:hostport
-U [[bind_address]:]port:host:hostport :forward local udpトラフィックの[[bind_address]:]port host:hostport
-V [[bind_address]:]port:host:hostport :forward udpトラフィックのトラフィック[[bind_address]:]port host:hostport
使用法: ssfd[.exe] [options]
オプション:
-v verbose_level :verbosity:クリティカル|エラー|警告|情報|デバッグ|トレース(デフォルト:情報)
-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:クリティカル|エラー|警告|情報|デバッグ|トレース(デフォルト:情報)
-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 ) | 構成キー | 説明 |
|---|---|
| 回路 | リモートサーバーへの接続を確立するために使用されるリレーチェーンサーバー |
回路は、接続を確立するために使用されるバウンスサーバーとポートを含む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接続要求のユーザーエージェントヘッダー値 |
| http_proxy.credentials.username | プロキシユーザー名資格情報(すべてのプラットフォーム:基本またはダイジェスト、Windows:ntlmおよび交渉= false) |
| http_proxy.credentials.password | プロキシパスワード資格情報(すべてのプラットフォーム:基本またはダイジェスト、Windows:ntlmと交渉= false) |
| http_proxy.credentials.domain | ユーザードメイン(NTLMとWindowsのみでAUTHをネゴシエートする) |
| http_proxy.credentials.reuse_ntlm | 現在のコンピューターユーザーの資格情報を再利用して、プロキシNTLM AUTH(SSO)で認証する |
| http_proxy.credentials.reuse_kerb | 現在のコンピューターユーザーの資格情報(Kerberosチケット)を再利用して、プロキシ交渉auth(sso)で認証する |
サポートされている認証スキーム:
| 構成キー | 説明 |
|---|---|
| socks_proxy.version | ソックスバージョン(4または5) |
| socks_proxy.host | ソックスプロキシホスト |
| socks_proxy.port | ソックスプロキシポート |
認証スキームはサポートされていません。
| 構成キー | 説明 |
|---|---|
| TLS.CA_CERT_PATH | CA証明書ファイルに対する相対的または絶対的なFilepath |
| tls.cert_path | インスタンス証明書ファイルに対する相対的または絶対的なfilepath |
| tls.key_path | 秘密鍵ファイルに対する相対的または絶対的なfilepath |
| tls.key_password | キーパスワード |
| tls.dh_path | diffie-hellmanファイルに対する相対的または絶対的なfilepath(サーバーのみ) |
| 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形式のインスタンス証明書ファイルコンテンツ(:警告:データとPEMヘッダー/フッターの間のn ) |
| 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 KEYSを使用して、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必須です。
| 構成キー | 説明 |
|---|---|
| サービス。*。有効 | マイクロサービスを有効/無効にします |
| サービス。*。gateway_ports | ゲートウェイポートを有効/無効にします |
| Services.Shell.Path | シェル作成に使用されるバイナリパス |
| services.shell.args | シェル作成に使用されるバイナリ引数 |
SSFの機能は、マイクロサービス(TCP転送、リモートソックスなど)を使用して構築されています。
7つのマイクロサービスがあります:
各機能は、少なくとも1つのクライアントサイドマイクロサービスと1つのサーバーサイドマイクロサービスの組み合わせです。
この表は、各機能の組み立て方法を要約しています。
| 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とその秘密鍵を生成します。
openssl req -x509 -nodes -newkey rsa:4096 -keyout ca.key -out ca.crt -days 3650プライベートキープライベートを生成します。
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