TT Lab
开始
学习 学习路径 课程

cron 在凌晨三点执行了 curl

抓到之后先做什么

在 TT Lab 中继续学习

一句话总结

响应是顺序之争。隔离会抹掉证据,收集证据会扩大损失。所以要事先定好现在做什么、以后做什么,事件发生时照着那张表执行。

为什么需要它

告警响起后的 30 分钟里,通常会发生这样的事。有人删掉了 Pod。有人重启了节点。有人删掉了 cron 文件。一小时后问起“是怎么进来的”,没人知道——因为承载入侵路径的东西都被删光了。

反过来也是失败。为了把证据收集得完美而什么都不动,在此期间那份凭据又让另一个命名空间被攻破。

所以响应流程的问题不是“什么是对的”,而是“先做什么”。NIST SP 800-61 之所以长期被引用,也是这个原因——检测、分析之后是隔离、根除、恢复,并要求在事件发生之前就定好其间的判断标准。

工作原理

实际工作中使用的顺序可以压缩成四步。

1. 범위 정하기   무엇이 있는지 세고, 각 자료가 언제부터 언제까지인지 적는다
2. 증거 보존     원본은 건드리지 않고 사본 + 해시. 휘발성이 큰 것부터
3. 타임라인      출처가 다른 기록을 하나의 시간축(UTC)에 올린다
4. 격리·근절     표에 따라 조치. 각 조치에 근거 한 줄

该代码块中的韩文内容依次说明:第 1 步确定范围,清点现有内容并写下每份资料的起止时间;第 2 步保全证据,不动原件,只做副本和哈希,先处理易失性大的;第 3 步做时间线,把来源不同的记录放到同一条 UTC 时间轴上;第 4 步隔离与根除,按表采取措施,每项措施附一行依据。

易失性顺序是关键。内存在杀掉进程的瞬间就消失,进程列表和打开的套接字在重启后消失,磁盘上的文件大体会保留。所以“现在要不要杀掉进程”这个问题的答案,几乎总是“先转储内存之后”。

相反,凭据撤销是拖不得的。 即使关掉一个节点,从该节点泄露出去的证书在集群的任何地方仍会继续被使用。在 Kubernetes 中,节点的身份是 system:node:<이름>(占位符为节点名称),Node 授权模式决定该身份可以读取什么。被调度到该节点上的 Pod 所使用的 Secret 也包含在内,所以一个节点的凭据,就等于那个节点上所有工作负载的机密。

制作时间线时,最好事先规定好格式。时间用 UTC ISO 8601,来源名称用固定的词,行为者和发生了什么各占一栏。这样即使多人分头记录也能合并,光靠排序就能看出故事。

措施表不是每次事件重新写,而是事先做好,当天只填值。例如像这样。

조치           시점    근거
메모리 수집    지금    프로세스를 건드리면 사라진다. 되돌릴 수 없다
네트워크 차단  지금    외부로 나가는 것만 끊는다. 프로세스는 살려 둔다
프로세스 종료  나중    메모리를 뜬 뒤. 지금 죽이면 그 증거가 함께 죽는다
예약 작업 제거 나중    지속화 수단은 원본을 보존한 뒤에 치운다
자격증명 폐기  지금    노드를 꺼도 유출된 인증서는 클러스터에서 계속 쓰인다
노드 재설치    나중    디스크 이미지를 뜬 뒤. 마지막 단계다

该代码块中的韩文内容依次说明:内存收集现在做,因为碰到进程就会消失且无法挽回;网络阻断现在做,只切断向外的连接,进程保持存活;进程终止以后做,要在转储内存之后,现在杀掉证据也会一起消失;计划任务移除以后做,持久化手段要在保全原件之后再清除;凭据撤销现在做,因为即使关掉节点,泄露的证书仍会在集群中继续被使用;节点重装以后做,要在制作磁盘镜像之后,是最后一步。

有了表,凌晨三点需要判断的事情就减少。需要判断的事情减少,失误也会减少。

而调查中事情真正推进的方式是分析支点(pivot)。抓住一个值——PID、文件路径、目的地址、身份——到其他资料中去找同一个值。主机日志中的一个 PID 会连到内核审计记录,从中得到被读取的证书路径,该证书的身份又与 API 服务器审计日志的 user.username 吻合。这条连接把“节点被攻破”变成了“支付命名空间中的 Secret 被读取”。

在现场相遇的样子

事后分析报告中最常漏掉的一节是检测缺口。发生了什么、怎么修好的,大家都写,“为什么三个小时没人知道”却不写。而减少下一次事件的,恰恰是那一节。是没有规则,还是有规则但告警发到了没人看的渠道,抑或日志本身就不存在,这三者会导向完全不同的处方。

第二个经常崩塌的是证据的完整性。把原始文件打开,用编辑器看着看着按了保存按钮,那一刻该文件就不再是证据。做副本并留下哈希的那 30 秒可以防止这一点。

第三个是报告以人名收尾。以“负责人失误了”结尾的报告,下周会招来同样的事故。该修的通常在“为什么那个失误是可能发生的”这一侧——那个计划任务目录谁都可以写,节点证书和工作负载在同一个文件系统上,告警渠道里一个人也没有。

第四个是时间线的时区混杂。Falco 告警以 UTC 记录,journal 在显示到屏幕上时使用主机的本地时间,审计日志原始记录是纪元秒。把这三者直接拼在一起,三小时的事件会显得像六小时,或者顺序颠倒。所以时间线的第一栏始终统一为 UTC,原始格式需要的话附在最后一栏。

下一项实验要做什么

实验中要拿到一次真实事件的四类资料——Falco 告警、内核审计原始记录、cron 的 journal、Kubernetes 审计日志——把调查完整走一遍。清点资料,找出最初的告警,用副本和哈希保全证据,把四个来源放到同一条时间轴上,抓住支点从主机跳到集群,把六项措施的顺序连同依据一起定下来,最后撰写事后分析报告。只处理文件,所以在实验 Pod 中运行。