Open Worldwide Application Security Project — это онлайн-сообщество, которое производит свободно доступные статьи, методологии, документацию, инструменты и технологии в области Интернета вещей, системного программного обеспечения и безопасности веб-приложений. OWASP предоставляет бесплатные и открытые ресурсы. Его возглавляет некоммерческая организация The OWASP Foundation. Рейтинг OWASP Top 10 – 2021 — это опубликованный результат недавнего исследования, основанного на комплексных данных, собранных более чем 40 партнерскими организациями.
OWASP регулярно публикует отчет о 10 наиболее уязвимых местах. Отчет посвящен уязвимостям в веб-приложениях.
В этом посте я хотел бы описать, как исправить некоторые из них через API-шлюз Apache APISIX .
В 2021 году в отчете упоминается:
Для получения более подробной информации, пожалуйста, проверьте полный отчет .
Исправление уязвимости зависит от ее точной природы. Например, исправление уязвимых и устаревших компонентов зависит от процесса и требует дисциплины в управлении версиями и выводе из эксплуатации старых. Однако некоторые из них являются техническими и требуют только правильной настройки в обратном прокси-сервере или шлюзе API, например , подделка запросов на стороне сервера .
Безопасность — деликатная тема, поскольку усиление безопасности не приносит никакой пользы бизнесу. Менеджеры, ориентированные на карьеру, не будут заботиться о безопасности, поскольку они не смогут продемонстрировать, что увеличили прибыль компании на X% в своей следующей ежегодной оценке. Если совет директоров серьезно не отнесется к вопросам безопасности, скорее всего, это никого не заинтересует. По этой причине большинство организаций реализуют безопасность на основе флажков, то есть правдоподобное отрицание. Если вы заинтересованы в правильной реализации безопасности, я написал несколько мыслей в предыдущем сообщении блога: Относитесь к безопасности как к риску .
В целом, защита приложений не потребует большого бюджета, если таковой вообще будет. Следовательно, мы должны подойти к этому с умом и искать существующий компонент. К счастью, OWASP предлагает готовую конфигурацию для обработки Топ-10, которую можно исправить с помощью конфигурации под названием Core Rule Set . К сожалению, он нацелен на ModSecurity:
ModSecurity, иногда называемый Modsec, представляет собой брандмауэр веб-приложений с открытым исходным кодом (WAF). Первоначально разработанный как модуль для HTTP-сервера Apache, он был развит, чтобы предоставить набор возможностей фильтрации запросов и ответов протокола передачи гипертекста, а также другие функции безопасности на ряде различных платформ, включая HTTP-сервер Apache, Microsoft IIS и Nginx. Это бесплатное программное обеспечение, выпущенное под лицензией Apache 2.0.
Хотя теоретически Nnginx можно настроить через конфигурацию Apache APISIX, есть другой, более простой способ.
Описание основного набора правил вполне соответствует нашим потребностям:
Базовый набор правил OWASP® ModSecurity (CRS) — это набор общих правил обнаружения атак для использования с ModSecurity или совместимыми брандмауэрами веб-приложений. Целью CRS является защита веб-приложений от широкого спектра атак, включая первую десятку OWASP, с минимальным количеством ложных предупреждений. CRS обеспечивает защиту от многих распространенных категорий атак, в том числе:
- SQL-инъекция (SQLi)
- Межсайтовый скриптинг (XSS)
- Включение локальных файлов (LFI)
- Удаленное включение файлов (RFI)
- PHP-инъекция кода
- Внедрение Java-кода
- HTTPокси
- Контузия
- Внедрение оболочки Unix/Windows
- Фиксация сеанса
- Скрипты/Сканер/Обнаружение ботов
- Утечки метаданных/ошибок
OWASP также предоставляет Coraza , порт ModSecurity, доступный в виде библиотеки Go. Coraza Proxy Wasm построен на основе Coraza и реализует proxy-wasm ABI , который определяет набор интерфейсов Wasm для прокси. Наконец, Apache APISIX предлагает интеграцию прокси-сервера и Wasm.
Подведем итоги:
Таким образом мы можем настроить Apache APISIX с разумными и безопасными настройками по умолчанию. Давай сделаем это.
Перво-наперво: Coraza не является частью дистрибутива Apache APISIX. Тем не менее, его легко добавить сюда с помощью Docker:
FROM apache/apisix:3.8.0-debian ENV VERSION 0.5.0 #1 ENV CORAZA_FILENAME coraza-proxy-wasm-${VERSION}.zip #1 ADD https://github.com/corazawaf/coraza-proxy-wasm/releases/download/$VERSION/$CORAZA_FILENAME . #2 USER root #3 RUN <<EOF apt-get install zip -y #4 unzip $CORAZA_FILENAME -d /usr/local/apisix/proxywasm rm $CORAZA_FILENAME apt-get remove zip -y chown -R apisix:apisix /usr/local/apisix/proxywasm EOF USER apisix #5
apisix
для повышения безопасности. Поскольку нам нужно установить пакеты, мы должны переключиться на root
.unzip
так как он не установлен, разархивировать скачанный архив, удалить архив, удалить unzip
и сменить владельца распакованной папкиapisix
Следующим шагом является настройка самого APISIX для использования плагина Coraza Wasm.
wasm: plugins: - name: coraza-filter #1 priority: 7999 #2 file: /usr/local/apisix/proxywasm/coraza-proxy-wasm.wasm #3
Dockerfile
выше.
Наконец, мы можем назначить плагин маршрутам или установить его как глобальное правило, которое будет применяться к каждому маршруту. Я использую статическую конфигурацию:
global_rules: - id: 1 plugins: coraza-filter: #1 conf: directives_map: #2 default: - SecDebugLogLevel 9 #3 - SecRuleEngine On #4 - Include @crs-setup-conf #5 - Include @owasp_crs/*.conf #6 default_directives: default #7
coraza-filter
сейчас, когда он доступен.default
, но мы можем определить несколько и использовать разные в разных маршрутах.default
, определенную выше.
Мы приступаем к определению маршрутов к https://httpbin.org/ , чтобы протестировать нашу настройку. Давайте вызовем маршрут к /get
:
curl localhost:9080?user=foobar
Ответ ожидаемый:
{ "args": { "user": "foobar" }, "headers": { "Accept": "*/*", "Host": "localhost", "User-Agent": "curl/8.4.0", "X-Amzn-Trace-Id": "Root=1-65b9fa13-75900dc029e156ec764ae204", "X-Forwarded-Host": "localhost" }, "origin": "192.168.65.1, 176.153.7.175", "url": "http://localhost/get?user=foobar" }
Теперь давайте попробуем отправить JavaScript в строке запроса. Этот запрос никоим образом не ожидается на стороне сервера, поэтому наша инфраструктура должна защитить нас от него.
curl 'localhost:9080?user=<script>alert(1)</script>'
Ответом является код состояния HTTP 403. Если мы посмотрим на журнал, то увидим следующие подсказки:
Coraza: Warning. XSS Attack Detected via libinjection [file "@owasp_crs/REQUEST-941-APPLICATION-ATTACK-XSS.conf"] Coraza: Warning. NoScript XSS InjectionChecker: HTML Injection Coraza: Warning. Javascript method detected Coraza: Access denied (phase 1). Inbound Anomaly Score Exceeded in phase 1
Кораза сделал свою работу!
Большинство организаций не стимулируют безопасность. Следовательно, нам нужно подойти к этому с умом и как можно больше использовать существующие компоненты.
Мы можем укрепить Apache APISIX в отношении топ-10 OWASP, используя Coraza и основной набор правил.
Чтобы пойти дальше:
Полный исходный код этого поста можно найти на GitHub .
Первоначально опубликовано на сайте A Java Geek 4 февраля 2024 г.