最近发现的一种名为 BPFdoor 的后门恶意软件已经悄悄地针对 Linux 和 Solaris 系统,五年多来一直没有被发现。

BPFdoor 是一个 Linux/Unix 后门,它允许攻击者远程连接到 Linux shell 以获得对受感染设备的完全访问权限。

该恶意软件不需要打开端口,无法被防火墙阻止,并且可以响应来自网络上任何 IP 地址的命令,使其成为企业间谍活动和持续攻击的理想工具。

解析“魔术”数据包

BPFdoor 是一个被动后门,这意味着它可以在一个或多个端口上侦听来自一个或多个主机的传入数据包,攻击者可以使用这些端口将命令远程发送到受感染的网络。

该恶意软件使用 Berkeley Packet Filter(后门名称中的 BPF),它在网络层接口上工作,能够查看所有网络流量并将发送数据包发送到任何目的地。

由于定位在如此低的级别,BPF 不遵守任何防火墙规则。

它有适用于 Linux 和 Solaris SPARC 系统的版本,但它也可以移植到 BSD,BleepingComputer 从 Sandfly Security 的创始人 Craig Rowland 那里了解到,该公司提供无代理解决方案来保护 Linux 系统。

安全研究员 Kevin Beaumont在 BPFdoor 上发表了 一篇博文,他告诉 BleepingComputer,操作员使用“魔法”密码来控制植入物的行为。

BPFdoor 仅解析 ICMP、UDP 和 TCP 数据包,检查它们的特定数据值,以及后两种数据包的密码。

BPFDoor 的突出之处在于它可以监视任何端口的魔术包,即使这些端口被其他合法服务使用,例如网络服务器、FTP 或 SSH。

Beaumont 告诉我们,ICMP 数据包不需要密码,这使他能够使用 ping 功能扫描互联网以运行 BPFdoor 植入程序。

“ping 功能允许您指定 IP 地址和端口以供其回复 - 因此我能够让受害者植入物回复我控制的完全不同的 IP” - Kevin Beaumont

研究人员能够在不同地区的组织网络上找到 BPFdoor 活动,其中最著名的是美国、韩国、香港、土耳其、印度、越南和缅甸。

令人惊讶的是,他发现了 11 台 Speedtest 服务器感染了 BPFdoor。研究人员表示,目前尚不清楚这些机器是如何受到损害的,特别是因为它们运行在闭源软件上。

绕过本地防火墙

Rowland在一份关于 BPFdoor 的综合 技术报告中指出 ,该恶意软件采用了一些巧妙的反规避策略:

  1. 驻留在系统内存中并部署反取证操作(擦除进程环境,尽管它没有成功,因为它使其为空)
  2. 加载伯克利包过滤器 (BPF) 嗅探器,使其能够在任何本地运行的防火墙前工作以查看数据包
  3. 接收相关数据包时修改“iptables”规则以允许攻击者通过本地防火墙进行通信
  4. 以类似于常见 Linux 系统守护程序的名称伪装二进制文件
  5. 重命名并运行为 /dev/shm/kdmtmpflush
  6. 将二进制文件(timestomping)的日期更改为 2008 年 10 月 30 日,然后再将其删除

Rowland 认为,在这种情况下,作为一种反取证技术,timestomping 的解释可能是攻击者可能会尝试保护二进制文件以防删除失败。

研究人员表示,伪造日期的目的可能是隐藏恶意软件,使其无法在系统上寻找新文件。

更改防火墙规则特别重要,因为它允许攻击者通过防火墙无法标记为可疑的流量与后门通信。

Rowland 解释说,当受感染的主机收到一个特殊的 BPFdoor 数据包时,恶意软件“将生成一个新实例并更改本地iptables规则,以从请求主机重定向到 shell 端口。”

“例如,植入程序可以使用 TCP 端口 443(加密网络)将来自攻击者的所有流量重定向到外壳。在外部,流量看起来像 TLS/SSL 流量,但实际上攻击者正在与系统上的远程根 shell 交互”。

为了进一步澄清,Rowland 表示,对于本地 shell,恶意软件会修改“iptables”配置,以将来自攻击者的所有流量通过合法端口重定向到恶意软件中定义的端口范围。

命令和检测

威胁情报和事件响应公司 ExaTrack的 Tristan Pourcelot 对 BPFdoor 的另一项 技术分析指出,该恶意软件带有几个硬编码名称,这些名称与相关数据包中的命令字符串相匹配:

justtryit、justrobot和justforfun在端口 42391 到 42491 上建立绑定 shell

socket或sockettcp为数据包中存在的 IP 地址设置反向 shell

BPFdoor 逃避检测的部分技术是使用以下选项重命名二进制文件以显示为普通的 Linux 守护进程:

/sbin/udevd -d
/sbin/mingetty /dev/tty7
/usr/sbin/console-kit-daemon --no-daemon
hald-addon-acpi: listening on acpi kernel interface /proc/acpi/event
dbus-daemon --system
hald-runner
pickup -l -t fifo -u
avahi-daemon: chroot helper
/sbin/auditd -n
/usr/lib/systemd/systemd-journald

Pourcelot 说,攻击者定期更新 BPFdoor,用不同的命令、进程或文件名称改进每个版本。

例如,较新的植入程序变体从使用命令关键字切换到 MD5 哈希,可能是为了避免微不足道的检测。

目前在Virus Total扫描平台上检测到的BPFdoor至少有21个版本,最早的版本是2018年8月提交的。