FreeMilk:一个高度定制化的鱼叉式网络钓鱼攻击活动

前情提要

2017年5月份,Palo Alto Networks 安全情报研究部门Unit42观测到一个高度定制的、针对特定目标的鱼叉式网络钓鱼攻击活动,攻击目标遍及世界各地。威胁攻击者利用CVE-2017-0199(一个Microsoft Word Office/WordPad远程代码执行漏洞),并针对每个受害目标精心制作钓鱼邮件的诱饵内容。

攻击活动概览

研究发现,这一类鱼叉式网络钓鱼电子邮件来自多个被入侵的电子邮件帐户,这些账户与一个合法的位于亚洲东北部的域名相关联。研究人员推测攻击者劫持了一个已有的、合法的正在进行的会话,并伪装成合法的发件人向受害目标发送恶意的鱼叉式钓鱼电子邮件,具体流程如下图1所示:

图1:通过劫持会话来传播恶意软件

成功的利用漏洞感染主机后,恶意的文件将交付两个恶意软件的有效载荷PoohMilk 和Freenki。在这类钓鱼攻击中,攻击者具有明确的目标,目前已知的包括:

  • 位于中东的银行
  • 总部位于欧洲的提供商标和知识产权服务的公司
  • 国际性的体育组织
  • 与亚洲东部和北部的国家有间接关系的个体

分析过去已观测到的这类活动,研究人员认为它们来自同一个黑客组织,持不同政见者和其他实体也可能成为这一有针对性的钓鱼攻击的目标。之所以将这类鱼叉式网络钓鱼称为“FreeMilk”,是因为在恶意程序的PDB路径中包含该字符串。

恶意文件

CVE-2017-0199这一漏洞是攻击者们惯常使用的,在FreeMilk钓鱼攻击活动中,恶意文档向受损的Web服务器发送下列信标,如图2所示:

图2: 恶意Word文档回调的信标

C&C服务器回应一个使用了Base64编码的PowerShell脚本,该脚本会依次下载两个虚假的图像文件,其中包含了嵌入的PE二进制文件和JavaScript文件(JS文件用于在被攻击的主机上提取嵌入的PE文件,如下图3所示)的反应。提取出的PE有效载荷被命名为PoohMilk 和 Freenki。

分析PoohMilk Loader

分析表明,PoohMilk是第一阶段的加载器。成功的利用漏洞后,通过运行适当的命令行参数完成注册表中的持久化,便于执行第二阶段有效载荷(即Freeki)。下面的图4中展示了使用到的注册表键值对。

图4:PoohMilk将注册表项的值设置为第二阶段的有效载荷

此外为了便于执行下一个阶段,PoohMilk试图读取并解析一个位于用户临时文件夹下的名为“wsatra.tmp”的文件。如果找到了该文件,PoohMilk读取文件的内容并希望从中找出一个路径,这个路径将被用于搜索并识别与LNK和ZIP 扩展名相关的任何文件。至于搜索.lnk文件的具体原因,目前尚未确定,不过,如果能够找到一个zip文件,则会提取它的内容,并将数据复制到用户临时文件夹下的某一文件中。文件的命名格式如下所示:

“%s\\ rar0tmpextra % d.rtf”

其中“%d”是调用Windows API GetTickCount()获取到的返回值。然后调用Windows API ShellExecuteW()执行该文件。

从PoohMilk loader 样品中发现的PDB路径,示例如下:

E:\BIG_POOH\Project\milk\Release\milk.pdb

E:\BIG_POOH\Project\Desktop\milk\Release\milk.pdb

观察这些PoohMilk loader 样品,发现它们经常分发不同的恶意软件有效载荷,猜测攻击者这么做的原因,是为了试图提高恶意软件有效载荷的隐蔽性,提高被分析的难度和机率。在没有适当的命令行参数的情况下,这样做可以成功的躲避自动化分析系统的分析,从而隐藏其恶意的行为。

分析Freenki Downloader

Freenki的主要作用有两个:其一是收集主机信息,其二是作为第二阶段的下载器,接下来将详细的进行解析。

Freenki执行的任何代码都依赖于正确的命令行参数,如果没有传入任何参数,则程序只会选择退出。Freenki接受三个参数:

  • Console:此参数通过使用正在执行的示例的当前路径,在注册表中设置持久性,并添加参数“help”:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run\

key name: runsample

key value: “[CURRENT_EXECUTION_PATH] help”

  • help:此参数允许恶意软件执行其指向C&C信标的主函数。
  • Sample:此参数允许恶意软件设置持久性并与C&C通信。

Freenki做的第一件事就是收集主机的MAC地址,将其转换为一个十六进制字符串并附加到每个C&C请求中,因此这个值可能被用作一个ID来识别受害者的主机。需要注意的是,每个C&C请求都使用这串MAC后缀作为一个额外的标识符,所有请求都是用HTTP POST方法完成的,在每个信标之间,恶意软件休眠25秒。

  • 0x30 =与C&C的初始通信。恶意软件循环发送此初始请求,直到C&C响应一个HTTP(200)状态与附加的数据。
  • 0x31 =该标识符用来发送主机信息,包括:用户名、计算机名、检索到的dll文件的版本、基于Windows API函数IsWow64Process()的返回值判断主机是否是x64系统、收集所有以太网的MAC地址、试图执行一个WMI查询以获取相关信息(如计算机名、型号和生产厂商)、收集所有正在运行的进程。

图5: Freenki收集的主机信息(编码之前)

  • 0x34 =该标识符代表恶意软件企图对受害者计算机进行截图,据观察该恶意软件在活动之前只收集3个截图。
  • 0x32 =该标识符是用来检索次级C&C服务器。接收到编码后的数据并对其进行解析以获得新的C2地址。
  • 0x33 =在解析编码的次级C&C服务器,恶意软件发送该标识符。
  • 0x35 =该标识符在执行完二次有效载荷之后被使用,用来下载的次级C&C的有效载荷。

恶意软件使用相同的算法解码和编码大部分的数据。初始C&C和硬编码的User-Agent字符串被编码,并使用下图6中的代码片段进行解码。Freenki使用SSE指令解码数据,这并不是一种新创的方法,但也值得注意。

图6:用于解码Freenki编码的数据的Python脚本

之前提到恶意软件使用的标识符之一0x32使它能够检索次级的C&C地址。需要强调的是,恶意软件的作者调用了Windows API InternetOpenUrl(),使用HTTP、HTTPS或FTP的方法来添加次级的C&C地址。恶意软件利用次级的C&C地址下载另一个有效载荷。这个有效载荷预计大于100字节且以ASCII值‘PNGF ‘ 开头,有效载荷有两个编码层,一个只用于代码部分,第二个是前面讨论过的相同的编码,适用于整个恶意代码。一旦成功被解码,恶意软件将次级有效负载写入具有伪随机名称的用户%tmp %文件夹中。然后调用Windows API ShellExecuteW()和一个名为‘abai’的硬编码的参数,执行解码的有效载荷如下图7所示:

图7:次级有效载荷被执行(在‘abai’参数的作用下)

与之前钓鱼攻击活动的关联

(1)钓鱼活动伪装成Hancom的更新

研究人员在多个场合观察到PoohMilk被用来加载另一个被称之为N1stAgent的远程管理工具,如下图8所示:

N1stAgent没有被广泛使用,似乎仅在有针对性的攻击中被使用。众所周知,它第一次被观测到是在2016年1月的网络钓鱼活动中。N1stAgent伪装成Hancom的安全补丁程序通过钓鱼邮件被交付。

(2)反政府媒体网站的水坑攻击

2016年8月,一个由(大不列颠)联合王国叛逃者经营的一个反政府媒体网站的游客遭遇了水坑攻击,攻击者利用CVE-2016-0189(一个IT浏览器漏洞)对受害目标进行攻击,恶意代码试图分发Freenki(下图9所示)作为有效载荷。

结论

FreeMilk的鱼叉式网络钓鱼攻击活动仍在进行,攻击者的目标有限,但分布范围广泛,在全球范围内的不同地区都被观测到有FreeMilk的活动。攻击者使用了躲避检测的技术,只有给出适当的参数才能顺利执行,安全人员推测攻击者劫持了已有的电子邮件会话,并在此基础上针对受害目标精心制作了每一个诱饵文件话,使其看起来更合法。

目前尚没有确定第二阶段通过Freenki分发的恶意软件,注意到了一些C&C基础设施与之前的一些案例有重叠,不过这些并不是决定性的证据,因为一些C&C域名是被入侵的网站,因此不能据此判定攻击者的真实身份特征。

原创文章,作者:鹰小编,如若转载,请注明出处:http://www.mottoin.com/106317.html

发表评论

登录后才能评论

联系我们

021-62666911

在线咨询:点击这里给我发消息

邮件:root@mottoin.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code