包管理器钩子后门是什么
apt 与 dpkg 支持配置钩子:在装包、升级等操作前后以 root 身份执行命令,常见键有 apt.conf.d 里的 DPkg::Pre-Invoke、APT::Update::Post-Invoke,以及 dpkg.cfg.d 里的 invoke。攻击者借此让后门在管理员做例行维护时自动复活——最阴的地方在于触发条件本身是完全合法的运维动作。
基本信息
| APT 侧 | /etc/apt/apt.conf.d/ 中的 DPkg::Pre-Invoke、APT::Update::Post-Invoke 等 |
|---|---|
| DPKG 侧 | /etc/dpkg/dpkg.cfg 与 dpkg.cfg.d/ 中的 invoke 钩子 |
| 执行者 | root,触发条件是合法的维护操作 |
| 排查方式 | 全量 grep Invoke / invoke 关键字的赋值 |
| 区分手段 | 用 dpkg -S 确认文件归属哪个包 |
| 企业场景 | 加固脚本与自动更新也可能正常使用钩子 |
典型使用场景
- 排查「例行升级之后后门又复活了」的现象
- 处置时清点所有包管理器相关的钩子
- 加固巡检:核对 apt.conf.d 与 dpkg.cfg.d 的内容
- 排查没有 cron 与 systemd 单元、但维护后出现异常进程
- 与 init、cron、profile.d 一起做完整持久化清点
- 处置后验证钩子已被清理
- 演练中练习检查包管理钩子
检查包管理器钩子
检查包管理器钩子
grep -rnH -E 'Invoke' /etc/apt/apt.conf.d/ /etc/apt/apt.conf 2>/dev/null # APT 侧钩子
ls -la /etc/dpkg/dpkg.cfg.d/ 2>/dev/null # DPKG 片段目录
grep -rn 'invoke' /etc/dpkg/dpkg.cfg /etc/dpkg/dpkg.cfg.d/ 2>/dev/null # DPKG 侧钩子
dpkg -S /etc/apt/apt.conf.d/99custom 2>/dev/null # 文件归属
ls -la --time-style=long-iso /etc/apt/apt.conf.d/ | head -n 20 # 清单与修改时间钩子位置与键名
| 位置 | 键名 | 说明 |
|---|---|---|
| /etc/apt/apt.conf.d/ | DPkg::Pre-Invoke | 安装动作开始前以 root 执行 |
| /etc/apt/apt.conf.d/ | APT::Update::Post-Invoke | 索引更新完成后执行 |
| /etc/apt/apt.conf.d/ | DPkg::Post-Invoke | 安装动作完成后执行 |
| /etc/dpkg/dpkg.cfg.d/ | invoke 选项 | dpkg 侧等效钩子 |
| 任意片段文件 | 自定义键 | 只要能被解析就会生效 |
企业加固脚本与自动更新工具也会使用钩子:先看命令指向哪个脚本、文件的 mtime 与包归属,再定性,不要见到钩子就删。
主配置文件干净不代表没有钩子:apt.conf.d 与 dpkg.cfg.d 下的片段文件同样会被加载,必须整目录 grep。
删除钩子后要验证配置语法:apt 配置写坏会导致后续所有安装与升级操作报错,修改前先复制备份。
钩子里的命令可能只是「调用一个脚本」:拿到路径后要继续追到目标脚本本身,否则删掉钩子行、脚本仍在,下次被别的入口调用。