*本文原创作者:Ano_Tom,本文属FreeBuf原创奖励计划,未经许可禁止转载
0×01前言
NSA的Equation Group(方程式组织)泄露的漏洞攻击代码已经有一段时间了,我们将Exploits中涉及到天融信防火墙的攻击代码进行了简单分析,发现其中的一处漏洞跟我们在2016年1月10号提交到乌云的漏洞相重合,如图:
该漏洞的利用代码在/Firewall/Exploits/ELCA/eligiblecandidate.py,查看文件修改时间,得知该组织在2013年6月11号就已经发现了该漏洞。
其实该漏洞不止影响天融信的防火墙,还影响基于TOS(Topsec Operating System)开发的其他产品,比如天融信的TopVPN、TopGage等众多产品。
由于漏洞影响很大,基本影响天融信全线产品,所以延期3个月公开。鉴于方程式的漏洞EXP已经公开,我们将该漏洞的产生原理简单还原一下。
0×02 天融信产品简介1.安全公告
针对该组织泄露的攻击代码,天融信厂商已经发布了相关补丁,以及安全公告。其公布了官方统计的受影响版本以及数量,具体可查看[安全公告](https://www.topsec.com.cn/aqtb/aqtb1/jjtg/160820.htm)
公告中指出目前受影响的设备情况是“天融信安全云服务团队对所有可能涉及到的相关产品版本进行了跟踪,统计到在互联网运行防火墙10000余台,其中已确认受影响2546台”
2.天融信产品介绍
查看[NGFW防火墙](https://www.topsec.com.cn/aqcp/bjaq/fhq/topasicptlbxl/index.htm)的介绍,其采用了自主研发的TOS安全系统平台
TopVPN产品也采用了TOS
其他产品的是否采用了TOS可以访问其[产品介绍](https://www.topsec.com.cn/aqcp/index.htm)
从中可以发现TOS(Topsec Operating System)安全操作系统是天融信完全自主知识产权的系统,采用全模块化的设计,使用中间层的理念,减少了系统对硬件的依赖性,应用于众多产品中。
Exploits简介
其中与天融信防火墙有关的漏洞利用代码在/Firewall/EXPLOITS/下
1. ELBA-Eligible Bachelor:漏洞利用程序,具体待分析。其中在/S/Eligible.txt有程序使用说明
2. ELBO-Eligible Bombshell:该漏洞是TOS系统中的一个溢出漏洞,具体待分析。其中在/S/ELIGIBLEBOMBSHELL.txt有程序使用说明
2. ELCA-Eligible Candidate:该漏洞是TOS系统中入口文件maincgi.cgi文件里的一个命令执行漏洞,在其处理cookie时候产生的问题,本文将简单介绍该漏洞的产生原理。其中在/S/ELCA.txt有程序使用说明
3. ELCO-Eligible Contestant:该漏洞是maingcgi.cgi文件里处理post请求产生的命令执行漏洞,具体待分析。其中在/S/ELCO.txt有程序使用说明
查看Firewall/EXPLOITS/ELCA/eligiblecandidate.py中的代码,在/Firewall/S/ELCA.txt中记录了脚本操作流程,首先是执行touch,获取服务器的相关信息,然后执行probe探测漏洞是否存在,该代码如图,
其通过先请求/site/pages/index.html,获取etag标识,然后执行touch /w*/*/*/p*/* 命令(其真实路径为/www/htdocs/site/pages/index.html),修改文件时间,继续访问查看Etag是否变化来判断漏洞是否存在。如图
执行exploit,的逻辑如下
其先把/tmp临时目录里的文件清除,然后将后门文件代码执行post请求,存到临时文件里
再利用命令执行漏洞,执行上传的后门文件,从而反弹shell。其脚本使用说明如下
命令执行漏洞原理
我们对/Firewall/Exploits/ELCA中涉及的漏洞进行分析。该漏洞是maincgi.cgi文件处理cookie设计缺陷导致漏洞的产生。
TOS安全操作系统的主文件为maincgi.cgi,所有Web版功能集成在此文件中,其实现位于so库文件中。
从此文件main()函数逻辑可以看到,只要存在session,并且参数url的值不等于系统内定的特定值,系统都会去尝试读取session的值,若session无效则会销毁session。
销毁session的逻辑存在漏洞,所以我们进入该逻辑的条件是,请求中包含自定义的session且保证url的值不为如下值
.data:08221B84ddoffsetaMainnav; " MainNav" .data:08221B88ddoffsetaMainright; " MainRight" .data:08221B8CddoffsetaHead; " Head" .data:08221B90ddoffsetaAaaauser_right; " AAAAUser_right" .data:08221B94ddoffsetaAaaauser_lef_0; " AAAAUser_left" .data:08221B98ddoffsetaAaaagrade_ri_0; " AAAAGrade_right" .data:08221B9CddoffsetaAaaagrade_le_0; " AAAAGrade_left" .data:08221BA0ddoffsetaAaaarole_1; " AAAARole"
跟进destroy_cookie_file()查看代码
int__ cdecl destroy_cookie_file(inta1){ returndestroy_cookie_file(a1); }
该函数调用的 destroy_cookie_file()函数,传入的a1是我们session的值,该函数是此文件的导入函数,实现不在这个文件中。我们看下这个文件所使用的库都有哪些
.init: 0804D39C ; Interpreter '/lib/ld-linux.so.2'.init: 0804D39C ; Needed Library 'libwebui_string.so'.init: 0804D39C ; Needed Library 'libwebui_tools.so'.init: 0804D39C ; Needed Library 'libwebui_parse.so'.init: 0804D39C ; Needed Library 'libwebui_templ.so'//.......省略
目测函数就在这些库文件里面,使用nm命令可帮我们快速的找到函数实现的地方,执行nm -D *.so >1.txt ,将所有库文件的导入导出函数写入到1.txt里,然后查找destroy_cookie_file
前面是T说明是导出函数,也就是函数在libwebui_tools.so 中实现的。如果是U就是导入函数,函数只是在这引用。我们跟进查看:
int__cdecl destroy_cookie_file(const char *a1) { char s; //[sp+ 34h] [bp- 84h]@4 if( a1 && strlen(a1) > 4) { snprintf(& s, 0x80u, "rm %s%s %s%s* %s*%s* -f", "/www/cookie/", a1, "/tmp/", a1, "/www/htdocs/site/image/", a1); system(& s); //直接拼接session内容,并执行 system命令 } return0; }
可以看到直接拼接带入了system函数,这种拼接方式虽然有限制,但是不影响我们执行命令。此外还需要注意的是天融信的TOS系统内有沙盒,禁止了很多命令的执行,还禁止了;的使用,此处不对沙盒多做分析。
利用方式
可以获取管理员密码等信息,近而修改设备配置,或直接执行系统命令,监听流量等。
天融信相关设备会将用户的账号以及编码的密码存储在/www/cookie目录的文件中,可以直接读取(ls获取文件名,然后执行tar到web目录即可,/www/htdocs/site/image里有写权限)。
如下给出当时测试的几个采用TOS,并受影响的产品截图。
1.天融信VPN系列产品(TopVPN)
获取存储管理员密码的文件,打包到web目录,并查看登陆。
2.NGFW防火墙系列(NGFW4000)
3.天融信统一威胁管理系统(TopGate)
漏洞修复
以下是天融信厂商发布的安全补丁方案。
1. 快速方案(即关闭相关设备的web管理页面即可)
由于利用漏洞需要在防火墙管理权限开放的条件下进行,而防火墙通常无需向互联网开放该管理权限,因此可将防火墙相应接口的WebUI、GUI等管理权限关闭以快速处置问题。
2. 完整方案(更新官方提供的安全补丁)
请登陆天融信公司FTP服务器ftp://ftp.topsec.com.cn获取版本进行升级,根据《保障处置方案》操作。
总结
通过方程式组织泄露的攻击代码来看,搞底层的基础设备的漏洞才是王道。
*本文原创作者:Ano_Tom,本文属FreeBuf原创奖励计划,未经许可禁止转载
我来说两句排行榜