(附讲稿全文和PPT)百度讲师:以struts2 为例,教你打造一款互联网思维的安全防御 | 硬创公开课(3)
Content type中包含multipart/form-data 而且内容包含%{….} 、 ${….} 的,中间内容会被当做 ognl 表达式执行,从而引发命令执行。 上图是做%{….} 、 ${….}的判断。 通过分析后,把相关规则上到WAF上,保证了WAF拦截的有效性和防绕过。 关于监控,主要的思路是数据采集+数据分析。而采集方面,包含的内容非常之多,我们这里只看下通过hook大法实现的安全监控。这一类监控通常是在漏洞发生的最根本位置进行恶意识别,所以其获取到的报警通常效果最好。 例如常见的SQL注入漏洞,好一点的情况是最外层有waf做拦截,但是waf存在各种各样的绕过&误伤等等,况且很多公司根本没有没有部署WAF。同时扫描器针对这种漏洞扫描起来也比较困难,需要考虑多种注入方式。那么如何有效的对SQL注入进行识别,做到:如果存在注入攻击便及时报警呢?hook 数据库拿到查询日志并进行分析是一个很有效的方案。为了简化,这里直接取数据库的查询日志log做分析(实际场景采用DB Proxy类技术会有更好的性能和稳定性) 由于每次的请求(包括攻击请求)已经转化为对应的数据库查询操作,故已经无需考虑编码解码、引号闭合等问题,只需要关注是否存在异常的查询。例如:如果存在union all select null,null 这样的查询操作,便为明显的数据库注入测试行为,并且关键的是,这种行为已经完成了引号闭合等动作,是一次成功查询。 那么现在要做的,就是格式化查询,最终匹配出恶意查询行为并报警。 在演示例子中,我们实现了对查询进行语法解析并且替换字符串的功能。 图上第一行为原始查询,第二行是经过解析和字符串替换后的查询,可以清楚的看到, 第一次查询为正常的业务请求 第二次查询被解析成了select xx from xx where name =’s’ union all select null,null --。这是一个明显的注入测试操作并且匹配了union all select null,null的规则 第三次实际上仍然是黑客在做注入测试,只不过没有成功闭合引号,一大串查询测试仅是被当做成了一个长字符串。 通过这种方法,仅需要预定义几种注入攻击特征,便能很高效的对SQL这种攻击进行监控识别。 PHP引擎的hook以及redis的hook也是类似原理,从最根本层面发现入侵行为,排除其他干扰因素。 篇幅的关系,这里不详细介绍。 我们再来看看基于流量的监控。其实这一块很早大家就在做,传统的IPS、IDS就是做的这块,也有很多人搭建开源的snort等系统。但是实际效果来看,这些硬件、软件系统都没有发挥太大的价值,究其原因,有可能一个是规则方面的问题,数量大而又老旧;一个是理念方面的问题,只着眼于一个方向的特征识别(请求或返回)。 其实基于流量方面的监控(这里指外部流量,非IDC内部),能做的事情非常的多,但是还是那个问题,覆盖的太多or 太宽泛,都会导致报警指数级增加,真正有用信息被淹没。另一方面,外界的各种扫描是无时无刻的,这些信息触发的报警实际上是无价值的。 如果只关注有效入侵&攻击成功的高危漏洞,整体量级就会小很多,而且这些才是我们真正需要处理的。 (编辑:ASP站长网) |