漫谈IAST中脏数据的处理思路 – 作者:陌度

背景

最近在研究IAST过程中,对于扫描器在业务系统中脏数据的产生的解决,目前我在业内只看到携程有文章提出解决办法(可能是我知识面比较窄,其他厂有解决办法的话,麻烦贴到评论)。

接着就跟了一些业内朋友和大佬针对于这个话题讨论了一下,发现他们的思维是倾向于沟通协调的去解决,我这边的主张是不能影响测试那边的测试工作,然后还被人问我是不是测试那边的卧底,怎么就站在测试那边说话。为此,我假设了两个场景,你们可以代入思考一下,要是你们会怎么样做:

1.创业公司,使用的敏捷开发,在一定周期内,必须完成开发工作,功能测试工作,这时候你要求测试人员接入IAST,测试那边也配合你去进行,但是问题来了,IAST填入的脏数据影响了他们的功能测试,你被人投诉了(毕竟测试不一定理解你的行为所带来的好处,但是他所看到的是你影响我的工作正常运行)。IAST是可以只收取数据包,然后修改会话去到另外一个安全测试用户,但要是这个系统是后台管理系统呢,脏数据就把菜单的内容变得一团糟(杠精)。

2.大型公司,公司的产品线非常多,公司很乐意推进IAST,测试那边也不会说啥,毕竟从上到下去推进,但是一旦出现脏数据,你可以想想你要协调多少个业务系统的脏数据的清除或者回滚,起码我是觉得这样的工作量太大了。我想到有人可能会说,让DBA和测试自己去删除啊,我们做好自己的工作就行,但是将心比心,有人让我不好受,接下来的工作怎么开展推进。

处理思路

PS:思路仅供谈论。。没有落地,所谓漫谈,就是扯天扯地瞎扯淡

先说说携程那套方案,我觉得是OK的,但是针对于不是专门搞RASP和Java的渣渣我来说,就是超纲题目,这也是我为什么想要看看有没有其他解决方案。

流量角度

业务系统和基础设施中间放置一层openresty做反向代理,加入这个业务系统连MYSQL的3306,就直接反代,接着openresty通过lua抓包,获取MySQL传过来的SQL语句,比如是添加一条SQL记录,等它往数据库添加完成之后,lua就会执行脏数据清理,反向执行删除SQL语句。

但是呢,这个思路翻车了,抓包发现MySQL5.7(Ubuntu)现在走的是加密流量,不是明文传输,不过我看到其他人的MySQL5.7是可以抓到明文的,应该是需要配置什么东西。无可厚非,加密流量传输这是确定的,严格来说,这个思路没啥用。

1616820025_605eb73912f9391444200.png!small?1616820026328

考虑上加密证书之后,我在GitHub找到一款产品(https://github.com/nim4/DBShield),可以参考它的思路去做,它本身就是一套DB防火墙,通过看到产品的架构图和配置文件里面的证书配置,可以看到它可以获取到加密流量的SQL语句。按理说我觉得lua也可以实现类似这种产品功能。

审计角度

可以直接使用MySQL的审计功能,或者使用阿里云的RDS,可以用洞察服务,这个服务记录了业务系统访问RDS所有记录(比较耗钱)。

使用这种方式的架构如下图,payload记录是基于openresty+lua做数据处理,把payload提取出来,然后和审计的日志做对比(模糊匹配),找到对应的SQL执行记录,那么我们可以使用lua做回调把新增的记录给删掉。

1616821408_605ebca0c7f6975f48c3e.png!small?1616821410075

来源:freebuf.com 2021-03-27 13:08:47 by: 陌度

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论