Part 01
一|针对http请求进行防护
<<<<1、url黑白名单>>>>
普遍的互联网入访场景中,无论使用apache还是nginx进行反向代理,都是通过目录进行请求匹配的。这里说的目录在http请求中指的就是url中“/”后面的具体路径。WAF可以做到全路径黑白名单以及明确路径的黑白名单防护,让想通过路径盲注的试探全部扼杀在摇篮里。 (全路径黑白名单) (明确路径黑白名单)
具体如何实现呢,比如说上述的路径/search/*为黑名单,当用户或攻击者访问“http://域名/search/”这个路径后面全部内容都会被拦截,通过这样的方式实现了search功能的关闭,当然如果想彻底将该功能禁用还是建议从应用本身入手,而不是靠下层网络来进行请求拦截。反之,如果上述路径/search/*为白名单,那就表示所有的路径都默认是拦截的,只有定义好的上述路径才允许访问。白名单机制在应用前就要求应用方必须对业务所有调用逻辑和请求都非常熟悉,否则后续的误拦截几率会很高,导致影响用户体验,起到反效果。但是如果白名单机制使用得当,会比黑名单机制实现的安全性要更胜一筹。
<<<<2、Header安全防护>>>>
作为http请求中重要组成部分,header一方面提供了标识信息,一方面又可以作为攻击的入手点。例如如果不限制header的类型和数量,或者header的合法性内容,很可能被用于渗透点并为后续的上传木马做准备。所以如果发现http报文中插入过多的header就要开始有所警觉了。这个时候,使用WAF做header的防护是非常必要的,比如说限制host(某一种header类型),限制header数量,限制header中异常的字符串组合都是很不错的防护策略。
举个例子来说,上述请求是在前不久刚刚结束的网络活动中截取到的攻击日志。可以看到该请求被拦截的原因是因为在header的内容中出现了sql注入语句,如果应用的数据库未对请求做安全防护的话,很可能在这些意想不到的地方被攻击者作为注入点。就好比说如果业务系统只需要做内部的调用,那Referer header完全可以定义为指定域名作为防盗链使用,但是如果是面向社会面的应用,Referer就无从限制了,这个时候不妨考虑从host来做限制策略。 总结来说,WAF可以针对每一个header做限制,它不光是从框架结构做宏观约束,更可以从header的内容进行微观的特征甄别。 <<<<3、请求参数防护>>>>
如果将http请求中的url和header类比为定义好的命令,那命令中写入的参数才是重中之重。如果这些参数不合规或者漏洞百出,也可以为后续的攻击做突破点。WAF策略通常多用于请求方式的约束,请求文件类型限制、请求中特殊字符、异常参数的拦截防护等。
通过积攒的经验来看,其中效果最显著的还是规定允许访问的文件类型白名单。如下图所示,虽然这个攻击方式开始的初衷是通过jQuery作为可执行语句执行命令,但是由于以.find结尾,所以被WAF识别为不允许的文件类型而被拦截。这样理解也不失为一个防守的好办法,相当于无形中规避了利用开发语言方法调用的大部分攻击。
Part 02 二|针对内容进行防护
<<<<1、攻击特征匹配防护>>>>
说完了请求,作为应用层http报文,本质上肯定还是要看内容。WAF针对内容的攻击所提供的攻击特征库可谓是非常广泛、非常细致了。除此之外,定制化的内容防护也可谓是全方位多角度,只有想不到没有做不到。但是与之相对的,业务模式了解程度以及运维成本会随着安全策略精细度的增长而增长,这是所有安全策略都必须面对的权衡问题。不过维护好WAF特征库可以说已经实现了基本的应用层防护要求了。
<<<<2、特殊场景可执行语句检测防护>>>>
上传动作在互联网中司空见惯,facebook、twitter、微博发布日志的时候,都会触发“上传”功能。正因为这些功能是必要的,所以对于这类典型的攻击注入点才更是要进行严格防护。WAF可以实现上传文件大小的限制、上传可执行文件拦截、上传语句中特殊字符和攻击特征拦截等功能,如此多维度的防护着实让人放心。
Part 03 三|安全与用户体验
诚然WAF的安全策略细致程度可以做到极致,但是过于细致的安全策略想要达到效能的前提是对业务有200%的了解,以及对用户行为的了熟于心,否则过犹不及。但是在满足基本的攻击特征防护的基础上,定制化增加一些业务独有的安全防护是非常有帮助的。而且别忘了WAF功能的优秀在于可以自动学习,学习后再应用的安全策略既实现了业务特有的定制化模式防护,又可以规避以用户体验作为代价的不足。作为互联网的最后一道防守线,WAF的功能还待让人不断深入探索。
— End —
文章作者:赵旭彤 手绘插画:岳 媛
原创文章,作者:EBCloud,如若转载,请注明出处:https://www.sudun.com/ask/32558.html