首页/安全/取证与溯源速查/Agent 转发与密钥借用痕迹
Linux 取证135 条

Agent 转发与密钥借用痕迹

开启 agent 转发后,登录跳板机会话可借用本地私钥完成再跳转;一旦跳板机被控,攻击者即可借用同一密钥横向。

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

Agent 转发的便利与代价

开启 agent 转发后,本地 ssh-agent 的套接字会随会话转发到远端,远端进程可以通过它借用本机私钥完成进一步跳转,本机私钥本身从不离开本地。方便之处是跳板机上不必存放私钥;风险在于跳板机一旦被控制,攻击者无需复制任何文件,就能借用同一把私钥访问后续主机,横向移动几乎不留文件痕迹。取证时要判断这台主机是否允许转发,以及是否出现过带转发参数的会话。

基本信息

客户端ssh -A,或 ssh_config 中 ForwardAgent yes
服务端AllowAgentForwarding(默认 yes,可整机关闭)
单键限制authorized_keys 中加 no-agent-forwarding 或 restrict
痕迹来源进程命令行参数、/tmp/ssh-*/ 下的套接字目录

典型使用场景

  • 确认跳板机是否允许转发,评估横向移动风险
  • 从进程命令行中找出使用了 -A 的会话
  • 检查管理员是否用 restrict 或 no-agent-forwarding 做过加固
  • 分析套接字目录的残留时间,推断会话存活时段
  • 加固整改时评估关闭转发对现有运维流程的影响

痕迹检索

痕迹检索
ps -eo pid,user,lstart,args | grep '[s]sh -A' | head    # 找带转发参数的会话
ls -la /tmp/ssh-* 2>/dev/null | head                    # 套接字目录,重启后消失
grep -R 'AllowAgentForwarding' /etc/ssh/sshd_config* 2>/dev/null   # 服务端是否放行
grep -n 'no-agent-forwarding\|restrict' ~/.ssh/authorized_keys 2>/dev/null | head   # 单键加固痕迹
sshd -T 2>/dev/null | grep -i agentforwarding           # 查看实际生效值

痕迹来源读法

痕迹位置判读要点
命令行参数进程列表中的 -A进程存活期才能看到,需及时采集
套接字目录/tmp/ssh-*目录存在时间反映会话存活区间
authorized_keysno-agent-forwarding 等选项反映是否做过加固
服务端配置AllowAgentForwarding 值判断转发在全机层面是否可行
转发本身不产生独立的认证日志,只能从进程参数与套接字残留判断;这些痕迹随会话结束与主机重启消失,现场采集要第一时间执行。
转发会话中,远端 root 可以在会话存活期内通过套接字使用转发来的密钥,且不留下认证到跳板机的记录,审计时容易漏判。
服务端允许转发并不代表转发真的发生过:是否启用还取决于客户端会话是否带转发参数,两者要结合判断,只看服务端配置会把风险面评估得过高。

易错点

  • 重启后才去查 /tmp 下的套接字,痕迹已经全部消失
  • 只查认证日志,转发类的横向移动完全不在日志里
  • 把 AllowAgentForwarding yes 直接判为入侵,忽略默认值本就为 yes
  • 加固时全局关闭转发,未评估脚本与自动化任务是否会因此中断

数据来源与参考

  • OpenSSH 手册(ssh_config ForwardAgent)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌