VPNFilter更新:攻击终端并瞄准新设备
作者: 日期:2018年06月13日 阅:11,214

引言

思科 Talos 与多家情报合作伙伴共同发现了有关 “VPNFilter” 的更多详细信息。在我们最初发布活动调查结果的几天里,我们已发现 VPNFilter 所瞄准的设备品牌/型号比最初想象得更多,而且还具有其他的功能,例如向终端进行攻击的能力。思科 Talos 最近发布了一篇博客(详情),其主题关于在小型家庭办公网络设备以及网络连接存储设备中部署 VPNFilter 的广泛活动。正如我们在这篇帖文中所述,我们对于这一威胁的研究是持续性的。发布这篇帖文之后,我们拥有了许多合作伙伴,他们提供了更多的信息来帮助我们开展此项工作。这篇帖文是过去一周内我们的最新调查结果。

首先,我们确定了此攻击者还瞄准其他设备,包括目标列表中新出现供应商的一些设备。这些新供应商包括 ASUS、D-Link、华为、Ubiquiti、UPVEL 和中兴。另外还发现了 Linksys、MikroTik、Netgear 和 TP-Link 的新设备。我们目前的研究表明,没有任何思科网络设备受到影响。下面提供了更新的设备列表。

我们还发现了一个新的第 3 阶段模块,它可在通过网络设备时向网络流量中注入恶意内容。在最初发布时,我们并没有掌握关于可疑第 3 阶段模块的所有信息。新模块允许攻击者通过中间人功能向终端进行攻击(例如,它们可以在用户不知晓的情况下拦截网络流量并向其中注入恶意代码)。通过这一新的发现,我们可以确认,威胁已超过攻击者在网络设备本身执行操作的范畴,它可以将威胁扩展到受侵害网络设备所支持的网络中。我们在下面提供了此模块(称为“ssler”)的技术详情。

此外,我们还发现了另一个第 3 阶段模块,其中提供了任何缺乏用于禁用设备的 kill 命令功能的第 2 阶段模块。在执行时,此模块特意从设备中删除 VPNFilter 恶意软件的痕迹,然后致使设备无法可用。下面还提供了此模块(称为“dstr”)的分析。

最后,我们对第 3 阶段数据包嗅探器进行了进一步研究,包括深入分析它如何寻找 Modbus 流量。

技术详情

新的第 3 阶段模块

“Ssler”(终端漏洞攻击模块 JavaScript 注入)

ssler 模块(读作“Esler”)通过拦截通过设备且流往端口 80 的所有流量来提供数据泄漏和 JavaScript 注入功能。预计此模块将使用参数列表执行,参数列表决定了模块的行为以及应瞄准的网站。第一个定位参数控制设备中应存储被盗数据的文件夹。其他指定参数的用途如下:

  • dst:- 所创建的 iptables 规则使用该参数来指定目标 IP 地址或者应该应用此规则的 CIDR 范围。
  • src:- 所创建的 iptables 规则使用该参数来指定源 IP 地址或者应该应用此规则的 CIDR 范围。
  • dump:- dump 参数中所传递的所有域会将其所有 HTTP 头记录在 reps_*.bin 文件中。
  • site:- 当某个域通过“site”参数提供时,此域会使其网页成为 JavaScript 注入目标。
  • hook:- 此参数确定所注入 JavaScript 文件的 URL。

ssler 模块所采取的第一个操作是配置设备的 iptables,以将流往端口 80 的所有流量重新定向到在端口 8888 上监听的本地服务。它首先使用 insmod 命令将三个 iptables 模块插入内核(ip_tables.ko、iptable_filter.ko、iptable_nat.ko),然后执行以下 shell 命令:

iptables -I INPUT -p tcp –dport 8888 -j ACCEPT
iptables -t nat -I PREROUTING -p tcp –dport 80 -j REDIRECT –to-port 8888
示例:./ssler logs src:192.168.201.0/24 dst:10.0.0.0/16

-A PREROUTING -s 192.168.201.0/24 -d 10.0.0.0/16 -p tcp -m tcp –dport 80 -j REDIRECT –to-ports 8888

注意:为了确保这些规则不被删除,ssler 会先将其删除,然后在大约每 4 分钟后再重新添加。

端口 80 上的任何传出 Web 请求现在都会被 ssler 拦截,并可先进行检查和操作然后再被发送到合法的 HTTP 服务。所有 HTTP 请求都会执行 sslstrip 操作。也就是说,在将请求发送到真正的 HTTP 服务器之前会对其进行以下更改:

  • 任何 https:// 字符串实例都会被替换为 http://,安全 HTTP 资源请求被转换为不安全请求,以便从中提取敏感数据(例如凭证)。
  • 如果请求中包含报头“连接:保持活动状态”,则将被替换为“连接:关闭”;
  • 如果请求中包含报头“接受含有 gzip 值的编码”,则将被转换为“接受编码:纯文本/无”,从而不会使用 gzip 压缩任何响应(对于图像等某些文件类型会有例外情况)。

如果主机位于其中一个 dump: 参数中,则会将请求详细信息保存到磁盘中以进行泄漏,包括 URL、端口和所有请求报头。如果主机不存在于 dump: 参数中,将仅会转储其中包含凭证的授权报头或 URL 请求。如果 URL 中包含字符串 assword= 或 ass= 以及以下任一字符串,则可确定其中包含凭证:

  • sername=
  • ser=
  • ame=
  • ogin=
  • ail=
  • hone=
  • session%5Busername
  • session[password

任何发送至 accounts.google.com 的包含字符串 signin 的 POST 请求也将被转储。

作出这些修改之后,ssler 将会使用端口 80 上修改后的请求数据来与真正的 HTTP 服务器建立连接。ssler 会从 HTTP 服务器接收响应,并在将其传递给受害者之前对该响应进行以下更改:

  • “位置”报头值为 https:// 的响应将被转换为 http://
  • 系统忽略以下报头,即不会发送至客户端:
    Alt-Scv
    Vary
    Content-MD5
    content-security-policy
    X-FB-Debug
    public-key-pins-report-only
    Access-Control-Allow-Origin
  • 整个响应已 sslstrip – 也即,包括 \x20http:// 的所有 https:// 的实例。
  • 如果系统提供参数 site: 的域(或域的一部分,例如“google”),其会尝试将 JavaScript 注入所有 Content-Type: text/html 或 Content-Type: text/javascript 响应中,但要求是字符串 <meta name= … > 存在且足够长以适于 hook: 参数中的字符串。<meta name = …> 标签将被替换为 <script type=”text/javascript” src=”[hook value]”>。之后,系统将与网站相结合的受害者 IP 加入 ssler 内部白名单中,且在清除白名单(每四天清除一次)前不会再次成为注入目标。

响应中已 sslstrip 的各域(例如,可见于链路中的域)均会被添加到剥离域列表中。后续由 ssler 模块拦截到此列表中的域的请求将通过端口 443 上的 HTTPS 发生,而不是通过端口 80 上的 HTTP 发生。默认情况下,此列表中有四个域,因此 ssler 将始终通过端口 443 上的 HTTPS 连接至这些域:www.google.com、twitter.com、www.facebook.com 或 www.youtube.com。

“dstr”(设备破坏模块)

dstr 模块用于通过删除正常操作所需的文件使受感染设备无法操作。在删除系统中的其他文件前,该模块首先删除与自身操作相关的所有文件和文件夹,可能为了在调查分析期间隐藏自己的存在。

深入分析 x86 版本 dstr 模块后发现,此模块首先从磁盘中将其自身删除,然后停止执行父级第 2 阶段进程,再搜索所有正在运行的进程,查找名为 vpnfilter、security 和 tor 的进程并终止它们。接下来,显式地删除以下文件和目录:

  • /var/tmp/client_ca.crt
  • /var/tmp/client.key
  • /var/tmp/client.crt
  • /var/run/vpnfilterm/htpx
  • /var/run/vpnfilter
  • /var/run/vpn.tmp
  • /var/run/vpn.pid
  • /var/run/torrc
  • /var/run/tord/hidden_ssh/private_key
  • /var/run/tord/hidden_ssh/hostname
  • /var/run/tor
  • /var/run/msvf.pid
  • /var/run/client_ca.crt
  • /var/run/client.key
  • /var/run/client.crt
  • /var/pckg/mikrotik.o
  • /var/pckg/.mikrotik.
  • /var/msvf.pid
  • /var/client_ca.crt
  • /var/client.key
  • /var/client.crt
  • /tmp/client_ca.crt
  • /tmp/client.key
  • /tmp/client.crt
  • /flash/nova/etc/loader/init.x3
  • /flash/nova/etc/init/security
  • /flash/nova/etc/devel-login
  • /flash/mikrotik.o
  • /flash/.mikrotik.
  • /var/run/vpnfilterw/
  • /var/run/vpnfilterm/
  • /var/run/tord/hidden_ssh/
  • /var/run/tord/
  • /flash/nova/etc/loader/
  • /flash/nova/etc/init/

dstr 模块通过使用 0xFF 字节覆盖所有可用 /dev/mtdX 设备的字节来清除闪存。最后,执行 shell 命令 rm -rf /* 来删除文件系统的其余文件,并重启设备。此时,设备无任何需操作的文件,且无法启动。

第三阶段数据包嗅探器的进一步研究

“ps”(第 3 阶段数据包嗅探器)

第 3 阶段数据包嗅探模块的一个示例是 R600VPN MIPS-like(Lexra 架构)示例。本示例中的数据包嗅探器正在查找基本身份验证并监控 ICS 流量,且特定于 TP-LINK R600-VPN。恶意软件使用原始套接字查找预先指定的 IP 地址的连接,仅查看 150 个字节或更大的 TCP 数据包(注意:这是含报头的完整数据包大小。根据 TCP 报头的大小,PDU 可能约为 56 到 96 个字节,且仍符合记录的标准)。恶意软件可查看,但不可修改网络流量。要实施能够修改流量的功能,需要进行非常重大的更改。

对不在端口 502 上的数据包进行 BasicAuth 扫描,并记录该信息。

  • 其他:(非 Modbus 流量):sniffing HTTP basic auth credentials
        Destination IP Address == command line argument IP address
        Source port > 1024
        Source port != 8080
        Source port != 8088
        Packet Data length > 20 bytes
        Packet does not contain
  •         </ and >
            <?xml
            Basic Og==
            /tmUnblock.cgi
            Password Required
            <div
            <form
            <input
            this. and .get
            {
            }
            200 OK
            <span
            <SPAN
            <DIV
    数据包包含“授权:基本”或一个用户/密码组合
            用户
                 User=
                 user=
                 Name=
                 name=
                 Usr=
                 usr=
                 Login=
                 login=
            Pass
                 Pass=
                 pass=
                 Password=
                 password=
                 Passwd=
                 passwd=
  • 日志记录:记录 IP 和端口,但不记录端口 502 上的数据包内容。不验证 Modbus 流量。
  • Modbus – 记录 SourceIP、SourcePort、DestinationIP 和 DestinationPort,并将其标记为 *modbus*
  • 所有其他 – 仅在通过基本身份验证检查时才将完整数据包写入日志文件

结论

这些新发现告诉我们来自 VPNFilter 的威胁持续增长。除了在其他目标设备和供应商中发现威胁表面更加广泛之外,还发现恶意软件能够对终端设备进行漏洞攻击,说明这一威胁的范围扩展到了设备本身之外,并扩展到了这些设备支持的网络中。如果成功,攻击者将能够将任何所需附加功能部署至环境中,以支持其目标,包括 rootkit、泄漏功能和破坏性恶意软件。

IOC更新列表

如前所述,我们高度怀疑还有其他我们目前尚未发现的这一恶意软件的其他 IOC 和版本。

思科 Talos 已掌握的及新的 IOC:

https://www.cisco.com/c/zh_cn/products/security/talos.html

已知受影响设备

已知受到此威胁影响的设备如下所列。由于这项研究的规模之大,我们的许多观察结果是远程而非在设备上得出的,因此在很多情况下难以确定具体的版本号和型号。

鉴于对此威胁的观察结果,据估计,此列表并不完整且可能有其他设备受到影响。

华硕设备:

RT-AC66U(新)
RT-N10(新)
RT-N10E(新)
RT-N10U(新)
RT-N56U(新)
RT-N66U(新)

D-LINK 设备:

DES-1210-08P(新)
DIR-300(新)
DIR-300A(新)
DSR-250N(新)
DSR-500N(新)
DSR-1000(新)
DSR-1000N(新)

华为设备:

HG8245(新)

LINKSYS 设备:

E1200
E2500
E3000(新)
E3200(新)
E4200(新)
RV082(新)
WRVS4400N

MIKROTIK 设备:

CCR1009(新)
CCR1016
CCR1036
CCR1072
CRS109(新)
CRS112(新)
CRS125(新)
RB411(新)
RB450(新)
RB750(新)
RB911(新)
RB921(新)
RB941(新)
RB951(新)
RB952(新)
RB960(新)
RB962(新)
RB1100(新)
RB1200(新)
RB2011(新)
RB3011(新)
RB Groove(新)
RB Omnitik(新)
STX5(新)

NETGEAR 设备:

DG834(新)
DGN1000(新)
DGN2200
DGN3500(新)
FVS318N(新)
MBRN3000(新)
R6400
R7000
R8000
WNR1000
WNR2000
WNR2200(新)
WNR4000(新)
WNDR3700(新)
WNDR4000(新)
WNDR4300(新)
WNDR4300-TN(新)
UTM50(新)

QNAP 设备:

TS251
TS439 Pro
运行 QTS 软件的其他 QNAP NAS 设备

TP-LINK 设备:

R600VPN
TL-WR741ND(新)
TL-WR841N(新)

UBIQUITI 设备:

NSM2(新)
PBE M5(新)

UPVEL 设备:

未知型号*(新)

中兴通讯设备:

ZXHN H108N(新)

* 以供应商 Upvel 为目标的恶意软件已被发现,但我们无法确定所针对的特定设备。

 

申明:本文系厂商投稿收录,所涉观点不代表安全牛立场!


相关文章