技术解析

警惕! Ubuntu APT 源污染...
0
2021-06-28 05:50:25
idczone

https://paper.seebug.org/270/

你们觉得这篇文章说得靠谱么?我对其中关键的一环持有怀疑: 第三阶段里的

通过对 gpg 进行了解,发现 gpg 可以进行签名伪造,比如 ubuntu 官方的签名邮箱为 [email protected] ,那么我们也可以使用官方签名的邮箱重新进行申请,获得一个签名 key。

这个没太看懂,究竟是伪造一个官方邮箱去 keyserver 申请,还是在本地伪造?官方会有这么明显的漏洞?


“由于有些用户喜欢使用 root 用户执行的 apt 命令,那么就导致恶意文件会以最高权限运行,导致服务器彻底沦陷。”,用 sudo 运行 apt 就不会了?

毛用没有。这个签名就是在本地弄的,根本不会验证邮箱。另外,一般人怎么可能去信任这种源。。。最后,不拿 root 运行 APT ?你倒是试试。。。

OpenPGP 标准本身就没有 CA 的概念,接受一个签名前需要自己通过可靠途径确认签名的真实性。

没什么意义,别老想搞个大新闻。
GPG Key 本来就不是验证邮箱的,那个邮箱只是个标记而已。
apt 验证 GPG Key 是验证 Key 的签名,并且 apt 只信任加入到信任区的 GPG Key。原文里用 apt-key 命令就是把 key 加入信任区了,你自己信任这个 key 发布的内容,apt 当然也不会报错,但是这并不代表直接劫持更新源就能随便向访问者安装软件(因为替换更新源使用的 GPG Key 是不可能被信任的)。

难道这文章里说的是让用户自己导入他私造的 gpg key ?我仔细看了,貌似他确实是通过官方的 keyserver 弄了一个。
另外,让用户导入 key 并不难,你安装过 Chrome 吧?安装时它就自动把 Google 的 key 导入到信任列表了。
唉,真不如 Fedora 的 metalink 那种分层级校验 hash 码的方式那样让人有安全感。

对的,这一步确实是不容易让用户中招。

添加 key 验证的不是邮箱地址而是 key 的指纹是否正确。添加了 apt key 指责 apt 不安全和乱装 ca 证书被中间人怪 https 不安全是一个道理啊。



sudo 应该跟直接用 root 一样危险。基本上所有发行版的在线更新,都得用 root,否则没权限替换本地硬盘上的文件呀。

嗯,所以得养成经常看看 apt-key finger 并上官网核对一下指纹的习惯。

你需要了解一下 gpg 的原理:http://www.ruanyifeng.com/blog/2013/07/gpg.html
"我仔细看了,貌似他确实是通过官方的 keyserver 弄了一个。 "你说的应该是这个吧?'sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys [证书公钥 ID]"
然而任何人都可以上传自己的公钥到公钥服务器上,而且公钥服务器的内容是同步的。

所以作者指责用户用 root 权限运行 apt,我很难理解。可能原文作者是 archlinux 重度患者吧。

哦,明白了,原来是个公用服务器呀,我原来还以为只要这个服务器接受的 key 就会自动被全球 Ubuntu 用户信任呢。

逗呢 debian 的世界里不用 root 权限能不被 permission denied 的有几个?

还有就是,只看短 ID 也不保险: https://lwn.net/Articles/689792

“执行 sudo apt-get update,看是否更新正常,如果报错请导入证书文件,”
这文章标题太大,用 apt-key 导入,此时用户是先知的;如果说 APT source 被污染了后,通过其他手段检查才发现,用户是属于后知。

那这不就是类似 CA 的东西了……
举个例子,你要加一个仓库,比如是 nginx.org 的官方仓库
那应该到 https://nginx.org 确认签名的指纹是否正确,再信任这个签名
无脑按 Y 那谁都救不了

呵呵,我都是直接看完整的指纹的。我对通过镜像在线更新一直没什么安全感,所以换到任何一种发行版时,都首先研究一下它的软件源保真机制,总结下来,Fedora 的 metalink hash 校验加上 rpm 本身的 gpg 签名校验双重保险,应该是最可靠的,而 deb 世界里,多数包连 gpg 签名都没有,只能靠 InRelease 的 gpg 签名校验加后续几层的 hash 校验来保障。

现在看来,这文章确实是哗众取宠博取关注,我没细看就转过来了,失误。。。。

这问题出现在密码分发阶段,GPG 采用的是公钥服务器方式,需要自己证实最开始的密钥的可靠性

看到这段笑死我了哈哈哈

这篇文章是标题党吧。有几个 Linux 用户会不检查指纹盲目导入 Key ?

傻逼啊,当整个 Linux 社区都是傻逼么?
Ubuntu 用于验证 deb 的 key 不是从网上接收的,是直接写死在光盘里,后期通过 dpkg-sig 保持更新
所以验证安装光盘很重要
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys [证书公钥 ID]
嗯嗯,所以要怎么让受害者运行这条命令呢?我要有能力让别人运行这条命令,我干嘛不直接运行 sudo dd if=/dev/zero of=/dev/sda 呢?
明显就是没用过 gpg 的傻逼。keyserver 就是个公用网盘,可以直接下载证书文件。可它本来就不保证证书是真的啊。验证证书需要 in-person 见面,或者通过信任链间接验证。

完全不靠谱。楼主可以去了解一下 Web of trust 工作原理,这种阴谋论真的很低级

[这篇文章是标题党吧。有几个 Linux 用户会不检查指纹盲目导入 Key ?]
除非特别重要的包 /特别重要的机器,一般情况下用户才懒得去检查指纹(与官方渠道给的指纹对比)。

[由于有些用户喜欢使用 root 用户执行的 apt 命令]....
不用 root 身份,怎么用 apt-get 安装更新软件包?有着办法么? sudo 等同于取得 root 权限,这个不算。

主要 apt 那个 key 错误的提示一点也不友好,既没有除错方法,也没有安全提示。大多数人就是搜索一下,然后按照教程导入 key,又不都是搞安全的,谁知道 GPG 套路这么深。

原理安全不代表实操无漏洞,我演示一下
1. 光盘内置 key 保存在当前系统中,可能在升级中损坏,至少我遇到过一次
2. key 损坏后,任何升级 /安装动作都会提示 key 校验错误
3. 用户第一反应是换源,源出错是很常见的,换源过程中录入一个污染源
4. 仍然无法更新,用户搜索得知需要导入 key,用户大概率不知道 GPG 是什么东西
5. 导入 key 后正常更新,此时已经中招,整个过程十分自然

兄弟,你申请网站 ssl 证书不也邮箱,但你以为这些场合是以邮箱作为合法验证?其实邮箱在这里只是一个 flag 而已

1.验证光盘是安装前步骤之一,你不做是你的事
2.用户傻逼不能怪系统不安全
这个问题,任何系统都无法解决。Windows 的安装光盘一样可以篡改植入 CA,一样可以劫持系统更新。或者植入管理软件,Windows 本身就支持域管理员设置 wsus。我是不是可以搞个大新闻,说 Windows 或者 Mac 都不安全?

Windows,请求管理员权限点一下,什么都出去了。更况且,嫌烦不开 UAC 的人多了去了。

就像 https 你安装莫名其妙的 CA,一个道理

Arch 也不能不用 root 跑 pacman。

随便找一个命令就敢 root 执行的用户会中任何污染, 这不是 pgp deb 或 debian 的问题.

我记得 gentoo 被入侵有一种方式是 portage 树植入木马,条件是 rsync 同步的 portage 树.我已经切换成 git 同步 https 协议的 portage 树了,现在唯一可信的地方是 ca-certification

自己挖坑自己跳,这算什么?

gentoo 是比较坑,看着 websync 同步下来几个密钥文件,但默认情况下并没有做验证……

所以一般第三方源还是谨慎,特别是要添加 key-ring 等操作。
其实退一步说,例如 android 的 apk 下载时被劫持,然后一般用户都打开了信任未知来源,怪谁?

系统系统的安全弱点,始终是人。

不 root 运行 apt 会报错

你都手動把攻擊者的 public key 導入信任了,當然能通過包簽名檢驗。
所以在網頁上看到指示用戶執行的命令,不要不看清楚或不明白意思就在自己機器執行了。

大新闻。。。

sudo 和 root 的权限不是一样的么…

这文章建立在一个基础上,添加了伪造的 gpg-key。
但是为什么要去添加一个新的 gpg-key 呢?这算是属于钓鱼的范畴,跟漏洞有什么关系?完全是标题党。
基本上除了一个 n 年没有升级过系统的系统,基本上没有必要去添加官方的 gpg-key 的。






原文他的意思是你目前登录的用户,如果你用 root,apt 完之后,你运行 apt 下来的软件也是 root 权限。但是如果是 sudo apt,apt 完,你不加 sudo 直接运行的话,是普通用户的权限。

原文他的意思是你目前登录的用户,如果你用 root,apt 完之后,你运行 apt 下来的软件也是 root 权限。但是如果是 sudo apt,apt 完,你不加 sudo 直接运行的话,是普通用户的权限。

不加 sudo 能装的有几个?

密钥是一直滚动的。旧密钥停用前就会保证新密钥已经部署完成。
所以如果旧到连新密钥都不认了,那当前系统已经旧到没有升级的意义了,赶紧擦了重装吧。
我自己私用的服务器还真就是长期 root 登录的。反正禁了密码,不担心安全问题。执行命令前多看一遍,能救命。普通用户删了 home 其实和歇菜也没区别。
对外服务必须降权,最小暴露面原则。

对,所以我用的 gentoo 都直接通过 git-https 方式同步 github 的 portage 树,再重新编译 stage3
安全的重点变成了 app-misc/ca-certificates

问个问题,有些时候更新包时提示需要导入 GPG key 是什么原因?

chrome 能导入 key 是因为你安装 chrome 时就是 root 啊,deb 里有安装后自动执行的脚本,这些脚本是 Google 事先写好的,这个脚本就把 Google 的 key 导入进去了呗

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服