今天跟蚂蚁金服安全同学聊聊WAF

7,661 阅读5分钟

前言


今天有点开心,下午就收到了两个平台的礼物,分别是掘金还有csdn的礼物,十分感谢,这是一份荣誉吧,也是自己一直努力写文章的嘉奖,值得庆祝下🎉

image.png

image.png

image.png

回归到正题,在很早面阿里的时候,被问到了一个,风控是怎么做的?我当时脱口而出,黑白名单,那么它是怎么生成的呢?当时是愣了一下,可能是日常工作接触的少缘故,没有想到什么比较好的答案。

我后来看了很多篇关于阿里云MSE的介绍,其实就是服务发现+流量转发+waf,这时我就很好奇,waf是什么来头?

what is WAF


Web Application Firewall,web应用防火墙

firewall大家知道是什么吧,就是限制特定端口、app能进行通信,其他都干掉,其实就是为了保护我们服务。一样道理,waf也是一套逻辑,然后每个流量都会通过这套逻辑去判断是放行还是拦截。如果放在网关层,其实就是黑白名单拦截器,至于规则是怎样生成,这个需要看业务场景和需求。

who


基本上来讲所有流量都需要经过waf的判断才能通过,这就引发一个问题,就是稳定性,是不是万一那些正常的流量也被拦截不就gg。好家伙,提桶跑路吧~

where


一般是做在网关层,做为阿里云mse的一部分,网关基本上是所有流量需要经过的地方,在这层做是最好不过的,包括限流、统计、黑白名单等等。

how


这个how就比较细了,它涉及到拦截的规则,针对特定的需求还有场景。比如说防住爬虫,抛开业务场景来讲,我们可以通过ip池,进行记录统计哪些ip经常有规律性的访问,或者访问频率比较夸张的,一般就是机器作为,这时我们将这些ip收集起来丢到黑名单里头。

其次,回到业务场景,一般防止爬虫,还有添加人工验证,比如说某鹅,在登陆操作的时候,会弹出小方块,让你移动到丢失的地图位置,这样可以破解机械式的爬虫。还有填写无序的文字,或者点下文字顺序啦,其实都是为了区分正常流量跟异常流量,只是从业务层面去实现。

我记得12306或者某些买票的网站,或者抢购网站,这块就做得很好,就是很多人会制作机器不断去抢商品,当你刷多了之后会发现,你的ip被封了,其实也是通过监控的手段来判断哪些流量是异常的。

蚂蚁同学聊天


我这同学也是机缘巧合认识的,之前一起搞过php外包,后来他去了蚂蚁金服安全部门,听起来就很高大上,哈哈。

image.png

虽然安全攻击这块我不太清楚,但是我们可以知道就是一堆规则,去判断哪些是异常请求,异常数据需要去剔除掉,保护服务。

这里也提到了一个很重要的一点,就是蚂蚁很多服务都是基础服务,明白什么意思吧,比如说饭堂,大家每天都要经过的地方。这些服务如果你规则很复杂的话,会导致所有流量很慢,而且存在正常流量拦截在外面的情况,这时就完犊子了,你可是个基础服务啊,大佬。

在这里我们也需要考虑到稳定性,把大部分明显异常流量拦截即可,避免影响正常流量访问。

当初我来到架构组,里面有个架构师在设计网关功能的时候就在讲,他在网关做了一个拦截功能,但是它不是实时的,就是第一次访问的时候异步去查询这个请求是否异常,但是这个请求是正常响应的。当你下次还来的时候,我就把你拦下来了。

为什么要这么做呢?

稳定性,网关作为大部分流量入口,如果逻辑很复杂,或者同步判断逻辑,意味着会降低大部分流量的响应速度。

image.png

实践中的一个坑--布隆过滤器


还是那位架构师的杰作,但是这次被我逮到漏洞。他使用了布隆过滤器bool filter来实现黑白名单,好家伙,就是网上一直吹得很牛皮的技术,可以减少内存空间,快速识别对应参数是不是在拦截器里头。

但是他万万没想到,这玩意居然不能删除,你懂了吧,明白其中致命问题了吗?

当你把某个ip设置为黑名单之后,发现它是正常流量,你怎么让它放行?这玩意是删除不了的,进去了就别想出来了,好家伙~

如果强行这么搞,只能再加个白名单,先判断白名单,有就通过,没有再判断黑名单,在里头就拦截。这样即使黑名单里头存在,只有有白名单就通过,虽然有点点骚,你怎么穿着品如的衣服?

image.png

最后


睡个好觉吧,晚安~

如果觉得对你有帮助,请点个赞然后关注下博主,感谢~