HTTP-запросы и модули Apache: векторы творческой атаки - PullRequest
12 голосов
/ 29 мая 2010

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

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

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

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

Прямо сейчас у меня есть инструмент, который позволяет мне отправлять необработанный HTTP-запрос на сервер (или, точнее, необработанные данные через установленное TCP-соединение, которое может быть интерпретировано как HTTP-запрос, если он принимает форму единицы, например "ПОЛУЧИТЬ ..."), и я пытаюсь придумать другие идеи. (Атаки на уровне TCP, такие как Slowloris и Nkiller2, на данный момент не .)

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

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

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

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

Ответы [ 2 ]

11 голосов
/ 02 июня 2010

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

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

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

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

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

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

Удачи!

4 голосов
/ 07 июня 2010

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

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