用于检验出现异常主题活动的最有用的技术之一是对父子进程关联的剖析,殊不知,技术更高超更强有力的攻击者可以应用父PID(PPID)欺骗来绕开此实际操作,进而容许从随意父进程实行故意进程。虽然此项技术自身并不新鮮,尽管Cobalt Strike和DidierStevens 对它进行了详解,但在检验该类进攻层面开展的专业科学研究却非常少。
在这篇文章中,大家将讨论该技术的使用原理及其防御者怎样运用Windows事情追踪(ETW)来检验该技术。大家还将公布定义认证PowerShell脚本制作以实行PPID欺骗和DLL引入,及其一个Python脚本制作,该脚本运用pywintrace库来检验此主题活动。
为何最先要开展欺骗?
以往,攻击者通常能在启动进攻时不留有任何的印痕,可是伴随着EDR的迅猛发展和危害寻找的盛行,状况就逐渐产生变化了。尤其是应用父子进程剖析早已变成一种有用的技术,用以检查在黑客攻击破坏力链的几乎每一个环节形成的非常主题活动。
我们在Countercept上采用的一些实例:
- 宏有效载荷传送: WinWord转化成全过程;
- JS / VBS C#有效载荷传送: cscript转化成csc;
- 横着挪动:services/wmiprvse造成新步骤;
这驱使攻击者再次评定她们的方式,并紧紧围绕像PPID欺骗那样的技术,以绕开当代的防御力对策。
根据CreateProcessA开展欺骗
有很多不一样的方式可以欺骗父进程,在这篇文章中,大家将关心一个非常简单和最经常使用的技术,牵涉到API启用CreateProcessA。
一点也不怪异,CreateProcessA容许客户建立新步骤,而且默认设置状况下,将应用承继的父级建立步骤。可是,此函数公式还适用一个名叫“lpStartupInfo”的主要参数,你能之中界定要应用的父进程。这一作用是在Windows Vista中添加UAC后初次引进的,目地是为了更好地恰当设定父级。
在更多方面的技术水准上,lpStartupInfo主要参数偏向STARTUPINFOEX构造。此结构包括一个lpAttributeList,你能应用UpdateProcThreadAttribute通过“PROC_THREAD_ATTRIBUTE_PARENT_PROCESS”特性设定进程的父进程。
顺带提一下,这类方式 还可以用以权利更新。文本文档中提及“从特定进程承继的特性包含句柄、机器设备投射、CPU关系、优先、配额制、进程动态口令和工作目标”。“Adam Chester有一个blog,展现了怎样乱用它来得到Windows系统。
怎样欺骗父进程?
在互联网上立足于的最普遍方式之一是应用故意宏文本文档,很多有效载荷通常会发动新进程,例如cmd,PowerShell,regsvr32或certutil。图3表明了从winword转化成rundll32的一个实例。可是,这种做法是相对性出现异常的,而且大部分防御力对策都非常容易检验到。
为了更好地解决这个问题,攻击者可以改成CreateProcessA技术的VBS宏完成从预估的父进程运行有效载荷(例如Explorer启动cmd)以与自然环境结合,下面的图简述了怎样完成的全过程。
大家不容易公布此VBS编码,殊不知,其他信息可以这里寻找。
可是,我们可以采用进一步对策来避免应用常用的Windows应用工具吗?一种挑选是应用一种方式的DLL或运行内存引入在早已运作的进程中载入有效载荷。
为了更好地表明这一点,大家根据Didier Stevens]的编码建立了一个PowerShell脚本制作,该脚本可用来建立具备欺骗性父级的进程,随后之中引入DLL。
为了更好地演试怎么使用该脚本制作掩藏主题活动,大家查询了Windows 10上较常用的进程。大家看见的一种十分普遍的合理合法关联是“ svchost.exe”运行“ RuntimeBroker.exe”。
应用PowerShell脚本制作,大家可以仿真模拟这一主题活动,并根据“ svchost.exe”强制性转化成合理合法的“ RuntimeBroker.exe”,随后引入并实行DLL有效载荷。
此空间向量表明了该类技术怎样潜在地绕开致力于父子关联的检验标准。
如何查找到攻击者?
如上所述,大家讲解了CreateProcessA技术如怎样欺骗父级ID的,而且从安全性精英团队的方面看来,假如你应用资源管理器或进程任务管理器查看已经运作的进程,则会见到欺骗性的ID。可是,有什么方法可以找到真正的ID?
Windows中最佳的调查取证数据库之一是Windows事情追踪(ETW),ETW给予相关系统软件上产生的事情的即时数据流分析,这也是我们在Countercept的节点代理商中采用的物品。
尤其是Microsoft-Windows-Kernel-Process给予程序流程可以为步骤建立给予一些有用的看法,并可以协助大家检验步骤ID欺骗。在下面的实例中,你将见到怎样从“winword.exe”(PID 9224)转化成“rundll32.exe”(PID 5180)(图9)。
查询搜集到的ETW数据信息(图10),你将见到好几个ProcessId字段名,包含EventHeader ProcessId及其具体事情ProcessID和ParentProcessID。虽然这有一些令人困惑,但细读MSDN文本文档,大家发觉EventHeader ProcessId事实上标志了转化成事情的进程,即父进程。
在这个合理合法的实例中,你能注意到EventHeader ProcessId和ParentProcessId恰当配对。
在第二个实例中,大家实行了故意的PowerShell脚本制作,并根据“svchost.exe”(PID 4652)转化成了“RuntimeBroker.exe”(PID 4976)。
和过去一样,我们可以见到ETW转化成了一个步骤事情(图12);可是,此次的EventHeader ProcessId和ParentProcessID是不一样的。事实上,EventHeader ProcessId表明了真正意义上的父级关联,即“ winword.exe”(PID 9224),由于大家刚发觉许多人在实行ParentPID欺骗!
可是,如同在危害检测中一样,事儿并不是这样简易,假如你试着规模性开展此实际操作,你将发觉合理合法欺骗会产生乱报。一个普遍的实例是用户帐户控制(UAC),用以提高进程权利。在Windows 10中,当UAC实行时,应用软件数据服务(根据svchost)用以运行提高的进程,但之后将欺骗父级以表明初始启用方。下边的实例表明了提高后的cmd.exe如何把explorer.exe做为父级表明,而事实上它是svchost.exe。
大家看见的另一个误报与WerFault的奔溃解决相关,在下面的实例中,当MicrosoftEdge奔溃时,应用svchost运行WerFault.exe,而且将父级欺骗为MicrosoftEdge.exe。
出自于检测的目地,大家建立了一个简便的定义认证Python脚本,该脚本应用pywintrace纪录来源于ETW的事情,较为PID,随后过虑結果以清除误报(图15)。
可以在人们的Github 上寻找PowerShell欺骗脚本的编码及其检测脚本。
汇总
在这篇文章中,大家呈现了网络攻击怎样利用合理合法的Windows作用来欺骗防御者,并很有可能绕开根据亲子关系的检测技术性。
可是,从防御力的方面看来,大家早已展现了对ETW过程事情的剖析怎样轻轻松松地突显出现异常的父级欺骗并协助发觉过程的真真正正由来。
文中翻譯自:https://blog.f-secure.com/detecting-parent-pid-spoofing/