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

Глава 20. Условия угроз и репутации

Условия угроз и репутации позволяют фильтровать трафик на основе оценки безопасности URL, возраста домена, агрегированных показателей угрозы, а также типов и хешей загружаемых файлов. Эти условия предназначены для интеграции с внешними сервисами анализа угроз (threat intelligence feeds).

Расширение Redcoat. Все условия в этой главе являются расширениями Redcoat. В BlueCoat CPL для оценки угроз используется условие url.threat_risk.level= (BlueCoat), которое проверяет уровень риска URL по данным BlueCoat WebPulse:

url.threat_risk.level=(5..10)   ; уровень угрозы от 5 до 10

client.[effective_]address.ip_reputation= (BlueCoat) — будет реализовано позже. Отдельное BlueCoat-условие репутации клиентского IP (не URL) через фид анализа угроз. В Redcoat пока не реализовано (нет подсистемы анализа угроз для IP-репутации); парсер его не принимает.

Условия Redcoat предоставляют расширенную семантику: раздельные репутация, возраст домена, хеши файлов и агрегированный показатель угрозы.

20.1. url.reputation=

Проверяет репутацию запрошенного URL по данным внешнего сервиса анализа угроз. Репутация представлена перечислимым типом ReputationLevel.

Статус: планируется. Использование в CPL файле приведёт к ошибке парсинга.

Синтаксис:

url.reputation=level
url.reputation=(level, level, ...)

where:

  • level — уровень репутации. Допустимые значения: Trusted, LowRisk, MediumRisk, HighRisk, Unknown.

Слои и транзакции: Proxy.

Пример:

<Proxy>
    ; Блокировать URL с высоким риском
    url.reputation=HighRisk deny

    ; Блокировать URL с неизвестной или высокой репутацией
    url.reputation=(HighRisk, Unknown) deny

    ; Разрешить только проверенные URL
    url.reputation=Trusted ALLOW

См. также: url.reputation_score= (раздел 20.2), threat.score= (раздел 20.5), category= (глава 13).

20.2. url.reputation_score=

Проверяет числовую оценку репутации URL (0-100). Значение 0 означает безопасный URL, 100 — максимальный риск. Поддерживает точные значения и диапазоны.

Статус: планируется. Использование в CPL файле приведёт к ошибке парсинга.

Синтаксис:

url.reputation_score=value
url.reputation_score=range_start..range_end

where:

  • value — числовая оценка (0-100).
  • range_start..range_end — диапазон оценок (включительно).

Слои и транзакции: Proxy.

Пример:

<Proxy>
    ; Блокировать URL с оценкой угрозы >= 70
    url.reputation_score=70..100 deny

    ; Предупреждение для среднего риска
    url.reputation_score=40..69 exception(content_filter_warning)

См. также: url.reputation= (раздел 20.1), threat.score= (раздел 20.5).

20.3. domain.age=

Проверяет возраст доменного имени в днях (от даты регистрации по данным WHOIS). Новые домены статистически чаще используются для фишинга и распространения вредоносного ПО.

Статус: планируется. Использование в CPL файле приведёт к ошибке парсинга.

Синтаксис:

domain.age=value
domain.age=range_start..range_end

where:

  • value — возраст домена в днях.
  • range_start..range_end — диапазон возраста (включительно).

Слои и транзакции: Proxy.

Пример:

<Proxy>
    ; Блокировать домены моложе 7 дней
    domain.age=0..7 deny

    ; Предупреждение для доменов моложе 30 дней
    domain.age=0..30 exception(new_domain_warning)

См. также: domain.is_new= (раздел 20.4), url.reputation= (раздел 20.1).

20.4. domain.is_new=

Проверяет, является ли доменное имя недавно зарегистрированным. Порог «нового» домена по умолчанию — 30 дней с момента регистрации. Это упрощённый вариант условия domain.age=.

Статус: планируется. Использование в CPL файле приведёт к ошибке парсинга.

Синтаксис:

domain.is_new=yes|no

where:

  • yes — домен зарегистрирован менее 30 дней назад.
  • no — домен зарегистрирован более 30 дней назад.

Слои и транзакции: Proxy.

Пример:

<Proxy>
    ; Блокировать новые домены
    domain.is_new=yes deny

    ; Блокировать новые домены только для определённых категорий
    domain.is_new=yes category=(Finance, Shopping) deny

См. также: domain.age= (раздел 20.3).

20.5. threat.score=

Агрегированная оценка угрозы транзакции по всем доступным источникам: репутация URL, возраст домена, категория контента, результаты ICAP-сканирования. Значение в диапазоне 0-100.

Статус: планируется. Использование в CPL файле приведёт к ошибке парсинга.

Синтаксис:

threat.score=value
threat.score=range_start..range_end

where:

  • value — агрегированная оценка угрозы (0-100).
  • range_start..range_end — диапазон (включительно).

Слои и транзакции: Proxy.

Пример:

<Proxy>
    ; Блокировать при высокой агрегированной угрозе
    threat.score=80..100 deny

    ; Перенаправить на страницу предупреждения при средней угрозе
    threat.score=50..79 exception(threat_warning)

    ; Логировать при любом уровне угрозы
    threat.score=1..100 log.header.x-threat-score("$(threat.score)")

См. также: url.reputation= (раздел 20.1), url.reputation_score= (раздел 20.2).

20.6. file.type=

Проверяет тип загружаемого файла по содержимому (magic bytes), а не по расширению имени файла или MIME-типу. Условие оценивается в фазе ответа, когда тело ответа доступно для инспекции.

Статус: планируется. Использование в CPL файле приведёт к ошибке парсинга.

Синтаксис:

file.type=type_name
file.type=(type_name, type_name, ...)

where:

  • type_name — тип файла. Допустимые значения: Executable, Archive, Document, Script, Image, Video, Audio.

Слои и транзакции: Proxy.

Пример:

<Proxy>
    ; Блокировать загрузку исполняемых файлов
    file.type=Executable deny

    ; Блокировать исполняемые файлы и архивы
    file.type=(Executable, Archive) deny

    ; Разрешить только документы и изображения
    file.type=(Document, Image) ALLOW

См. также: file.hash.sha256= (раздел 20.7), file.hash.md5= (раздел 20.8), content-type= (глава 9).

20.7. file.hash.sha256=

Проверяет SHA-256 хеш загружаемого файла по списку известных вредоносных хешей (blocklist) или известных безопасных хешей (allowlist). Хеш вычисляется по телу ответа.

Статус: планируется. Использование в CPL файле приведёт к ошибке парсинга.

Синтаксис:

file.hash.sha256=hash_value

where:

  • hash_value — 64-символьный SHA-256 хеш в шестнадцатеричном формате (lowercase).

Слои и транзакции: Proxy.

Пример:

<Proxy>
    ; Блокировать файл с известным вредоносным хешем
    file.hash.sha256=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 deny

См. также: file.hash.md5= (раздел 20.8), file.type= (раздел 20.6).

20.8. file.hash.md5=

Проверяет MD5 хеш загружаемого файла. Аналогично file.hash.sha256=, но использует алгоритм MD5. MD5 не рекомендуется для криптографических целей, но широко используется в существующих базах индикаторов компрометации (IoC).

Статус: планируется. Использование в CPL файле приведёт к ошибке парсинга.

Синтаксис:

file.hash.md5=hash_value

where:

  • hash_value — 32-символьный MD5 хеш в шестнадцатеричном формате (lowercase).

Слои и транзакции: Proxy.

Пример:

<Proxy>
    ; Блокировать файл с известным MD5 хешем
    file.hash.md5=d41d8cd98f00b204e9800998ecf8427e deny

См. также: file.hash.sha256= (раздел 20.7), file.type= (раздел 20.6).


20.x. Условия результатов ICAP-сканирования (request.icap.*)

Статус: в процессе реализации. Все условия этой группы принимаются парсером (политика загружается), но фаза ICAP-сканирования запроса с передачей результатов в CPL ещё не реализована — правило с любым из этих условий не сработает. ICAP-действия (request.icap_service() и др.) при этом работают — см. главу 35.

Группа условий для проверки результатов ICAP-сканирования запроса (имена как в BlueCoat):

request.icap.apparent_data_type=(type, ...)
request.icap.error_code={none|код|(коды)}
request.icap.threat_detected={yes|no}
request.icap.threat_id="идентификатор"
request.icap.threat_id.exists={yes|no}
request.icap.threat_details="текст"
request.icap.threat_details.exists={yes|no}
request.icap.threat_source="источник"
request.icap.threat_source.exists={yes|no}