日志分析系列(三):分析实战篇

2020-05-22 00:00:00 查询 分析 方式 日志 匹配

本系列故事纯属虚构,如有雷同实属巧合

在之前的系列中,小B完成了日志分析平台的实现,也接入了各种日志源,做好了这些前期工作,接下来就是真正利用平台实现分析并体现日志价值的时候了。

日志的价值体现在什么地方?

在安全日志分析的大场景中,我们都是根据不同场景下的特征来进行分析,我们以主机安全场景特征判断为例:

通过对这些场景的思路整理,我们可以发现识别攻击场景的方式大致包括:关键字匹配统计分析聚合分析关联分析。这四种分析方式在前面的文章中我们也提到过,大家有兴趣可以翻看历史文章进行查看。

熟悉ES的朋友都应该知道(如果不熟悉的建议阅读几遍ES的官方文档)它支持上述的关联分析之外的所有分析方式,那么我们就可以使用ES的这些查询语句来实现我们的安全日志分析,下文我分享了几个安全日志分析的具体案例:

demo1:常见的Web攻击

普通的Web攻击在日志分析中的分析方式与WAF识别攻击相似,都是通过正则表达式或者关键字匹配的方式来实现,ES中存在很多相关的查询语句,我们来体验一下:

  • match匹配
  • 利用bool方式进行复合查询


可以看到的是,我们使用match来进行查找时,需要对关键字进行优化,否则会出现无法找到的情况。那么如何解决这个问题呢?ES中其实还提供了通配符(Wildcard)正则表达式查询

  • 通配符查询
  • 正则表达式查询:正则表达式匹配的方式与通配符类似,但是正则表达式支持更复杂的模式进行查询。

对于正则匹配我们还有一种方式就是使用logstash,jeary曾经在github.com/anbai-inc/At实现了。

我们可以利用此种模式对常见的Web攻击进行分析,需要的就是我们收集常见的关键字:


值得一提的是,以正则或者查询的方式去做安全分析都不适合做实时的分析拦截,因为数据量很大的时候查询很费时间,而如果使用Logstash Grok更是可能将日志分析平台搞挂。

demo2:统计与聚合

对常见API的聚合统计分析,根据访问API的IP进行排序:查询5分钟内访问api_path的数据,并根据remote_addr进行聚合排序。

{
    "size": ,
    "query": {
    "bool": {
        "must": [
        {"term": {
            "request_api.keyword": {
            "value": "api_path"
            }
        }}
        ],
        "filter": {
        "range": {
            "@timestamp": {
            "gte": "now-5m",
            "lte": "now"
            }
        }
        }
    }
    },
    "aggs": {
    "ip_count": {
        "terms": {
        "field": "remote_addr.keyword",
        "size": 1000000
        }
    }
    }
}

相关文章