| name | persistence-linux |
| description | 在管理员显式启用、演练 ROE 允许且用户精确授权后,为 Linux Puppet 目标部署一项与红队任务匹配、可验证、限时且可完整回滚的持久化机制。当需要在既定存续窗口内维持对指定账号或主机的访问,并已提供载荷、路径和清理要求时使用。 |
Linux 红队持久化
此 skill 默认禁用。启用只表示能力可见,不代表本次演练授权。每次写入必须绑定精确目标、机制、载荷、存续窗口和回滚动作确认。
行动目标
- 在 ROE 允许的时间窗口内维持对指定主机或账号的访问。
- 选择能满足目标的最小机制,不追求隐蔽性而增加复杂度。
- 记录变更前值、本次唯一标识、验证结果、到期时间和清理责任。
- 演练目标完成或窗口到期时可靠回滚。
必要输入
- 演练目标、授权主机、目标账号和当前权限。
- 允许的机制:SSH 公钥、用户 crontab 或 systemd 服务。
- 用户提供并批准的精确公钥或命令载荷。
- 写入路径、服务名或唯一任务标识。
- 生效时间、到期/清理时间和责任人。
- 验证方法、变更前备份方式和完整回滚命令。
任何一项缺失时停留在方案阶段,不自行生成 C2 地址、载荷或基础设施参数。
授权与 ROE
- 风险等级:high;访问模式:write-destructive。
- 只部署一种机制,不建立冗余后门。
- 不使用 SUID 副本、shell profile 注入、二进制替换、日志清理或伪装系统组件。
- 不自动生成反弹 Shell、C2 载荷或隐藏命名。
- 不覆盖既有 unit、任务或 authorized_keys 内容,不修改未批准的行。
- 不保存私钥、密码、Token 或完整载荷到侦察摘要。
- 用户只要求评估方案时,不执行任何写入。
OPSEC 与变更预算
- 最多一次配置写入、一次原生状态验证;失败时不叠加第二机制。
- 优先选择现有服务能力和最小文件改动。
- 写入前采集目标对象存在性、权限、哈希/内容摘要和相关安全策略。
- 不关闭 SELinux、AppArmor、审计、安全产品或文件完整性监控。
- 明确产生的文件、配置、服务、认证和网络痕迹。
机制选择
按任务需求选择,不按“最隐蔽”排序:
- SSH authorized_keys:需要运维式交互访问、SSH 已启用、目标账号允许公钥登录。
- 用户 crontab:需要在明确时间窗口运行用户批准的非交互命令。
- systemd 服务:root 权限、需要开机/服务级存续、用户提供精确 ExecStart。
如果一次性访问已经足够完成目标,建议不部署持久化。
工作流
- 读取摘要和演练目标,确认持久化是否必要、目标是否在授权范围。
- 创建计划:环境与前值、机制/窗口/回滚、用户确认、写入与验证、到期交接。
- 用只读命令确认身份、HOME、SSH、cron、systemd、容器、挂载和安全策略。
- 选择一种机制,生成精确变更计划和回滚计划,不执行。
- 调用
request_user_input,列出每条写命令、目标、前值摘要、载荷标识、存续窗口、痕迹、验证和回滚命令;随后停止本轮。
- 用户确认后只执行批准参数;任何参数变化都重新确认。
- 写入后验证目标配置只包含本次批准变更。失败时执行已批准回滚并验证恢复。
- 摘要保存变更台账和到期责任,不保存秘密与完整载荷。
只读环境确认
id; whoami; printf 'HOME=%s\n' "$HOME"; test -w "$HOME" && echo HOME_WRITABLE
command -v crontab; crontab -l 2>/dev/null
ps -p 1 -o comm= 2>/dev/null; command -v systemctl
ss -tln 2>/dev/null | grep -E '(:22[[:space:]]|:22$)' || true
grep -E '^(PubkeyAuthentication|AuthorizedKeysFile)' /etc/ssh/sshd_config 2>/dev/null
test -f /.dockerenv && echo IN_DOCKER; findmnt -no TARGET,OPTIONS "$HOME" 2>/dev/null
command -v getenforce >/dev/null && getenforce; command -v aa-status >/dev/null && aa-status 2>/dev/null | head -20
机制要求
SSH authorized_keys
- 写入前计算用户提供公钥的指纹,检查是否已存在。
- 保留原文件,按唯一注释或完整公钥精确追加和删除。
- 验证目录/文件权限、sshd 生效配置和目标账号。
- 不传输、读取或保存攻击者私钥。
用户 crontab
- 使用绝对路径和本次唯一注释,保留所有原任务。
- 明确运行用户、执行频率、开始/结束窗口、日志与网络行为。
- 回滚只删除唯一标识对应任务;禁止脆弱的整表覆盖管道。
systemd 服务
- 仅 root 且 PID 1/systemd 条件满足时使用。
- 服务名必须用户批准、可归因于演练,不伪装系统组件。
- unit 已存在时停止,不覆盖;明确 User、WorkingDirectory、ExecStart、Restart 和日志。
- 回滚顺序:停止、禁用、删除本次 unit、daemon-reload,并核对原状态。
成功与停止条件
成功:唯一机制已按批准参数部署,原生状态验证通过,变更前值、到期时间和回滚命令均已记录。
立即停止并报告/回滚:
- 发现目标、账号、机制或载荷超出 ROE。
- 目标配置与确认前发生变化,可能有并发修改。
- 写入影响既有服务、账号或任务。
- SELinux/AppArmor/只读挂载等阻止执行。
- 验证失败、产生未批准网络连接或出现异常系统影响。
- 演练目标已可在不持久化情况下完成。
变更台账与交接
## Linux 红队持久化变更
- 目标、账号和演练目的:...
- 机制、路径和唯一标识/公钥指纹:...
- 变更前值摘要:...
- 确认范围与执行时间:...
- 生效/到期时间与清理责任:...
- 验证结果和产生痕迹:...
- 完整回滚命令与回滚状态:...
- 未保存:秘密值和完整载荷
最终输出必须明确:修改了什么、为何需要、何时清理、谁负责、如何验证和如何回滚。不得宣称删除系统安全日志是清理步骤。