1.引言
赛门铁克端点保护Symantec Endpoint Protection (SEP) 12.1的存在数个高危漏洞!一旦攻击者拿下了管理端,得到了管理员的权限,那么他就可以重新部署安装升级包,把木马藏进安装包,推送至客户端执行,从而拿下整个企业网络。目前只有升级到12.1 RU6 MP1的版本不被影响。
简单介绍一下,SEP 是一个企业版的杀毒产品,分为管理端和客户端。管理端是提供web UI,允许管理员管理和察看客户端的状态和客户端的病毒感染事件等等。而客户端基本上就是一个普通的赛门铁克杀毒软件,但是接受管理端的管理并且定时上报 自己的状态。值得一提的是,管理员还可以在管理端部署安装升级包,以便客户端通过管理端来进行升级。
本文重点介绍这几个漏洞和利用方法:攻击者最终可以在管理端和所有客户端得到 ‘NT Authority\SYSTEM’ 的权限。
2.攻击SEP管理端
攻击以SEP管理端的登陆页面为突破口,因为登陆页面是暴露在最外层的接口。
2.1 CVE-2015-1486: 绕过SEP管理端登陆认证
当用户认证以后,setAdminCredential()把用户信息存在与当前session相关的AdminCredential对象中。而阅 读源代码后发现,setAdminCredential()在两个地方被调用,一个在LoginHandler类里面,一个在 ResetPasswordHandler类里面。奇怪的是,setAdminCredential()为什么会在 ResetPasswordHandler类里面被调用呢?看起来很可疑,这个值得我们研究一下。从名称上看,ResetPasswordHandler 类用来处理口令重置,其中handleRequest()方法的代码如下
/* */ public void handleRequest(RequestData requestData, ConsoleSession session, Document doc)
/* */ {
/* 72 */ this.requestData = requestData;
/* 73 */ String userName = (String)requestData.get("UserID");
/* 74 */ String domainName = (String)requestData.get("Domain");
/* */
/* 76 */ NodeList list = doc.getElementsByTagName("Response");
/* 77 */ Element root = (Element)list.item(0);
/* */ try
/* */ {
/* 80 */ if (!isValidRequestWithinGivenInterval(requestData.getRemoteIP())) {
/* 81 */ throw new ServerException(-2130182144, 186);
/* */ }
/* */
/* 84 */ checkIfSiteCanRecoverPasswords();
/* 85 */ init();
/* */
/* 87 */ if ((this.sRecipient == null) || (this.sRecipient.length() == 0) || (" ".equals(this.sRecipient))) {
/* 88 */ ServerLogger.log(Level.INFO, "Problem with Mail server Configuration");
/* 89 */ throw new ServerException(-2130182144, 179);
/* */ }
/* */
/* 92 */ AdminCredential credential = getCredential(requestData, session);
/* */
/* 94 */ if ((credential != null) && (credential.getAdminID() !&#