Port knocking

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

В вычислительной сети, port knocking (с англ. — «стук по портам») — автоматизированный метод внешнего открытия TCP- и UDP-портов в брандмауэре отправкой определённых пакетов на заранее указанные закрытые порты. Когда будет получена верная последовательность, правила брандмауэра автоматически изменятся для разрешения клиенту, который её отправил, подключаться к ранее защищённым портам. Существует также вариант под названием Single Packet Authorization (SPA, с англ. — «Авторизация по одному пакету»), где необходим только один «стук», состоящий из зашифрованного пакета.[1][2][3][4]

Основной целью этого метода является защита потенциально уязвимого программного обеспечения от брутфорса и прочих атак, ибо если атакующий не знает верную последовательность, то защищённые порты будут казаться закрытыми, тем самым создавая вид, что на них ничего не работает. Зачастую этот метод используется для защиты SSH.[5]

Общее представление

[править | править код]

Данный метод зачастую реализуется конфигурацией демона (например, knockd), который проверяет лог брандмауэра на попытки подключения к определённым портам, и после чего изменяет его правила в случае обнаружения верной последовательности.[6] Также он может быть реализован на уровне ядра, например, использованием iptables, работающим на таком уровне[7].

Сама же последовательность похожа на секретное рукопожатие (с англ. — «secret handshake») и может состоять из любого количества TCP и UDP портов, а также в некоторых случаях ICMP и прочих пакетов из прочих протоколов. Сложность последовательности может быть любая, начиная от списка портов (например, TCP порт 1000, TCP порт 2000 и UDP порт 3000) заканчивая зависимостью от времени, IP-адреса или же зашифрованного хэша.

Для отправки самой последовательности клиенту необходимо использовать дополнительную утилиту, начиная от простого netcat и заканчивая генератором определённого хэша, и только после её отправки ему будет разрешено подключаться к системе самым обычным образом.

Большинство реализаций являются stateful системами и всегда проверяют последовательность на её корректность, прежде чем изменять правила брандмауэра. Так, например, если клиент верно отправит нужный пакет на нужный порт и после чего отправит неверный пакет на верный/неверный порт, ему придётся начинать сначала. При этом сама реализация не даёт никакого знака на то, что была отправлена неверная последовательность.

Недостатки

[править | править код]

Метод зависит от работоспособности самого демона и также от его оперативности. Его падение приведёт к ограничению доступа к защищённым портам всем пользователям, и с точки зрения безопасности, это является единой точкой отказа этого метода.

Реализации, не использующие криптографические хэши, подвержены спуфингу IP-адреса.

Также, port knocking нельзя использовать как единую систему аутентификации, не установив другие системы защиты (IDS, аутентификация по специальным ключам/паролям и прочее): с точки зрения безопасности, банальное наличие этого метода является безопасностью через неясность и если атакующий каким-либо образом узнает последовательность (например, MITM-атакой), вся система будет уязвима.

Примечания

[править | править код]
  1. Michael Rash (2004) Combining Port Knocking and Passive OS Fingerprinting with fwknop
  2. Michael Rash (2006). Single Packet Authorization with Fwknop.
  3. Michael Rash (2007). Protecting SSH Servers with Single Packet Authorization.
  4. Moxie Marlinspike (2009). Using knockknock for Single Packet Authorization.
  5. Port knocking или как обезопасить себя от брута по ssh. Хабр (10 мая 2013). Дата обращения: 10 июля 2024.
  6. PortKnocking - Community Help Wiki. help.ubuntu.com. Дата обращения: 8 июля 2023.
  7. Justin Ellingwood. How To Configure Port Knocking Using Only Iptables on an Ubuntu VPS. digitalocean.com (17 января 2014). Дата обращения: 24 апреля 2016.