前阵子就有朋友留言说让我吐槽吐槽数据库安全扫描,此言正合我意。这些年,企业安全事故频发,勒索病毒事故多出,再加上安全对抗演练的进行,让数据库安全在企业里的地位与日俱增,安全扫描也变成了头等大事。也经常有客户发安全扫描结果过来,让我们帮助分析如何优化,其中大多数是Oracle数据库的。有时候我们分析了安全漏洞,给客户建议了一个数据库升级的方案。客户按照我们的方案升级后,扫描结果并没有什么变化,安全漏洞告警并未消失。以我们的经验来看,这些漏洞肯定是在PSU中已经解决了,不过安全扫描工具就是不认。为什么会出现这种情况呢?经过一番分析,我们发现出现这种情况是因为Oracle的安全补丁体系太复杂了,而漏扫工具无论是登录扫描还是非登录扫描,都仅仅是根据特征去发现漏洞,而做漏扫的特征库的人员在数据库补丁方面的专业性不够。MySQL、PostgreSQL还好,比较少发布单独的安全补丁,或者说补丁体系比较简单。MySQL每三个月出一个补丁版,直接更新就行了。但是Oracle数据库太复杂了,一些安全补丁与功能性补丁之间存在十分复杂的关系,为了避免冲突,需要通过MLR等方式发行补丁集来解决问题,甚至有时候需要通过发布一个CPU来解决问题。Oracle的补丁是十分复杂的体系,有PSE、MLR、bundle、CPU、SPU、PSU等多种补丁。各种补丁包之间可能还有冲突,有些PSE和MLR补丁之间存在冲突,还必须卸载了通过打特殊的bundle来解决问题。还有一些补丁有可能过了几年就被废掉了,用了一个新的补丁来替代了。因此要想把Oracle的补丁分析清楚还是相当困难的。十多年前,我们甚至给部分大客户提供了补丁分析服务(Oracle官方也有补丁分析服务,不过包含在一些收费昂贵的服务里,用户一般用不起),利用我们和Oracle官方良好的合作关系,帮助用户选择佳的补丁策略。不过做这种事情还是相当费劲的,我们需要利用Oracle内部的网站辅助,并花上很多时间去分析资料才能完成。不同客户的数据库运维人员,数据库升级策略差别很大,因为一个安全漏洞可能有数十种方法可以解决,而做漏扫的公司的特征库很可能无法覆盖这些方面,哪怕就是漏了你解决问题的那一条,你的系统漏扫就过不去。遇到这种情况,有些客户比较好说话,只要把问题讲清楚就行了,比如说Oracle的某个PSU已经解决了这个问题,官方文档里有明确的说法,只要写个报告就可以了。不过有些领导就是公事公办,非要以漏扫的结果为准。我遇到过一个十分奇葩的领导,要求必须在漏扫时0缺陷,其他材料一概不认。终的解决方案是把已经安装的PSU先卸载了,然后打上安全扫描软件认可的独立补丁,才搞定这个事情。也有一些漏扫厂商认为扫描结果不准的主要原因是采用了盲扫的方式,没有采用登录扫描的方式。如果采用登录扫描模式,结果会很准确,实际上我遇到的案例也有很多是登录扫描的案例。登录扫描也是一种特征扫描的方式,而不是功能扫描,通过一个Oracle权限账号取补丁信息或者通过OPatch命令抓取补丁信息。不过根据风险库采用特征比对的方式来进行分析对于Oracle来说十分困难。因为一个漏洞可能有数种甚至数十种补丁可以解决,而漏扫工具的规则库里可能不会很完整。这种情况下出现扫描结果不准确就很正常了。只有采用功能扫描或者渗透扫描的方法替代特征扫描,模拟出某个安全风险,以抓取到漏洞特征为准,这种方式可能会比较靠谱。不过有些漏洞渗透是有风险的操作,也有些漏洞是在某些特殊的复杂场景下才可能触发的,漏扫工具很难实现模拟。这个问题虽然无法彻底解决,但是还是可以改进的。Oracle每个季度会出PSU,大部分的已知安全漏洞都会在下次PSU上解决,每个漏洞被解决的PSU也大多数被Oracle公布了(记住是大多数,不是全部)。另外一个方面,大部分用户解决Oracle安全漏洞的常用方式就是打PSU。因此数据库漏扫厂家可以通过加强PSU补丁解决安全问题的采集来优化特征库,就可以很大程度上避免用户打了很新的PSU还报较早的漏洞的问题。另外漏扫工具也可以明确的指出解决该问题的低PSU号,从而让运维人员不需要像猜盲盒一样面对漏扫报告(Oracle的PSU包含从上一个升级包到目前为止的所有补丁的全集,因此PSU不会漏掉任何之前发布的安全漏洞补丁)。因为这些年用户在这方面遇到了麻烦,我们也想写个小工具来帮助用户解决一些问题,因此在D-SMART里我们也增加了一个小工具,这个工具在免费的D-SMART社区版里面也是免费提供的。有些用户刚刚看到这个功能的时候觉得相当高兴,这可是个好工具啊,是不是我可以用它来辅助漏扫后的补丁更新?不过我马上就会给他泼一盆凉水,这个工具也仅仅是通过我们预先定义好的漏洞规则库,通过OPatch工具抓取的一些数据库配置信息进行简单的扫描和分析,列出一个大体需要打补丁的清单而已。要想维护这个库工作量也很大,因此我们定期更新特征库的频率也不高,大概三个月更新一次。对于Oracle来说,这个表格里给出的升级补丁建议也只是一个十分简单的根据规则的建议,并不能自动分析针对你的系统该如何打补丁。这个工具重要的功能是可以方便地导出一个表格,给领导交差而已。表格中的升级补丁列会列出一大堆我们已知的可能可以解决此问题的补丁号,但并不全,因此不一定能够在你的运维环境中帮到你。不过如果你如果能把Excel生成出来交给领导,可以让领导感到你的工作很用心,仅此而已。如果真的要打补丁,还是需要通过人工分析,大部分情况,我们就直接建议用户打一个比较新的PSU就可以了。如果领导再不认,那也没办法了,只好说,数据库厂商提供的新补丁集都打了,还能扫出漏洞,那么也没办法了。