persistence-linux · git:20260801.6c9c129 · 2026-08-01 · sha256 5e4bbd7922be9d57
persistence-linux git:20260801.6c9c129A
Immutable. This exact content is served forever at /api/v1/blob/5e4bbd7922be9d57.
--- 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、审计、安全产品或文件完整性监控。 - 明确产生的文件、配置、服务、认证和网络痕迹。 ## 机制选择 按任务需求选择,不按“最隐蔽”排序: 1. SSH authorized_keys:需要运维式交互访问、SSH 已启用、目标账号允许公钥登录。 2. 用户 crontab:需要在明确时间窗口运行用户批准的非交互命令。 3. systemd 服务:root 权限、需要开机/服务级存续、用户提供精确 ExecStart。 如果一次性访问已经足够完成目标,建议不部署持久化。 ## 工作流 1. 读取摘要和演练目标,确认持久化是否必要、目标是否在授权范围。 2. 创建计划:环境与前值、机制/窗口/回滚、用户确认、写入与验证、到期交接。 3. 用只读命令确认身份、HOME、SSH、cron、systemd、容器、挂载和安全策略。 4. 选择一种机制,生成精确变更计划和回滚计划,不执行。 5. 调用 `request_user_input`,列出每条写命令、目标、前值摘要、载荷标识、存续窗口、痕迹、验证和回滚命令;随后停止本轮。 6. 用户确认后只执行批准参数;任何参数变化都重新确认。 7. 写入后验证目标配置只包含本次批准变更。失败时执行已批准回滚并验证恢复。 8. 摘要保存变更台账和到期责任,不保存秘密与完整载荷。 ## 只读环境确认 ```bash 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/只读挂载等阻止执行。 - 验证失败、产生未批准网络连接或出现异常系统影响。 - 演练目标已可在不持久化情况下完成。 ## 变更台账与交接 ```markdown ## Linux 红队持久化变更 - 目标、账号和演练目的:... - 机制、路径和唯一标识/公钥指纹:... - 变更前值摘要:... - 确认范围与执行时间:... - 生效/到期时间与清理责任:... - 验证结果和产生痕迹:... - 完整回滚命令与回滚状态:... - 未保存:秘密值和完整载荷 ``` 最终输出必须明确:修改了什么、为何需要、何时清理、谁负责、如何验证和如何回滚。不得宣称删除系统安全日志是清理步骤。