BPFDoor是一个智能后门,当攻击者想要连接到受感染的主机时,它不需要打开额外的端口。它能够劫持当前开放的端口,嗅探流量,然后绑定shell或打开反向shell,以便攻击者可以执行远程命令,这也是当前对Linux主机危害相当大的一类蠕病毒。
当BPFDoor启动时,它会进入防火墙前面接收数据包,然后修改本地防火墙或脚本以允许威胁行为者进入操作系统。它可以在不打开任何端口的情况下运行,并且可以从Web上的任何IP地址接收命令。由于IP地址是过滤器分析以允许或拒绝访问数据包的内容,因此 BPFDoor 基本上可以允许发送或接收任何数据包。
由于其隐蔽性和隐藏性,这种恶意软件非常危险。一旦 BPFDoor 被激活,远程代码就可以通过未过滤和畅通的通道发送。恶意流量混入合法流量中,使防火墙和安全解决方案难以检测到。BPFDoor 在感染系统后也作为一种逃避技术重命名了自己。
其工作特点如下:
- 执行时,二进制文件会将自身复制到 /dev/shm/ 中。临时文件系统 /dev/shm 代表共享内存,是一种临时文件存储工具,用作进程间通信的有效方式
- 将其进程重命名为 kdmtmpflush,这是一个硬编码的进程名称
- 使用 -init 标志初始化自身并分叉自身。Linux 中的分叉意味着通过复制调用进程来创建新进程
- 通过删除调用的原始二进制文件来删除自身。分叉的进程继续运行
- 更改分叉进程的创建和修改时间值,也称为timestomping
- 为自己创建一个新的进程环境,并删除旧的进程设置(欺骗)新进程名称。它改变了它在系统上的显示方式,类似于戴口罩。该过程仍然是 kdmtmpflush,但如果您要运行 ps,您将看到它设置的任何值
- 在 /var/run 中创建进程 ID (PID)文件。PID 文件是包含关联程序进程的文本文件,用于防止多次启动、标记驻留,并供程序用于停止自身。此文件位于 /var/run 中,这是另一个临时文件存储工具
- 创建原始网络套接字。在 Linux 上,套接字是网络通信的端点,它允许您详细指定数据包的每个部分,允许用户在 Internet (IP) 级别之上实施自己的传输层协议
- 在 raw 套接字上设置 BPF 过滤器。BPF 允许用户空间程序将过滤器附加到任何套接字上,并允许或禁止某些类型的数据通过套接字
- 观察传入的数据包
- 如果观察到与 BPF 过滤器匹配并包含所需数据的数据包,则会将其传递到后门进行处理
- 它再次分叉当前进程
- 将分叉的进程工作目录更改为 /
- 将分叉进程的名称更改(欺骗)为硬编码值
- 根据“魔术数据包”中发送的密码或密码的存在,后门提供反向 shell,建立绑定 shell,或发回 ping
通过以下指令可以查找具有嗅探功能的网卡:tcpdump -i eth0 -d 'tcp port 443'

如果没有嗅探的网卡,则不会显示此信息。
上图中所示的代码可以理解为 “BPF assembly”。内核实现一个虚拟机来理解此代码。这些指令所代表的字节码也可以通过 -dd 选项看到:tcpdump -i eth0 -dd ‘tcp port 443’

每个经典 BPF 指令的长度为 8 字节。
BPFDoor 的工作原理
BPFDoor 使用的 BPF 过滤器允许参与者使用单个网络数据包激活后门程序。由于 BPF 在目标操作系统中的实现方式,即使数据包被防火墙阻止,幻数据包也会触发后门程序。事实上,数据包首先到达内核的 BPF 引擎,这足以激活等待它的常驻后门。类似的功能在 Rootkit 中很常见,但在后门中不容易找到。
BPFDoor 示例将经典 BPF 过滤器加载到正在运行的内核中。Linux 样例使用 setsockopt() syscall 中的 SO_ATTACH_FILTER 选项加载已编译的过滤器,而 Solaris 样例使用 libpcap 函数在运行时编译和加载过滤器。过滤器期望数据包包含一个幻数,当它到达时,BPFDoor 会连接回发送匹配数据包的人的源 IP 地址。简而言之,幻数或幻数是数字文字,没有解释源代码中使用的它们各自的含义,或者具有唯一代表特定标识符的独特值。
然后使用反向连接通过管道向受感染机器的 shell 发送命令。换句话说,BPFDoor 打开了一个反向 shell,它几乎接受攻击者远程发送的任何命令。因为 BPFDoor 需要 root 权限才能工作,所以它打开的反向 shell 也是特权的。不同的 BPFDoor 样本会插入不同的滤波器,期望不同的魔术数字来启动反向连接。
BPF2023 年的 Bor 过滤器
其激活后门的魔幻标志位:0x39393939
MAC 地址检查
威胁行为者试图想出一个 BPF 代码来检查 IPv4 和 IPv6 数据包,但最终错误地检查了目标 MAC 地址。另一种可能性是攻击者试图以网卡以 0x4 开头的计算机为目标。由于 MAC 地址的前三个字节用作组织唯一标识符 (OUI),这将使变体以使用由众多公司制造的特定 NIC(网络接口卡)的受害者为目标。UDP 和 ICMP 都接受 0x7255,而 TCP 接受 0x5293 或 0x39393939。病毒激活特征码如下:

特征检查方法
ss -0pb | grep -EB1 –color “$((0x7255))|$((0x5293))|$((0x39393939))”