AD

感染不联网的计算机/USB_Thief解析

0x01概述

Eset公司的安全研究人员发现了一种高度隐秘的恶意程序——USB Thief,因为该程序主要通过U盘传播。它能感染不联网的计算机,不留下任何入侵痕迹。

USB Thief不依靠传统U盘病毒使用的自动运行(autorun)或其它操作系统漏洞进行传播,而是植入到一些常用的合法应用的便捷式版本中。例如Firefox、NotePad++和TrueCrypt等都有可以在U盘中运行使用的便携版本。当一个便携应用运行时,恶意程序就会在后台执行。

0x02详细解析

USB Thief会将自身绑定到目标主机驱动器上,对抗安全人员对其复制及分析。它使用USB设备的设备ID(device ID),进行多层次加密进行保护自身。加载器包括有一个文件名列表,并且每个USB Thief中的列表都是唯一的。其中一部分文件名是基于精确的文件内容和文件创建时间所计算得到。所以,如果将一个USB Thief移动到非预设的地方,则其不会执行。一旦USB设备从电脑拔出,任何人都不会发现数据以及被窃取。同样,它也很容易实现窃取数据外的其他功能。

“USB Thief除了采取多级加密进行自我保护外,它使用的窃取数据的代码简洁又高效,尤其厉害的是,它不会在受害者电脑上留下任何痕迹。” 

USB Thief现阶段主要针对非洲及拉丁美洲的国家地区。截至2016年3月24日,谷歌的Virus Total上还没有检测到它的样本。

Bridging the (air) gap(抵近目标/拉近距离)

USB Thief和最近些年针对中东地区的政府及关键基础设施的攻击有所关联。以色列和美国在针对伊朗核计划时采用的“震网”(Stuxnet)也是利用了USB设备进行传播。每次感染设备,都会插入一个陷阱/存在缺陷的驱动,Stuxnet则会利用这些称之为“air gaps”的东西。USB Thief同样具有深入渗透到一个敏感网络的能力。Stuxnet有一个比较大的缺陷,就是无法持续控制被自我复制病毒感染的设备。此外Stuxnet很容易被安全人员进行剖析。和Stuxnet类型的一个恶意程序——Gauss中的一部分代码,以及解决该缺陷,其主要payload使用一种未公开的加密方式的key进行加密。Gauss会像Stuxnet一样,通过使用多个payload绑定至一个目标设备,保证不会对目标造成其他额外的损害。这种模式造就了一个谜团:Gauss的payload有哪些功能,其是怎么实现的。

Preventing copycat attacks(防止山寨攻击)

USB Thief的加密方式和Stuxnet有类似的地方,它确保只有攻击者制定的USB驱动器可以执行感染。一个USB驱动器无法感染不受数量限制的计算机,这个措施没有Gauss中的措施有效。不过将恶意代码绑定到一个单独的USB设备上并减少其传播扩散范围。不过,这种攻击并非用于一个大范围的普通攻击,而是像外科手术一般的精准打击。其次,这种自我保护措施也使分析/逆向变得更加困难。防止了攻击在其他环境浮现。

安全人员在分析时非常困难,因为没有对应的USB设备的访问权限,也无法在受控的分析场景下创造一个恶意的USB设备。只有被发现的恶意代码样本可以用来分析。所以只能暴力破解对应的唯一的设备ID。当成功解密代码后,还需要找到EXE文件和配置文件的正确执行顺序。因为在复制样本时,会改变样本的创建时间戳。

恶意程序的执行程序很简洁,每一个loader会按照顺序执行下一个loader,这些loader是根据预先定义的命名顺序所计算得出的hash值。但在执行时,必须从第一个loader开始执行,否则恶意软件会终止自身的执行。

USB Thief包含有6个文件,其中4个为可执行程序EXE,剩余2个为配置数据文件。为了实现防止自身被复制和防止被逆向,主要采取了两种措施,一是单个文件使用AES128方式加密,二是文件名称是由密码元素计算产生。

AES128的key使用存储USB Thief代码的USB设备的唯一设备ID和USB设备的某些磁盘属相进行计算得出。因此这些代码只能在唯一对应的USB设备上运行。

USB Thief执行的下一个文件的名字,是由下一个文件的内容和该文件的创建时间所决定。是SHA512散列的前5个byte,SHA512的值是由该文件的内容连接8byte的创建时间计算得出。这样,每个构造的特殊USB设备中的USB Thief如果被复制到其他地方,则会改变各个文件的创建时间属性,从而导致程序不运行。

 

First stage loader

第一阶段的loader只是USB Thief的入口点,主要作用是欺骗用户运行USB Thief。可以有多种方式实现完成,USB Thief是用来一种比较有趣的方式——各种常用应用的便携版,例如Notepad++便携版和TrueCrypt便携版中被植入一个恶意DLL文件“RichEd20.dll”。此外,第一阶段的loader还会检查它是否运行在指定的USB设备上,并且该设备是否可写。验证是否可写是因为窃取到的数据要保持到该USB设备上。

Second stage loader

第二阶段的loader会使用第一阶段loader的hash,随后,它的配置文件会使用自身的hash。配置文件会验证其父进程的加密后的名称。这是为了对抗反病毒软件,假如USB Thief运行在其他程序的进程之下,例如debugger,则会自动终止运行。最后,配置文件的hash值会用于计算第三阶段loader的名字。

Third stage loader

第三阶段的loader会做一些对抗反病毒的检查,假如存在“AVKTray.exe”(G Data安全软件)或“avpui.exe(卡巴斯基安全软件)”,则会自动终止运行。它的配置文件采取了和前任一样的技术手段,然后执行payload。它还会创建一个命名管道(name pipe),用于将配置信息传递给payload,命名管道的名称是该计算机的名称的SHA512散列值中的前30byte。

Payload

最终,payload实现窃取数据的功能,它会注入到一个新建的进程中:“%windir%system32svchost.exe -k netsvcs”。配置数据信息会包含需要窃取那些数据,如何对数据进行加密,数据就存放在哪里。

窃取到的数据必须存放在该USB设备上,默认情况下会窃取如下信息:图片和文档,整个Windows系统的注册表信息(HKCU),所有磁盘驱动器的文件列表。数据窃取功能使用了“WinAudit”这个开源程序,并且使用椭圆加密算法(ECC)对窃取的数据进行加密。

有迹象表明,USB Thief的开发者在进行专门测试,以便确保其能在不同的场景下能正常工作。

0x03附录

http://arstechnica.com/security/2016/03/stealthy-malware-targeting-air-gapped-pcs-leaves-no-trace-of-infection/ 

http://www.welivesecurity.com/2016/03/23/new-self-protecting-usb-trojan-able-to-avoid-detection/ 


评论

此博客中的热门博文

简单粗暴导出小米便签

我——终于一个人了

多种方法绕过POWERSHELL的执行策略