![0a75047b95d4e5f9127bf391f0894bfd.png](https://i-blog.csdnimg.cn/blog_migrate/922f73af9e1562cc7efc297fc9f91c57.jpeg)
本系列故事纯属虚构,如有雷同实属巧合
在之前的系列中,小B完成了日志分析平台的实现,也接入了各种日志源,做好了这些前期工作,接下来就是真正利用平台实现分析并体现日志价值的时候了。
日志的价值体现在什么地方?
在安全日志分析的大场景中,我们都是根据不同场景下的特征来进行分析,我们以主机安全场景特征判断为例:
![add5b2915731ae0d140d7e1237adfaf1.png](https://i-blog.csdnimg.cn/blog_migrate/c3ac2489762a75beb90d73ca0ac5ff13.jpeg)
通过对这些场景的思路整理,我们可以发现识别攻击场景的方式大致包括:关键字匹配、统计分析、聚合分析、关联分析。这四种分析方式在前面的文章中我们也提到过,大家有兴趣可以翻看历史文章进行查看。
熟悉ES的朋友都应该知道(如果不熟悉的建议阅读几遍ES的官方文档)它支持上述的关联分析之外的所有分析方式,那么我们就可以使用ES的这些查询语句来实现我们的安全日志分析,下文我分享了几个安全日志分析的具体案例:
demo1:常见的Web攻击
普通的Web攻击在日志分析中的分析方式与WAF识别攻击相似,都是通过正则表达式或者关键字匹配的方式来实现,ES中存在很多相关的查询语句,我们来体验一下:
- match匹配
![4900fb1abf6f9cb0bfdaf8f016edba95.png](https://i-blog.csdnimg.cn/blog_migrate/5463cf3bd81d82540784aca4fffc5310.jpeg)
![52ea22b2eebcdf602bf076090570da89.png](https://i-blog.csdnimg.cn/blog_migrate/e15a74d7f352e85cfd58a99de12cbcbc.jpeg)
- 利用bool方式进行复合查询
![0ad4720bf1b2c733a1c9951b86b22bcd.png](https://i-blog.csdnimg.cn/blog_migrate/5d082f5eb4a5e8c3c4ce5f533a926044.jpeg)
可以看到的是,我们使用match来进行查找时,需要对关键字进行优化,否则会出现无法找到的情况。那么如何解决这个问题呢?ES中其实还提供了通配符(Wildcard)与正则表达式查询
- 通配符查询
![19ad8a4ba9102d9225d1ec321ff3cdd8.png](https://i-blog.csdnimg.cn/blog_migrate/095dc78bcb630cb11216d162f2be1110.jpeg)
- 正则表达式查询:正则表达式匹配的方式与通配符类似,但是正则表达式支持更复杂的模式进行查询。
对于正则匹配我们还有一种方式就是使用logstash,jeary曾经在https://github.com/anbai-inc/AttackFilter实现了。
我们可以利用此种模式对常见的Web攻击进行分析,需要的就是我们收集常见的关键字:
![9711a382dbf6099649a7260e3ff954a7.png](https://i-blog.csdnimg.cn/blog_migrate/5f12cd8cb13f616c3e238d607ef1bd56.jpeg)
值得一提的是,以正则或者查询的方式去做安全分析都不适合做实时的分析拦截,因为数据量很大的时候查询很费时间,而如果使用Logstash Grok更是可能将日志分析平台搞挂。
demo2:统计与聚合
对常见API的聚合统计分析,根据访问API的IP进行排序:查询5分钟内访问api_path的数据,并根据remote_addr进行聚合排序。
{
"size": 0,
"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
}
}
}
}
完整的demo我放在了GitHub上:https://github.com/bloodzer0/python_es_aggs
![faf15367fb417aaefc8e17f43d85fa2b.png](https://i-blog.csdnimg.cn/blog_migrate/55daad9e2173e48d0cc1fd0ddbe7375b.jpeg)
- 嵌套聚合
![004c5eb0c0226455a582ae2a91834e03.png](https://i-blog.csdnimg.cn/blog_migrate/20ed5dd569cb60de321de6e9cfdeaf83.jpeg)
ElastAlert分析模式
ElastALert GitHub地址
elastalert支持多样的规则类型:https://elastalert.readthedocs.io/en/latest/ruletypes.html#rule-types
本文写的很仓促,很多东西都没有完整的去写。由于工作变更的原因,没有时间去折腾这个系列了,所以今天就算是写个结尾。后续应该会开个新的系列,但是更多偏向于乙方的东西!对于日志分析系列的虎头蛇尾,小B也很抱歉,后期在有精力的时候,我会把一些之前在甲方企业中实践的内容分享出来。主要是如下这幅图的内容:
![a55b082999d3497f3b526d0e48496664.png](https://i-blog.csdnimg.cn/blog_migrate/a4ac91b14ca5612881ffdcaafd2bfd11.jpeg)
refer
- 19个很有用的ES查询语句:https://n3xtchen.github.io/n3xtchen/elasticsearch/2017/07/05/elasticsearch-23-useful-query-example