feat(host-sec-check): add staged hardening and remediation
This commit is contained in:
@@ -1,13 +1,12 @@
|
||||
---
|
||||
name: host-sec-check
|
||||
description: >-
|
||||
Linux/VPS 主机安全检查与入侵取证:先取证再处置。覆盖矿机、ld.so.preload 进程隐藏、带宽挂机容器、对外端口、SSH/Docker/k8s 入口、cron/systemd 持久化、hugepage/OOM。
|
||||
Use when: 安全检查, 被黑, 入侵, 矿机, 排查端口, 对公网放开, rpcbind, 挂机赚钱, Portainer, 安全审计, host security, compromise, cryptominer, exposure, /host-sec-check.
|
||||
Linux/VPS 主机安全检查、入侵取证与用户确认后的分阶段加固:覆盖矿机、隐藏进程/ld.so.preload、对外端口、SSH/Docker/k8s、cron/systemd、hugepage/OOM、SSH/防火墙/Fail2ban。触发:安全检查、安全加固、新机初始化、被黑、入侵、矿机、排查端口、对公网放开、host security、hardening、compromise、/host-sec-check。
|
||||
---
|
||||
|
||||
# host-sec-check
|
||||
|
||||
对一台 Linux 主机做安全检查。默认 **只读取证 + 出报告**。清理、关端口、重启、轮换密钥必须用户明确同意后再做。
|
||||
对一台 Linux 主机做安全检查。默认 **只读取证 + 出报告**。清理、关端口、重启、轮换密钥和安全加固必须用户明确同意后再做。
|
||||
|
||||
需要:SSH 目标(`user@host` 或 ssh config 别名)、哪张网卡/IP 算公网。没有公网 IP 就只报「监听面」,并标明未做外部探测。
|
||||
|
||||
@@ -24,6 +23,8 @@ description: >-
|
||||
3. **sudo 失败不要停。** 用户在 `docker` 组时,用特权容器 `nsenter` 看宿主机(见 [references/access.md](references/access.md))。
|
||||
4. **怀疑进程隐藏时,不要只信宿主机 `ps`。** 从**不加载宿主机 `ld.so.preload` 的容器**读 `/proc` 和文件。
|
||||
5. 宿主机 `chattr` 可能被隐藏库挡住;改 immutable 文件用 **Ubuntu/Alpine 自带 chattr** 操作 bind-mount 的 `/host/...`。
|
||||
6. 不要把 root 密码、临时密码、私钥、webhook 或 token 作为命令行参数、环境变量或聊天内容传递;优先使用现有密钥、控制台或交互式 `passwd`。
|
||||
7. 加固不是“改 SSH 端口”竞赛:端口更改只减少噪声,必须先确认云安全组、主机防火墙和第二条登录路径。
|
||||
|
||||
收集脚本(可选,先跑再解读):
|
||||
|
||||
@@ -33,9 +34,19 @@ bash <skill-dir>/scripts/collect.sh USER@HOST
|
||||
|
||||
`<skill-dir>` 是本 skill 目录。脚本只采集,不修改系统。
|
||||
|
||||
自动修复默认先生成计划:
|
||||
|
||||
```bash
|
||||
bash <skill-dir>/scripts/remediate.sh USER@HOST --plan --fix ssh-perms --fix fail2ban --ignore-ip ADMIN_CIDR
|
||||
```
|
||||
|
||||
只有用户明确批准具体修复项后,才可使用 `--apply` 和精确确认串。每次应用前必须备份,应用后必须验证;脚本输出的 `BACKUP_ID` 可用于精确回滚。防火墙、SSH 登录策略、Docker/k8s 绑定、恶意文件、重启和密钥/token 轮换只生成计划,不由此入口自动执行。详细边界见自动修复资料。
|
||||
|
||||
## 流程
|
||||
|
||||
按顺序做。每步记下「正常 / 可疑 / 未查到」。完整项见 [references/checklist.md](references/checklist.md)。
|
||||
按顺序做。每步记下「正常 / 可疑 / 未查到」。需要逐项展开时再读检查清单。
|
||||
|
||||
如果用户明确要求「加固」「新机初始化」「配置 SSH/防火墙」,先完成只读快照,再阅读并执行加固资料。加固采用分阶段、可验证、可回滚流程;不能把远程一键脚本直接当作安全默认值。
|
||||
|
||||
### 1. 快照
|
||||
|
||||
@@ -54,7 +65,7 @@ bash <skill-dir>/scripts/collect.sh USER@HOST
|
||||
|
||||
### 3. 持久化
|
||||
|
||||
读 [references/persistence.md](references/persistence.md)。至少查:
|
||||
发现持久化信号或需要深查时,再读持久化资料。至少查:
|
||||
|
||||
- crontab(root 与所有用户)、`/etc/cron.*`
|
||||
- `/etc/systemd/system/*.service`、timers
|
||||
@@ -90,10 +101,36 @@ bash <skill-dir>/scripts/collect.sh USER@HOST
|
||||
- `journalctl` / `auth.log` 在处置时间点附近;日志空也要记
|
||||
- 出站连接:`ss -tp` 看陌生 IP(不要把结果里的密钥打出来)
|
||||
|
||||
### 8. 补漏(本次 vvps2 没做或做得浅的)
|
||||
### 8. 补漏(本次检查没做或做得浅的)
|
||||
|
||||
见 checklist 后半:补丁、SUID、世界可写、意外用户、IPv6、定时器、内核模块、出站 C2、云安全组、备份是否可用。
|
||||
|
||||
加固模式还要额外记录:
|
||||
|
||||
- SSH 的 `sshd -t` 与 `sshd -T` 生效结果,不只看配置文件中的 grep
|
||||
- 防火墙实际后端(nftables/iptables/ufw)及 IPv4/IPv6 规则
|
||||
- Fail2ban jail、日志后端、白名单和当前封禁状态
|
||||
- 云安全组/平台防火墙是否已放行管理入口(查不到必须标未验证)
|
||||
- 新管理员的密钥登录是否能在第二条会话中成功,再关闭 root/密码登录
|
||||
- Docker 的端口绑定、特权、socket/宿主机挂载;不要无条件改 `daemon.json`
|
||||
- 变更前备份、变更后验证、失败时的控制台回滚路径
|
||||
|
||||
## 检查清单(按需)
|
||||
|
||||
需要逐项展开时,读取 [references/checklist.md](references/checklist.md)。
|
||||
|
||||
## 持久化资料(按需)
|
||||
|
||||
发现持久化信号或需要深查时,读取 [references/persistence.md](references/persistence.md)。
|
||||
|
||||
## 加固资料(按需)
|
||||
|
||||
用户明确要求加固时,读取 [references/hardening.md](references/hardening.md)。
|
||||
|
||||
## 自动修复资料(按需)
|
||||
|
||||
用户批准执行修复时,读取 [references/remediation.md](references/remediation.md)。
|
||||
|
||||
## 报告格式
|
||||
|
||||
先给结论(是否沦陷、最可能入口、对外还开着什么),再给证据表,最后给 **需用户点头的处置清单**。不要默默清理。
|
||||
|
||||
Reference in New Issue
Block a user