OpenWAF Rule Engine — это правиловый движок OPENWAF.
Содержание
Версия
Этот документ описывает OpenWAF Rule Engine v0.0.1.161026_beta, выпущенный 26 октября 2016 года.
Обзор
[Вернуться к TOC]
Правиловый движок вдохновлён ModSecurity и freewaf (lua-resty-waf) и реализует механизм правил ModSecurity с использованием Lua. На основе этого движка можно выполнять проверку протоколов, автоматизировать инструменты, предотвращать атаки внедрения, межсайтовые атаки, утечку информации, аномальные запросы и другие угрозы безопасности. Поддерживается динамическое добавление правил, своевременное исправление уязвимостей.
[Вернуться к TOC]
Сообщество
Для англоговорящих пользователей существует список рассылки OpenWAF-en.
Для говорящих на китайском существует список рассылки OpenWAF-cn.
[Вернуться к TOC]
Ошибки и патчи
Пожалуйста, сообщайте об ошибках, пожеланиях или патчах, используя следующие способы:
[Вернуться к TOC]
Изменения
[Вернуться к TOC]
"twaf_secrules":{
"state": true, -- 总开关
"reqbody_state": true, -- 请求体检测开关
"header_filter_state": true, -- 响应头检测开关
"body_filter_state": true, -- 响应体检сеа开关
"system_rules_state": true, -- 系统规则集检测开关
"reqbody_limit":134217728, -- 请求体检测阈值,大于阈值不检测
"respbody_limit":524288, -- 响应体检测阈值,大于阈值不检сеа
"pre_path": "/opt/OpenWAF/", -- OpenWAF安装路径
"path": "lib/twaf/inc/knowledge_db/twrules", -- 特征规则库在OpenWAF中的路径
"user_defined_rules":[ ], -- 用户自定义规则,数组
"rules_id":{ -- 特征排除
"111112": [{"REMOTE_HOST":"a.com", "URI":"^/ab"}], -- 匹配中数组中信息则对应规则失效,数组中key为变量名称,值支持正则
"111113": {}, -- 特征未被排除
"111114": [{}] -- 特征被无条件排除
}
}
Синтаксис: state true|false
По умолчанию: true
Контекст: twaf_secrules
Общий переключатель правил.
Синтаксис: reqbody_state true|false
По умолчанию: true
Контекст: twaf_secrules
Переключатель проверки тела запроса.
Синтаксис: header_filter_state true|false
По умолчанию: true
Контекст: twaf_secrules
Переключатель фильтрации заголовков ответов.
Синтаксис: body_filter_state true|false
По умолчанию: false
Контекст: twaf_secrules
Переключатель фильтрации тел ответов, по умолчанию выключен. Если он включён, необходимо добавить сторонний модуль [ngx_http_twaf_header_sent_filter_module, пока не открыт].
Синтаксис: system_rules_state true|false
По умолчанию: true
Контекст: twaf_secrules
Переключатель обнаружения системных правил.
Правила в каталоге lib/twaf/inc/knowledge_db/twrules являются системными правилами. Помимо системных правил, есть пользовательские правила в модуле twaf_secrules user_defined_rules. Системные правила редко меняются, а пользовательские правила часто добавляются и удаляются в зависимости от бизнеса, например, динамическая конфигурация кеша, сжатия, контроля времени и белых и чёрных списков.
Синтаксис: reqbody_limit number
По умолчанию: 134217728
Контекст: twaf_secrules
Верхний предел размера тела запроса, по умолчанию 134 217 728 B (128 МБ). Если тело запроса превышает установленный предел, проверка не выполняется. reqbody_limit
Значение reqbody_limit должно быть меньше значения client_body_buffer_size в nginx для того, чтобы оно вступило в силу.
respbody_limit
Синтаксис: respbody_limit число
По умолчанию: 134217728 (128 МБ)
Контекст: twaf_secrules
Ограничивает размер тела ответа. По умолчанию составляет 128 Мб. Если размер тела ответа превышает установленное ограничение, то проверка не производится.
pre_path
Синтаксис: pre_path строка
По умолчанию: /opt/OpenWAF/
Контекст: twaf_secrules
Путь установки OpenWAF.
path
Синтаксис: path строка
По умолчанию: lib/twaf/inc/knowledge_db/twrules
Контекст: twaf_secrules
Путь к базе знаний с правилами в OpenWAF.
user_defined_rules
Синтаксис: user_defined_rules <массив>
По умолчанию: []
Контекст: twaf_secrules
Правила, определяемые пользователем. Стратегия применяет их после системных правил. Системные правила применяются ко всем стратегиям и загружаются при запуске движка или через API. Они обычно не меняются динамически. Пользовательские правила применяются в рамках стратегии и используются для изменения правил, таких как временное управление временем или изменение заголовков ответов.
"user_defined_rules":[
{
"id": "1000001",
"release_version": "858",
"charactor_version": "001",
"disable": false,
"opts": {
"nolog": false
},
"phase": "access",
"action": "deny",
"meta": 403,
"severity": "high",
"rule_name": "relative time",
"desc": "Доступ к каталогу /test запрещён с понедельника по пятницу с 8:00 до 18:00.",
"match": [{
"vars": [{
"var": "URI"
}],
"operator": "begins_with",
"pattern": "/test"
},
{
"vars": [{
"var": "TIME_WDAY"
}],
"operator": "equal",
"pattern": ["1", "2", "3", "4", "5"]
},
{
"vars": [{
"var": "TIME"
}],
"operator": "str_range",
"pattern": ["08:00:00-18:00:00"]
}]
},
{
"id": "1000002",
"release_version": "858",
"charactor_version": "001",
"disable": false,
"opts": {
"nolog": false
},
"phase": "access",
"action": "deny",
"meta": 403,
"severity": "high",
"rule_name": "iputil",
"desc": "Запрещён доступ с определённых IP-адресов.",
"match": [{
"vars": [{
"var": "REMOTE_ADDR"
}],
"operator": "ip_utils",
"pattern": ["1.1.1.0/24","2.2.2.2-2.2.20.2"]
}]
}
]
rules_id
Синтаксис: rules_id таблица
По умолчанию: нет
Контекст: twaf_secrules
Используется для исключения признаков.
-- формат lua
{
id = "xxxxxx", -- ID-метка (уникальная), тип string
release_version = "858", -- версия библиотеки признаков, тип string
charactor_version = "001", -- версия правил признаков, тип string
severity = "low", -- уровень серьёзности, в OPENWAF используется "low", "medium","high", тип string
rule_name = "test", -- название признака, тип string
disable = false, -- отключить это правило, тип boolean
opts = { -- остальные действия
nolog = false, -- не записывать в журнал, true or false, по умолчанию false
add_resp_headers = { -- пользовательские заголовки ответа
key_xxx = "value_xxx" -- имя заголовка ответа = значение заголовка ответа
}
setvar = {{ -- установить переменные, массив
column = "test", -- ключ переменной первого уровня, например: TX, session и т. д., тип string
key = "test", -- ключ переменной второго уровня, например: score, id и т.д., тип string
incr = true, -- аналогично modsec в += операции, true или false, по умолчанию false
value = 5, -- значение переменной, тип number
time = 3000 -- время ожидания (мс), тип number
}}
},
phase = "test", -- этап выполнения («доступ», «фильтр заголовка», «фильтр тела»), поддерживает массивы и строки
action = "test", -- действие, ALLOW, DENY и т. д., тип string
desc = "test", -- описание
tags = {"test1", "test2"}, -- метки
match = { -- массив, отношения между match — «и», аналогично функции chain в действии modsecurity
{
В этом тексте продолжается описание структуры и параметров системы управления безопасностью веб-приложений. Переведённый текст:
**Переменные:**
* ARGS;
* ARGS_COMBINED_SIZE;
* ARGS_GET;
* ARGS_GET_NAMES;
* ARGS_NAMES;
* ARGS_POST;
* ARGS_POST_NAMES;
* BYTES_IN;
* CONNECTION_REQUESTS;
* DURATION;
* FILES;
* FILES_NAMES;
* GEO;
* GEO_CODE3;
* GEO_ID;
* GEO_CONTINENT;
* GEO_NAME;
* GZIP_RATIO;
* HTTP_COOKIE;
* HTTP_HOST;
* HTTP_REFERER;
* HTTP_USER_AGENT;
* IP_VERSION;
* MATCHED_VAR;
* MATCHED_VARS;
* MATCHED_VAR_NAME;
* MATCHED_VARS_NAMES;
* ORIGINAL_DST_ADDR;
* ORIGINAL_DST_PORT;
* POLICYID;
* QUERY_STRING;
* RAW_HEADER;
* RAW_HEADER_TRUE;
* REMOTE_ADDR;
* REMOTE_HOST;
* REMOTE_PORT;
* REMOTE_USER;
* REQUEST_BASENAME;
* REQUEST_BODY;
* REQUEST_COOKIES;
* REQUEST_COOKIES_NAMES;
* REQUEST_FILENAME;
* REQUEST_HEADERS. **IP_VERSION** — строка, IPv4 или IPv6.
**MATCHED_VAR** — неопределённый тип, текущая переменная соответствия.
**MATCHED_VARS** — таблица, все переменные в одной строке соответствия.
**MATCHED_VAR_NAME** — строка, имя текущей переменной соответствия.
**MATCHED_VARS_NAMES** — таблица, имена всех переменных в одной строке соответствия.
**ORIGINAL_DST_ADDR** — строка, адрес сервера, для режима применения прокси-сервера — это адрес WAF, для прозрачного режима — адрес внутреннего сервера.
**ORIGINAL_DST_PORT** — строка, порт сервера, для режима применения прокси-сервера — это порт WAF, для прозрачного режима — порт внутреннего сервера.
**POLICYID** — строка, идентификатор политики.
**QUERY_STRING** — строка, необработанные параметры запроса.
**RAW_HEADER** — строка, информация заголовка запроса с запросом строки.
**RAW_HEADER_TRUE** — строка, информация заголовка запроса без запроса строки.
**REMOTE_ADDR** — строка, клиентский адрес.
**REMOTE_HOST** — строка, доменное имя.
**REMOTE_PORT** — число, номер порта.
**REMOTE_USER** — строка, имя пользователя для аутентификации.
**REQUEST_BASENAME** — строка, имя файла запроса. Например: GET http://www.baidu.com/test/login.php, значение REQUEST_BASENAME — /login.php.
**REQUEST_BODY** — неопределённый тип, тело запроса.
**REQUEST_COOKIES** — таблица, файлы cookie в запросе.
**REQUEST_COOKIES_NAMES** — таблица, названия файлов cookie в запросе.
**REQUEST_FILENAME** — строка, относительный путь запроса (relative request URL). Например: GET http://www.baidu.com/test/login.php, значение REQUEST_FILENAME — /test/login.php.
**REQUEST_HEADERS** — таблица, информация заголовков запроса.
**REQUEST_HEADERS_NAMES** — таблица, ключи информации заголовков запроса.
**REQUEST_LINE** — строка, строка запроса.
**REQUEST_METHOD** — строка, метод запроса.
**REQUEST_PROTOCOL** — строка, протокол HTTP-запроса, например: HTTP/1.1.
**HTTP_VERSION** — строка, версия протокола HTTP-запроса, например: 1.1.
**URI** — строка, путь запроса, без имени домена и параметров. Например: GET http://www.baid.com/test/login.php?name=miracle, значение URI — /test/login.php.
**URL** — строка, унифицированный указатель ресурса, соединение SCHEME, HTTP_HOST и URI. Например: GET http://www.baid.com/test/login.php?name=miracle, значение URL — http://www.baid.com/test/login.php.
**REQUEST_URI** — строка, путь запроса с параметрами, но без имени домена. Например: GET http://www.baid.com/test/login.php?name=miracle, значение REQUEST_URI — /test/login.php?name=miracle.
**RESPONSE_BODY** — строка, тело ответа.
**RESPONSE_HEADERS** — таблица, информация заголовков ответа.
**RESPONSE_STATUS** — функция, код состояния ответа.
**SCHEME** — строка, http или https. Например: GET http://www.baidu.com/, значение SCHEME — http.
**SERVER_ADDR** — строка, адрес сервера.
**SERVER_NAME** — строка, название сервера. **length** — ищет длину входной строки в байтах.
**lowercase** — преобразует все символы в строчные.
**md5** — вычисляет хеш MD5 на основе данных во входных данных. Вычисленный хеш находится в необработанной двоичной форме, и его необходимо закодировать в текст для печати (или регистрации). Функции хеширования обычно используются в сочетании с hex_encode (например: «transform»: [«md5», «hex_encode»).
**normalise_path** — удаляет множественные косые черты, ссылки на каталог самого себя и обратные ссылки на каталоги (кроме случаев, когда они находятся в начале ввода) из входной строки.
**remove_nulls** — удаляет все нулевые байты из входных данных.
**remove_whitespace** — удаляет все пробельные символы из входных данных, включая горизонтальные («\t»), вертикальные («\v») и другие («\r», «\n», «\f»).
**replace_comments** — заменяет содержимое комментариев /*...*/ одним пробелом.
**remove_comments_char** — удаляет распространённые символы комментариев (/*, */, --, #).
**remove_comments** — удаляет содержимое комментариев /*...*/.
**uri_decode** — отменяет экранирование str как экранированного компонента URI. Например, «b%20r56+7» после преобразования uri_decode становится b r56 7.
**uri_encode** — экранирует str как компонент URI.
**sha1** — вычисляет хэш SHA1 на основе входной строки. Вычисленный хэш находится в необработанной двоичной форме, и его необходимо закодировать в текст для печати (или регистрации). Функции хеширования обычно используются в сочетании с hex_encode (например, «transform»: ["sha1", "hex_encode"]).
**trim_left** — удаляет пробелы с левой стороны входной строки.
**trim_right** — удаляет пробелы с правой стороны входной строки.
**trim** — удаляет пробелы как с левой, так и с правой сторон входной строки.
*В запросе также описаны операторы, но их перевод не входит в рамки запроса.* **detect_xss**
Этот оператор использует LibInjection для обнаружения атак XSS.
**ends_with**
Возвращает истину, если строка параметра найдена в конце ввода.
**equal**
Выполняет сравнение строк и возвращает истину, если строка параметров идентична строке ввода.
Эквивалентно modsecurity eq и streq.
Например:
{ "id": "xxx", ... "operator": "equal", "pattern": [12345, "html", "23456"] ... }
**greater_eq**
Проводит численное сравнение и возвращает истину, если значение ввода больше или равно предоставленному параметру.
Возвращает ложь, если предоставлено значение, которое не может быть преобразовано в число.
**greater**
Проводит численное сравнение и возвращает истину, если значение ввода больше значения параметра оператора.
Возвращает ложь, если предоставлено значение, которое не может быть преобразовано в число.
**ip_utils**
Быстро выполняет сопоставление IPv4 или IPv6 данных переменной REMOTE_ADDR. Может обрабатывать следующие форматы:
* Полный адрес IPv4: 192.168.1.100;
* Сетевой блок/адрес CIDR: 192.168.1.0/24;
* Диапазон адресов IPv4: 1.1.1.1-2.2.2.2.
ip_utils с pf эквивалентен modsecurity ipMatchF и ipMatchFromFile.
Например:
Правило выглядит следующим образом:
{ "id": "xxxx", ... "operator": "ip_utils", "pf": "/tmp/ip_blacklist.txt", ... } "/tmp/ip_blacklist.txt" содержимое файла следующее: 192.168.1.100 192.168.1.0/24 1.1.1.1-2.2.2.2
**less_eq**
Проводит численное сравнение и возвращает истину, если значение ввода меньше или равно значению параметра оператора.
Возвращает ложь, если предоставлено значение, которое не может быть преобразовано в число.
**less**
Проводит численное сравнение и возвращает истину, если значение ввода меньше значения параметра оператора.
Возвращает ложь, если предоставлено значение, которое не может быть преобразовано в число.
**pf**
pattern — это параметр операции operator.
pf указывает на pattern from file, и pattern взаимоисключают друг друга (они не могут появляться одновременно), в настоящее время поддерживается только абсолютный путь.
Комбинация pf и contains эквивалентна modsecurity pmf или pmFromFile.
Комбинация pf и ip_utils эквивалентна modsecurity ipMatchF или ipMatchFromFile.
**regex**
Сопоставляет шаблон, предоставленный в качестве параметра.
У regex также есть функция захвата modsecurity.
Описание modsecurity для захвата выглядит следующим образом: при использовании вместе с оператором регулярного выражения (@rx) действие захвата создаст копии захватов регулярного выражения и поместит их в коллекцию переменных транзакций.
В OpenWAF нет инструкции capture, но используется regex по умолчанию с включенной функцией захвата.
Например:
{ "id": "000031", "release_version": "858", "charactor_version": "001", "opts": { "nolog": false }, "phase": "access", "action": "deny", "meta": 403, "severity": "low", "rule_name": "protocol.reqHeader.c", "desc": "协议规范性约束,检测含有不合规Range或Request-Range值的HTTP请求", "match": [ { "vars": [ { "var": "REQUEST_HEADERS", "parse": { "specific": "Range" } }, { "var": "REQUEST_HEADERS", "parse": { "specific": "Request-Range" } } ], "operator": "regex", "pattern": "(\d+)\-(\d+)\," }, { "vars": [{ "var": "TX", "parse": { "specific": "2" } }], "operator": "greater_eq", "pattern": "%{TX.1}", "parse_pattern": true
}
]
}
[Вернуться к OPERATORS](#operators)
[Вернуться к TOC](#table-of-contents)
## str_match
Эквивалентно contains.
[Вернуться к OPERATORS](#operators)
[Вернуться к TOC](#table-of-contents)
## validate_url_encoding
Проверяет наличие URL-кодированных символов в предоставленной входной строке.
[Вернуться к OPERATORS](#operators)
[Вернуться к TOC](#table-of-contents)
## num_range
Определяет, находится ли значение в числовом диапазоне.
Он работает вместе с transform «length», что эквивалентно функции modsecurity «validateByteRange».
{ "id": "xxx", ... "operator": "num_range", "pattern": [10, "13", "32-126"], "transform": "length", ... }
[Вернуться к OPERATORS](#operators)
[Вернуться к TOC](#table-of-content)
## str_range
Определяет, содержится ли строка в заданном диапазоне строк.
Например, для проверки временного интервала:
{ "id": "xxx", ... "operator": "str_range", "pattern": ["01:42:00-04:32:00"], ... }
[Вернуться к OPERATORS](#operators)
[Вернуться к TOC](#table-of-content)
Others
======
* [allow](#allow)
* [deny](#deny)
* [id](#id)
* [nolog](#nolog)
* [op_negated](#op_negated)
* [parse](#parse)
* [pass](#pass)
* [phase](#phase)
* [proxy_cache](#proxy_cache)
* [redirect](#redirect)
* [charactor_version](#charactor_version)
* [severity](#severity)
* [setvar](#setvar)
* [meta](#meta)
* [transform](#transform)
* [tag](#tag)
* [release_version](#release_version)
* [robot](#robot)
* [add_resp_headers](#add_resp_headers)
[Вернуться к OTHERS](#others)
[Вернуться к TOC](#table-of-content)
## allow
Останавливает обработку правил на текущей фазе при успешном совпадении и позволяет транзакции продолжаться.
"action": "allow"
[Вернуться к OTHERS](#others)
[Вернуться к TOC](#table-of-content)
## deny
Останавливает обработку правила и прерывает транзакцию.
"action": "deny", "meta": 403
[Вернуться к OTHERS](#others)
[Вернуться к TOC](#table-of-content)
## id
Останавливает обработку правила и прерывает транзакцию.
"id": "xxxxxxx"
[Вернуться к OTHERS](#others)
[Вернуться к TOC](#table-of-content)
## nolog
Не регистрирует журнал.
"opts": { "nolog": true }
[Вернуться к OTHERS](#others)
[Вернуться к TOC](#table-of-content)
## op_negated
Инвертирует результат оператора.
"match": [{ "vars": [{ "var": "HTTP_USER_AGENT" }], "transform": "length", "operator": "less_eq", "pattern": 50, "op_negated": true }]
Равнозначно:
"match": [{ "vars": [{ "var": "HTTP_USER_AGENT" }], "transform": "length", "operator": "greater", "pattern": 50 }]
Если длина заголовка запроса user_agent больше 50, то правило совпадает.
[Вернуться к OTHERS](#others)
[Вернуться к TOC](#table-of-content)
## parse
Выполняет дополнительный анализ переменной.
Если запрос GET http://www.baidu.com?name=miracle&age=5, то:
"match": [{ "vars": [{ "var": "ARGS_GET" }], ... }] Получаем значение {"name": "miracle", "age": "5"}
"match": [{ "vars": [{ "var": "ARGS_GET", "parse": { "specific": "name" } }] }] Получаем значение ["miracle"]
"match": [{ "vars": [{ "var": "ARGS_GET", "parse": { "specific": ["name", "age"] } }] }] Получаем значение ["miracle", "5"]
"match": [{ "vars": [{ "var": "ARGS_GET", "parse": { "ignore": "name" } }] }] Получаем значение {"age": "5"}
"match": [{ "vars": [{ "var": "ARGS_GET", "parse": { "ignore": ["name", "age"] } }] }] Получаем значение []
"match": [{ "vars": [{ "var": "ARGS_GET", "parse": { "keys": true } }] }] Получаем значение ["name", "age"]
"match": [{ "vars": [{ "var": "ARGS_GET", "parse": { "values": true } }] }] Получаем значение ["miracle", "5"]
"match": [{ "vars": [{ "var": "ARGS_GET", "parse": { "all": true } }] }] Получаем значение ["name", "age", "miracle", "5"]
[Вернуться к OTHERS](#others)
[Вернуться к TOC](#table-of-content)
## pass
Продолжает обработку со следующим правилом после успешного совпадения.
"action": "pass"
[Вернуться к OTHERS](#others)
[Вернуться к TOC](#table-of-content)
## phase
Этап выполнения правила, может принимать значения «access», «header_filter», «body_filter» или их комбинацию.
{ "id": "xxx_01", "phase": "access", ... } Правило «xxx_01» выполняется на этапе access.
{ "id": "xxx_02", "phase":
...
}
"xxx_02 правило выполняется один раз на этапе access и один раз на этапе header_filter".
{
...
phase = "header_filter", -- переключатель кеша должен быть настроен на этапе header_filter
action = "pass", -- не нужно перехватывать запрос
opts = {
nolog = true, -- не нужно записывать журнал
proxy_cache = {
state = true|false, -- переключатель кеша
expired = 600 -- срок действия кеша (в секундах), по умолчанию 600 секунд
}
}
...
}
Если state равно true и полученное состояние кеша равно "MISS" или "EXPIRED", то содержимое ответа будет помещено в кеш, и одновременно будет установлен срок действия кеша.
Если state равно false, то соответствующий ключ кеша будет очищен (включая файл кеша).
Например:
# Конфигурация nginx.conf для proxy cache
http {
proxy_cache_path /opt/cache/OpenWAF-proxy levels=2:2 keys_zone=twaf_cache:101m max_size=100m use_temp_path=off;
proxy_cache_key $host$uri;
proxy_cache twaf_cache;
proxy_ignore_headers X-Accel-Expires Cache-Control Set-Cookie;
proxy_no_cache $twaf_cache_flag;
server {
set $twaf_cache_flag 1; #по умолчанию не кэшируется
}
}
# Настройка в формате lua
{
id = "test_x01", -- уникальный идентификатор
opts = {
nolog = true,
proxy_cache = {
state = true,
expired = 300
}
},
phase = "header_filter",
action = "pass",
match = {{
vars = {{
var = "URI"
},{
var = "REQUEST_HEADERS",
parse = {
specific = "Referer"
}
}},
operator = "equal",
pattern = {"/xampp/", "%{SCHEME}://%{HTTP_HOST}/xampp/"},
parse_pattern = true
}}
}
Это правило будет кэшировать страницы с URI, равным '/xampp/', и обновлять их каждые 300 секунд.
Если условие match фильтрует по коду ответа, это эквивалентно инструкции proxy_cache_valid в Nginx.
Если условие match фильтруется по методу запроса, это эквивалентно инструкции proxy_cache_methods в Nginx.
Если условием match является тип ресурса, это эквивалентно инструкции proxy_cache_content_type в Nginx.
PS: Инструкция proxy_cache_content_type является официальной инструкцией и представляет собой расширение функций, добавленных Miracle Qi в исходный код Nginx.
"action": "redirect",
"meta": "/index.html"
Указывает версию этого правила, аналогично функции rev в ModSecurity.
"charactor_version": "001"
Присваивает уровень серьёзности правилу, в котором оно используется.
Данные, используемые ниже, используются основным набором правил ModSecurity (CRS):
EMERGENCY: генерируется при корреляции данных оценки аномалий, когда есть входящая атака и исходящая утечка. ALERT: генерируется при корреляции, когда есть входящая атака и исходящая ошибка приложения. CRITICAL: Уровень аномалии 5. Это самый высокий уровень серьёзности без корреляции. Обычно он генерируется правилами веб-атак (файлы уровня 40). ERROR: Ошибка — уровень аномалии 4. В основном генерируется правилами утечки на выходе (файлы уровня 50). WARNING: уровень аномалии 3. Генерируется правилами вредоносного клиента (файлы уровня 35). NOTICE: уровень аномалии 2. Генерируется политикой протокола и файлами аномалий. INFO DEBUG
Также можно настроить уровни серьёзности, такие как low, medium, high, critical и т. д.
"severity": "high"
Создаёт, удаляет или обновляет переменную.
{
"id": "xxx_01",
opts:{
"nolog": false,
"setvar": [{
"column": "TX",
"key": "score",
"value": 5,
"incr": true
}]
},
...
}
В правиле "xxx_01" значение переменной TX сочленом score увеличивается на 5, если член score отсутствует в TX, то инициализируется значением 0, а затем увеличивается на 5.
{
"id": "xxx_02",
opts:{
"nolog": false,
"setvar": [{
"column": "TX",
"key": "score",
"value": 5
}]
},
...
}
В правиле «xxx_02» значение переменной TX с членом score устанавливается равным 5.
Дополнительная информация о действии "action".
Если действие "action" равно "deny", мета равно ответу.
"action": "deny",
"meta": 403
Если действие "action" равно "redirect", мета равна адресу перенаправления.
"action": "redirect",
"мета": "/index.html"
Это действие используется для указания конвейера преобразования, который будет использоваться для преобразования значения каждой переменной, используемой в правиле, перед этим. ## tag
Назначает тег (категорию) правилу.
Поддержка массивов "tag": ["xxx_1", "xxx_2"]
Поддержка строк "tag": "xxx_3"
Версия набора правил, эквивалентна функции ver в Action в ModSecurity.
"release_version": "858"
Распознавание человека и машины.
Необходимо заранее настроить конфигурацию модуля распознавания человека и машины, эта функция пока не доступна.
"action": "robot"
Добавление, удаление или изменение заголовков ответа.
Например, чтобы скрыть поле server:
«opts»: {
«add»_resp_headers»: {
«server»: ""
}
}
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )