文章插图
作者简介
朱林 资深开发人员,《Elasticsearch技术解析与实战》作者 。有接近20年的开发经验,15年安全产品开发经验,对安全技术、数据分析有较深的研究 。现任安全派技术总监,研究业务安全 。
为什么要对 Web日志进行分析随着 Web 技术不断发展,Web 被应用得越来越广泛,现在很多企业对外就一个网站来提供服务,所以网站的业务行为,安全性显得非常重要 。正如安全行业的一句话:“世界上只有两种人,一种是知道自己被黑了的,另外一种是被黑了还不知道的” 。
对网站的业务行为分析,网站的安全性分析一个很重要的途径就是通过日志 。通过WEB日志分析最直接明显的几个目的:
- 一为网站安全自检查,了解服务器上正在发生的安全事件;
- 二为应急事件中的分析取证;
- 三是可根据日志分析一些常用的业务行为 。
如何进行日志分析?在进行日志分析之前,我们先来了解一下 Web服务器中产生的日志是什么样子 。我们来看一条 Apache 的访问日志为例:
114.221.137.87 - - [10/Sep/2019:14:52:28 +0800] "GET /login HTTP/1.1" 200 1068 https://secilog.secisland.com/ Mozilla/5.0 (windows NT 10.0; Win64; x64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/73.0.3683.105 Safari/537.36 Vivaldi/2.4.1488.40
通过以上信息,我们可以得知服务器会记录来自客户端的每一个请求,其中有大量来自正常用户的请求,当然也包括来自恶意攻击者的请求,那么我们如何区分正常请求和恶意攻击请求呢?站在攻击者的角度,攻击者对网站进行渗透时,其中包含大量的扫描请求和执行恶意操作的请求,而这两者在日志中都有各自的特征,如扫描请求会访问大量不存在的地址,在日志中体现则为大量的响应状态码为404,而不同的恶意请求都有各自相应的特征 。
如当有人对服务器进行SQL注入漏洞探测时会有类似:/login?attack=test';select/* */1/**/from/**/1等内容 。通过关键字分析可以分析哪些 IP 在进行攻击,可以进一步的进行处置,比如封ip等 。
日志分析场景介绍一般可以按照两种思路展开,逐步深入,还原整个攻击过程 。
- 第一种:确定入侵的时间范围,以此为线索,查找这个时间范围内可疑的日志,进一步排查,最终确定攻击者,还原攻击过程 。
- 第二种:攻击者在入侵网站后,通常会留下后门权限,以方便再次访问,我们可以找到该文件,并以此为线索来展开分析 。
因为站在脚本操作经验丰富的人角度来看,的确用命令足矣,可是对于一般的人员来说用linux的shell命令还是稍显复杂 。还是需要借助一些工具来提高效率 。这里用了secisland 新推出的免费工具 secsoso 来作为示例:
spl 完整语法:
secsoso ‘file=("文件名"," ") 过滤|统计…’
简化语法:secsoso ‘文件名 过滤|统计…’
业务行为统计列出文件中访问次数最多的10个IP
secsoso 'file=("/export/home/20190613/access.log"," ")|stats count($1) by $1|sort 10 -count_$1'
说明:其中/export/home/20190613/access.log为文件路径,“ ”为字段分割符 。文件名可以是绝对路径(/export/home/20190613/access.log) 也可以是相对路径(access.log) 。默认列名为$1,$2..., count($1)后的默认名称为count_$1 。结果如下:
$1 count_$1101.226.68.137 972163.177.71.12 972183.195.232.138 971111.192.165.229 377114.252.89.91 37466.249.66.84 246222.70.152.149 226220.181.89.174 172111.194.118.58 16060.247.77.253 146
你也可以给字段重命名以友好方式显示,这个是简化语法:结果同上 。secsoso ‘access.log|rename $1 as ip |stats count(ip) by ip|sort 10 -count_ip’
查看文件中有多少个不同的IP访问
secsoso 'access.log|rename $1 as ip |stats dc(ip) '
结果如下:dc_ip1050
查看某一个页面被访问的次数比如 /nodejs-underscore/?cf_action=sync_comments为访问页面
secsoso 'access.log "/nodejs-underscore/?cf_action=sync_comments"|eventcount'
红色字是过滤的含义,结果如下:event_count14
查看每一个IP访问了多少个页面
推荐阅读
- 常见Web安全漏洞类型
- PHP实现站内信
- Java Web前端到后台的常用框架介绍
- 今年很火的五大Python框架
- 如何解决webpack打包文件过大的问题
- 5分钟学会两年经验Linux运维都不懂的内核问题
- Webpack 4 配置最佳实践
- 看完让你彻底搞懂Websocket原理,附通过netty完成Websocket
- js实现websocket 数据交互
- WEB验证的过去现在与未来