Назад | Перейти на главную страницу

Как защитить серверы от атаки POST-запроса cgi-bin / php

Мы получили POST-запрос к нашему серверу со следующим содержанием:

%63%67%69%2D%62%69%6E/%70%68%70?%2D%64+%61%6C%6C%6F%77%5F%75%72%6C%5F%69%6E%63%6C%75%64%65%3D%6F%6E+%2D%64+%73%61%66%65%5F%6D%6F%64%65%3D%6F%66%66+%2D%64+%73%75%68%6F%73%69%6E%2E%73%69%6D%75%6C%61%74%2D%64+%64%69%73%61%62%6C%65%5F%66%75%6E%63%74%69%6F%6E%73%3D%22%22+%2D%64+%6F%70%65%6E%5F%62%61%73%65%64%69%72%3D%6E%6F%6E%65+%2D%64+%61%75%74%6F%5F%70%72%65%70%65%6E%64%5F%66%69%6C%65%3D%70%68%70%3A%2F%2F%64+%63%67%69%2E%66%6F%72%63%65%5F%72%65%64%69%72%65%63%74%3D%30+%2D%64+%63%67%69%2E%72%65%64%69%72%65%63%74%5F%73%74%61%74%75%73%5F%65%6E%76%3D%30+%2D%64+%61%75%74%6F%5F%70%72%65%70%65%6E%64%5F%66%69%6C%65%F%69%6E%70%75%74+%2D%6E

Использование декодирования URL-адресов означает:

cgi-bin/php?-d allow_url_include=on -d safe_mode=off -d suhosin.simulation=on -d disable_functions="" -d open_basedir=none -d auto_prepend_file=php://input -d cgi.force_redirect=0 -d cgi.redirect_status_env file=php://input -n

Вроде похоже на Странные URL-запросы через Nginx в Ubuntu 14.04, что пытается сделать злоумышленник?. По какому сценарию будет работать запрос? Я вижу из журналов, что мы отправили 404, но я хочу убедиться, что у нас нет других ящиков, которые могут быть уязвимы для него.

Много лет назад люди запускали PHP как CGI-скрипт (даже не FastCGI, его еще не было!) Отчасти, чтобы можно было переключить Apache с его низкопроизводительного prefork MPM на новый и несколько более производительный рабочий MPM. (А nginx еще был неизвестен, это было так давно.) Если сервер был настроен для запуска PHP как CGI-скрипта, тогда вы могли бы вызвать интерпретатор PHP прямо по адресу /cgi-bin/php.

Технически PHP все еще можно было установить как CGI, но он оказался не таким производительным, как люди надеялись, поэтому был изобретен FastCGI. Все текущие высокопроизводительные PHP-сайты используют FastCGI / FPM, как правило, с nginx или иногда с MPM событий Apache. FastCGI / FPM не уязвимы для этого, поскольку они не позволяют вызывать PHP напрямую через /cgi-bin.

Если ваш сервер - это не древняя гниющая куча PHP, запущенного как CGI, то вам не нужно беспокоиться об этом запросе.

Общая проблема ввод команды. Упрощено за счет старых небезопасных конфигураций CGI, разрешающих направление выполнения php, хотя современный веб-сервер, который отправил 404, не уязвим специально для этого.

Вы предотвращаете это, удаляя CGI там, где он не нужен, блокируя веб-сервер с правами доступа к файлам и, возможно, SELinux, и защищая свои веб-приложения. Открытый проект тестирования безопасности веб-приложений есть несколько общих советов.

Злоумышленники или пентестеры, которые хотят получить часть вашего вознаграждения за обнаружение ошибок, протестируют ваш веб-сайт на предмет распространенных ошибок, допускаемых при написании веб-приложений или настройке веб-серверов. Эти атаки основываются на том факте, что существует вероятность того, что вы, ваш поставщик, разработчики веб-приложений или ваша ИТ-команда допустили небольшую ошибку или забыли обновлять свое программное обеспечение или конфигурации на случай недавно обнаруженных проблем безопасности, поэтому они просто пытаюсь использовать множество известных проблем против каждого сервера в Интернете. Если вы не обновляете свои системы и не будете в курсе последних проблем безопасности в платформе или программном стеке, которые вы используете, в конечном итоге ваша безопасность (или безопасность ваших посетителей) будет скомпрометирована.

Есть несколько способов защитить ваши веб-приложения от успешной атаки:

  • обучите своих веб-разработчиков использованию передовых методов обеспечения безопасности, поскольку OWASP всегда является хорошей отправной точкой: https://www.owasp.org/index.php/OWASP_Guide_Project
  • поместите свои приложения за брандмауэр веб-приложений. (WAF) WAF будет сканировать все входящие запросы и просто отбрасывать те, которые выглядят так, как будто они не подходят. Простое в использовании облачное решение - это https://www.cloudflare.com/lp/waf-a/ но есть много других, будь то облако, устройства, которые вы можете установить в своем центре обработки данных, или программное обеспечение, которое вы можете запускать на своих серверах (например, palo alto, fortigate, checkpoint, watchguard), или есть бесплатные варианты, такие как https://modsecurity.org (на данный момент кажется, что менеджеры пакетов для дистрибутива должны подобрать для этого плагин / модуль nginx, но там есть модуль apache)
  • Позвольте пентестеру исследовать вашу инфраструктуру (регулярно), если вы предоставите им документацию и информацию о своих системах, они смогут выполнять эти тесты менее вслепую, чем случайный злоумышленник в Интернете, есть вероятность, что они обнаружат проблемы быстрее, чем случайный злоумышленник, и вы можете их исправить. Если вы хотите сделать это самостоятельно, OWASP - отличный ресурс: https://www.owasp.org/index.php/OWASP_Testing_Project
  • рядом с WAF вы можете установить программное обеспечение, которое блокирует пользователей, которые делают много недействительных запросов. например брутфорс (ssh, базовая аутентификация, ftp, mysql ...), вызывает множество внутренних ошибок сервера или даже большую часть страниц, которые не найдены. мое любимое программное обеспечение для этого - установить fail2ban (https://www.fail2ban.org/), который просканирует ваши файлы журналов и на несколько минут заблокирует IP-адреса с использованием правил брандмауэра.

Ни один из этих вариантов не имеет 100% гарантии, и я бы рекомендовал использовать все из них.

Чтобы получить исчерпывающий список всех мер безопасности / усиления, которые вы можете предпринять в своей системе centos7, вы можете следовать этому руководству RedHat: https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/security_guide/index/index

Исправление

Дезинфекция

URL-адрес и данные формы необходимо очистить от недопустимых символов. «Черный список» символов - это вариант, но может быть сложно придумать все символы для проверки. Также могут быть некоторые, которые еще не были обнаружены. «Белый список», содержащий только допустимые символы, или список команд должен быть создан для проверки введенных пользователем данных. Пропущенные персонажи, а также неоткрытые угрозы должны быть исключены из этого списка.

Генерический черный список для включения в командную инъекцию может быть | ; & $ > < ' \ ! >> #

Экранировать или фильтровать специальные символы для окон, ( ) < > & * ‘ | = ? ; [ ] ^ ~ ! . ” % @ / \ : + ,

Экранировать или фильтровать специальные символы для Linux, { } ( ) < > & * ‘ | = ? ; [ ] $ – # ~ ! . ” % / \ : + ,

Разрешения

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

https://www.owasp.org/index.php/Testing_for_Command_Injection_(OTG-INPVAL-013)

Также установите modsecurity в Nginx с соблюдением правил comodo.

https://waf.comodo.com/