安全建设心路
作者:Rozero
随着业务的不断发展,我们每天都在面临越来越多的安全问题,诸如司空见惯的扫描,撞库,爬虫以及多种多样的自动化机器行为等。 在我们缺乏监控的时候,这些行为正在悄无声息的发生着,这些行为可能会对企业的安全造成较大影响。所以我们需要一套系统来监控及处置现有网站中,一切正在发生的异常行为。
本文将讲述通过采集日志的方式,来完成基于日志监控平台的建设,并分享建设期间的一些切身经验。运用日志分析的特点及缺点也是显而易见的,如日志在公司中可被自由获取。 可以通过日志来做一些行为分析及运营数据分析,缺点也是众所周知的问题如日志容易出现漏部署、收集端出现故障未发送日志,日志格式不规范等问题。
0X01 离线分析
几年前做安全工作的时候,我们做日志分析往往通过分析apache,ngx日志来进行,需要分析的日志少则几M多则上G。我们会采用shell命令诸如awk,cat等匹配关键字完成数据的检索。
为了解放人力,用perl及python脚本可以可以很好的完成任务。随着大数据时代的来临我们赶上了好时候,可以接触到越来越多的大数据技术,诸如hadoop,haddop处理数据的逻辑如下。
hsql是一种类sql语句,我们将规则写成hsql语句在hive上运行,如下图:
hsql会通过分布式计算的方式聚合数据汇总后返回汇总查询结果,在实际工作使用过程中,发现使用hive可以完成工作,但是有个时效性问题。较短时间内处理实时数据已然成为了瓶颈,而安全恰恰对数据的实时性有一定要求。随着对实时处理需求的强烈,转战研究实时计算。
“实时计算最重要的一个需求是能够实时响应计算结果,一般要求为秒级”,经过技术选型,一致决定采用大数据技术flume,kafka,storm的技术架构,来完成对数据的实时处理工作。flume收集ngx日志,将日志发送到kafka消息队列,storm消费kafka队列数据完成对数据的计算工作。
在前期,我们通过不断编写storm job来完成对业务的监控行为确实是个比较苦逼的事情,后期我们优化设计,实现了自动化全域监控功能。只需要通过界面输入规则,即可对业务进行监控,基本的数据处理思路如下:
有了这部分的数据思路,就需要把这些想法落地。于是我们还做了以下的数据处理工作。
数据收集与数据消费: 依赖公司的flume客户端部署,我们只需要通过storm消费kafka topic日志即可。
实时计算&数据分析:在实时计算领域目前有很多可供选择的工具如storm、spark、impala等工具,在很早期的时候我们通过impala来实现对数据的检索。但是impala在当时不好的地方就是它不能实现正则表达式的功能,我们知道在制定安全策略时可能会涉及到大量的正则表达式。这也是后来我们采用storm来做处理的主要原因。storm是流式计算,在处理日志上可以达到ms级响应,对于日志及安全数据处理是一个利器,减少了大量的等待时间提高了效率。
数据存储:数据存储是一件比较有挑战的事情,尤其是在存储较长时间且需要能够快速读取的场景下,技术选型采用了mysql和cassandra数据库。
数据展示:通过storm计算后的结果仅仅是数字,需要能够把它转化为业务可理解的语言,这时候就需要能够做到可视化展示,使的日常工作能够一目了然。经过调研发现我们需要做个dashboard用来展示数据。实现的数据处理思路是这样的。
安全领域最重要的东西并非是搭建框架,而是能把数据和业务结合应用起来,这也是很多工作中最难落地的地方。上边介绍了我们走过的数据分析建设方式,在安全领域应用最多的是入侵检测及将日志作为决策方式结合waf实现对异常请求的压制。
还有一个重要的领域是业务安全。业务是一切的根基,我们所做的工作都是围绕业务进行的,我想这应该是每个在甲方做安全的从业者都应该明白的。通过将网站的关键接口接入监控,我们能够对针对业务关键点自动化行为进行监控。
这里重点讲讲针对业务我们所做的一些事情,通过storm计算访问次数,将统计结果反馈到highcharts中,highcharts曲线图将能够看到每个时间段的访问情况,也能够较清晰的知道业务的情况以及是否有异常。数据展示示例如图所示:
在日常工作中,通过监控曲线图来发现异常是我们早期的方式,通过查看监控图上访问时间及访问次数来人工做决策。某日发现某个接口出现大量来请求的IP地址,通过监控界面可以看到如下图所示的信息。
将图中出现的异常结合业务知识去判断是否为异常行为,如果是异常请求则采取行动,如封IP地址。在实际的工作中,通过人工去盯监控的情况并不好,后来我们通过分析窗口时间序列的方式完成了这部分复杂且需要大量人工来参与的工作,解放了人力。
在大数据领域有句话备受推崇"use data to speak",那我们如何让数据来帮我们做具体的技术决策呢?其实就是依赖数据分析结果。依赖分析结果我们可以将数据应用到多种多样的业务场景中,来应对出现的状况。
在技术防护上结合了nginx lua实现对异常情况的处置,nginx lua在应用领域有很多应用场景,如大家常用到waf。ngx lua的特点:高性能、高并发,对内存及CPU影响微乎其微,和ngx的结合度也相当高,缺点是资料并不太多。系统处理的逻辑图,客户端发起请求,经过nginx lua模块判断是否在黑名单中如果在则不允许访问并且记录拦截的状态。如果不在则允许继续访问。
最后经过上线实现效果:
nginx lua上线过程中也遇到过一些问题,如修改nginx lua模块需要重启ngx,可以尝试通过关闭lua_code_cache来避免代码被缓存。
以上是我们在基于日志分析系统建设中的一点小小经验。目前的安全已经提升到了足够的高度,仅仅依赖人来完成分析工作显然是不太可能的,后续需要把安全领域知识和机器学习有效结合,这也给安全从业者提供了更高的要求。
欢迎投稿!
VSRC欢迎精品原创类文章投稿,优秀文章一旦采纳发布,将有好礼相送( 至少为500元唯品卡或现金 )我们为您准备的 丰富奖品包括但不仅限于: MacbookAir、VSRC定制雨伞,VSRC定制水杯以及VSRC精美靠枕 ! (活动最终解释权归VSRC所有)
点击原文阅读VSRC精选系列之《异常的“异常”哲学》