0

0

系统时间被恶意篡改后如何通过 last / wtmp / utmp 找入侵痕迹

舞姬之光

舞姬之光

发布时间:2026-01-29 15:32:43

|

159人浏览过

|

来源于php中文网

原创

last输出时间混乱主因是wtmp被篡改或系统时间跳变;应通过stat与last对比mtime、用w/ps/loginctl交叉验证活跃会话、以lastb和journalctl获取可信时间线索。

系统时间被恶意篡改后如何通过 last / wtmp / utmp 找入侵痕迹

last 命令输出时间混乱?先确认 wtmp 文件是否被篡改

系统时间被恶意回拨或跳变后,last 显示的登录时间会严重失真——比如显示“Thu Jan 1 00:00:00 1970”或大量集中在某一天。这不是 last 本身出错,而是它读取的 /var/log/wtmp 中的时间戳已被写入错误值(攻击者常配合修改系统时间+清空/覆盖 wtmp 来干扰审计)。
关键判断点:对比 wtmp 文件的磁盘修改时间与其中记录的最后登录时间:

  • stat /var/log/wtmp 查看文件实际 mtime(最后一次被写入的时间)
  • last -n 1 看最新一条记录的时间
  • 若 mtime 比 last 显示的“最新登录时间”还早数小时甚至数天,说明 wtmp 很可能被重写过(例如用伪造的 wtmp 替换)
此时不能信任 last 的时间排序,但原始记录条目仍可能存在。

绕过时间戳,用 utmp + 进程状态交叉验证活跃会话

w 命令依赖 /var/run/utmp,而该文件只记录当前在线用户,不存历史、也不受系统时间回拨影响(内核写入的是单调递增的 boot-time 时间戳,非 wall-clock)。即使时间被篡改,只要会话未退出,w 仍能反映真实在线状态。
但注意:攻击者用 ssh user@host /bin/bash 这类非交互式登录,不会写入 utmp,因此 w 里看不到——这正是隐蔽后门的常见手法。
实操建议:

  • 运行 wps aux | grep "sshd:" | grep -v "sshd:" 对比:若存在 sshd: 进程但 w 无对应用户,极可能为 no-tty 会话
  • 检查 lsof -i :22 -sTCP:ESTABLISHED,看连接对应的 PID 是否在 ps 中显示为 notty 或缺少 TTY 字段
  • loginctl list-sessions(systemd 系统)可补全 utmp 缺失项,它基于内核 session ID,更难被绕过

btmp + lastb 是唯一不受系统时间欺骗的失败登录证据

/var/log/btmp 记录所有失败登录尝试,它的写入由 PAM 模块触发,且**不依赖系统 wall-clock 时间**——内核使用 CLOCK_MONOTONIC 或 boot-time 偏移写入时间字段。即使攻击者把系统时间调回 1970 年,lastb 输出的时间戳依然可信(表现为自启动以来的秒数偏移,lastb -i 可强制解析为相对时间)。
这是时间篡改场景下最硬的入侵线索:

QIMI奇觅
QIMI奇觅

美图推出的游戏行业广告AI制作与投放一体化平台

下载
  • lastb -n 20 快速查看最近 20 次失败登录,重点关注 invalid user 或高频 IP
  • lastb | awk '{print $3}' | sort | uniq -c | sort -nr | head -5 统计撞库源 IP
  • btmp 大小为 0 或被删,ls -la /var/log/btmp* 查看是否有备份(如 btmp-20260128),攻击者常忽略轮转日志
注意:lastb 默认需要 root 权限,且部分发行版(如 CentOS 7+)默认不启用 btmp 记录,需确认 /etc/audit/rules.d/audit.rules 中有 -w /var/log/btmp -p wa 规则。

当 wtmp 不可靠时,用 journalctl 回溯认证事件原始时间

现代 Linux 发行版(RHEL 8+/Ubuntu 20.04+)的 SSH 登录事件同时写入 journald/var/log/secure。journal 日志使用独立的 monotonic 时间戳,不受系统时间修改影响,且带纳秒精度。
直接查原始认证动作,比依赖 wtmp 更可靠:

  • journalctl _COMM=sshd -S "2026-01-28 00:00:00" --no-hostname -o short-iso | grep -E "(Accepted|Failed)"-S 指定起始时间,journald 自动按真实写入顺序返回)
  • 若 journal 被清空,检查 /var/log/secure 文件本身的 stat 修改时间,再用 sed -n '/Jan 28.*sshd/p' /var/log/secure 手动按日期字符串提取(攻击者很难批量替换日志中的时间字符串)
  • 注意:journalctl --since "2 hours ago" 这类相对时间语法会受系统时间影响,必须用绝对 ISO 时间格式
真正难伪造的是多源日志的时间一致性——比如 btmp 里有失败记录、journalctl 里有对应成功登录、ps 里有存活进程,三者时间偏移在 10 秒内,基本可锁定真实入侵窗口。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
python中print函数的用法
python中print函数的用法

python中print函数的语法是“print(value1, value2, ..., sep=' ', end=' ', file=sys.stdout, flush=False)”。本专题为大家提供print相关的文章、下载、课程内容,供大家免费下载体验。

186

2023.09.27

sort排序函数用法
sort排序函数用法

sort排序函数的用法:1、对列表进行排序,默认情况下,sort函数按升序排序,因此最终输出的结果是按从小到大的顺序排列的;2、对元组进行排序,默认情况下,sort函数按元素的大小进行排序,因此最终输出的结果是按从小到大的顺序排列的;3、对字典进行排序,由于字典是无序的,因此排序后的结果仍然是原来的字典,使用一个lambda表达式作为key参数的值,用于指定排序的依据。

391

2023.09.04

session失效的原因
session失效的原因

session失效的原因有会话超时、会话数量限制、会话完整性检查、服务器重启、浏览器或设备问题等等。详细介绍:1、会话超时:服务器为Session设置了一个默认的超时时间,当用户在一段时间内没有与服务器交互时,Session将自动失效;2、会话数量限制:服务器为每个用户的Session数量设置了一个限制,当用户创建的Session数量超过这个限制时,最新的会覆盖最早的等等。

315

2023.10.17

session失效解决方法
session失效解决方法

session失效通常是由于 session 的生存时间过期或者服务器关闭导致的。其解决办法:1、延长session的生存时间;2、使用持久化存储;3、使用cookie;4、异步更新session;5、使用会话管理中间件。

751

2023.10.18

cookie与session的区别
cookie与session的区别

本专题整合了cookie与session的区别和使用方法等相关内容,阅读专题下面的文章了解更详细的内容。

93

2025.08.19

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

298

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

212

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1502

2023.10.24

java入门学习合集
java入门学习合集

本专题整合了java入门学习指南、初学者项目实战、入门到精通等等内容,阅读专题下面的文章了解更多详细学习方法。

1

2026.01.29

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 8万人学习

Git 教程
Git 教程

共21课时 | 3.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号