Sockstress — это метод атаки на серверы и другие устройства, которые принимают TCP- соединения в Интернете и других сетях на основе TCP . [1] Этот метод истощает локальные ресурсы, чтобы вызвать сбой службы или всего компьютера, по сути функционируя как атака типа «отказ в обслуживании».
Sockstress был разработан в качестве внутреннего доказательства концепции покойным Джеком С. Луисом из Outpost24. Луис обнаружил аномалии, используя Unicornscan для тестирования и зондирования сетей для корпоративной безопасности, что привело к разработке Sockstress. [2] Концепция была впервые продемонстрирована в сентябре 2008 года. [3] [4] [5] [6] Исследователи планировали опубликовать более подробную информацию на конференции T2 в Финляндии, где они продемонстрировали атаки. [7] [8] Вместо этого они решили продолжить тесное сотрудничество с сообществами поставщиков и стандартов и уделять им больше времени. В записи в блоге они сказали: «Мы не оказываем на них [поставщиков] чрезмерного давления, чтобы они в спешке выпускали плохо реализованные исправления».
Инструмент проверки концепции Nkiller2, демонстрирующий атаку, похожую на sockstress, был выпущен Фотисом Чанцисом, также известным как ithillgore, в журнале Phrack . [9] Nkiller2 работает полностью без сохранения состояния, используя методы анализа пакетов и виртуальные состояния, а также использует внутренний механизм TCP, Persist Timer, таким образом, имея возможность выполнять и бесконечно продлевать обычную DoS-атаку с минимальным объемом сетевого трафика.
Sockstress — это пользовательский TCP-сокет стресс-фреймворк, который может закрывать произвольное количество открытых сокетов без типичных накладных расходов на отслеживание состояния. После того, как сокет установлен, он способен отправлять TCP-атаки, нацеленные на определенные типы ресурсов ядра и системы, такие как счетчики, таймеры и пулы памяти. Некоторые из описанных здесь атак считаются «общеизвестными»; однако полные последствия этих атак менее известны. Кроме того, есть еще атаки, которые еще предстоит обнаружить или задокументировать. Поскольку исследователи документируют способы истощения определенных ресурсов, модули атак могут быть добавлены в дерево фреймворка sockstress.
Инструмент атаки sockstress состоит из двух основных частей:
1) Fantaip: Fantaip [10] — это программа, которая подделывает IP-адреса для использования с sockstress. Она достигает этого, отправляя ARP-ответы хостам, которые выполняют запрос на поддельный IP. Чтобы использовать fantaip, введите «fantaip -i interface CIDR», например, «fantaip -i eth0 192.168.0.128/25». Эта функция ARP/Layer 2 может быть опционально предоставлена другими способами в зависимости от требований топологии локальной сети. Поскольку sockstress завершает TCP-сокеты в пользовательском пространстве, не рекомендуется использовать sockstress с IP-адресом, настроенным для использования ядром, поскольку ядро затем будет RST сокетов. Это не является строго обязательным, так как использование брандмауэра для отбрасывания входящих пакетов с флагом rst может использоваться для достижения той же цели и предотвращения вмешательства ядра в вектор атаки.
2) Sockstress: в своем самом простом использовании sockstress просто открывает TCP-сокеты и отправляет указанный стресс-тест TCP. Он может опционально отправлять полезную нагрузку TCP, специфичную для приложения (например, HTTP-запрос). По умолчанию после атаки он игнорирует последующие коммуникации на установленном сокете. Он может опционально подтверждать зонды для активных сокетов. Атаки используют открытые ресурсы, которые цель делает доступными после рукопожатия.
Клиентские файлы cookie, активно обсуждаемые в блогах, новостях и списках обсуждений, являются деталью реализации sockstress и не являются строго необходимыми для проведения этих атак.
Тон или стиль этого раздела может не отражать энциклопедический тон , используемый в Википедии . ( Февраль 2013 ) |
Этот раздел, возможно, содержит оригинальные исследования . ( Февраль 2013 ) |
Каждая атака в рамках sockstress оказывает некоторое влияние на систему/сервис, который она атакует. Однако некоторые атаки более эффективны, чем другие, против определенной комбинации системы/сервиса.
В Sockstress нет специального модуля атаки для выполнения простой атаки с переполнением соединений, но любой из модулей атаки может быть использован в качестве такового, если используются параметры -c-1 (макс. число подключений неограниченно) и -m-1 (макс. число синхроимпульсов неограниченно).
Примеры команд:
fantaip -i eth0 192.168.1.128/25 -vvv
sockstress -A -c-1 -d 192.168.1.100 -m-1 -Mz -p22,80 -r300 -s192.168.1.128/25 -vv
Создайте соединение с прослушиваемым сокетом и после трехстороннего рукопожатия (внутри последнего ACK) отправьте 0 window.
syn -> (окно 4k) <- syn+ack (окно 32k) подтверждение -> (0 окно)
Теперь сервер должен будет «зондировать» клиента, пока не откроется нулевое окно. Это самый простой из типов атак для понимания. Результат похож на поток соединений, за исключением того, что сокеты остаются открытыми потенциально бесконечно (когда включен -A/ACK). Это описано в документе CPNI в разделе 2.2. Вариантом здесь будет PSH полезной нагрузки клиента (т. е. 'GET / HTTP/1.0') перед установкой окна в 0. Этот вариант будет похож на то, что описано в разделе 5.1.1 документа CPNI. Еще одним вариантом будет иногда объявлять окно TCP больше 0, а затем возвращаться к 0-окну.
Хорошо против:
Примеры команд:
fantaip -i eth0 192.168.1.128/25 -vvv
sockstress -A -c-1 -d 192.168.1.100 -m-1 -Mz -p22,80 -r300 -s192.168.1.128/25 -vv
Создайте соединение с прослушиваемым сокетом и при трехстороннем рукопожатии (внутри последнего ACK) установите размер окна в 4 байта, затем создайте пакет ACK/PSH с полезной нагрузкой TCP (в окне, которое, как мы надеемся, достаточно велико, чтобы принять его) с окном, по-прежнему установленным в 4 байта. Это потенциально приведет к потреблению памяти ядра, поскольку оно принимает ответ и разбивает его на крошечные 4-байтовые фрагменты. Это не похоже на поток соединений, поскольку теперь память потребляется для каждого сделанного запроса. Это надежно перевело системы Linux/Apache и Linux/sendmail в нефункционирующее состояние. Это также эффективно против других систем. Ожидается, что это будет иметь аналогичные эффекты, что описаны в документе CPNI в предпоследнем абзаце страницы 17.
Посмотрите на файл payload.c в исходном коде sockstress. Найдите оператор hport switch. В этом разделе вы можете указать полезные данные, которые будут отправлены на определенные порты. Наиболее эффективно отправлять полезные данные, которые сгенерируют максимально большой ответ (например, 'GET /largefile.zip').
Хорошо против:
Примеры команд:
fantaip -i eth0 192.168.1.128/25 -vvv
sockstress -A -c-1 -d 192.168.1.100 -m-1 -Mw -p22,80 -r300 -s192.168.1.128/25 -vv
Создайте соединение с прослушиваемым сокетом и после трехстороннего рукопожатия (внутри последнего ACK) отправьте 4 байта в начало окна, как объявлено удаленной системой. Затем отправьте 4 байта в конец окна. Затем 0-окно соединения. В зависимости от стека это может привести к тому, что удаленная система выделит несколько страниц памяти ядра на соединение. Это не похоже на затопление соединений, поскольку теперь память потребляется для каждого установленного соединения. Эта атака была создана для Linux. Она также довольно эффективна против Windows. Это атака, которая использовалась в демонстрациях sec-t и T2. Ожидается, что это будет иметь эффекты, аналогичные описанным в документе CPNI в разделе 5.2.2 5-й абзац и разделе 5.3.
Хорошо против:
Примеры команд:
fantaip -i eth0 192.168.1.128/25 -vvv
sockstress -A -c-1 -d 192.168.1.100 -m-1 -Ms -p22,80 -r300 -s192.168.1.128/25 -vv
Создайте соединение с прослушивающим сокетом. PSH — это полезная нагрузка приложения (т. е. «GET / HTTP/1.0»). FIN-соединение и 0-window-его. Эта атака будет иметь совершенно разные результаты в зависимости от стека/приложения, на которые вы нацелились. Используя это против веб-сервера Cisco 1700 (IOS), было замечено, что сокеты оставались в FIN_WAIT_1 неопределенно долго. После достаточного количества таких сокетов маршрутизатор больше не мог правильно взаимодействовать по TCP.
Посмотрите на файл payload.c в исходном коде sockstress. Найдите оператор hport switch. В этом разделе вы можете указать полезные данные, которые будут отправлены на определенные порты. Вы должны отправить полезные данные, которые будут выглядеть как обычный клиент, приложению, с которым вы взаимодействуете. При использовании этой атаки против Cisco 1700 важно было атаковать с очень низкой скоростью.
Примеры команд:
fantaip -i eth0 192.168.1.128/25 -vvv
sockstress -A -c-1 -d 192.168.1.100 -m-1 -MS -p80 -r10 -s192.168.1.128/25 -vv
Создать соединение с прослушиваемым сокетом. PSH — это полезная нагрузка приложения (т. е. 'GET / HTTP/1.0'). Тройной дубликат ACK.
Посмотрите на файл payload.c в исходном коде sockstress. Найдите оператор hport switch. В этом разделе вы можете указать полезные данные, которые будут отправлены на определенные порты. Вы должны отправить полезные данные, которые будут выглядеть как обычный клиент, приложению, с которым вы взаимодействуете.
Хорошо против:
Примеры команд:
fantaip -i eth0 192.168.1.128/25 -vvv
sockstress -A -c-1 -d 192.168.1.100 -m-1 -MR -p22,80 -r300 -s192.168.1.128/25 -vv
Создать соединение с прослушиваемым сокетом. PSH-запрос полезной нагрузки приложения, который, скорее всего, заставит приложение на другой стороне закрыть сокет (Target отправляет FIN). ACK FIN.
Хорошо против:
Если атаки успешно инициируют постоянно зависшие соединения, таблица соединений сервера может быстро заполняться, фактически создавая условие отказа в обслуживании для определенной службы. Во многих случаях мы также видели, как атаки потребляют значительные объемы очередей событий и системной памяти, что усиливает последствия атак. Результатом этого стали системы, которые больше не имеют таймеров событий для TCP-связи, зависшие системы и перезагрузки систем. Атаки не требуют значительной пропускной способности.
В то время как сделать так, чтобы одна служба стала недоступной за считанные секунды, тривиально, чтобы сделать целую систему неработоспособной, может потребоваться много минут, а в некоторых случаях и часов. Как правило, чем больше служб в системе, тем быстрее она поддастся разрушительным (сломанный TCP, блокировка системы, перезагрузка и т. д.) последствиям атак. В качестве альтернативы, усиление атаки может быть достигнуто путем атаки с большего количества IP-адресов. Мы [ who? ] обычно атакуем с /29 по /25 в наших лабораториях. Атака с /32 обычно менее эффективна для возникновения общесистемных сбоев.
Для атаки требуется успешное трехстороннее рукопожатие TCP для эффективного заполнения таблиц соединений жертвы. Это ограничивает эффективность атаки, поскольку злоумышленник не может подделать IP-адрес клиента, чтобы избежать отслеживания.
Эксплойт в стиле sockstress также требует доступа к сырым сокетам на атакующей машине, поскольку пакеты должны обрабатываться в пользовательском пространстве , а не с помощью API connect() ОС . Сырые сокеты отключены в Windows XP SP2 и выше, но драйверы устройств легко доступны [11], чтобы вернуть эту возможность в Windows. Эксплойт может быть запущен как есть на других платформах с сырыми сокетами, такими как *nix , и требует привилегий root (суперпользователя).
Поскольку злоумышленник должен иметь возможность устанавливать TCP-сокеты, чтобы воздействовать на цель, белый список доступа к TCP-сервисам на критических системах и маршрутизаторах в настоящее время является наиболее эффективным средством смягчения. Использование IPsec также является эффективным средством смягчения.
Согласно ответу Cisco [12], текущая рекомендация по смягчению заключается в том, чтобы разрешить доступ к службам на основе TCP только доверенным источникам. Это смягчение особенно важно для критически важных инфраструктурных устройств. Red Hat заявила, что «из-за решения апстрима не выпускать обновления, Red Hat не планирует выпускать обновления для решения этих проблем; однако последствия этих атак могут быть уменьшены». В Linux использование iptables с отслеживанием соединений и ограничением скорости может значительно ограничить последствия эксплуатации. [13]