Безопасное воронье гнезда (SSF) - это сетевой инструмент и инструментарий.
Он обеспечивает простые и эффективные способы направления данных из нескольких сокетов (TCP или UDP) через один защищенный туннель TLS на удаленный компьютер.
SSF - это кросс -платформ (Windows, Linux, OSX), и она выступает в качестве автономных исполнителей.
Функции:
Скачать предварительно построенные двоичные файлы
Документация
Строить на окнах
Построить на Unix/Linux
Cross Compling SSF (например, Raspberry Pi)
Использование: 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 : ввод -вывод Server Seard Shell в указанный порт на локальной стороне. Каждое соединение создает новый процесс оболочки
-Y [[bind_address]:]port : пересылка локальной раковины ввода/вывода в указанный порт на сервере
-L [[bind_address]:]port:host:hostport : Forward TCP соединения с [[bind_address]:]port на локальном хосте на host:hostport на сервере
-R [[bind_address]:]port:host:hostport : Пересошайте соединения TCP с [[bind_address]:]port на сервере на host:hostport на локальной стороне
-U [[bind_address]:]port:host:hostport : Пересадкий локальный трафик UDP на [[bind_address]:]port на host:hostport на сервере
-V [[bind_address]:]port:host:hostport : перенаправить трафик 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_proxy.host | HTTP -прокси -хост |
| http_proxy.port | HTTP -прокси -порт |
| http_proxy.user_agent | Значение заголовка пользователя-агента в запросе http connect |
| http_proxy.credentials.username | Учетные данные по имени пользователя Proxy (все платформа: базовая или усваивающая, Windows: NTLM и договоритесь, если повторно используйте = false) |
| http_proxy.credentials.password | Учебные данные по паролю прокси (вся платформа: базовая или дайджест, Windows: NTLM и согласовайтесь, если повторно используйте = false) |
| http_proxy.credentials.domain | Пользовательский домен (NTLM и договоритесь только в Windows) только в Windows) |
| http_proxy.credentials.reuse_ntlm | повторно используйте текущие учетные данные пользователя компьютера для аутентификации с Proxy NTLM Auth (SSO) |
| http_proxy.credentials.reuse_kerb | Повторно используйте текущие учетные данные пользователя компьютера (билет Kerberos) для аутентификации с Proxy Deganiate Auth (SSO) |
Поддерживаемые схемы аутентификации:
| Ключ конфигурации | Описание |
|---|---|
| socks_proxy.version | Версия носков (4 или 5) |
| socks_proxy.host | Прокси -хост носков |
| socks_proxy.port | Носки прокси -порт |
Схема аутентификации не поддерживается.
| Ключ конфигурации | Описание |
|---|---|
| tls.ca_cert_path | Относительный или абсолютный FilePath в файл сертификата CA |
| tls.cert_path | Относительный или абсолютный FilePath в файл сертификата экземпляра |
| tls.key_path | Относительный или абсолютный FilePath в файл личного ключа |
| tls.key_password | ключевой пароль |
| tls.dh_path | Относительный или абсолютный FilePath в файле 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 | Содержание файла сертификата CA в формате PEM (: Предупреждение: n между данными и заголовком/нижним колонтитулом PEM) |
| tls.cert_buffer | Содержание файла сертификата экземпляра в формате PEM (: Warning: n между данными и заголовком PEM/нижний колонтитул) |
| tls.key_buffer | Содержание файла закрытого ключа в формате PEM (: Warning: n между данными и заголовком PEM/нижний колонтитул) |
| tls.key_password | ключевой пароль |
| tls.dh_buffer | Параметры Diffie-Hellman Параметры файла в формате PEM (: предупреждение: n между данными и заголовком/нижнечеем PEM, только на сервере) |
| tls.cipher_alg | Алгоритм шифра |
Вы можете интегрировать параметры TLS непосредственно в файл конфигурации, используя tls.ca_cert_buffer , tls.cert_buffer , tls.key_buffer и 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 "
}
}
} Сертификаты, частные ключи и параметры DH должны быть в формате PEM.n между данными и заголовком PEM/нижний колонтитул являются обязательными.
| Ключ конфигурации | Описание |
|---|---|
| Услуги.*. Включить | Включить/отключить микросервис |
| Сервисы.*. Gateway_ports | Включить/отключить порты шлюза |
| Services.shell.path | Бинарный путь, используемый для создания раковины |
| Services.shell.args | Бинарные аргументы, используемые для создания оболочки |
Функции SSF созданы с использованием микросервисов (пересылка TCP, удаленные носки, ...)
Есть 7 микросервисов:
Каждая функция представляет собой комбинацию, по крайней мере, одного клиентского микросервиса и микросервиса на стороне сервера.
Эта таблица подводит итог, как собирается каждая функция:
| Функция SSF | MicroService Client Side | MicroService Server |
|---|---|---|
-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 3650Создайте частный ключ Private.Key и сертификат запроса на подписку сертификата. CSR :
openssl req -newkey rsa:4096 -nodes -keyout private.key -out certificate.csrСоздайте сертификат ( setmate.pem ), подписав CSR с 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