捻乱止于河防——浅谈企业入侵防御体系建设

  【前言:噩梦序章】

  信息化时代对企业的信息安全威胁最严重的就是黑客入侵。由黑客入侵对企业带来的危害大家自行百度,在此不赘述。

  互联网企业由于其业务特性,业务会向全互联网用户开放,只要接入互联网的人都可以访问到这个业务,覆盖全网用户的同时又等于是给黑客暴露了攻击面,一旦业务出现安全漏洞,黑客就会迅速入侵进而对企业带来灾难性的破坏。

  传统企业即使有信息化业务,那也是在线下,覆盖用户有限(互联网上的黑客很难接触到),相对还算安全。但传统企业也在互联网化,这里或许又会经历一轮腥风血雨。

  腾讯安全中心早在2005年成立之初就开始关注入侵防御体系建设,经过近十年的系统建设和运营,也算小有一些血泪教育和经验。笔者不揣浅陋,愿抛砖引玉,大家一起PK探讨企业的入侵防御策略,共襄盛举。

  【启示录:捻乱止于河防】

  木桶理论是信息安全的一个经典理论,也就是说防御要面面俱到,随便漏掉一个点就可能导致全盘崩溃——所谓“千里之堤毁于蚁穴”是也。这也就造成了攻防双方的不对等:攻方只需要找到防方一个破绽,就可以把防方打败。有点类似游击战术:打得赢就打,打不赢就跑。这情景与清末的捻军何其相似。

  捻军是清末的反政府武装,主要战斗模式是游击,主力是马队,遇到正规军打得赢就打,打不赢就跑,马队跑得快,清军步兵、洋枪队根本追不上,搞得清政府很头痛。连当时刚刚打败了太平天国的天下无敌的湘军(湖南人打仗太厉害了,号称“无湘不成军”)也拿捻军没有办法。

  后来湘军参考明末将领孙传庭对付流寇的办法,以黄河为界,在重要位置步步设防,逐步推进,把捻军赶到一个包围圈里面,再集中优势兵力逼其决战歼灭之。最终捻军被河防策略消灭。

  从捻军的事例我们可以看到,对于这种攻防不对等的情况,防方要赢就要靠一个字:“控”——把对手控制在一个可控范围,再用丰富的资源打败他。这个思路就有点类似xti9er在《如何建立有效的安全策略》中提到的“降维攻击”。

  回到企业入侵防御上来,“控”的思路就是坚壁清野步步为营层层设防,让黑客即使入侵进来也是在我们可控的位置活动。

  一般而言,一个企业内部网络与外部网络的交界是内部员工的外网访问和生产环境的互联网业务。前者是几乎所有企业都有的(除非你的企业不让员工上外网——咳,太不人道了),后者是有互联网业务的公司才有。

  内部的外网访问是很大的安全风险,这些非专业员工往往又没有太高的安全意识。很多企业内部就是因为黑客使用0 day甚至是N day漏洞进行网页挂马或钓鱼邮件攻击沦陷的。而生产环境的互联网业务讲究快,需要敏捷开发快速迭代,这个过程中往往容易出现安全漏洞,且易于被外部发现。黑客入侵到一台服务器后就可以在生产环境内网驰骋了。

  以生产网的外部入口为例,很多年前腾讯就实施了严格的端口管控(不允许服务器的非业务端口对外网开放),所以基本上这些年的安全漏洞和入侵事件都控制在了Web层。这样我们就可以投入大量精力在Web层进行入侵发现和防御。

  【对抗中成长:V的故事】

  道哥在《中国黑客传说——游走在黑暗中的精灵》中描述了超级黑客V的故事。没错,今天的主角就是V。

  笔者根据一些线索以及不愿意透露姓名的接近V的人士爆料推测,V在乌云上的ID叫猪猪侠。翻看猪猪侠在乌云提交过的漏洞,可以看出这是一个顶尖高手。继续爆料,他还有一个名字叫ring04h,很早就活跃在互联网安全圈了(不熟悉的同学可以百度一下这个关键字),很多年前ring04h就给我们提交过漏洞。

  当然,以上只是基于福尔摩斯演绎法的推论,笔者不保证这个推论的正确性。

  {第一场}开源系统弱口令血案

  2013年9月的某天凌晨,我们的流量监控系统(对HTTP全流量进行分析,发现异常的HTTP请求)发出警报,某个网站存在WebShell通信,看到请求URL的第一反应是nginx的解析漏洞(漏洞原理参见nginx文件类型错误解析漏洞)的利用。

  应急响应团队立即排查,发现网站目录出现了一个gif后缀的PHP WebShell,再利用nginx解析漏洞执行。由于是gif后缀,一般情况下不会执行,所以主机安全Agent没有检测这个“图片”文件,幸好有纵深防御——在网络流量特征检测到了。同时服务器上的PHP的SafeMod为On,入侵者没有执行系统命令的权限。

  检讨下,此次事件主要是某个业务擅自使用WordPress,而又没有做安全加固导致(WordPress的后台管理页面对外网开放且有弱口令,黑客利用WordPress的后台权限上传了这个WebShell文件)。虽然防线被突破,但是有重兵把守(主机安全Agent系统检测主机层的可疑行为;流量监控系统检测网络层的可疑流量)于后,以致渗透过程被及时发现阻断。

  于是接下来我们就开始清理各种Web管理页面、弱口令以及nginx安全配置检测。过程中我们又发现几个没备案的WordPress,赶紧驱动加固。具体按下不表。

  此次事件从入侵者视角看,参见一次失败的漫游腾讯内网过程。

  流量监控系统的好处是对全HTTP请求进行分析,只要规则得当,黑客利用漏洞的时候就会触发警报,有好多Web漏洞就是被我们的流量监控系统发现并修复的。比如某些在线XSS攻击平台利用时会引入它域名下的JS,这个域名就是强关键字;再比如一些WebShell的HTTP通信模型。这个话题以后有机会再写。

  {第二场}备份文件带来的攻击

  2013年11月某天,主机安全Agent系统发出警报,发现某台服务器出现WebShell文件,我们的应急响应团队一看安全事件单吓坏了,这不就是一个典型的PHPWebShell么:

  主机安全Agent系统是运行在服务器的一个程序,主要负责收集基础信息(后台对基础信息分析发现安全风险)和入侵行为发现。由于Web层入侵都会用到WebShell,所以我们把WebShell检测做为第一道防线,一旦由于一些原因系统未能发现,进程/端口数据是第二道防线——比如Apache的属主用户执行了命令,就是个典型的WebShell执行命令特征。

  话分两头。应急响应团队接到警报后赶紧登机,关闭服务器外网,然后开始入侵检查。

  因为是config_ucenter.php里面被改了,所以首先想到是discuz的后台获取WebShell漏洞(看来是个0day漏洞)。果然后来知道是因为业务把config_ucenter.php备份了一个config_ucenter.php.bak文件,导致配置文件里的UC_KEY泄漏。有了UC_KEY就可以给论坛添加管理员了,再通过那个0day漏洞,就可以直接入侵服务器。

  全过程见入侵者的自述:又一次失败的漫游腾讯内网过程 。虽然被黑了有点脸上无光,不过连经验丰富的猪猪侠都说“腾讯在PHP安全领域的防护实力,当属国内第一”,这点还是很让人欣慰。

  检讨时间。此次事件主要是discuz的Web管理页面对外网开放(还是河防没搞好),当然也有文件备份不当的问题。接下来继续清理遗漏的Web管理页面,重点针对部署discuz的服务器进行全方位加固。

  {第三场}配置不当产生安全风险

  2013年12月某天,Kobin97反馈了我们某个discuz论坛的一个PHP文件源代码可以下载到,导致泄漏UC_KEY(见这个漏洞报告)。discuz论坛泄漏了UC_KEY是会被拿到WebShell的,所以应急团队赶紧处理。

  在上次discuz出事后,我们开始了大规模的排查和加固,某些业务在加固过程中误把目录 /uc_server/data/ 配置为不解析PHP,结果反而导致目录下的PHP文件可以被下载到,UC_KEY泄漏。

  万幸的是经过验证,这个漏洞暂时拿不到WebShell。因为在上次加固中我们已要求所有的discuz的登录页面/admin.php禁止外网访问,即使UC_KEY泄漏了,入侵者也很难进一步渗透。下图就是从非管理IP访问管理后台被拒绝的截图。

  猪猪侠也发现了这个问题,还精心设计了一个XSS攻击试图用有授权的人的浏览器来自动获取WebShell。不过被Kobin97报了漏洞之后我们就迅速修改了UC_KEY,猪猪侠的计划落空了。参见猪猪侠自述又又一次失败的漫游腾讯内网过程。你们还有没有看出什么破绽?

  检讨时间。这次事件主要是在实施安全加固策略的过程中,对配置是否正确的情况缺乏审计;同时还有流量监控系统若发现PHP、JSP这种该解析的脚本被下载了,就应该告警出来。

  {第四场}安全策略失效带来的问题

  在第二场后,我们的discuz论坛都进行了安全加固,特别是在管理页面做了访问IP限制,本来以为高枕无忧了,其实不然。

  某天可能是因为策略回滚,某个discuz论坛管理页面的访问IP限制失效了,正好管理员又有个弱口令,结果就给了猪猪侠可乘之机。

  这个访问控制策略失效是被我们的Web漏洞扫描系统检测到了的,但是在修复的过程中被猪猪侠扫到并利用——大家可以想象,你的业务有多少人24小时盯着,稍微出点疏忽就会出问题。

  然后就是利用discuz管理后台的0day漏洞生成WebShell。有了前几次的经验,这次猪猪侠比较谨慎,没有进行提权、端口扫描、漏洞扫描等大动作,所以一直未被发现。参见猪猪侠的一次成功的漫游腾讯内网过程。

  又到了检讨时间。此次事件是访问IP限制策略失效再加上管理员存在弱口令导致。然后猪猪侠的一系列动作比较轻,没有触发各种安全系统警报。

  此次的关键节点还是在管理页面限制措施失效的处理时间稍长。对于高危漏洞,一定要立即处理,不可拖延;对抗高级渗透,除了已知入侵模式的黑名单模型,还要更进一步使用白名单模型,依靠平时的网络访问、运维行为建立时间/行为/动作模型,一旦出现不符合的情况就判定为异常事件——我们在核心区域已经开始这样做了。

  {总结}

  因为我们已经屏蔽了服务器的外网所有非业务端口,所以四次入侵都是从Web应用过来的。虽然还是被黑客不同程度地获取到部分权限,但是黑客的活动范围被控制在一个有限的区域(都是普通业务区),至少说明河防大策略还是正确的。

  我们可以看到,黑客们都对这种开源的程序漏洞(如discuz、WordPress、phpwind等)研究得炉火纯青,企业能不用就不用。

  对于越来越多的互联网Web业务,一定要做好安全加固,简单口诀:“目录默认不可写,可写目录不解析,Web Server非root,管理页面不对外”。对于企业来说,这个工作大部分是个系统工程问题而不是安全技术问题。

  【后记:未完待续】

  河防大计定下来后,要考虑对敌人的精准打击了——也就是在可控区域进行纵深防御。

  纵深防御就是要联动多个层面的安全系统层层设防,这样即使哪个点被突破了还可以在其他层面发现和阻断入侵。比如我们正在尝试的PHP环境下的安全防御方案和多维度的入侵检测。

  我们需要始终记得,安全是一个整体。

 

上一篇:智能无惧挑战 山石网科轰动RSA2015

下一篇:在线账户频失窃 专家支招巧化解