Введение

Метод внешнего открытия портов на брандмауэре

В компьютерных сетях, "стук в порт" (port knocking) – это метод внешнего открытия портов на брандмауэре путем генерации попыток соединения с набором заранее определенных закрытых портов. После получения правильной последовательности попыток соединения, правила брандмауэра динамически изменяются, чтобы разрешить хосту, отправившему эти попытки, подключение через определенные порты. Существует вариант, называемый авторизацией одним пакетом (SPA), где требуется только один "стук", состоящий из зашифрованного пакета. Основная цель "стука в порт" – предотвратить сканирование системы на предмет потенциально уязвимых служб путем сканирования портов, поскольку, если злоумышленник не отправит правильную последовательность "стуков", защищенные порты будут казаться закрытыми.

Обзор

Стук порта обычно реализуется путем настройки демона для отслеживания файла журнала брандмауэра на предмет попыток подключения к определенным портам, а затем соответствующего изменения конфигурации брандмауэра. Это также может быть выполнено на уровне ядра (с использованием пакетного фильтра уровня ядра, такого как iptables) или процессом в пользовательском пространстве, анализирующим пакеты на более высоком уровне (с использованием интерфейсов захвата пакетов, таких как pcap), что позволяет использовать уже "открытые" TCP-порты в последовательности стука. Сам "стук" порта похож на секретное рукопожатие и может состоять из любого количества пакетов TCP, UDP или даже иногда ICMP и других протоколов, отправленных на пронумерованные порты целевой машины. Сложность стука может варьироваться от простого упорядоченного списка (например, TCP-порт 1000, TCP-порт 2000, UDP-порт 3000) до сложного, зависящего от времени, IP-адреса источника и других факторов зашифрованного хеша. Демон стука порта на машине с брандмауэром прослушивает пакеты на определенных портах (либо через журнал брандмауэра, либо путем захвата пакетов). Клиентский пользователь должен иметь дополнительную утилиту, которая может быть такой же простой, как netcat или модифицированная программа ping, или столь же сложной, как полноценный генератор хешей, и использовать ее перед попыткой подключения к машине обычным способом. Большинство систем стука порта являются stateful, то есть если первая часть "стука" была успешно получена, неправильная вторая часть не позволит удаленному пользователю продолжить и не даст ему никаких подсказок о том, на каком этапе последовательности произошла ошибка. Обычно единственным признаком неудачи является то, что в конце последовательности стука ожидаемый порт не открывается. Никакие пакеты не отправляются удаленному пользователю ни в какое время. Хотя эта техника для защиты доступа к удаленным сетевым демонам не получила широкого распространения в сообществе безопасности, она активно использовалась во многих руткитах еще до 2000 года.

Преимущества

Чтобы обойти защиту от перебора портов (port knocking), требуются масштабные атаки методом грубой силы для обнаружения даже простых последовательностей. Анонимная атака грубой силы против последовательности TCP из трех портов (например, порты 1000, 2000, 3000) потребует от злоумышленника протестировать каждую комбинацию из трех портов в диапазоне от 1 до 65535 и затем сканировать каждый порт между попытками, чтобы выявить любые изменения в доступе к портам на целевой системе. Поскольку перебор портов по определению является stateful (сохраняющим состояние), запрошенный порт не будет открыт до тех пор, пока не будет получена правильная последовательность из трех номеров портов в правильном порядке и без получения каких-либо других промежуточных пакетов от источника. В среднем для определения правильной последовательности из трех портов требуется приблизительно 141 триллион (655353 / 2) пакетов. Эта техника, в сочетании с ограничением числа попыток, более длинными или сложными последовательностями и криптографическими хешами, делает успешные попытки доступа к портам крайне затруднительными. После того, как успешная последовательность перебора портов предоставлена для открытия порта, правила брандмауэра обычно открывают порт только для IP-адреса, предоставившего правильную последовательность, добавляя динамическую функциональность в поведение брандмауэра. Вместо использования предварительно настроенного статического списка разрешенных IP-адресов на брандмауэре, авторизованный пользователь, находящийся в любой точке мира, сможет открыть любой необходимый порт без помощи администратора сервера. Система также может быть настроена так, чтобы разрешить аутентифицированному пользователю вручную закрыть порт после завершения сеанса или автоматически закрыть его с помощью механизма тайм-аута. Для установления нового сеанса удаленному пользователю потребуется повторно аутентифицироваться, используя правильную последовательность. Stateful-поведение перебора портов позволяет нескольким пользователям с разных IP-адресов одновременно находиться на разных этапах аутентификации, позволяя легитимному пользователю с правильной последовательностью пройти через брандмауэр, в то время как сам брандмауэр находится под атакой с нескольких IP-адресов (при условии, что пропускная способность брандмауэра не исчерпана). С любого другого атакующего IP-адреса порты на брандмауэре по-прежнему будут казаться закрытыми. Использование криптографических хешей в последовательности перебора портов защищает от перехвата пакетов между исходной и целевой машинами, предотвращая обнаружение последовательности перебора портов или использование этой информации для создания атак повторного воспроизведения трафика. Перебор портов используется как часть стратегии многоуровневой защиты. Даже если злоумышленнику удастся успешно получить доступ к порту, другие механизмы безопасности портов все еще будут действовать наряду с механизмами аутентификации назначенной службы на открытых портах. Реализация этой техники проста, требуя как минимум shell-скрипта на сервере и пакетного файла Windows или утилиты командной строки на клиенте. Нагрузка на сервер и клиент с точки зрения трафика, использования процессора и памяти минимальна. Демоны перебора портов несложны в кодировании и требуют небольшого аудита. Система перебора портов, реализованная на службах с аутентификацией по паролю, таких как SSH, обходит проблему атак грубой силы на учетные данные для входа. В случае SSH, SSH-демон не активируется без правильной последовательности перебора портов, и атака фильтруется стеком TCP/IP, а не использует ресурсы аутентификации SSH. Для злоумышленника демон недоступен до тех пор, пока не будет предоставлена правильная последовательность перебора портов.

Относительно безопасности

Постучание по портам – это гибкое и настраиваемое дополнение к системе. Если администратор решит связать последовательность "стуков" с действием, например, запуском скрипта оболочки, другие изменения, такие как внедрение дополнительных правил брандмауэра для открытия портов для определенных IP-адресов, могут быть легко включены в этот скрипт. Одновременные сеансы поддерживаются без проблем. Использование стратегий, таких как динамическая длина последовательности и пул длин, позволяет снизить вероятность взлома последовательностей "стуков" практически до нуля. Помимо защиты от атак методом перебора паролей и неизбежного увеличения объема журналов, связанного с процессом демона, постучание по портам также защищает от эксплуатации уязвимостей протоколов. Если будет обнаружена уязвимость, которая может скомпрометировать демон в его конфигурации по умолчанию, использование постучания по портам на порту прослушивания снижает вероятность компрометации до обновления программного обеспечения или процесса. Авторизованные пользователи будут продолжать получать доступ после ввода правильной последовательности "стуков", в то время как случайные попытки доступа будут игнорироваться. Постучание по портам следует рассматривать лишь как часть комплексной стратегии защиты сети, обеспечивающей защиту от случайных и целенаправленных атак, а не как самостоятельное решение. Специалисты по сетевой безопасности в прошлом часто игнорировали постучание по портам как решение, поскольку ранние реализации полагались исключительно на предоставление правильной комбинации портов для получения доступа. Современные системы постучания по портам включают в себя такие функции, как безопасные криптографические хеши, черные и белые списки, а также динамические ответы на атаки для дальнейшего повышения эффективности системы. Постучание по портам – это эффективный способ оптимизации использования серверных ресурсов в сетях, ориентированных на Интернет. Правильно реализованное постучание по портам не снижает общую безопасность системы. Это эффективная мера, обеспечивающая дополнительный уровень защиты с минимальной нагрузкой на сервер. В худшем случае, системы, подобные постучанию по портам, могут создавать новые уязвимости из-за неправильной реализации или выявлять неоднозначное отношение к вопросам безопасности со стороны администраторов, например, в ситуациях компенсации риска.

Недостатки

Удар по порту полностью зависит от надежности демона, обрабатывающего удары по порту. Отказ демона приведет к отказу в доступе к портам для всех пользователей, что является нежелательной единой точкой отказа с точки зрения удобства использования и безопасности. Современные реализации механизма ударов по порту смягчают эту проблему, предоставляя демон мониторинга процессов, который перезапускает неработающий или зависший процесс обработки ударов по порту. Системы, не использующие криптографические хеши, уязвимы к атакам спуфинга IP-адресов. Эти атаки, являющиеся формой отказа в обслуживании, используют функциональность ударов по порту для блокировки известных IP-адресов (например, административных рабочих станций) путем отправки пакетов с подделанным IP-адресом на случайные порты. Серверы, использующие статические IP-адреса, особенно уязвимы к этим типам атак отказа в обслуживании, поскольку их адреса общеизвестны. Механизм ударов по порту может быть проблематичным в сетях с высокой задержкой. Для доступа к его функциональности удары по порту требуют прибытия пакетов в правильной последовательности. TCP/IP, напротив, предназначен для функционирования путем сборки пакетов, пришедших не по порядку, в связное сообщение. В таких ситуациях единственным решением является повторная отправка клиентом правильной последовательности пакетов периодически, пока последовательность не будет подтверждена сервером. Удары по порту не могут использоваться в качестве единственного механизма аутентификации сервера. С точки зрения безопасности, простой механизм ударов по порту полагается на безопасность через запутывание; непреднамеренная публикация последовательности ударов приводит к компрометации всех устройств, поддерживающих эту последовательность. Кроме того, незашифрованные удары по порту уязвимы к перехвату пакетов. Сетевой сниффер достаточной длины может обнаружить правильную последовательность ударов с одного IP-адреса и, таким образом, предоставить механизм для несанкционированного доступа к серверу и, как следствие, к подключенной сети. После компрометации файлы журналов на устройстве становятся источником других действительных последовательностей ударов, что выявляет еще одну точку отказа. Решения, такие как обработка каждой последовательности ударов как одноразового пароля, сводят на нет цель упрощенного администрирования. На практике удары по порту должны быть объединены с другими формами аутентификации, которые не уязвимы к атакам повторного воспроизведения или "человек посередине", чтобы обеспечить эффективность всей системы.