- PVSM.RU - https://www.pvsm.ru -
[1]Протокол SSH — очень мощный инструмент, который используется для удалённой консоли или передачи файлов (scp, sftp). Есть менее известная функция перенаправления портов [3]. Такие SSH-туннели используются для пробития файрволов и хорошо скрываются от обнаружения стандартными средствами мониторинга типа Trisul [4], Zeek [5] (ранее был известен как Bro), Suricata [6] и Snort [7]. Поэтому для их обнаружения в корпоративной сети используются другие методы.
Например, разработчики инструмента для сетевого мониторинга Trisul Network Analytics несколько лет назад опубликовали небольшое руководство по методам обнаружения SSH-туннелей [8]. Они напоминают, что ещё во второй версии SSH 2 появилась поддержка SOCKS5, а это позволяет любому желающему установить полноценный SOCKS5-прокси вне корпоративной сети и скрыть всю HTTP-активность от инструментов сетевого мониторинга.
После обмена ключами SSH эффективно скрывает от посторонних глаз весь трафик внутри туннеля.
В статье «Практические советы, примеры и туннели SSH» [9] на Хабре рассказывалось про два типа туннелей SSH.

Прямой и обратный SSH-туннели
Самый простой прямой туннель [10] открывает порт в вашей локальной системе, который подключается к другому порту на другом конце туннеля.
localhost:~$ ssh -L 9999:127.0.0.1:80 user@remoteserver
С другой стороны, при организации обратного туннеля [11] мы настраиваем прослушивающий порт на удалённом сервере, который будет подключаться обратно к локальному порту на нашем localhost (или другой системе):
localhost:~$ ssh -v -R 0.0.0.0:1999:127.0.0.1:902 192.168.1.100 user@remoteserver
Для управления такими туннелями часто используется популярная утилита autossh [12], которая постоянно отслеживает состояние туннеля через дополнительные healthcheck-порты и перезапускает основной туннель в случае сетевого сбоя.
AutoSSH принимает те же аргументы для переадресации портов, что и SSH:
autossh -R 2222:localhost:22 ssh-server
Такой туннель будет автоматически восстанавливаться после потери связи.
Тут нужно отметить два момента, которые затрудняют отслеживание туннелей внутри сети.
Во-первых, пользователь может поддерживать такое соединение в постоянном режиме, то есть 24/7, получив постоянную точку присутствия в нашей сети.
Во-вторых, динамическое перенаправление портов можно использовать в качестве прокси, то есть для перенаправления трафика через зашифрованный туннель.
Что же можно сделать для обнаружения SSH-туннелей?
В упомянутой программе Trisul для обнаружения туннелей используются трекеры потоков [13] (flow trackers), которые в реальном времени снимаются снапшоты отдельных потоков, которые соответствуют параметрам, указанным при создании трекера.

Все SSH-потоки внутри сети можно отсортировать по объёму трафика и продолжительности соединения. Потенциально вредоносные обратные SSH-туннели от злоумышленников обычно не передают много данных, а находятся в «спящем» режиме, просто поддерживая соединение как точку присутствия в системе.

В системе анализа трафика можно создать «белый список» туннелей между легитимными точками. Остальные можно выявлять с помощью анализа трафика в инструментах вроде Zeek [5]. В частности, по размеру пакетов можно выявить нажатия клавиш в терминале:
Когда SSH туннелирует другой SSH-канал, передающий TTY-трафик, то
длина пакета = SSH-заголовок + [предыдущий SSH-пакет] + HMAC
Это может быть 76, 84, 98 байт и т. д. Точная длина зависит от размера блока шифрования и алгоритма HMAC, реализации клиентов и серверов.
Каждое нажатие клавиши отражается эхом, поэтому можно настроить инструмент мониторинга для обнаружения последовательных пакетов типа Server:76, Client:76, S:76, C:76, S:76, C:76. Такая последовательность почти наверняка означает, что в данный момент человек набирает текст в интерактивном терминале в SSH-туннеле и получает ответное эхо. Всё просто.
Например, такой скрипт на Lua [14] на базе другого скрипта-реассемблера TCP [15] в случае обнаружения пакета размером 76 байт увеличивает счётчик.
-- WHEN CALLED: when a chunk of reassembled payload is available
--
-- see note for why we check the flowkey again , to co-operate with other reassembly scripts
onpayload = function(engine, timestamp, flowkey, direction, seekpos, buffer)
if flowkey:id():match("p-0016") == nil then return; end
local MAGIC_SEGMENT_LENGTH = 76
local CHARACTERS_TRIGGER = 3
local MIN_ALERT_INTERVAL_SECS = 300
local sshF = T.SshFlowTable[ flowkey:id() ]
if sshF.seekpos[direction]==seekpos then
return -- no new data
end
if buffer:size() == MAGIC_SEGMENT_LENGTH then
sshF.hits[direction] = sshF.hits[direction] + 1
sshF.seekpos[direction]=seekpos;
else
sshF.hits[0] = 0
sshF.hits[1] = 0
sshF.seekpos[direction]=seekpos;
end
-- print("Payload length for session "..flowkey:id().. "direction = ".. direction.." bufsz=".. buffer:size() .. " seekpos = "..seekpos )
if sshF.hits[0] >= CHARACTERS_TRIGGER and sshF.hits[1] >= CHARACTERS_TRIGGER then
sshF.hits[0] = 0
sshF.hits[1] = 0
if timestamp-sshF.lastalertts<MIN_ALERT_INTERVAL_SECS then
T.log("Found Rev SSH "..flowkey:to_s().." but not alerting due to threshold interval")
else
T.log("Found Rev SSH "..flowkey:to_s().." ALERTING and TAGGING flow")
-- tag flow
engine:tag_flow(flowkey:id(),"REVSSH");
-- alert
engine:add_alert("{B5F1DECB-51D5-4395-B71B-6FA730B772D9}", flowkey:id(),"REVSSH",1,"rev ssh detected by keypress detect method");
sshF.lastalertts=timestamp
end
end
end,
Для более эффективного решения нужно учитывать и пакеты большего размера. Дело в том, что размер пакетов SSH-туннелей варьируется в зависимости от алгоритма HMAC и типа шифрования.Можно обновить скрипт или использовать несколько размеров пакетов, чтобы поймать все алгоритмы HMAC и комбинации шифрования:
local MAGIC_SEGMENT_LENGTH = 76
local CHARACTERS_TRIGGER = 3
local MIN_ALERT_INTERVAL_SECS = 300
Подходящий под заданные условия можно пометить соответствующим тегом или генерировать оповещения.

Нужно заметить, что многие ОС по умолчанию настроены на удобство работы, а не на безопасность. Поэтому в большинстве случае настройки нуждаются в усилении.
ssh-audit [16] — инструмент для аудита конфигурации ssh-сервера и клиента.
Основные функции:
Стандартный аудит можно запустить для одного сервера…
ssh-audit localhost
ssh-audit 127.0.0.1
ssh-audit 127.0.0.1:222
ssh-audit ::1
ssh-audit [::1]:222
…или для многих серверов из списка:
ssh-audit -T servers.txt
Выдача стандартного серверного аудита выглядит следующим образом (подключение через OpenSSH 5.3, неусиленный):

Стандартный аудит клиента (OpenSSH 7.2, неусиленный):

Кроме утилиты командной строки, для удобства реализован веб-интерфейс [17], через который она запускается:

Этот сервис чем-то похож на SSL Server Test [18] для быстрого аудита конфигурации SSL.
Вместе с программой распространяются советы по улучшению конфигурации с целью повышения безопасности SSH [19] для разных дистрибутивов Linux. Советы актуальны для последних версий серверных дистрибутивов Amazon Linux 2023, Debian 11−12, RedHat Enterprise Linux 7−8, CentOS 7−8, Rocky Linux 9, Ubuntu 18−22, а также клиентских Ubuntu 18−22 и Mint 19−21. Советы для свежих ОС составлены на основе этого документа 2015 года [20], который сейчас уже устарел. Там же неофициальные руководства по SSH для MacOS13−14, FreeBSD нескольких версий, различных маршрутизаторов и других устройств типа Synology DSM.
Например, усиление конфигурации на сервере Ubuntu 22.04 LTS включает пять пунктов:
- Перегенерировать ключи RSA и ED25519
rm /etc/ssh/ssh_host_* ssh-keygen -t rsa -b 4096 -f /etc/ssh/ssh_host_rsa_key -N "" ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -N ""- Удалить модуль для маленьких ключей по алгоритму Диффи — Хеллмана
awk '$5 >= 3071' /etc/ssh/moduli > /etc/ssh/moduli.safe<br> mv /etc/ssh/moduli.safe /etc/ssh/moduli- Активировать ключи RSA и ED25519
Активировать директиву HostKey для RSA и ED25519 в файле/etc/ssh/sshd_config:
sed -i 's/^#HostKey /etc/ssh/ssh_host_(rsa|ed25519)_key$/HostKey /etc/ssh/ssh_host_1_key/g' /etc/ssh/sshd_config- Ограничить поддерживаемые алгоритмы обмена ключами, шифровальные алгоритмы и MAC
echo -e "# Ограничение алгоритмов в соответствии с рекомендациями sshaudit.comnKexAlgorithms sntrup761x25519-sha512@openssh.com,curve25519-sha256,curve25519-sha256@libssh.org,gss-curve25519-sha256-,diffie-hellman-group16-sha512,gss-group16-sha512-,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha256nnCiphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctrnnMACs hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,umac-128-etm@openssh.comnnHostKeyAlgorithms sk-ssh-ed25519-cert-v01@openssh.com,ssh-ed25519-cert-v01@openssh.com,rsa-sha2-512-cert-v01@openssh.com,rsa-sha2-256-cert-v01@openssh.com,sk-ssh-ed25519@openssh.com,ssh-ed25519,rsa-sha2-512,rsa-sha2-256nnCASignatureAlgorithms sk-ssh-ed25519@openssh.com,ssh-ed25519,rsa-sha2-512,rsa-sha2-256nnGSSAPIKexAlgorithms gss-curve25519-sha256-,gss-group16-sha512-nnHostbasedAcceptedAlgorithms sk-ssh-ed25519-cert-v01@openssh.com,ssh-ed25519-cert-v01@openssh.com,sk-ssh-ed25519@openssh.com,ssh-ed25519,rsa-sha2-512-cert-v01@openssh.com,rsa-sha2-512,rsa-sha2-256-cert-v01@openssh.com,rsa-sha2-256nnPubkeyAcceptedAlgorithms sk-ssh-ed25519-cert-v01@openssh.com,ssh-ed25519-cert-v01@openssh.com,sk-ssh-ed25519@openssh.com,ssh-ed25519,rsa-sha2-512-cert-v01@openssh.com,rsa-sha2-512,rsa-sha2-256-cert-v01@openssh.com,rsa-sha2-256" > /etc/ssh/sshd_config.d/ssh-audit_hardening.conf- Перезагрузить сервер OpenSSH
service ssh restart
Кроме этого, для повышения безопасности SSH рекомендуется отключить вход по паролю.
См. также подсказки по командам SSH [21] (cheat sheet).
На Хабре также публиковались неплохие материалы, как вышеупомянутая статья [9] с практическими примерами использования туннелей SSH. Например, там приводятся примеры удалённого выполнения команд, удалённого перехвата пакетов, копирования файлов, туннелирования SSH-трафика через сеть Tor [22], передачи потокового видео по SSH с помощью VLC и SFTP [23] и др.
Вероятно, чтобы скрыть свой SSH-туннель от обнаружения методом анализа сетевого трафика по размеру пакетов, нам нужно изменить стандартный размер пакетов.
В 2023 году в ssh(1) и OpenSSH внесено важное изменение [24] с поддержкой обфускации тайминга нажатий клавиш, то есть интервалов между временем нажатия клавиш на клавиатуре.

Чтобы скрыть промежуток между нажатиями, ssh в случае малого количества трафика отправляет его по сети с фиксированными интервалами 20 мс, а также добавляет «фальшивые» нажатия. В документации появилась новая опция ObscureKeystrokeTiming [25].
Методы скрытия SSH от обнаружения особенно актуальны в Китае и других странах, где применяется технология DPI для фильтрации трафика и обнаружения/замедления трафика SSH. По некоторой информации, в качестве альтернативы VPN китайцы используют SOCKS-прокси через SSH на свой сервер за пределами подцензурной сети, и через него туннелируется весь TCP- и DNS-трафик (см. проект sshuttle [26]), но это тоже обнаруживается средствами DPI.
Возможности Великого китайского файрвола подробно изучаются и тестируются специалистами из разных стран. В прошлом году группа исследователей опубликовала отчёт о методах обнаружения зашифрованного трафика в Китае [27], а также способах его обфускации.

Примеры заблокированных и незаблокированных пакетов, которые прошли через Великий китайский файрвол
Исследование показало, что китайская цензура динамически блокирует полностью зашифрованный трафик в режиме реального времени. Новая технология DPI частично или полностью затронула многие инструменты обхода блокировок, включая Shadowsocks, Outline, VMess, Obfs4, Lantern, Psiphon и Conjure.
Как выяснилось, DPI применяет грубую, но эффективную эвристику: сначала исключается трафик, который вряд ли является полностью зашифрованным; а потом блокируется оставшийся неисключённый трафик. Эвристики основаны на фингерпринтинге распространённых протоколов, частоте установленных бит, а также на количестве, доле и положении печатаемых символов ASCII. При широком применении система потенциально блокирует около 0,6% обычного интернет-трафика.
Учёные детально изучили алгоритмы динамической блокировки — и в своей работе представили эффективные стратегии обхода для разработчиков антицензурных инструментов.
Автор:
programmerguru
Источник [28]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/shpargalka/390577
Ссылки в тексте:
[1] Image: https://habr.com/ru/companies/ruvds/articles/799255/
[2] «Справочник киберсантехника»: https://github.com/opsdisk/the_cyber_plumbers_handbook/
[3] перенаправления портов: https://www.ssh.com/academy/ssh/tunneling-example
[4] Trisul: https://www.trisul.org/
[5] Zeek: https://zeek.org/
[6] Suricata: https://suricata.io/
[7] Snort: https://www.snort.org/
[8] небольшое руководство по методам обнаружения SSH-туннелей: https://www.trisul.org/blog/detecting-ssh-tunnels/
[9] «Практические советы, примеры и туннели SSH»: https://habr.com/ru/articles/435546/
[10] прямой туннель: https://habr.com/ru/articles/435546/#2
[11] обратного туннеля: https://habr.com/ru/articles/435546/#4
[12] autossh: https://linux.die.net/man/1/autossh
[13] трекеры потоков: https://trisul.org/docs/ug/flow/tracker.html
[14] скрипт на Lua: https://github.com/trisulnsm/trisul-scripts/tree/master/lua/frontend_scripts/reassembly/revssh
[15] скрипта-реассемблера TCP: https://www.trisul.org/docs/lua/reassembly.html
[16] ssh-audit: https://github.com/jtesta/ssh-audit
[17] веб-интерфейс: https://www.ssh-audit.com/
[18] SSL Server Test: https://www.ssllabs.com/ssltest/analyze.html?d=habr.com
[19] советы по улучшению конфигурации с целью повышения безопасности SSH: https://www.ssh-audit.com/hardening_guides.html
[20] этого документа 2015 года: https://stribika.github.io/2015/01/04/secure-secure-shell.html
[21] подсказки по командам SSH: https://www.stationx.net/ssh-commands-cheat-sheet/
[22] туннелирования SSH-трафика через сеть Tor: https://habr.com/ru/articles/435546/#13
[23] потокового видео по SSH с помощью VLC и SFTP: https://habr.com/ru/articles/435546/#18
[24] важное изменение: https://habr.com/ru/companies/ruvds/articles/770792/
[25] ObscureKeystrokeTiming: https://man.openbsd.org/ssh_config.5#ObscureKeystrokeTiming
[26] sshuttle: https://github.com/sshuttle/sshuttle
[27] отчёт о методах обнаружения зашифрованного трафика в Китае: https://gfw.report/publications/usenixsecurity23/data/paper/paper.pdf
[28] Источник: https://habr.com/ru/companies/ruvds/articles/799255/?utm_source=habrahabr&utm_medium=rss&utm_campaign=799255
Нажмите здесь для печати.