Злоумышленники часто пытаются использовать исправленные ошибки или получить доступ к учетным записям по умолчанию, неиспользуемым страницам, незащищенным файлам и каталогам, чтобы получить несанкционированный доступ или подробнее узнать систему. Неправильная настройка безопасности может происходить на любом уровне стека приложений, включая сетевые службы, платформу, веб-сервер, сервер приложений, БД, платформы, пользовательский код и предустановленные виртуальные машины, контейнеры или хранилище. Автоматические сканера полезны для обнаружения неправильной конфигурации, использования учетных данных или конфигураций по умолчанию, ненужных служб, устаревших параметров.
Является ли приложение уязвимым?
Приложение может быть уязвимо, если оно:
- Отсутствует соответствующее усиление безопасности в любой части стека приложений или неправильно настроены разрешения для облачных сервисов.
- Ненужные функции включены или установлены (например, ненужные порты, службы, страницы, учетные записи или привилегии).
- Учетные записи по умолчанию и их пароли по-прежнему включены и не изменены.
- Обработка ошибок показывает следы стека или другие слишком информативные сообщения об ошибках для пользователей.
- Для модернизированных систем последние функции безопасности отключены или не настроены надежно.
- Параметры безопасности на серверах приложений, в платформах приложений (например, Struts, Spring, ASP.NET), библиотеках, базах данных и т. Д. Не установлены в безопасные значения.
- Сервер не отправляет заголовки безопасности или директивы, или они не установлены в безопасные значения.
- Программное обеспечение устарело или уязвимо (см. A9: 2017 — Использование компонентов с известными уязвимостями ).
- Без согласованного, повторяемого процесса настройки безопасности приложений системы подвергаются более высокому риску.
Как предотвратить
- Повторяемый процесс развертывания, который позволяет быстро и легко развернуть другую среду, которая должным образом заблокирована. Среды разработки, QA и производства должны быть настроены одинаково, с разными учетными данными, используемыми в каждой среде. Этот процесс должен быть автоматизирован, чтобы минимизировать усилия, необходимые для настройки новой безопасной среды.
- Минимальная платформа без лишних функций, компонентов, документации и примеров. Удалите или не устанавливайте неиспользуемые функции.
- Задача для проверки и обновления конфигураций, подходящих для всех заметок по безопасности, обновлений и исправлений в рамках процесса управления исправлениями (см. A9: 2017-Использование компонентов с известными уязвимостями ). В частности, проверьте разрешения облачного хранилища (например, разрешения S3 Bucket).
- Сегментированная прикладная архитектура, которая обеспечивает эффективное, безопасное разделение между компонентами или арендаторами с сегментацией, контейнеризацией или облачными группами безопасности (ACL).
- Отправка директив по безопасности клиентам, например, заголовки безопасности .
- Автоматизированный процесс проверки эффективности конфигураций и настроек во всех средах.
Примеры атак
- Сценарий № 1 : Сервер приложений поставляется с примерами приложений, которые не удаляются с рабочего сервера. Эти примеры приложений имеют известные уязвимости, которые злоумышленники используют для взлома сервера. Если одним из этих приложений является консоль администратора, и учетные записи по умолчанию не были изменены, злоумышленник входит в систему с паролями по умолчанию и вступает во владение.
- Сценарий № 2 : Список каталогов не отключен на сервере. Злоумышленник обнаруживает, что он может просто перечислить каталоги. Злоумышленник находит и загружает скомпилированные классы Java, которые он декомпилирует и выполняет обратный инжиниринг для просмотра кода. Затем злоумышленник обнаруживает серьезный недостаток контроля доступа в приложении.
- Сценарий № 3 : Конфигурация сервера приложений позволяет пользователям возвращать подробные сообщения об ошибках, например, следы стека. Это потенциально может раскрыть конфиденциальную информацию или лежащие в ее основе недостатки, такие как версии компонентов, которые, как известно, уязвимы.
- Сценарий № 4. У поставщика облачных услуг есть разрешения на совместное использование по умолчанию, открытые для Интернета другими пользователями CSP. Это позволяет получить доступ к конфиденциальным данным, хранящимся в облачном хранилище.
Полезные ссылки
- https://www.owasp.org/index.php/Testingforconfiguration_management
- https://www.owasp.org/index.php/TestingforErrorCode(OWASP-IG-006)
- https://www.owasp.org/index.php/OWASPSecureHeaders_Project
Причины возникновения в ASP.NET приложении:
- Некорректные или неполные настройки файла Web.Config;
- Использование трассировки;
- Использование устаревших библиотек;
- Хранение незашифрованных данных.
Пример настройки Web.Config, на что обратить внимание:
Обработка ошибок.Такой вариант конфигурации не выдает информацию о редиректе и дополнительных параметров в строке запроса.
<system.web>
<customErrors mode="on" defaultRedirect="Error.aspx" redirectMode="ResponseRewrite"/>
</system.web>
При возникновении ошибки важно не выдавать стек, а так же желательно делать редирект на страницу ошибки с кодом 302 вместо 500. Это позволит скрыть факт ошибки от автоматических сканеров (сканеры заточены на поиск ошибок по коду 500).Стандартный механизм редиректа в ASP.NET использует query строку в заголовке с именем (aspxerrorpath) это может так же быть использованно сканнерами для обнаружения факта ошибки. Для защиты можно изменить RedirectMod.
Отключение трасировки.
<system.web>
<trace enabled="false" />
</system.web>
Своевременное обновление внешних библиотек и NuGet пакетов.Шифровать файл настройки, (sensitive data) такие как строка подключения, пароли и т.п. при помощи утилиты aspnet_regiisАвтоматизация настроек безопасности в файле web.config. Использовать механизм трансформации для файлов конфигурации.Использовать в продакшине Retail model. Данный режим на уровне машины запрещает выдачу строк кода и стека в случае если web.config не был сконфигурирован.
Пример настройки в Machine.config
<system.web> <deployment retail="true" /> </system.web> |