Подтвердить что ты не робот

HTTP-запросы и модули Apache: рекламные атак

Немного неортодоксальный вопрос здесь:

В настоящее время я пытаюсь разбить Apache с помощью нескольких настраиваемых модулей.

Что порождает тестирование, так это то, что Apache внутренне пересылает запросы, которые он считает слишком большими (например, мусор 1 МБ), к соответствующим образом подключенным к ним модулям, заставляя их работать с данными мусора - и отсутствие обработки в пользовательских модулях вызвало Apache в его цель - подняться в огне. Ой, ой, ой.

Эта конкретная проблема, к счастью, была исправлена, но возник вопрос о том, могут ли быть другие подобные уязвимости.

Сейчас у меня есть инструмент, который позволяет мне отправлять необработанный HTTP-запрос на сервер (точнее, необработанные данные через установленное TCP-соединение, которое может быть интерпретировано как HTTP-запрос, если оно соответствует форме одного, например "GET..." ), и я пытаюсь придумать другие идеи. (Атаки уровня TCP, такие как Slowloris и Nkiller2, на данный момент не являются моей целью).

Есть ли у кого-нибудь интересные идеи, как сбивать серверные пользовательские модули с точки зрения самосожжения сервера?

  • Разбитый UTF-8? (Хотя я сомневаюсь, что Apache заботится о кодировании - я думаю, это просто жонглирует сырыми байтами.)
  • Материал, который только слишком длинный, за ним следует 0-байтовый, а затем мусор?
  • et cetera

Я не считаю себя очень хорошим тестером (я делаю это по необходимости и нехватке рабочей силы, у меня, к сожалению, нет даже элементарного понимания внутренних возможностей Apache, которые мне помогли бы), что почему я надеюсь на проницательный ответ или два или три. Возможно, некоторые из вас провели аналогичное тестирование для ваших собственных проектов?

(Если stackoverflow не подходит для этого вопроса, я извиняюсь. Не уверен, куда еще его поместить.)

4b9b3361

Ответ 1

В зависимости от того, какие другие модули вы подключили, и что еще активирует их (или это слишком большие запросы?), вы можете попробовать некоторые из следующих действий:

  • Плохие кодировки - например. overlong utf-8, как вы упомянули, есть сценарии, в которых модули зависят от этого, например определенные параметры.
  • манипулирование параметрами - опять же, в зависимости от того, что делают модули, некоторые параметры могут беспорядочно с ними, либо путем изменения значений, удаления ожидаемых параметров, либо добавления неожиданных.
  • вопреки вашему другому предложению, я бы посмотрел на данные, которые едва хватает достаточно, т.е. на один или два байта короче максимального, но в разных комбинациях - разные параметры, заголовки, тело запроса и т.д.
  • Посмотрите HTTP-запрос на контрабанду (также здесь и здесь) - неправильные заголовки запросов или недопустимые комбинации, такие как несколько Content-Length или недопустимые терминаторы, могут привести к неправильному толкованию модуля команды из Apache.
  • Также рассмотрим gzip, закодированное кодирование и т.д. Вероятно, что пользовательский модуль реализует проверку длины и декодирование, не в порядке.
  • Как насчет частичного запроса? например, запросы, которые вызывают ответ 100-Continue или запросы диапазона?
  • Инструмент fuzzing, Peach, рекомендованный @TheRook, также является хорошим направлением, но не ожидайте большой рентабельности инвестиций используя его.
  • Если у вас есть доступ к исходному коду, целенаправленная проверка кода безопасности - отличная идея. Или даже автоматическое сканирование кода с помощью инструмента, такого как Coverity (как упоминалось в @TheRook), или лучшего...
  • Даже если у вас нет доступа к исходному коду, рассмотрите тест на проникновение в систему безопасности либо опытным консультантом/пентестером, либо, по крайней мере, с помощью автоматизированного инструмента (их много). appscan, webinspect, netsparker, acunetix и т.д. и т.д.

Ответ 2

Apache - один из самых закаленных программных проектов на планете. Обнаружение уязвимости в Apache HTTPD было бы небольшим подвигом, и я рекомендую разрезать свои зубы на более легкую добычу. Для сравнения чаще встречаются уязвимости в других HTTPD, например, в Nginx, которые я видел сегодня (без шуток). Были и другие уязвимости в раскрытии исходного кода, которые очень похожи, я бы посмотрел на this и вот другой. lhttpd был оставлен на sf.net почти десять лет, и на нем влияют известные переполнения буфера, что делает его забавным приложением к контрольная работа.

При атаке проекта вы должны посмотреть, какие уязвимости были обнаружены в прошлом. Вероятно, программисты будут повторять те же ошибки снова и снова, и часто появляются шаблоны. Следуя этим шаблонам, вы можете найти больше недостатков. Вам следует попробовать найти базы данных уязвимостей, такие как искать поиск CVE. Одна вещь, которую вы увидите, это то, что модули apache чаще всего подвергаются риску.

Проект, подобный Apache, был сильно озадачен. Существуют пушистые рамки, такие как Peach. Персик помогает с путаницей по-разному, одним из способов, который это может вам помочь, - дать вам некоторые неприятные тестовые данные для работы. Fuzzing - не очень хороший подход для зрелых проектов, если вы идете по этому маршруту, я бы нацелил модули apache с максимально возможной загрузкой. (Предупреждающие проекты с очень низкой загрузкой могут быть сломанными или сложными для установки.)

Когда компания беспокоится о secuirty, они часто платят много денег за автоматизированный инструмент анализа источников, такой как Coverity. Департамент внутренней безопасности предоставил Coverity массу денег для тестирования проектов с открытым исходным кодом и Apache является одним из них. Я могу сказать вам из первых рук, что нашел переполнение буфера с fuzzing, что Coverity не подобрал. Скрытность и другие инструменты для анализа исходного кода, такие как крысы с открытым исходным кодом, будут давать много ложных срабатываний и ложных негативов, но они помогают сузить проблемы которые влияют на базу кода.

(Когда я впервые запустил RATS в ядре Linux, я чуть не упал со своего стула, потому что на моем экране перечислены тысячи вызовов на strcpy() и strcat(), но когда я выкопал в код все вызовы, в которых работает статический текст, который безопасен.)

Уязвимость resarch для разработки эксплойтов - это много веселья. Я рекомендую использовать приложения PHP/MySQL и исследовать The Whitebox. Этот проект важен, потому что он показывает, что есть некоторые уязвимости в реальном мире, которые не могут быть найдены, если вы не прочитаете код по строке вручную. Он также имеет приложения реального мира (блог и магазин), которые очень уязвимы для атаки. Фактически оба этих приложения, которые отказались из-за проблем с безопасностью. Веб-приложение fuzzer, например Wapiti или acuentix, изнасиловает эти приложения и подобные им. В блоге есть трюк. Новая установка не очень уязвима. Вы должны использовать приложение немного, попробуйте войти в систему как администратор, создайте запись в блоге, а затем отсканируйте его. При тестировании приложения веб-приложения для SQL-инъекции убедитесь, что отчет об ошибках включен. В php вы можете установить display_errors=On в php.ini.

Удачи!