从Nginx Access日志中挖掘有价值的漏洞!
作者:Tony
前言
企业发现自身应用漏洞常见的方式有:1、自行进行主动安全测试(包括网站例行安全扫描,代码安全审查)。2、建立SRC,接收白帽子的漏洞提交。上面的方式的确很有效,但是在安全测试的时候,由于单个人的不确定因素(包括技术能力差异,思维方向,测试时间预留),是不能保证发现应用所有漏洞的。
至于扫描器的话,更没有哪个扫描器能够扫描出所有漏洞,更何况还有不少漏洞我们都知道是不能依赖扫描器的。因此没有哪一种工具或方法或资源在安全漏洞挖掘或安全攻击发现方面是全能的。在安全工作中,只要某一种方法、资源具有挖掘出安全漏洞或发现安全攻击的能力,我们都要尝试去利用,哪怕功能是有限的(安全监控都是多点监控、综合挖掘)。
本文将讲一种被动挖掘漏洞的方式:从他人(黑客)的攻击log中,去发掘漏洞,并提升自己。因为有些漏洞自己发现不了,不代表别人发现不了。
Nginx是一个高性能的HTTP和反向代理服务器。Nginx access日志记录了web应用的访问记录。大致记录了访问方式(POST/GET)、客户端IP、远程用户、请求时间、请求状态码、访问host地址、请求页面大小、reffer信息、x_forwarded_for地址等等。nginx access日志的格式不是一成不变的,是可以自定义的。Nginx access具体日志格式与在服务器的存储位置可以查看nginx.conf配置文件。Nginx详细记录了每一次web请求。
缺点是:一、只记录了URL、没有记录具体POST参数(GET参数因为在URL后面,也被记录了)。Nginx access日志理论上记录了每一条攻击请求,但由于有大量请求是以POST方式提交(在POST中的参数不会被记录),所以大量在POST参数中的具体攻击报文也不会被记录。二、Nginx access日志量大,偶尔的攻击请求,淹没在巨量的正常访问request log中。那就对发现黑客攻击和具体应用漏洞不存在价值了吗?
非也!首先,GET请求参数会被记录,在GET中的攻击报文是可以抓到,并有利用价值,且能挖掘出部分攻击和漏洞(只要有价值我们都应该挖掘利用,特别是在可利用的资源有限的情况下:比如只有Nginx access日志,并没有部署WAF和IPS等情况下)。其次,我们可以从访问频率等设计模型,从巨量的Nginx access log中挖掘出某一次黑客的扫描攻击(比如一次全站的漏洞扫描,和对某一个URL的sql注射过程)。
可以发现哪些IP对我们的应用进行了攻击尝试;从GET请求参数的攻击报文中,偶尔也能发现黑客已经发现但是我们自己还未知的漏洞;或者通过发现黑客对我们web应用的某个URL的持续攻击(虽然没有攻击的具体报文),促使我们自己去关注此URL是否真的存在漏洞?这样往往能获得更有效率的漏洞挖掘成果。在被攻击后,我们也要好好利用黑客攻击时留下的遗产来提升自身。
1.1 查找进程
查找nginx进程,找到nginx的配置文件目录 ps -ef | grep nginx
执行nginx –V或nginx–t找到nginx配置文件路径
1.2 查看配置
查看nginx配置文件,找到nginx日志的存储位置,和log格式
dump nginx日志到本地。可以先打包,再使用SZ命令下载到本地
下面是从服务器上选取的一条nginx access日志(局部)
{"remote_addr": "***.**.**.126", "remote_user":"-", "time_local": "01/Sep/2016:17:15:22 +0800","request": "*****me5":"-", "http_CustomName6": "-","http_CustomName7": "-", "http_CustomName8":"-", }
从上面可以看到,很多字段为空,且不是我们需要的。而且时间格式也不是我们需要的,不便于计算时间差。因此,我们首先要对log进行规范化,提取出有价值的字段(远程IP、URL、时间)。
2.3 时间提取
由于nginx access访问日志是巨量的,我从一台服务器取了一个月的nginxaccess log就有近20G。要从巨量的log中挖掘出有价值的信息,需要建立模型,模型算法要根据log实际情况进行调整。以尽量挖掘出有价值信息为准。此次以挖掘扫描攻击为例。然后从扫描攻击事件中寻找可能存在的应用漏洞。
我的模型如下:
此模型不能毫无遗漏的把一次完整的扫描攻击都记录下来,因为每次处理的3000条数据中是有很多正常数据,也就是噪音;另外每次处理3000条数据会把一次完整的扫描进行分割,分割不均匀也会造成遗漏。前面说过,没有哪一种方法是全能的,我们只要利用其有用的价值面就好。
代码实现如下:
3.1 转换计算
时间格式转换、时间差计算
运行主程序
展示1
扫描攻击的发现
展示2
从POST请求中发现了一个文件下载漏洞
展示3
发现了多个弱口令帐号,经验证可以使用
抓到一次暴力破解攻击
展示5
结论
没有哪一种模型算法适用所有场景。上面的模型是要根据log数据实际情况调整的。比如每次处理1000条,且同访问IP的一组数据大于100条,时差10分钟内,能够发现更多的攻击事件。以挖掘尽量多的有价值数据为目标。
本文的模型较简单,仅提供一种思路,还可以进一步挖掘。比如找到攻击IP,可以再次处理log,提取此IP的全部访问request,进行进一步分析挖掘(前面说过,此模型会产生遗漏)。
从nginx access日志中,提取攻击事件过程,从而挖掘应用漏洞,有时能起到意想不到的效果。有些漏洞自己发现不了,不代表别人发现不了。此方法可以作为企业漏洞挖掘方法的一种补充。从安全事件监控到漏洞挖掘的一种反补。
精彩文章投稿有惊喜!
VSRC欢迎精品原创类文章投稿,优秀文章一旦采纳发布,将有好礼相送(至少为500元唯品卡或现金)我们为您准备的丰富奖品包括但不仅限于:MacbookAir、VSRC定制雨伞,VSRC定制水杯以及VSRC精美靠枕!(活动最终解释权归VSRC所有)
点击原文阅读上期精彩分享:支付风控的那些自白