Skip to content

Go 主机安全面试:Linux Web RCE 进程链与异常命令检测

Web 服务被打出 RCE 后,攻击者常会让 nginxapachephp-fpmtomcat 或业务进程拉起 shbashcurlwgetchmodpython 等命令,再下载脚本、写入临时目录、执行探测或横向移动。面试官通常会追问:Go Agent 怎么从进程事件里识别 Web RCE?只看命令黑名单够不够?怎么降低发布脚本、备份任务和运维命令带来的误报?

岗位场景

text
Linux Web 主机
  -> 采集进程创建、父子进程、命令行、工作目录、用户、文件写入和网络连接
  -> 标准化 Web 服务进程、解释器、下载器、临时目录执行和权限变更
  -> 关联 Web 入口、命令执行、落地文件、后续外联和主机探测
  -> 输出可解释证据,支撑客户现场复盘和规则降噪

这类题考的是 Linux 进程模型、Web 服务运行方式、命令行解析、攻击链关联、误报治理和 Go Agent 的低开销事件处理能力。

高频面试题

1. Web RCE 落到主机侧后,最先看哪些进程证据?

简洁答案:先看 Web 服务进程是否异常拉起 shell、解释器、下载器、权限工具或系统探测命令,再结合用户、工作目录和命令行判断是否偏离基线。

关键知识点:

  • 常见父进程包括 nginxapache2httpdphp-fpmjavatomcatnode
  • 常见子进程包括 shbashdashpythonperlcurlwgetchmodidwhoami
  • 业务发布也可能执行脚本,所以不能只靠命令名告警。

Go 落地思路:

  • 事件字段至少包含 pidppidprocess.nameparent.nameargvcwduidstart_time
  • 给 Web 服务进程打角色标签,例如 asset.role=web_serverprocess.is_web_parent=true
  • 把“Web 父进程 + 可疑子命令 + 异常目录/用户”组合成规则条件。

2. 为什么只维护命令黑名单容易误报和漏报?

简洁答案:攻击者能换命令、换解释器、用内置功能绕过;正常运维也会调用同名命令。更稳的是看父子关系、参数、目录、用户和后续行为。

关键知识点:

  • curlwgetbash 本身都是正常工具,风险来自调用上下文。
  • RCE 可能表现为 sh -cpython -cphp -rperl -ebusybox nc
  • 容器或最小化系统里命令路径可能不同,不能只匹配固定绝对路径。

Go 落地思路:

  • 命令名是弱信号,父进程和参数模式是强信号。
  • -c、管道、重定向、base64、/tmp/dev/shmchmod +x 这类参数做结构化标记。
  • 输出命中原因时写清楚“哪个父进程、哪个参数、哪个目录”触发,而不是只写“命中黑名单”。
go
func isWebParent(name string) bool {
	switch name {
	case "nginx", "apache2", "httpd", "php-fpm", "tomcat":
		return true
	default:
		return false
	}
}

3. Web RCE 常见命令链路是什么样?

简洁答案:常见链路是探测身份和环境、下载 payload、赋权执行、建立外联、清理痕迹或写入持久化。

常见证据:

阶段典型命令检测价值
身份探测idwhoamiuname -a判断 RCE 成功和权限
下载落地curlwgetpython -c发现 payload 来源
赋权执行chmod +xsh /tmp/x发现临时目录执行
网络动作外联 IP、异常端口关联 C2 或横移
清理痕迹rm -f、清空日志提升风险优先级

Go 落地思路:

  • 用短窗口把同一父进程树下的多个命令串起来。
  • 对临时目录执行、下载 URL、目标 IP、文件 hash 保留证据字段。
  • 单条低危探测命令可以降级,连续链路应提升置信度。

4. 怎么判断 sh -c 是正常业务调用还是 RCE?

简洁答案:看谁调用、执行什么、从哪里执行、用哪个账号、是否在发布窗口、后续有没有下载执行或外联。sh -c 只是入口,不能单独定性。

关键知识点:

  • CI/CD、备份、日志轮转和业务脚本都可能调用 shell。
  • Web RCE 常见特征是 Web 用户、Web 工作目录、短命令探测、临时目录和异常外联。
  • 攻击者可能把多条命令塞进一行,或者用 base64/管道隐藏意图。

Go 落地思路:

  • 解析 argv 时保留原始命令行和归一化 token。
  • ;|&&、反引号、$()、base64 解码命令做轻量标记。
  • 白名单要绑定脚本路径、hash、父进程、账号和维护窗口,避免按 sh 放行。

5. Web 进程写 /tmp 后执行,为什么值得重点关注?

简洁答案:攻击者常把 payload 写到 /tmp/var/tmp/dev/shm 这类可写目录,再赋权执行;正常 Web 进程通常不该在这些目录生成并执行新二进制。

关键知识点:

  • 临时目录可写、清理周期短,适合攻击者落地。
  • /dev/shm 在内存文件系统中,常被用于降低磁盘痕迹。
  • 仅有文件写入不一定恶意,写入后执行和外联更有价值。

Go 落地思路:

  • 关联 file.createfile.chmodprocess.exec 三类事件。
  • 记录 file.pathfile.sha256modewriter.processexec.process
  • 对 Web 用户执行新生成文件设置更高权重。

6. 如何降低 Web RCE 进程链检测的误报?

简洁答案:用主机角色、发布窗口、脚本 hash、进程树、账号、工作目录和历史基线降噪;不要用一个全局白名单覆盖所有 Web 主机。

关键知识点:

  • 发布系统、健康检查、日志切割、备份任务可能触发相似命令。
  • 不同技术栈基线差异很大,PHP、Java、Node 的正常子进程形态不同。
  • 客户临时排障命令要有过期时间,不能永久白名单。

Go 落地思路:

  • 白名单维度绑定 host.role + parent.path + script.hash + uid + time_window
  • 保留降噪原因,告警解释里展示“因什么被降级或抑制”。
  • 对新出现的父子进程组合做学习,但上线前用离线 replay 校验。

7. Go Agent 怎么做高吞吐进程事件处理?

简洁答案:采集层尽早过滤明显无关事件,标准化层只做必要解析,规则层用固定窗口和小状态表关联,避免每条事件全量扫描历史。

关键知识点:

  • 进程创建事件可能很多,尤其是 CI、批处理和容器节点。
  • 命令行解析、hash 计算和规则匹配都可能成为 CPU 热点。
  • 事件乱序和丢失会影响链路还原。

Go 落地思路:

  • host.id + process.guid 作为关联键,缓存短时间进程上下文。
  • 对命令行做一次解析,多条规则复用解析结果。
  • 窗口状态设置 TTL,过期即清理,避免 Agent 常驻内存增长。

8. 客户说“这是正常发布脚本”,你怎么排查?

简洁答案:先还原进程树和命令行,再核对脚本路径、hash、发布窗口、执行账号和变更记录,最后用同版本规则离线 replay,确认是规则过严还是客户基线缺失。

关键知识点:

  • 排查要回到原始事件,不能只看告警标题。
  • 发布脚本通常有固定路径、固定账号、固定父进程和稳定 hash。
  • 真攻击可能伪装成发布脚本名,所以路径和 hash 比文件名更重要。

Go 落地思路:

  • 告警事件保留 rule_idrule_versionhit_reason、原始事件 ID 和关联窗口。
  • 导出脱敏样本用于 replay,避免直接在生产规则上猜改。
  • 修复优先放在共享解析、基线或降噪逻辑,不给单台机器硬编码分支。

通俗答案

Web RCE 进程链检测不是“看到 curl 就报警”。可靠做法是看 Web 服务进程有没有拉起不符合基线的命令,命令是否在探测环境、下载落地、赋权执行或外联,再结合账号、目录、发布窗口和历史行为判断风险。

text
Web 服务进程
  -> shell / 解释器 / 下载器
  -> 临时目录写入或 chmod
  -> 新文件执行
  -> 外联、探测、横移或清理
  -> 攻击链告警

学习要点

方向要点
Linux 原理进程父子关系、用户、工作目录、argv、文件权限
Web 攻击RCE、命令执行、下载落地、临时目录执行
检测设计父子进程、参数模式、文件写入、网络关联、基线
Go 实现事件模型、命令行解析、短窗口关联、TTL 状态清理
误报治理发布窗口、脚本 hash、账号、主机角色、离线 replay

小练习 / 复盘题

  1. 设计一个 ProcessExecEvent 结构体,字段要能表达父子进程、argv、cwd、uid 和进程唯一 ID。
  2. 写一条规则:Web 服务进程拉起 sh -c,随后 60 秒内从外部 URL 下载文件并在 /tmp 执行,列出至少 6 个证据字段。
  3. 客户发布系统会让 tomcat 执行固定脚本,你会怎样设计白名单,避免攻击者只改文件名绕过?
  4. 复盘一条 Web RCE 攻击链:漏洞入口、命令探测、payload 落地、赋权执行、后续外联。请按时间线输出证据。
最近更新