权限维持

发布于 4 小时前  3 次阅读


实验一:SSH 密钥后门(authorized_keys)

原理

  • SSH 公钥认证依赖:服务端 authorized_keys 中的公钥来验证客户端的签名挑战。
  • 一旦某公钥被加入 authorized_keys,对应私钥就可用于登录,与账户密码无关(改密码不影响)。
  • 文件位置与权限:~/.ssh/authorized_keys(权限与属主很重要)
  • 日志痕迹:Accepted publickey(auth 日志 / journal)
  • 防守重点:监控 authorized_keys 变更、限制 SSH 配置、集中密钥管理

实验二:Cron 定时任务后门(计划任务触发)

原理

  • cron 守护进程会按周期读取用户/系统的任务定义,到点执行命令。
  • 因为它是系统合法功能,所以“自动执行”很稳定,重启后仍会生效(取决于任务类型与配置)。

关键知识点

  • 用户级 vs 系统级:
    • 用户级:每个用户一份任务(权限低但隐蔽)
    • 系统级:/etc/crontab/etc/cron.d//etc/cron.*(可指定用户运行,常见 root)
  • 典型触发:每分钟、每小时、@reboot(仅开机时触发)
  • 防守重点:枚举所有 cron 来源、审计任务内容、关联网络外联与进程

实验三:Shell 配置文件后门(.bashrc / .profile / PROMPT_COMMAND)

原理

  • Shell 启动时会加载一系列配置脚本(登录 shell 与交互 shell 路径不同),因此把恶意逻辑塞进去会在用户登录/开新终端时自动执行
  • 特别是 PROMPT_COMMAND:每次显示提示符前执行,更“贴近交互”。
  • 加载顺序(概念):系统级 profile → 用户级 profile/bash_profile → bashrc(视登录/交互类型而定)
  • 常见隐蔽点:条件执行(仅交互时)、环境变量触发、别名/函数劫持(如 sudo/su/ssh)
  • 防守重点:基线对比(/etc/skel)、内容审计(异常 eval/base64/外联)、检查 alias 与 PROMPT_COMMAND

实验四:Systemd 服务/Timer 后门(启动与服务管理)

原理

  • systemd 是现代 Linux 的服务管理器:可以设置服务开机自启、失败重启、依赖网络、日志进 journal。
  • 通过服务 unit 或 timer 可以实现“看起来像正常系统服务”的长期驻留。

关键点

  • 位置与优先级:
    • 系统级:/etc/systemd/system/(管理员自定义,优先级高)、/lib/systemd/system/(发行版默认)
    • 用户级:~/.config/systemd/user/(不需要 root,但受用户会话影响)
  • Timer 相当于“更现代的 cron”
  • 防守重点:列出 enabled unit/timer、检查最近新增/修改的 unit 文件、systemctl cat 看真实内容、journal 关联行为

实验五:SUID 后门(权限提升入口)

原理

  • SUID 位使程序运行时以“文件所有者”的权限执行;如果所有者是 root,就可能让普通用户获得 root 能力。
  • 核心在于 Linux 权限检查主要看 EUID(有效用户) 而非 UID(真实用户)。

关键点

  • UID vs EUID:你是谁 vs 你拥有什么权限
  • 危险:新增/异常 SUID 二进制 = 潜在本地提权入口
  • 防守重点:建立“正常 SUID 白名单基线”,周期性扫描新增/变更 SUID,评估是否必要并移除/降权

实验六:SSH Wrapper / 关键组件替换(供应链/本地篡改思路)

原理

  • 把关键可执行文件(如 sshd)替换为“包装器”:先执行额外逻辑,再调用原程序,让用户无感。
  • systemd/服务启动如果指向固定路径,被替换后就会一直执行包装器。

关键知识点

  • 风险:关键系统组件被本地篡改(不一定新增服务/任务,但行为已被劫持)
  • 防守重点:包完整性校验(如系统自带校验工具)、hash 基线、file 类型检查(ELF vs 脚本/链接)、重装受影响软件包

实验七:LD_PRELOAD / 动态链接劫持(全局机制劫持)

原理

  • 动态链接器在程序启动时加载共享库;LD_PRELOAD/etc/ld.so.preload 可使指定库优先加载,从而“钩住”系统函数。
  • 如果是全局 preload,很多程序都会受影响,覆盖面极大。

关键点

  • 作用范围:环境变量(当前会话/子进程) vs 全局 preload(影响全系统大量程序)
  • 风险:能改变许多命令的行为、干扰排查、持久且隐蔽
  • 防守重点:检查 /etc/ld.so.preload 与相关环境变量、审计最近新增的可疑 so、用完整性工具与最小环境排查

综合:检测与清除的“蓝队方法论”

  1. 先看现状:可疑外联(ss/netstat)、可疑进程(ps/lsof)
  2. 再看持久化入口
    • SSH 密钥(authorized_keys)
    • cron(用户级+系统级)
    • systemd(unit+timer+用户级)
    • shell 启动脚本(bashrc/profile/别名/PROMPT_COMMAND)
    • SUID(新增/变更)
    • 动态链接劫持(ld.so.preload、LD_PRELOAD)
  3. 最后做完整性验证
    • 包校验工具(例如 debsums)
    • rootkit 扫描(chkrootkit/rkhunter)
  4. 清除原则:先停用触发点(停服务/禁用 timer/移除任务)→ 再删文件 → 再做配置回滚 → 最后复核日志与完整性

一昼一世界,一夜一星河。昼迷天未晓,夜尽终天明。