LabHub
学习 学习路径 课程

闭网现场 — 国防领域

在隔离网里排查并做出可外带的摘要

在 LabHub 中继续学习

目标

在没有互联网、也无法安装软件包的 Pod 中找出故障原因,将结果整理成可导出隔离网络的形式,并完成数据导出申请。

为什么重要

这个 Pod 不是模拟隔离网络,而是真正处于隔离网络中。curl 无法访问外部,pip install 也会失败。因此,这里要学习的不是技巧,而是顺序——先列出现有工具,用退出码明确证明缺失条件,再将两份不同记录放到同一时间轴上缩小原因范围。需要导出的内容也不是通过在原始文件上删除来制作,而是从空文件开始挑选写入。通过删除制作时一定会漏掉一项,而漏掉的那一项无论重读多少遍都看不出来。

步骤

  1. 使用 python3 创建 /root/airgap/app.log(600 行)和 /root/airgap/change.log(4 行)。原样使用随机种子固定的生成脚本。
  2. 实际运行 curlpip3 install,确认退出码;统计至少 8 个可用工具,并写入 /root/airgap/offline.txt
  3. /root/airgap/triage.txt 中写入总行数、ERROR 行数、首次错误时间、出现次数最多的 err 代码,以及配置变更时间(17:42)之前的错误数量。
  4. /root/airgap/cause.txt 中写入事故前最近一次变更的标识符、项目、旧值、新值,变更与首次错误的间隔(分钟),以及从错误行中摘取的证据。
  5. /root/airgap/sensitive.txt 中写入账号、员工编号、主机名、内部 IP、联系方式和操作员标识符各自的唯一值数量。
  6. /root/airgap/release/summary.txt 中编写导出摘要。要求 8 至 40 行,只包含作出判断所需的事实。
  7. /root/airgap/forbidden.txt 中创建从原始数据提取的禁止令牌列表,并将摘要的比对结果写入 /root/airgap/release/selfcheck.txt
  8. /root/airgap/release/request.md 中编写包含六个章节的导出申请,并通过 /root/airgap/release/summary.sha256 附加完整性校验。

参考

在隔离网络内创建调查对象

使用 python3 创建 /root/airgap/app.log(600 行)和 /root/airgap/change.log(4 行)。原样使用随机种子固定的生成脚本。

由于无法从外部获取样本,请使用 python3 直接创建。只有固定随机种子,所有人才能看到同一事件并相互核对判断。

用证据确认处于隔离网络

实际运行 curlpip3 install,确认退出码;统计至少 8 个可用工具,并写入 /root/airgap/offline.txt

分别实际运行一次 curl 和 pip,并记录退出码。工具列表只应通过 command -v 写入确实存在的工具——列出不存在的工具会误导接手者。

确定事故区间

/root/airgap/triage.txt 中写入总行数、ERROR 行数、首次错误时间、出现次数最多的 err 代码,以及配置变更时间(17:42)之前的错误数量。

统计总行数、ERROR 行数、首次错误时间、出现次数最多的 err 代码,以及配置变更时间(17:42)之前区间内的错误数量。最后一个数字决定能否将该变更指认为原因。

按时间连接两份日志并定位原因

/root/airgap/cause.txt 中写入事故前最近一次变更的标识符、项目、旧值、新值,变更与首次错误的间隔(分钟),以及从错误行中摘取的证据。

在 change.log 中找出事故前的变更,并计算其时间与首次错误时间相隔多少分钟。证据不能来自猜测,而要取自错误行直接给出的值。

按类型统计导出审核对象

/root/airgap/sensitive.txt 中写入账号、员工编号、主机名、内部 IP、联系方式和操作员标识符各自的唯一值数量。

统计的是唯一值数量,而不是出现次数。此外,审核对象不只有 app.log——change.log 中也隐藏着其中一类。

制作导出摘要

/root/airgap/release/summary.txt 中编写导出摘要。要求 8 至 40 行,只包含作出判断所需的事实。

不要打开原始文件后逐项删除。从空文件开始,只抄入判断所需的事实,这样未抄入的内容从一开始就不存在。超过 40 行就不再是摘要。

使用禁止令牌列表进行自检

/root/airgap/forbidden.txt 中创建从原始数据提取的禁止令牌列表,并将摘要的比对结果写入 /root/airgap/release/selfcheck.txt

从 app.log 和 change.log 两边提取六种信息,使用 sort -u 汇总。通过 grep 的 -F(固定字符串)和 -f(列表文件)进行比对。不要将该列表放入导出目录。

附加导出申请和完整性校验

/root/airgap/release/request.md 中编写包含六个章节的导出申请,并通过 /root/airgap/release/summary.sha256 附加完整性校验。

需要六个章节。在完整性章节中写入摘要的 SHA-256,并将相同值保存为哈希文件。只要摘要修改了一个字符,两处都必须重新计算。