Перейти к содержанию

Конфигурация веб-сервера или сервера приложений с использованием белого списка ресурсов или систем для отправки запросов

Описание

Это требование подразумевает, что веб-сервер или сервер приложений должен быть настроен с использованием белого списка (allow list) ресурсов или систем, к которым он может отправлять запросы. Это помогает ограничить взаимодействие сервера только с доверенными источниками и предотвращает несанкционированные или вредоносные запросы, что повышает безопасность приложения.

Почему это важно

  1. Безопасность: Белый список помогает предотвратить атаки, такие как SSRF (Server-Side Request Forgery), где злоумышленник может попытаться заставить сервер отправить запросы на несанкционированные адреса.
  2. Контроль доступа: Ограничение отправки запросов только к доверенным ресурсам позволяет лучше контролировать, какие данные могут быть получены или отправлены.
  3. Устойчивость к атакам: Настройка белого списка снижает вероятность успешных атак на сервер, так как он не сможет взаимодействовать с недоверенными системами.
  4. Соответствие стандартам: Многие стандарты безопасности требуют наличия механизмов контроля доступа к ресурсам.

Способы реализации с примерами

Настройка белого списка на уровне приложения: В коде приложения можно реализовать проверку URL-адресов, к которым разрешено отправлять запросы.

Пример (Python):

import requests

# Белый список разрешенных URL
ALLOWED_URLS = [
    "https://api.trusted.com",
    "https://service.example.com"
]

def send_request(url):
    if url not in ALLOWED_URLS:
        raise ValueError("URL is not allowed.")

    response = requests.get(url)
    return response.json()

# Пример использования
try:
    data = send_request("https://api.trusted.com/data")
    print(data)
except ValueError as e:
    print(f"Error: {str(e)}")

Настройка белого списка на уровне сервера: Некоторые веб-серверы и прокси-серверы могут поддерживать настройку белого списка для исходящих запросов.

Пример (Nginx): Использование модуля ngx_http_rewrite_module для ограничения доступа к определенным URL.

location /api/ {
    set $allowed 0;
    if ($request_uri ~* "^/api/trusted-endpoint") {
        set $allowed 1;
    }
    if ($allowed = 0) {
        return 403;  # Доступ запрещен
    }
    proxy_pass http://backend;
}

Пример (Apache): Использование модуля mod_rewrite для ограничения доступа.

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/api/trusted-endpoint
RewriteRule ^ - [F]  # Доступ запрещен

Примеры уязвимого кода

# Пример уязвимого кода на Python
import requests

def send_request(url):
    # Уязвимость: отсутствие проверки URL
    response = requests.get(url)  # Может отправить запрос на недоверенный адрес
    return response.json()

# Пример использования
data = send_request("http://malicious.example.com")
print(data)

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

Причины, к которым может привести несоблюдение требования

  1. Уязвимость к атакам: Без белого списка сервер может стать жертвой атак, таких как SSRF, что может привести к компрометации данных.
  2. Потеря контроля: Отсутствие контроля над исходящими запросами может привести к утечке конфиденциальной информации.
  3. Проблемы с соответствием: Несоблюдение стандартов безопасности может привести к юридическим последствиям и штрафам.

Рекомендации

  • Настройте белый список ресурсов или систем, к которым сервер может отправлять запросы.
  • Регулярно проверяйте и обновляйте белый список в соответствии с изменениями в архитектуре приложения.
  • Проводите аудит кода и конфигураций серверов на предмет отсутствия механизмов контроля доступа к ресурсам.
  • Обучите команду разработчиков важности использования белых списков для повышения безопасности приложения.