LabHub
学习 学习路径 课程

闭网现场 — 国防领域

引入不是搬文件,是把依赖闭合

在 LabHub 中继续学习

一句话总结

在封闭网络的入境失败中,失败的大部分不是因为签名,而是因为依赖性,这是包含阻止它的装置的全部的捆绑包和文件单元清单。

概念图: 全部内容 · 丢失一个文件的成本是一周 · 第一,payload。 · 二、宣言书。

为什么需要这个?

在外部的部署是这样的。从存储库接收代码,软件包管理器接收依赖性,容器注册表填充映像层。我们移动的实际上是“地址”,实际内容在运行时由网络填充。

在封闭网络中没有那个网络。如果移动地址的话,什么都不会填充。所以移动的不是地址,而是全部内容。不仅是应用代码,还有那个代码调用的库,那个库调用的库全部。

这里出现的失败非常具有特点。通过入库审查,拿着媒体进去,开始安装后才发现一个图书馆丢失了。而且为了填补那个,必须再次出去,再次装进去,再次接受审查。在审查周期以周为单位的地方,这就是一周。丢失一个文件的成本是一周这一事实是整个模块的理由。

怎么行动

所以携带套装中会同时包含三个。

**第一,payload。**这是执行所需的所有文件。这里的原则是“即使在外面填充一次网络,也包含在内”。因为是在开发环境中,所以判断“只要可以就行”是最危险的——开发环境中已经有缓存了。

**二、宣言书。**是载入在payload中的每个文件的SHA-256列表。为什么用整个bundles的hash不足——整个hash只告诉“有什么不同”。如果不知道哪个文件不同,调查的地方就变成了整个bundles,在数百个bundles中,这实际上是无法调查的。路径写成相对路径。接收方会在其他目录解压,所以绝对路径在原地毫无用处。

**三、签名。**这是关于一份宣言书的签名。即使有数千份文件,只要有一个签名就可以了。文件的完整性由宣言书负责,宣言书的真实性由签名负责。这两种层面的区别就是下面的故事。

페이로드 파일들 ──(각 파일의 SHA-256)──▶ MANIFEST.sha256 ──(개인키 서명)──▶ MANIFEST.sig
     ▲                                          ▲                              ▲
     └ 파일 해시 대조로 확인                     └ 목록이 맞는지                └ 목록을 우리가
                                                                                  아는 사람이 만들었는지

在现场相遇的样子

**有很多地方没有gpg。**如果不在授权软件列表中,就无法安装,要添加到列表中,首先要进行入境审查。所以从现实上讲,到处都有。openssl做。openssl dgst -sha256 -sign-verify两个命令就可以完成签名和验证。虽然不华丽,但这是在这样的环境中实际实现的方法。

**二进制无法用眼睛确认。**文本文件是diff虽然可以这样看.so.whl打开也什么都看不到。而且因为混入了NULheadgrep如果物理的话,就无法相信结果本身。处理二进制的数据的工具是filesha256sumopenssl认为只有三个比较安全。

**一次被攻击一次。**有次重新捆绑后,hash文件没有再次出现。被放入媒体中,接收方没有匹配hash而被拒绝。再出现需要一天时间。之后,一定要把捆绑命令和显示hash命令粘贴到同一脚本中。

接下来要读的东西

到此为止是“要发送什么”。紧随其后的文章是“接收方按什么顺序确认什么”。哈希和签名分别保护什么,只看一层的话哪些变更会通过,以及如果公钥包含在打包中,为什么验证整个内容变得毫无意义,这就是文章的内容。接下来在练习中一次用手踩两篇文章。