Запросы HTTP и модули Apache: Творческие векторы атаки

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

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

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

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

Прямо сейчас у меня есть инструмент в моем распоряжении, который позволяет мне отправить необработанный Запрос HTTP на сервер (или скорее необработанные данные посредством установленного соединения TCP, которое могло быть интерпретировано как Запрос HTTP, если бы это следовало за формой одной, например, "ДОБИРАЮТСЯ..."), и я пытаюсь придумать другие идеи. (Нападения уровня TCP как Slowloris и Nkiller2 не являются моим фокусом в данный момент.)

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

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

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

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

12
задан madth3 7 December 2012 в 23:32
поделиться

2 ответа

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

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

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

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

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

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

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

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

Удачи!

11
ответ дан 2 December 2019 в 20:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: