Настройка интеграции с SIEM системами
Снимок экрана 135 – Создание шаблона отправки журналов в стороннюю SIEM-систему
Примеры шаблонов:
Шаблон LEEF-формата:
'{{time}} {{host_ip}} LEEF:2.0|iBatyr WAF|1.0|{{req.obj_id}}|src={{req.src_ip}}\tspt={{req.src_port}}\tdst={{req.dst_ip}}\tdpt={{req.dst_port}}\trequest_time={{req.time}}\tresponse_time={{resp.time}}\turl={{req.raw_uri}}\tsev={{severity}}\treq_tree.headers.cookie={{req_tree.tree.headers.cookie}}\trequestMethod={{req.method}}\treq_tree.url.path={{req_tree.tree.url.path}}\tdstBytes={{req_tree.tree.headers["content-length"]}}\tsrcBytes={{resp_tree.tree.headers["content-length"]}}'
Шаблон CEF-формата:
'{{req.time.strftime("%b %d %H:%M:%S")}} localhost CEF:0|iBatyr WAF|1.0|{{req.obj_id}}|HTTP Transaction|{{severity}}|src={{req.src_ip}} scrPort={{req.src_port}} dst={{req.dst_ip}} dstPort={{req.dst_port}} request_time={{time}} response_time={{resp.time}} request={{req.raw_uri}} requestCookies={{req_tree.tree.headers.cookie}} requestMethod={{req.method}} file_path={{req_tree.tree.url.path}} in={{req_tree.tree.headers["content_length"]}} out={{resp_tree.tree.headers["content_length"]}}'
Ниже приведено описание параметров и возможные значения полей для отправки:
Режим:
ALL – отправляется журнал обо всех транзакциях.
BLOCKED – отправляется журнал только о заблокированных транзакциях.
Интервал дообучения – с какой частотой будет осуществляться выборка транзакций из базы данных и их отправка в SIEM.
Адрес:
tcp://siem_ip:514 – отправка по tcp-соединению;
udp://siem_ip:514 – отправка по udp-соединению;
file:///dev/log – запись журнала в локальную файловую систему на узле WAF.
Допустимые плейсхолдеры:
time - временная метка транзакции;
host_ip - адрес узла, с которого осуществляется отправка журнала;
severity – серьезность события;
req – данные о запросе:
obj_id – идентификатор транзакции на WAF;
src_ip – адрес источника запроса;
src_port – порт источника запроса;
dst_ip – адрес назначения запроса;
dst_port – порт назначения запроса;
time – временная метка запроса;
raw_uri – адрес запрашиваемой страницы;
method – HTTP-метод;
protocol – протокол передачи.
resp – данные об ответе:
time – временная метка ответа.
req_tree – данные о разобранном дереве запроса:
tree:
time – временная метка запроса;
src_ip – адрес источника запроса;
src_port – порт источника запроса;
dst_ip – адрес назначение запроса;
dst_port – порт назначения запроса;
protocol – протокол передачи;
method – HTTP-метод;
url – адрес запрашиваемой страницы;
headers – заголовки.
Cookie – заголовок Cookie.
… – прочие заголовки.
resp_tree – данные о разобранном дереве ответа (по умолчанию разбор дерева ответа отключен):
tree:
time – временная метка ответа;
src_port – порт источника запроса;
dst_ip – адрес назначения запроса;
dst_port – порт назначения запроса;
protocol – протокол передачи;
method – HTTP-метод;
url – адрес запрашиваемой страницы;
headers – заголовки ответа.
Cookie:
req_decision – решение WAF (пропустить/заблокировать):
decision – решение на запросе;
rule – сработавшее на запросе правило:
name – наименование правила;
obj_id – идентификатор правила.
resp_decision – сработавшее на ответе правило:
decision – решение на ответе;
rule – сработавшее на ответе правило:
name – наименование правила;
obj_id – идентификатор правила.
webapp_id – идентификатор защищаемого приложения на WAF;
webapp_name – имя приложения;
action_id – идентификатор действия позитивной модели бизнес-логики (подробности см. в руководстве оператора);
action_name – имя действия модели бизнес-логики;
action_parameters – параметры действия модели бизнес-логики;
request_session_id – идентификатор сессии запроса;
response_session_id – идентификатор сессии ответа.
Так как в качестве шаблонов используется Jinja, то в шаблонах имеется возможность писать выражения следующего вида.
Шаблон:
block_rule_name={{req_decision.rule_name if req_decision.decision ==
"BLOCK" else resp_decision.rule_name}}
Результат:
block_rule_name=Наименование правила блокировки запроса (если причиной была блокировка запроса), или ответа (если причиной была блокировка ответа)
Шаблон:
{% for rule in req_decision.reason.matching_rules %}
rule={{rule.name}} {% endfor %}
Результат:
rule=Параметр не соответствует модели rule=Внедрение javascript-кода в страницы rule=Прочие сигнатуры
