首页/安全/取证与溯源速查/软件安装历史追溯
Linux 取证135 条

软件安装历史追溯

包管理日志记录每次安装卸载的时间与来源仓库,可还原攻击者安装工具、编译依赖与清理软件的过程。

取证与溯源速查安全更新于 2026-10-13

软件包安装历史

包管理器会记录每次安装、升级与卸载的时间,是判断「什么时候被装上了什么」最可靠的来源之一。相比文件时间戳,这类日志带上下文:apt 的 history.log 会保留完整命令行。取证价值在于它能回答攻击者是否装了工具,而系统状态只能告诉你当前装了什么。

基本信息

Debian/Ubuntu/var/log/dpkg.log*、/var/log/apt/history.log、/var/log/apt/term.log
RHEL/CentOS/var/log/dnf.log、/var/log/yum.log、dnf history list
关键字段时间戳、动作(install/upgrade/remove)、包名、版本
轮转方式dpkg.log 按 .1、.2 顺序轮转,旧记录在 .gz 压缩包
典型工具包nmap、socat、gcc、tcpdump 等常被用于横向与嗅探
描述文件/var/lib/dpkg/status 只反映当前状态,不含卸载历史

典型使用场景

  • 定位入侵窗口内被额外安装的渗透与嗅探工具
  • 核对系统是否在变更窗口之外被动过包
  • 确认某组件被卸载前的原始版本,便于恢复
  • 与文件 mtime 互证可疑文件的来源
  • 输出主机变更时间线的包维度视图

最小示例

最小示例
grep -E ' (install|remove|upgrade) ' /var/log/dpkg.log* | tail -30    # 含已轮转的日志
grep -E ' (install|remove|upgrade) ' /var/log/dpkg.log | head -20      # 只看当前日志的开头
grep -A3 'Start-Date' /var/log/apt/history.log | tail -40              # apt 记录包含完整命令行
dnf history list | head -20                                            # RHEL 系按事务号列出
dnf history info 42                                                    # 查看某次事务的明细
dpkg -l | awk '$1=="ii"{print $2, $3}' | head                        # 当前已安装列表(状态不是历史)

输出逐列读法

列含义异常信号
时间戳操作发生时刻落在夜间或非变更窗口内
动作install、upgrade、remove同一时间段先装后删
包名软件包名称与主机角色无关的嗅探或隧道工具
版本操作后的版本号版本被回退到比发行版更旧
命令行apt history 记录的完整命令由非运维账号或异常终端发起
日志为空不等于没被植入:手工解压的二进制与静态编译的样本不经过包管理器,必须与文件系统时间线互补判断。
RHEL 系还可以用 rpm -qa --last 按安装时间倒序输出,作为 dnf 历史的快速交叉验证。
用 dnf history undo 或 apt 回滚会直接改变系统状态并可能中断业务;取证阶段先复制日志与状态文件,处置动作另行评估。

易错点

  • 只读当前日志忽略轮转文件:入侵发生较早时关键记录已被压缩归档,必须连 .gz 一起检索
  • 把 /var/lib/dpkg/status 当历史用:它只反映当前状态,卸载过的包不会留下痕迹
  • 只看包名不看命令行:apt 的 history.log 记录完整命令,是最能反映攻击者意图的证据
  • 结论只依赖包日志:手工投放的二进制查不到,需与文件 mtime、审计日志互相印证

数据来源与参考

  • dpkg 手册(/var/log/dpkg.log 格式)
  • dnf 官方文档(history 子命令)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌