为什么 debian apt 工具没有 https 传输?

zaa*_*deh 52 security debian apt https

随着 NSA 披露的所有偏执狂,我想知道为什么 Debian 软件包安装机制不支持 HTTPS 进行传输,更不用说默认使用 HTTPS 了。

我知道 Debian 软件包使用 GPG 进行某种签名验证,但是,考虑到这在安全方面的重要性,我仍然认为使用 HTTPS 传输而不是 HTTP 会太难。

编辑:我主要想保护自己免受中间人攻击(包括只是流量嗅探),而不是 Debian 镜像管理员。HTTP 存储库将整个系统放在桌面上,供任何窥探 Debian 镜像流量的人使用。

Mar*_*rco 53

有。您需要安装该软件包apt-transport-https。然后你可以使用像

 deb https://some.server.com/debian stable main
Run Code Online (Sandbox Code Playgroud)

在您的sources.list文件中。但通常这不是必需的,因为无论如何整个内容都是公开的,并且会增加加密开销和延迟。由于您不信任攻击者的公钥,因此即使是 http 流量也不会受到中间人攻击。apt当攻击者注入受操纵的软件包时,将警告您并且无法安装软件包。

编辑:如评论中所述,使用TLS存储库确实更安全。研究表明,在未加密的存储库上使用 apt 确实会带来安全风险,因为 HTTP 传输容易受到重放攻击。

  • @Marco 你的回答不正确;许多研究论文表明,当通过 HTTP 访问存储库时,即使使用 GPG 签名,APT 和 YUM 存储库也容易受到重放攻击。存储库只能在 100% 的情况下通过 TLS 访问。 (9认同)
  • 不,大多数镜像不支持 https。仅仅是因为加密这种流量没有多大意义。无论如何,包裹正在被验证并且信息是公开的。 (8认同)
  • [此处](https://isis.poly.edu/~jcappos/papers/cappos_mirror_ccs_08.pdf) 是@Joe Damato 所指的论文 - 也请参阅他的回答 [此处](http://unix.stackexchange.com/问题/317698/yum-install-http-is-this-safe) (8认同)
  • 我可以想到我可能仍然更喜欢通过 TLS 下载的几个原因:1) 我在安装包时可能会关心我的隐私,以及 2) 包签名检查代码中可能存在错误,MITM 可以利用这些错误。 (7认同)
  • @JackO'Connor,虽然关于隐私的第一个反对意见是可以理解的,但第二个反对意见就像说我喜欢网站使用 PGP 密钥对其内容进行签名,因为 TLS 代码中可能存在错误。PGP 和 TLS 都建立信任;你不需要两者。 (2认同)
  • @PaulDraper 我基本上同意,但我看到了一个区别:当我们使用 TLS 时,我们几乎保证进入我们的应用程序代码的任何字节都已经过身份验证。除非我们以某种方式错误配置了 TLS,否则我们的应用程序中的错误很难让我们遭受来自 Mallory 的攻击。PGP不具备这个优势。在 PGP 验证步骤之前,将有大量应用程序代码处理 Mallory 的字节。所有这些代码都需要像 TLS 和 PGP 一样防弹。如果能避免这种责任就好了。 (2认同)
  • 值得注意的是,当您运行 apt-get install 时,MITM 可能会导致您安装具有已知安全漏洞的旧版本软件包,阻止您安装新的安全补丁,或者 DOS 您的无休止的数据流一直持续到您磁盘空间不足。 (2认同)

Gil*_*il' 18

您的假设是错误的:您可以使用 HTTPS 下载。你只需要找到一个支持它的镜像,并将它的 URL 放在你的源列表中。您需要安装该apt-transport-https软件包。

Debian 没有让 HTTPS 下载变得容易,因为它的好处很少。Debian 包分发已经包含了一个验证包的机制:所有包都用Gpg签名。如果活动的中间人将您的流量重定向到包含损坏包的服务器,则会检测到损坏,因为 GPG 签名将无效。使用 GPG 而不是 HTTPS 的优势在于它可以抵御更多威胁:不仅可以抵御最终用户连接上的活跃中间人,还可以抵御流氓或受感染的镜像或包分发链中任何地方的其他问题.

HTTPS 确实提供了轻微的隐私优势,因为它隐藏了您下载的包。然而,被动观察者仍然可以检测您的计算机和软件包服务器之间的流量,因此他们会知道您正在下载 Debian 软件包。他们还可以很好地了解您正在从文件大小下载哪些软件包。

HTTPS 可以帮助的一个地方是引导信任,以获得已知有效的安装映像。Debian 似乎没有提供:有安装媒体的校验和,但只能通过 HTTP。

  • 好处很少?https://justi.cz/security/2019/01/22/apt-rce.html 怎么样? (2认同)

小智 9

就在最近,我遇到了我公司的 apt 存储库的问题。问题是,如果我们使用标准的 http 传输,其他任何人都可以轻松获得包。由于公司正在打包自己的专有软件并且不想与所有人共享,因此 http 传输成为一个问题。不是悲剧,而是问题。有几种方法可以限制对包的访问 - 防火墙、限制 Web 服务器级别的访问、使用 ssh 作为传输。可以在此处找到有关此主题的非常易于阅读的阅读: 限制访问您的私有 Debian 存储库

在我们的例子中,我们决定使用 https 传输 + 客户端证书认证。简而言之,只需要:

  1. 准备自签名证书、客户端和服务器(使用easy-rsa);
  2. 配置前端存储库的网络服务器仅接受 https;在 nginx 的情况下,它可能看起来像:

    server {
    
      listen 443;
    
      root /path/to/public;
      server_name secure_repo;
    
      ssl on;
      ssl_certificate /etc/nginx/ssl/server.crt;
      ssl_certificate_key /etc/nginx/ssl/server.key;
    
      ssl_session_timeout 5m;
    
      ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
      ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv3:;
    
      ssl_prefer_server_ciphers on;
      ssl_client_certificate /etc/nginx/ssl/ca.crt;
      ssl_verify_client on;
    
      location / {
         autoindex on;
      }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 将客户端证书、客户端密钥和 ca 证书放在 /etc/apt/ssl 中,如果是 Ubuntu,则将 00https 文件添加到 /etc/apt/apt.conf.d:

    Debug::Acquire::https "true"; Acquire::https::example.com { Verify-Peer "true"; Verify-Host "false"; CaInfo "/etc/apt/ssl/ca.crt"; SslCert "/etc/apt/ssl/client.crt"; SslKey "/etc/apt/ssl/client.key"; };

请记住,如果您使用的是自签名证书,那么关闭主机验证很重要:Verify-Host "false";如果不这样做,您会发现一个错误: SSL: certificate subject name (blah-blah-blah) does not match target host name 'example.com'

我们开始了,不再有对存储库的未经授权的访问。所以这是非常有用和强大的东西。

  • 感谢您的出色回答。但我认为主要问题仍然存在。HTTPS 应该真正成为通过网络传输的默认协议,尤其是 debian 包。争论不应该是为什么HTTPS,应该是为什么不? (3认同)
  • 即使使用自签名证书,使用 »Verify-Host "false";« 也是错误的。您需要让您的客户端知道(正确的)服务器证书。 (2认同)

Roy*_*ams 8

请注意,由于像这样的漏洞

https://bugs.launchpad.net/ubuntu/+source/apt/+bug/1647467

...绕过了 InRelease 签名,无论如何配置 HTTPS 可能是个好主意。

这不是一个单一的例子——许多其他默认为 HTTP 的更新系统也有签名验证失败的历史。

安全关键更新机制应同时使用 HTTPS签名验证以保持稳健。每一个都减轻了另一个的失败。