首页/安全/应急响应速查/登录横幅脚本劫持(update-motd)

登录横幅脚本劫持(update-motd)

Ubuntu 系每次登录会执行 /etc/update-motd.d 下的脚本刷新横幅:塞一个脚本进去,登录触发逻辑就有了。

应急响应速查安全更新于 2026-10-13

登录横幅脚本劫持是什么

Ubuntu 系每次登录会执行 /etc/update-motd.d 下的脚本刷新登录横幅,调用者是 PAM 的 pam_motd 模块。往这个目录里塞一个脚本,就等于获得了一个「登录即触发」的执行点。其他发行版没有这套机制,但仍要检查 /etc/motd 与 PAM 配置。

基本信息

目录/etc/update-motd.d/
触发方式登录时由 pam_motd 调用执行
检查要点目录内容与脚本可执行位
判据脚本内出现网络访问与命令执行
平台差异主要存在于 Debian/Ubuntu 家族
相关配置/etc/pam.d/ 中对 pam_motd 的引用

典型使用场景

  • 排查登录触发的持久化位置
  • 确认登录横幅刷新脚本是否被改动
  • 加固巡检:核对目录内容与包归属
  • 排查「登录后出现异常外连」的现象
  • 与 profile.d、ssh rc 一起做登录触发点清点
  • 处置后验证脚本已清理干净
  • 演练中练习检查该目录
  • 横向排查同批主机上的同名脚本

检查 motd 脚本

检查 motd 脚本
ls -la /etc/update-motd.d/ 2>/dev/null                        # 目录内容与可执行位
grep -rEn 'curl|wget|/dev/tcp|base64' /etc/update-motd.d/ 2>/dev/null | head
cat /etc/update-motd.d/* 2>/dev/null | head -n 60               # 浏览脚本内容
rpm -qf /etc/update-motd.d/00-header 2>/dev/null                # 包归属(RHEL 系通常无此目录)
grep -rn 'pam_motd' /etc/pam.d/ 2>/dev/null | head              # 谁在调用它

检查点与判读

检查点查看内容判读
目录清单脚本名与编号新出现的编号靠后的脚本最可疑
可执行位ls -la 输出来源不明的脚本不应有可执行位
脚本内容grep 网络关键字出现下载或写文件即需解释
包归属rpm -qf / dpkg -S查不到归属即来源不明
pam.d 引用grep pam_motd确认调用链真实存在
该机制主要存在于 Debian/Ubuntu 家族:其他发行版直接检查 /etc/motd 与 PAM 配置,不要照搬这个目录的结论。
不要把发行版自带的 MOTD 脚本当成后门:先用包查询确认归属,再看内容与 mtime 定性。
脚本编号通常有前缀序号(如 00-header、10-help-text):攻击者常挑序号靠后的空位插入,检查时按序号顺序过一遍最省事。
同类登录触发点要一起查:profile.d、bashrc、ssh rc、motd 脚本四处的检查方法不同,但排查动作要放在同一轮里做完,避免反复登录破坏现场。

易错点

  • 把正常 MOTD 脚本当后门:先排除包管理器来源再下结论
  • 忽略 pam.d 中 pam_exec 的调用:motd 之外还有 PAM 层的钩子
  • 只看目录不看可执行位:缺少执行位的脚本不会真正触发
  • 清理后不做验证:下次登录仍可能执行残留脚本
  • 忽略 pam.d 的调用配置:如果 pam_motd 被其他模块替换或被改写,单看脚本目录会漏掉真正的触发链

数据来源与参考

  • pam_motd(8) 手册
  • Ubuntu update-motd 文档

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌