Secure Socket Fiving (SSF) adalah alat jaringan dan toolkit.
Ini memberikan cara sederhana dan efisien untuk meneruskan data dari beberapa soket (TCP atau UDP) melalui satu terowongan TLS aman ke komputer jarak jauh.
SSF adalah lintas platform (Windows, Linux, OSX) dan hadir sebagai executable mandiri.
Fitur:
Unduh binari prebuilt
Dokumentasi
Bangun di jendela
Bangun di Unix/Linux
Cross Compile SSF (misalnya Raspberry Pi)
Penggunaan: ssf[.exe] [options] server_address
Opsi:
-v verbose_level : verbosity: kritis | kesalahan | peringatan | info | debug | jejak (default: info)
-q : Mode tenang. Jangan mencetak log
-p port : Port jarak jauh (default: 8011)
-c config_file_path : Tentukan file konfigurasi. Jika tidak diatur, 'config.json' dimuat dari direktori kerja saat ini
-m attempts : Max Upaya Koneksi Gagal Sebelum Berhenti (Default: 1)
-t delay : Time to Wait sebelum mencoba menyambung kembali dalam hitungan detik (default: 60)
-n : Jangan mencoba menghubungkan kembali klien jika koneksi terganggu
-g : Izinkan port gateway. Izinkan klien untuk mengikat soket lokal untuk layanan ke alamat tertentu daripada "localhost"
-S : Tampilkan status Microservices (ON/OFF)
Opsi Layanan:
-D [[bind_address]:]port : Jalankan proxy kaus kaki di server yang dapat diakses pada [[bind_address]:]port di sisi lokal
-F [[bind_address]:]port : Jalankan proxy kaus kaki pada host lokal yang dapat diakses dari server di [[bind_address]:]port
-X [[bind_address]:]port : Maju server shell I/O ke port yang ditentukan di sisi lokal. Setiap koneksi menciptakan proses shell baru
-Y [[bind_address]:]port : Maju I/O Lokal Lokal ke port yang ditentukan di server
-L [[bind_address]:]port:host:hostport : forward tcp koneksi ke [[bind_address]:]port pada host lokal ke host:hostport di server
-R [[bind_address]:]port:host:hostport : depan koneksi tcp ke [[bind_address]:]port di server ke host:hostport di sisi lokal
-U [[bind_address]:]port:host:hostport : maju lalu lintas udp lokal di [[bind_address]:]port ke host:hostport di server
-V [[bind_address]:]port:host:hostport : maju lalu lintas udp di [[bind_address]:]port di server untuk host:hostport di sisi lokal
Penggunaan: ssfd[.exe] [options]
Opsi:
-v verbose_level : verbosity: kritis | kesalahan | peringatan | info | debug | jejak (default: info)
-q : Mode tenang. Jangan mencetak log
-c config_file_path : Tentukan file konfigurasi. Jika tidak diatur, 'config.json' dimuat dari direktori kerja saat ini
-p port : Port Lokal (Default: 8011)
-R : Server hanya akan menyampaikan koneksi
-l host : Setel Alamat Bind Server
-g : Izinkan port gateway. Izinkan klien untuk mengikat soket lokal untuk layanan ke alamat tertentu daripada "localhost"
-S : Tampilkan status Microservices (ON/OFF)
Fitur Salin harus diaktifkan pada file konfigurasi klien dan server:
{
"ssf" : {
"services" : {
"copy" : { "enable" : true }
}
}
} Penggunaan: ssfcp[.exe] [options] [host@]/absolute/path/file [[host@]/absolute/path/file]
Opsi:
-v verbose_level : verbosity: kritis | kesalahan | peringatan | info | debug | jejak (default: info)
-q : Mode tenang. Jangan mencetak log
-c config_file_path : Tentukan file konfigurasi. Jika tidak diatur, 'config.json' dimuat dari direktori kerja saat ini
-p port : Port jarak jauh (default: 8011)
-t : Gunakan stdin sebagai input
--resume : cobalah untuk melanjutkan transfer file jika ada file tujuan
--check-integrity : Periksa integritas file di akhir transfer
-r : Salin file secara rekursif
--max-transfers arg : transfer maks secara paralel (default: 1)
Klien akan menjalankan proxy Socks di port 9000 dan mentransfer permintaan koneksi ke server 192.168.0.1:8000
ssf -D 9000 -c config.json -p 8000 192.168.0.1
Server akan terikat ke port 8011 di semua antarmuka jaringan
ssfd
Server akan terikat ke 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 }
}
}
}| Kunci Konfigurasi | Keterangan |
|---|---|
| argumen | Gunakan argumen konfigurasi alih -alih argumen CLI yang diberikan (kecuali -c ) |
Kunci arguments memungkinkan pengguna menyesuaikan argumen baris perintah dalam file konfigurasi. Fitur ini adalah cara yang nyaman untuk menyimpan profil koneksi klien yang berbeda.
Mengingat file konfigurasi berikut conf.json :
{
"ssf" : {
"arguments" : " 10.0.0.1 -p 443 -D 9000 -L 11000:localhost:12000 -v debug "
}
} SSF akan mengekstraksi argumen yang diberikan dan menggunakannya sebagai pengganti argumen awal (kecuali -c ).
Misalnya, ssf -c conf.json akan setara dengan 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 ) | Kunci Konfigurasi | Keterangan |
|---|---|
| sirkuit | Server rantai relai yang digunakan untuk membuat koneksi ke server jarak jauh |
Sirkuit adalah array JSON yang berisi server dan port bouncing yang akan digunakan untuk membangun koneksi. Mereka terdaftar sebagai berikut:
{
"ssf" : {
"circuit" : [
{ "host" : " SERVER1 " , "port" : " PORT1 " },
{ "host" : " SERVER2 " , "port" : " PORT2 " },
{ "host" : " SERVER3 " , "port" : " PORT3 " }
]
}
}Konfigurasi ini akan membuat rantai koneksi berikut:
CLIENT -> SERVER1:PORT1 -> SERVER2:PORT2 -> SERVER3:PORT3 -> TARGET
SSF mendukung koneksi melalui:
CONNECT| Kunci Konfigurasi | Keterangan |
|---|---|
| http_proxy.host | Host Proxy HTTP |
| http_proxy.port | HTTP Proxy Port |
| http_proxy.user_agent | Nilai header agen pengguna di permintaan http connect |
| http_proxy.credentials.username | Kredensial Nama Pengguna Proxy (Semua Platform: Basic atau Digest, Windows: NTLM dan bernegosiasi jika reuse = false) |
| http_proxy.credentials.password | Kredensial Kata Sandi Proksi (Semua Platform: Dasar atau Digest, Windows: NTLM dan bernegosiasi jika reuse = false) |
| http_proxy.credentials.domain | domain pengguna (NTLM dan negosiasi auth hanya pada windows) |
| http_proxy.credentials.reuse_ntlm | Gunakan kembali kredensial pengguna komputer saat ini untuk mengotentikasi dengan proxy NTLM AUTH (SSO) |
| http_proxy.credentials.reuse_kerb | Gunakan Kembali Kredensial Pengguna Komputer Saat Ini (Tiket Kerberos) untuk mengotentikasi dengan Proxy Negosiasi AUTH (SSO) |
Skema otentikasi yang didukung:
| Kunci Konfigurasi | Keterangan |
|---|---|
| socks_proxy.version | Versi kaus kaki (4 atau 5) |
| socks_proxy.host | Host proxy kaus kaki |
| socks_proxy.port | Port proxy kaus kaki |
Tidak ada skema otentikasi yang didukung.
| Kunci Konfigurasi | Keterangan |
|---|---|
| tls.ca_cert_path | filepath relatif atau absolut ke file sertifikat CA |
| tls.cert_path | filepath relatif atau absolut ke file sertifikat instan |
| tls.key_path | filepath relatif atau absolut ke file kunci pribadi |
| tls.key_password | Kata sandi utama |
| tls.dh_path | filepath relatif atau absolut untuk file diffie-hellman (hanya server) |
| tls.cipher_alg | Algoritma Cipher |
Dengan opsi default, file dan folder berikut harus berada di direktori kerja klien atau server:
./certs/dh4096.pem./certs/certificate.crt./certs/private.key./certs/trusted/ca.crtDi mana:
Jika Anda menginginkan file -file itu di jalur yang berbeda, dimungkinkan untuk menyesuaikannya berkat tombol jalur 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 "
}
}
}| Kunci Konfigurasi | Keterangan |
|---|---|
| tls.ca_cert_buffer | Konten File Sertifikat CA dalam format PEM (: Peringatan: n antara data dan header/footer PEM) |
| tls.cert_buffer | Konten file sertifikat instance dalam format PEM (: peringatan: n antara data dan header/footer PEM) |
| tls.key_buffer | Konten File Kunci Pribadi dalam Format PEM (: Peringatan: n antara data dan header/footer PEM) |
| tls.key_password | Kata sandi utama |
| tls.dh_buffer | Parameter Diffie-Hellman Konten File dalam Format PEM (: Peringatan: n antara data dan header/footer PEM, hanya server) |
| tls.cipher_alg | Algoritma Cipher |
Anda dapat mengintegrasikan parameter TLS secara langsung ke dalam file konfigurasi dengan menggunakan tls.ca_cert_buffer , tls.cert_buffer , tls.key_buffer dan tombol tls.dh_buffer .
{
"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 "
}
}
} Sertifikat, kunci pribadi, dan parameter DH harus dalam format PEM.n antara data dan header/footer PEM adalah wajib.
| Kunci Konfigurasi | Keterangan |
|---|---|
| Layanan.*. Aktifkan | Aktifkan/Nonaktifkan Microservice |
| Layanan.*. Gateway_ports | Aktifkan/Nonaktifkan Port Gateway |
| services.shell.path | jalur biner yang digunakan untuk pembuatan shell |
| services.shell.args | Argumen biner yang digunakan untuk pembuatan shell |
Fitur SSF dibangun menggunakan Microservices (penerusan TCP, kaus kaki jarak jauh, ...)
Ada 7 layanan mikro:
Setiap fitur adalah kombinasi dari setidaknya satu layanan microservice sisi klien dan satu layanan microservice sisi server.
Tabel ini merangkum bagaimana setiap fitur dirakit:
| Fitur SSF | Sisi klien Microservice | sisi server Microservice |
|---|---|---|
-L : Penerusan TCP | stream_listener | stream_forwarder |
-R : Penerusan TCP jarak jauh | stream_forwarder | stream_listener |
-U : Penerusan UDP | datagram_listener | datagram_forwarder |
-V : Penerusan UDP jarak jauh | datagram_forwarder | datagram_listener |
-D : kaus kaki | stream_listener | kaus kaki |
-F : kaus kaki jarak jauh | kaus kaki | stream_listener |
-X : shell | stream_listener | kerang |
-Y : shell jarak jauh | kerang | stream_listener |
Arsitektur ini memudahkan untuk membangun fitur jarak jauh: mereka menggunakan layanan microser yang sama tetapi di sisi yang berlawanan.
ssf dan ssfd dilengkapi dengan layanan mikro yang diaktifkan sebelumnya. Berikut adalah konfigurasi Microservices default:
{
"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 }
}
}
} Untuk mengaktifkan atau menonaktifkan layanan mikro, atur kunci enable ke true atau false .
Mencoba menggunakan fitur yang membutuhkan layanan mikro yang dinonaktifkan akan menghasilkan pesan kesalahan.
openssl dhparam 4096 -outform PEM -out dh4096.pemPertama -tama, buat file bernama extfile.txt berisi baris berikut:
[ v3_req_p ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
Kemudian, hasilkan sertifikat yang ditandatangani sendiri (CA) CA.CRT dan kunci pribadinya CA.Key :
openssl req -x509 -nodes -newkey rsa:4096 -keyout ca.key -out ca.crt -days 3650Hasilkan kunci pribadi pribadi .
openssl req -newkey rsa:4096 -nodes -keyout private.key -out certificate.csrHasilkan Sertifikat ( Certificate.pem ) dengan menandatangani CSR dengan CA ( CA.CRT , CA.KEY ):
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