Я хочу преобразовать одно событие json в несколько событий через logsta sh Надеюсь получить вдохновение, спасибо - PullRequest
0 голосов
/ 22 января 2020

4 поля (warnTags 、 warnSlrs 、 warnActions 、 denyMsg) должны быть разделены точкой с запятой (;)

Необработанная строка

   { "waf": {
    "warnTags": "OWASP_CRS/WEB_ATTACK/SQL_INJECTION;OWASP_CRS/WEB_ATTACK/XSS;OWASP_CRS/WEB_ATTACK/XSS;OWASP_CRS/WEB_ATTACK/XSS;OWASP_CRS/WEB_ATTACK/SPECIAL_CHARS;OWASP_CRS/WEB_ATTACK/SQL_INJECTION",
    "policy": "bot_77598",
    "warnSlrs": "ARGS:wvstest;ARGS:wvstest;ARGS:wvstest;ARGS:wvstest;ARGS:wvstest;ARGS:wvstest",
    "riskTuples": ":-973305-973333-973335",
    "warnActions": "2;2;2;2;2;2",
    "denyActions": "3",
    "warnMsg": "SQL Injection Attack;XSS Attack Detected;IE XSS Filters - Attack Detected;IE XSS Filters - Attack Detected;Restricted SQL Character Anomaly Detection Alert - Total # of special characters exceeded;Classic SQL Injection Probes 1/2",
    "riskGroups": ":XSS-ANOMALY",
    "warnRules": "950901;973305;973333;973335;981173;981242",
    "denyMsg": "Anomaly Score Exceeded for Cross-Site Scripting",
    "ver": "2.0",
    "denyData": "VmVjdG9yIFNjb3JlOiBx",
    "riskScores": ":-5-5-2",
    "warnData": "eHNzdGFnPigpbG9jeHNz;amF2YXNYcm"
} }

Ожидаемый результат на выходе

{
    "waf": {
        "warnTags": "OWASP_CRS/WEB_ATTACK/SQL_INJECTION",
        "policy": "bot_77598",
        "warnSlrs": "ARGS:wvstest",
        "riskTuples": ":-973305-973333-973335",
        "warnActions": "2",
        "denyActions": "3",
        "warnMsg": "SQL Injection Attack",
        "riskGroups": ":XSS-ANOMALY",
        "warnRules": "950901",
        "denyMsg": "Anomaly Score Exceeded for Cross-Site Scripting",
        "ver": "2.0",
        "denyData": "VmVjdG9yIFNjb3JlOiBx",
        "riskScores": ":-5-5-2",
        "warnData": "eHNzdGFnPigpbG9jeHNz;amF2YXNYcm"
    }
}

{
    "waf": {
        "warnTags": "OWASP_CRS/WEB_ATTACK/XSS",
        "policy": "bot_77598",
        "warnSlrs": "ARGS:wvstest",
        "riskTuples": ":-973305-973333-973335",
        "warnActions": "2",
        "denyActions": "3",
        "warnMsg": "XSS Attack Detected",
        "riskGroups": ":XSS-ANOMALY",
        "warnRules": "973305",
        "denyMsg": "Anomaly Score Exceeded for Cross-Site Scripting",
        "ver": "2.0",
        "denyData": "VmVjdG9yIFNjb3JlOiBx",
        "riskScores": ":-5-5-2",
        "warnData": "eHNzdGFnPigpbG9jeHNz;amF2YXNYcm"
    }
}

Ответы [ 2 ]

1 голос
/ 23 января 2020
filter {
ruby {
    code => "
        @info = []
        events = event.to_hash
        @warnTags = events['waf']['warnTags'].split(';')
        @warnMsgs = events['waf']['warnMsg'].split(';')
        @warnActions = events['waf']['warnActions'].split(';')
        @warnRules = events['waf']['warnRules'].split(';')

        @list = @warnTags.zip( @warnMsgs, @warnActions, @warnRules )
        @list.each do |tag, msg, action, rule|
            detail = {
                'tag' => tag,
                'msg' => msg,
                'action' => action,
                'rule' => rule
            }
            @info.push(detail)
        end

        event.remove('[waf][warnTags]')
        event.remove('[waf][warnMsg]')
        event.remove('[waf][warnActions]')
        event.remove('[waf][warnRules]')
        event.set('[waf][info]', @info)
    "
}

split {
    field => "[waf][info]"
}}
0 голосов
/ 22 января 2020

Конфигурация ниже должна быть в соответствии с тем, что вам нужно. С самого начала он включает синтаксический анализ json, который вам может не понадобиться в зависимости от предыдущих шагов в конвейере. По сути, это разделит поле warnTags на ; для начала; в результате warnTags будет массивом, вложенным в один объект. Выходные данные разделения строки передаются в фильтр более высокого уровня split, который создает несколько выходных событий, разделяющихся на поле ввода, в данном случае warnTags (снова). Надеюсь, это поможет!

[РЕДАКТИРОВАТЬ: Добавлено warnSlrs в качестве второго поля разделения]

filter {
       json {
            source => "message"
       }
       mutate {
              split => {"[waf][warnTags]" => ";"}
       }
       mutate {
              split => {"[waf][warnSlrs]" => ";"}
       }
       split {
              field => "[waf][warnTags]"
       }
       split {
              field => "[waf][warnSlrs]"
       }
}
...