如何验证ISO镜像文件完整性:以Linux Mint安全事件为例

本文详细介绍了验证操作系统ISO镜像完整性的方法,包括校验和验证、数字签名检查及安全最佳实践,以Linux Mint被入侵事件为案例说明镜像验证的重要性。

检查您的镜像

警告:本博文中引用的技术和工具可能已过时,不适用于当前情况。然而,这篇博文仍可作为学习机会,并可能更新或集成到现代工具和技术中。

今天我将逐步介绍在安装前验证ISO镜像的过程。

如果您在2月20日下载了Linux Mint 17.3 Cinnamon,有一定几率您获取了带有恶意软件的ISO。Linux Mint团队在2月21日凌晨2点左右在其博客上发布通知,发现他们的网站遭到入侵,官方软件包被恶意版本的操作系统替换。被黑的ISO托管在absentvodka.com上,Mint团队表示可能会对这家保加利亚网站展开调查。

攻击发生后,该网站被关闭以避免提供恶意ISO文件。在原始公告的评论中,Mint团队成员确认网站的WordPress博客是攻击者的入口点。公告发布前,linuxmint.com网站的转储文件在TheRealDeal上以85美元的价格出售。至少有一人购买并在HackerNews上发布了配置文件。

对于极度好奇者,恶意代码可在此gist中查看:https://gist.github.com/Oweoqi/31239851e5b84dbba894,它似乎用于设置僵尸网络。

那么,用户如何避免这种威胁?首先,要认识到无论提供产品的人的技术知识、专业性和善意如何,我们必须假设产品可能被入侵。因此,消费者有责任采取一切可能的步骤来验证我们获取的产品是预期的产品。以下是我通常在安装前验证操作系统镜像的步骤。接下来的内容相当偏执,并以Arch Linux发行版为例。我的目标有两个:一是了解我正在安装的系统及其当前问题,二是获得多个独立验证,确保即将安装的是合法版本。

了解您考虑安装的操作系统已知的漏洞。Arch Linux在此处列出其CVE(https://wiki.archlinux.org/index.php/CVE),大多数大型发行版都这样做。我也使用CentOS,为此我在此处检查CVE(https://access.redhat.com/security/security-updates/#/)。阅读后,我们可以看到两者都有一些未修补的漏洞(截至本文撰写时),即最近新闻中提到的glibc漏洞。

接下来是校验和。我们现在可以下载文件,对于Arch Linux,有大量镜像,通常我选择一个在美国的镜像,并查看托管方是谁。在这种情况下,我将选择kernel.org。进入kernel.org后,我们看到实际上是一个包含镜像、签名和另一组校验和的目录。

在这种情况下,我将从kernel.org下载x86_64 tarball。说我偏执,但如果恶意实体获得了kernel.org和Arch Linux的访问权限(可能性不大,但并非不可能),那么我不会从kernel.org下载签名和校验和,而是转到列表中的另一个镜像aggregate.org,在那里下载SHA1校验和。这是sha1sums.txt包含的内容:

好的。现在让我们检查它们。我简单地从文件中grep sha1sum,可以看到它们确实匹配。

可以运行类似的命令来检查md5 sum。注意,在检查MD5之前,我从另一个下载镜像(这次是pair.com)获取了该文件。

最后,我们将检查签名。移动到镜像列表中的另一个站点,我获取签名进行检查。这次我选择了ocf.berkley.edu,并将签名文件下载到本地机器。

如上所示,我首先尝试用gpg –verify检查签名,它假设了正确的文件进行检查,但无法在我的gpg密钥链中找到密钥。因此,我用gpg –recv-keys和密钥ID导入了密钥。重新运行显示签名确实已验证。您可以看到我第一次尝试验证和拉取密钥之间的时间间隔,在此期间我谷歌了密钥ID以查看是否有任何可疑结果。

现在我们可以继续安装ISO。我还建议,如果安装介质有完整性检查,请在安装前运行它。Arch Linux是一个滚动发行版,因此我每次安装时都会进行这种验证。对于其他版本化的操作系统,如CentOS、Ubuntu等,我通常会下载一个镜像,验证它,然后加密并备份,以便将来安装特定版本时有一个已知的良好镜像。

额外部分:在工作中,当我超级偏执,且镜像是某些新的黑客工具或我们为另一家公司测试的东西时,我实际上会在隔离环境中启动镜像,然后将其插入镜像交换机,并在一段时间内拉取所有流量,以查看它是否尝试映射驱动器、向外ping其他网络,或获取我未请求的软件。Beau Bullock还向我提到,他喜欢在安装后运行漏洞扫描,这将从外部角度指出系统的哪些组件可能配置错误。这很有道理,不一定意味着镜像被故意制作成恶意,只是有人忘记在签署镜像前更新包x。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计