VPNFilter III:恶意软件中“瑞士军刀”的增强工具包

VPNFilter是一个多阶段模块化的恶意软件,已经感染了全球数十万的网络设备。之前的报告中介绍过VPNFilter的三个阶段,近日思科Talos又发现了另外7个第三阶段模块。这些模块为恶意软件新增的功能包括扩展在网络端点之间横向移动的能力、数据过滤和多个加密隧道功能用以掩护C2通信及数据泄漏流量。

概要

据悉Talos近几个月以来一直跟进VPNFilter,本文是继Talos于5月发表的初步研究报告和6月更新报告后的最新研究结果。Talos表示,在其持续调查中发现MikroTik网络设备受到了严重攻击,特别是在乌克兰地区。由于这些设备似乎对攻击者的目标至关重要,于是研究人员就这些设备是如何被利用的进行了研究,并提出了一种技术用以检查MikroTik网络设备所使用的关键协议,以寻找攻击者可能使用的利用方法。本次Talos将分享对该协议研究的原因和方法,以及他们开发的协议解析器,以帮助安全社区检查此协议中的潜在恶意活动。

VPNFilter的扩展功能

新发现的VPNFilter第三阶段模块为恶意软件增加了以下功能:

  1. 映射网络和利用连接到VPNFilter受损设备的端点系统。
  2. 通过多种方式对恶意流量进行模糊和(或)加密处理,包括用于C2和数据泄露的通信。
  3. 通过网络端点之间的横向移动能力识别其他受害者。
  4. 构建分布式代理网络,可以在未来不相关的攻击中利用,用来混淆攻击流量的真正来源,使其看起来好像攻击来源于先前受VPNFilter影响的设备。

Talos表示,在对新发现的附加模块进行逆向工程后,能够确认以上功能。而在以前,仅能基于遥测分析对这些能力的存在和性质进行分析评估。

新增的第三阶段模块

Talos确定了以下七个新发现的第三阶段模块,这些模块极大地扩展了VPNFilter中的功能。

模块名称 模块功能
htpx 重定向和检查通过设备传输的http流量的内容
ndbr 多功能ssh实用工具
nm 允许从受感染设备进行网络映射活动
netfilter DoS 实用工具
portforwarding 允许将网络流量转发到攻击者指定的基础架构
socks5proxy 允许在受感染设备上建立SOCKS5代理
tcpvpn 允许在受感染设备上建立反向TCP VPN

以下将分别介绍这7个模块。

‘htpx’(端点利用模块 – 可执行注入)

‘htpx’是VPNFilter的第三阶段模块。该模块与Talos 之前报告中提到的‘ssler’模块共享类似的代码。该模块在很大程度上依赖于开源代码,该代码可以通过二进制文件中存在的字符串追溯到原始项目。一个很好的例子是‘libiptc.c’,它是Netfilter的一部分。

‘htpx’(左)和‘ssler’(右)之间的字符串比较

 

‘htpx’模块的主要功能是负责设置iptables规则,以便将发往TCP 80端口的网络流量转发到本地服务器的8888端口上。这种重定向通过首先加载允许进行流量管理的内核模块来完成。这些模块(Ip_tables.ko,Iptable_filter.ko和Iptable_nat.ko)使用insmod shell命令加载。然后‘htpx’模块发出以下命令来暗中转发流量:

它还会定期检查以确保这些规则仍然存在,方法是发出类似的删除命令,然后重新添加。还会创建一个名为/var/run/htpx.pid的临时文件。

然后生成以下HTTP请求:

在分析‘htpx’模块的过程中,无法从C2服务器获得响应,因此无法观察到其他操作。但是在对模块的二进制文件进行分析时发现,该模块会检查Http 通信以判断 Windows 可执行文件是否存在。如果存在,则标记可执行文件并将其添加到表中。因此有理由相信,攻击者可利用此模块下载二进制有效载荷,并允许 Windows可执行文件在通过受感染设备时进行动态修补。

‘ndbr’(多功能SSH工具)

‘ndbr’模块是一个具有SSH功能的模块,还具有端口扫描其他IP的功能。此模块使用dropbear SSH服务器和客户端,是dbmulti 2017.75版的修改版本。并且已经确定了该模块对标准dropbear功能的若干修改。

第一处修改针对dbmulti程序本身。dbmulti可以用作SSH客户端,SSH服务器,使用SCP执行数据传输,生成密钥或转换密钥。功能由程序名称或传递给程序的第一个参数确定。‘ndbr’模块已经取代了使用网络映射(即端口扫描)功能以及另一个名为‘ndbr’的函数生成或转换密钥的功能。

与原始的dbmulti程序一样,‘ndbr’模块的功能取决于程序名称或传递给程序的第一个参数。‘ndbr’模块接受的参数是dropbear,dbclient,ssh,scp,ndbr和nmap。以下是每个参数的说明。

  • DROPBEAR

dropbear命令指示‘ndbr’模块作为SSH服务器运行。原始dropbear代码使用默认SSH端口(TCP/22)来侦听连接。但是,‘ndbr’模块中存在的代码已被修改为使用默认端口TCP/63914。对原始dropbear代码的其他修改改变了处理主机密钥文件的方式。默认密钥文件路径已更改为/db_key,但‘ndbr’模块不会删除此文件。相反,当filename参数等于/db_key时,被修改了的buf_readfile函数将从内存加载正确的密钥。

dropbear服务器已被修改为通过适当的公钥进行身份验证,而不是使用基于密码的身份验证。而公钥也嵌入在‘ndbr’可执行文件中。修改后的代码中的bug错误地处理了使用不正确的公钥的连接。这些身份验证失败会导致ndbr SSH服务器陷入无限循环。但是,没有迹象表明客户端认证失败。目前,无法确定使用ndbr SSH服务器成功进行身份验证的正确密钥 – ‘ndbr’模块中嵌入的密钥(即/db_key和/cli_key)都不正确,并且在任何其他与VPNFilter相关的二进制文件中也找不到相应的密钥。

  • DBCLIENT(SSH)

如果传递了dbclient或ssh参数,则‘ndbr’模块将充当标准的dropbear SSH命令行界面客户端,但会修改其默认选项。与使用dropbear server命令的缺省密钥文件一样,dbclient/ssh命令具有缺省标识文件:/cli_key。目前,不知道dbclient(SSH客户端)应该连接到哪里。

  • NMAP

如果传递了nmap参数,‘ndbr’模块将执行对IP或IP段的端口扫描。

用法为:

  • NDBR

如果传递了ndbr参数,‘ndbr’模块将根据传递的其他参数执行三个操作之一。SSH命令将使用如上所述的默认密钥(即/db_key和/cli_key)。

第三个参数必须以‘start’开头,或者‘ndbr’模块自行卸载。

如果使用以下参数执行ndbr模块:

将执行以下dropbear SSH命令:

这会导致dropbear SSH客户端连接到远程主机并发出“srv_ping”命令,该命令可能用于向C2服务器注册受害者。

如果使用以下参数执行ndbr模块:

dropbear SSH服务器(如上所述)启动并开始监听指定的端口:

如果使用以下参数执行ndbr模块:

通过执行以下dropbear命令设置远程端口转发(参见上面的命令选项说明):

‘nm’(网络映射器)

‘nm’模块用于扫描和映射本地子网。它遍历所有接口,并通过ARP扫描启动子网上与分配给接口的每个IP关联的所有主机。收到ARP回复后,nm将向发现的主机发送ICMP回应请求。如果收到ICMP回应答复,它将通过执行端口扫描继续映射,尝试连接到主机上的以下远程TCP端口:

接下来,它使用MikroTik网络发现协议(MNDP)来定位本地网络上的任何其他MikroTik设备。如果MikroTik设备回复MNDP ping,则nm会从发现的设备中提取MAC地址,系统标识,版本号,平台类型,正常运行时间(秒),RouterOS软件ID,RouterBoard模型和接口名称。

nm模块通过/proc/net/arp 来获取被感染设备的ARP表信息,包括相邻设备的IP地址和MAC地址。接下来,还会收集/proc/net/wireless的全部内容。

该模块通过首先创建到8.8.8.8:53的TCP连接以确认其可用性(没有数据被发送)来执行跟踪路由,然后ICMP回应请求会随着TTL的增加而重复发送到该IP。

收集的所有网络信息都保存到名为/var/run/repsc_<time stamp>.bin的临时文件中。示例.bin文件如下:

负责SSDP,CDP和LLDP功能的代码存在于该模块中,但从未在分析的样本中被调用,因此始终为空。

nm模块需要三个命令行参数,但仅使用第一参数。与其他几个模块一样,第一个参数是文件夹,这是永久保存数据的位置。nm模块执行的最后一项任务是将包含扫描结果的临时.bin文件移动到名为第一个命令行参数的文件夹,可供以后通过主VPNFilter进程进行渗透。

‘netfilter'(DoS 工具)

netfilter期望三个参数。前两个参数未使用,第三个参数是带引号的字符串,格式为”<block/unblock> <# of minutes>.”。‘# of minutes’是netfilter在退出前应该执行多长时间。如果’block’被用作第三个参数的第一部分,netfilter会将以下规则添加到iptables:

添加此规则后,netfilter等待30秒然后删除此规则。如果相对于“# of minutes”仍有剩余时间,则此过程将再次开始。添加和删除循环可确保在从设备中删除规则时规则仍然存在。一旦时间到了,程序就会退出。信号处理程序也安装在netfilter程序的开头,删除iptables规则,然后在程序收到SIGINT或SIGTERM时退出。这样做是为了在有人手动终止netfilter程序的情况下设备正常工作。

最后,‘unblock’参数可用于删除先前使用‘block’参数添加的iptables规则。

虽然没有其他可能的代码路径,但有迹象表明该模块有可能有更多内容。

第一处迹象是Talos分析的所有不同netfilter模块样本(MIPS,PPC,Tile-GX)包含相同的ip列表,列表中是与以下公司/服务相关的168个CIDR IP地址:

这表示netfilter模块可能被设计为拒绝访问特定形式的加密应用程序,可能是为了试图将受害者导向到攻击者期望他们使用的服务上。有趣的是,列表中缺少一个极受欢迎的加密聊天应用程序Telegram。

但是,无法在代码中找到对这些字符串的任何引用。虽然有样本的所有netfilter版本都有相同的IP范围列表,但似乎没有使用到。据此推断获取到的样本可能不完整。

netfilter模块添加的iptables规则会丢弃设置了PUSH标志的TCP数据包。如果其目的是为攻击者提供使用受感染设备发起拒绝服务攻击的能力,则此规则可能会使用iptables规则阻止所有数据包而不仅仅是设置了PUSH标志的TCP数据包。通常,像这样的规则作为中间人攻击的一部分是有用的,使攻击者可以访问设备来拦截转发的流量,然后手动转发它。这可以将CIDR范围列表解释为要拦截的IP列表,但是无法在所分析样品中找到存在这种功能的迹象。最终得出结论,没有使用IP。这可能是由于旧版本的netfilter遗留下来模块,是尚未实现的功能,或者恶意软件作者对静态链接的iptables库进行的修改。VPNFilter作者之前已经修改过开源代码(例如ndbr模块),因此他们更改netfilter模块中链接的libiptc代码也在意料之中。

‘portforwarding’(允许将网络流量转发到攻击者指定的基础架构)

Portforwarding执行需要以下命令行参数:

给定这些参数,portforwarding模块将通过安装以下iptables规则将流量从特定端口和IP组合转发到另一个端口和IP:

这些规则会使得通过受感染设备的任何流量(IP1:PORT1)被重定向到IP2:PORT2。然后,第二个规则将更改流量的源地址为受感染设备的源地址,以确保将响应发送回受感染的设备。

作为预防措施,在安装iptables规则之前,portforwarding模块首先通过在PORT2上创建到IP2的套接字连接来检查IP2是否可用。但是,在关闭套接字之前不会发送任何数据。与操作iptables的其他模块一样,portforwarding模块进入一个循环,添加规则,等待一段时间,删除规则,然后再次添加它们,以确保规则在设备上保留,即使它们被手动删除了。

‘socks5proxy’(允许在受感染设备中建立SOCKS5代理)

该socks5proxy模块似乎是基于开源项目SOCKS5代理服务器2.6.8开发的。该服务器不使用身份验证,并且硬编码侦听TCP 5380端口。在服务器启动之前,socks5proxy fork连接到模块参数中指定的C2服务器。如果服务器在几秒钟内没有响应,则fork会终止其父进程(服务器),然后退出。C2服务器可以使用命令进行响应以正常执行或终止服务器。

此模块包含以下用法,但它们不与socks5proxy模块的参数对应,并且无法通过命令行参数修改这些设置:

socks5proxy模块的命令行参数有:

socks5proxy模块会验证参数计数是否大于1,但如果给出了两个参数,则进程会因SIGSEV信号崩溃,这表明在此恶意软件工具链的某些开发阶段可能质量不佳。

‘tcpvpn’(允许在受感染设备上建立反向TCP VPN)

tcpvpn模块旨在允许远程攻击者访问受感染设备后面的内部网络。它通过信标到远程服务器来实现这一点,远程服务器可以像TunTap设备一样设置,以通过TCP连接转发数据包。该连接被视为网络设备的出站,这可能有助于模块绕过简单的防火墙或NAT。该模块在概念上类似于渗透测试软件Cobalt Strike的VPN Pivoting

通过连接发送的所有数据都使用RC4加密,密钥由硬编码字节生成:

它夹在当前连接的端口号之间(例如,“58586 !; H * rK | _MwS + E! – !^ yC = yJTh.ke:VynEz-〜;: – Q; kQ ^ w ^ – ~S ; QEZh6 ^ jgf_4RzsG80″ )。

tcpvpn模块的命令行语法为:

MikroTik研究

Winbox协议解析器介绍

据Talos称,在其研究VPNFilter期间,需要确定设备是如何被攻击的。在检查MikroTik系列设备时,他们注意到一个开放端口(TCP 8291),配置工具“Winbox”使用该端口进行通信。

来自这些设备的流量是大量的二进制数据,因此无法在没有协议解析器的情况下使用此协议确定可能的访问途径。于是他们决定开发协议解析器,以便与Wireshark等数据包分析工具一起使用,了解有关该协议的更多信息,以在发现潜在攻击媒介时预防感染。

这种攻击向量的一个例子是CVE-2018-14847,允许攻击者执行目录遍历以进行未经身份验证的凭据恢复。当他们为此漏洞撰写报道时,解析器被证明是非常有用的(Snort SID:47684)。虽然已发布了此漏洞的更新,但Talos认为安全专业人员必须能够监控此流量,以帮助识别任何其他潜在的恶意流量。

通过确保使用“安全模式”加密通信或下载仅通过加密通道进行通信的最新Winbox客户端,仍可以保持隐私。这个工具不会解密加密通信。测试的最新MikroTik CCR固件版本(6.43.2)强制使用了较新的Winbox客户端,但只是强制客户端侧。这意味着,用户依然可以采用定制的客户端通过不安全的通道通信。因此,他们认为这个Wireshark解析器仍然有用,因为攻击者仍然可以利用漏洞而无需重新实现上述的安全通信。

什么是Winbox协议?

“Winbox”指MikroTik提供的Winbox客户端,是Web GUI的替代品。从官方文档中获知,Winbox是一个小实用程序,允许使用快速简单的GUI管理MikroTik RouterOS。它是一个原生的Win32二进制文件,但可以使用Wine在Linux和MacOS(OSX)上运行。所有Winbox接口函数都尽可能接近控制台功能 – 这就是手册中没有Winbox部分的原因。Winbox无法实现某些高级和关键系统配置,例如更改接口上的MAC地址。

Talos称,“Winbox协议”一词并非官方术语,只是因为它与客户的名称相匹配而选择的术语。

使用协议解析器

安装过程很简单,因为解析器是基于 LUA 的,所以不需要重新编译,只需将Winbox_Dissector.lua 文件放入/$HOME/.wireshark/plugins 文件夹即可。默认情况下,一旦安装了解析器,任何进出TCP 8291端口的流量都将被正确解码为Winbox流量。

虽然从客户端/服务器到其目的地的单个消息对于解析目的而言更可取,但情况并非总是如此,观察实时通信证明了Winbox消息可以通过多种方式进行格式化和发送。

以下是具有下列属性的Winbox通信示例:

  • 在同一个数据包中发送多条消息。
  • 包含一个或多个双字节“chunks”的消息,需要在解析之前删除。
  • 单个数据包的消息太长 – 应用了TCP重组。
  • 包含其他“嵌套”消息的消息

以下是在安装解析器前显示的捕获内容:

安装Winbox协议解析器后,在Wireshark中正确解析通信内容:

获取协议解析器

为了提高安全社区分析这些通信的能力并监控试图利用Winbox协议的威胁,Cisco Talos发布了这款协议解剖器供公众使用,点击查看GitHub

结论

Talos 表示,基于之前在VPNFilter中发现的功能以及本次的新发现,确认VPNFilter为攻击者提供了利用受到破坏的网络和存储设备进一步攻击目标网络环境中系统所需的所有功能。它还允许攻击者利用对敏感系统(如网关和路由设备)的访问来执行诸如网络映射和端点利用,网络通信监控和流量操纵等活动。VPNFilter提供的另一个危险功能是能够将受感染的设备转变为代理,使攻击看起来好像来自先前受VPNFilter影响的网络,利用这些代理来混淆无关攻击的来源。

通过对VPNFilter的新理解,他们已经能够回答大多数关于恶意软件本身的未解答问题。然而,到目前为止,这种威胁仍然存在重大的未知数:

攻击者如何获取受影响设备的初始访问权限?

虽然充分相信攻击者是利用了已知的受VPNFilter影响的品牌/型号的公共漏洞,但是仍然没有明确的证据

攻击者是否试图重建他们的访问权限?

基于遥测和Talos合作伙伴的信息,恶意软件的大多数C2通道已得到缓解。第2阶段植入物是非持久性的,因此大多数植入物可能已从受感染的设备中清除。并且没有看到攻击者试图重新连接可能仍然具有开放侦听器的第一阶段设备的迹象。

那么这是否意味着攻击者已经放弃了进入小型家庭办公室(SOHO)网络设备空间的立足点?他们会通过重新开发,重新利用和丢出新的未知恶意软件来重建他们的访问权限吗?他们是否放弃了广泛的全球SOHO访问权限,转而采用更具针对性的方法,只追求特定的关键目标?

无论答案是什么,我们都知道,VPNFilter背后的力量非常强劲。他们定以某种形式继续开发和实现其任务目标所必需的工具和框架。

IOCS

 

COVERAGE

已经开发了以下新的COVERAGE来检测VPNFilter

Updated Clam AV:

以下ClamAV签名已更新,以改进对VPNFilter使用的其他第1阶段和第2阶段模块的检测:

 

参考链接

https://blog.talosintelligence.com/2018/09/vpnfilter-part-3.html#more

 

声 明

本安全公告仅用来描述可能存在的安全问题,绿盟科技不为此安全公告提供任何保证或承诺。由于传播、利用此安全公告所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,绿盟科技以及安全公告作者不为此承担任何责任。绿盟科技拥有对此安全公告的修改和解释权。如欲转载或传播此安全公告,必须保证此安全公告的完整性,包括版权声明等全部内容。未经绿盟科技允许,不得任意修改或者增减此安全公告内容,不得以任何方式将其用于商业目的。

 

关于绿盟科技

北京神州绿盟信息安全科技股份有限公司(简称绿盟科技)成立于2000年4月,总部位于北京。在国内外设有30多个分支机构,为政府、运营商、金融、能源、互联网以及教育、医疗等行业用户,提供具有核心竞争力的安全产品及解决方案,帮助客户实现业务的安全顺畅运行。

基于多年的安全攻防研究,绿盟科技在网络及终端安全、互联网基础安全、合规及安全管理等领域,为客户提供入侵检测/防护、抗拒绝服务攻击、远程安全评估以及Web安全防护等产品以及专业安全服务。

北京神州绿盟信息安全科技股份有限公司于2014年1月29日起在深圳证券交易所创业板上市交易,股票简称:绿盟科技,股票代码:300369。

 

发表评论