V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
pq
V2EX  ›  Linux

警惕! Ubuntu APT 源污染...

  •  
  •   pq · 2017-12-05 23:54:06 +08:00 · 9183 次点击
    这是一个创建于 2304 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    50 条回复    2017-12-08 09:27:30 +08:00
    Shura
        1
    Shura  
       2017-12-06 00:01:19 +08:00
    “由于有些用户喜欢使用 root 用户执行的 apt 命令,那么就导致恶意文件会以最高权限运行,导致服务器彻底沦陷。”,用 sudo 运行 apt 就不会了?
    besto
        2
    besto  
       2017-12-06 00:02:32 +08:00
    毛用没有。这个签名就是在本地弄的,根本不会验证邮箱。另外,一般人怎么可能去信任这种源。。。最后,不拿 root 运行 APT ?你倒是试试。。。
    gstqc
        3
    gstqc  
       2017-12-06 00:05:59 +08:00 via iPhone
    OpenPGP 标准本身就没有 CA 的概念,接受一个签名前需要自己通过可靠途径确认签名的真实性。
    wevsty
        4
    wevsty  
       2017-12-06 00:09:33 +08:00
    没什么意义,别老想搞个大新闻。
    GPG Key 本来就不是验证邮箱的,那个邮箱只是个标记而已。
    apt 验证 GPG Key 是验证 Key 的签名,并且 apt 只信任加入到信任区的 GPG Key。原文里用 apt-key 命令就是把 key 加入信任区了,你自己信任这个 key 发布的内容,apt 当然也不会报错,但是这并不代表直接劫持更新源就能随便向访问者安装软件(因为替换更新源使用的 GPG Key 是不可能被信任的)。
    pq
        5
    pq  
    OP
       2017-12-06 00:13:59 +08:00
    @gstqc 难道这文章里说的是让用户自己导入他私造的 gpg key ?我仔细看了,貌似他确实是通过官方的 keyserver 弄了一个。

    另外,让用户导入 key 并不难,你安装过 Chrome 吧?安装时它就自动把 Google 的 key 导入到信任列表了。

    唉,真不如 Fedora 的 metalink 那种分层级校验 hash 码的方式那样让人有安全感。
    pq
        6
    pq  
    OP
       2017-12-06 00:16:10 +08:00
    @wevsty 对的,这一步确实是不容易让用户中招。
    Osk
        7
    Osk  
       2017-12-06 00:17:42 +08:00 via Android
    添加 key 验证的不是邮箱地址而是 key 的指纹是否正确。添加了 apt key 指责 apt 不安全和乱装 ca 证书被中间人怪 https 不安全是一个道理啊。
    pq
        8
    pq  
    OP
       2017-12-06 00:18:15 +08:00
    @besto
    @Shura
    sudo 应该跟直接用 root 一样危险。基本上所有发行版的在线更新,都得用 root,否则没权限替换本地硬盘上的文件呀。
    pq
        9
    pq  
    OP
       2017-12-06 00:20:40 +08:00
    @Osk 嗯,所以得养成经常看看 apt-key finger 并上官网核对一下指纹的习惯。
    Shura
        10
    Shura  
       2017-12-06 00:21:08 +08:00
    @pq 你需要了解一下 gpg 的原理:http://www.ruanyifeng.com/blog/2013/07/gpg.html
    "我仔细看了,貌似他确实是通过官方的 keyserver 弄了一个。 "你说的应该是这个吧?'sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys [证书公钥 ID]"
    然而任何人都可以上传自己的公钥到公钥服务器上,而且公钥服务器的内容是同步的。
    Shura
        11
    Shura  
       2017-12-06 00:22:58 +08:00
    @pq 所以作者指责用户用 root 权限运行 apt,我很难理解。可能原文作者是 archlinux 重度患者吧。
    pq
        12
    pq  
    OP
       2017-12-06 00:33:35 +08:00
    @Shura 哦,明白了,原来是个公用服务器呀,我原来还以为只要这个服务器接受的 key 就会自动被全球 Ubuntu 用户信任呢。
    Phariel
        13
    Phariel  
       2017-12-06 00:33:41 +08:00 via Android
    逗呢 debian 的世界里不用 root 权限能不被 permission denied 的有几个?
    Osk
        14
    Osk  
       2017-12-06 00:37:41 +08:00
    @pq 还有就是,只看短 ID 也不保险: https://lwn.net/Articles/689792
    xfspace
        15
    xfspace  
       2017-12-06 00:42:57 +08:00 via Android
    “执行 sudo apt-get update,看是否更新正常,如果报错请导入证书文件,”
    这文章标题太大,用 apt-key 导入,此时用户是先知的;如果说 APT source 被污染了后,通过其他手段检查才发现,用户是属于后知。
    gstqc
        16
    gstqc  
       2017-12-06 00:47:49 +08:00 via iPhone
    @pq #12 那这不就是类似 CA 的东西了……

    举个例子,你要加一个仓库,比如是 nginx.org 的官方仓库
    那应该到 https://nginx.org 确认签名的指纹是否正确,再信任这个签名
    无脑按 Y 那谁都救不了
    pq
        17
    pq  
    OP
       2017-12-06 00:49:01 +08:00
    @Osk 呵呵,我都是直接看完整的指纹的。我对通过镜像在线更新一直没什么安全感,所以换到任何一种发行版时,都首先研究一下它的软件源保真机制,总结下来,Fedora 的 metalink hash 校验加上 rpm 本身的 gpg 签名校验双重保险,应该是最可靠的,而 deb 世界里,多数包连 gpg 签名都没有,只能靠 InRelease 的 gpg 签名校验加后续几层的 hash 校验来保障。
    pq
        18
    pq  
    OP
       2017-12-06 00:52:02 +08:00
    @xfspace 现在看来,这文章确实是哗众取宠博取关注,我没细看就转过来了,失误。。。。
    feather12315
        19
    feather12315  
       2017-12-06 01:43:35 +08:00 via Android
    这问题出现在密码分发阶段,GPG 采用的是公钥服务器方式,需要自己证实最开始的密钥的可靠性
    Showfom
        20
    Showfom  
       2017-12-06 01:59:40 +08:00 via iPhone
    @xfspace 看到这段笑死我了哈哈哈
    jimzhong
        21
    jimzhong  
       2017-12-06 02:28:41 +08:00
    这篇文章是标题党吧。有几个 Linux 用户会不检查指纹盲目导入 Key ?
    ryd994
        22
    ryd994  
       2017-12-06 02:46:08 +08:00 via Android   ❤️ 3
    傻逼啊,当整个 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 见面,或者通过信任链间接验证。
    RqPS6rhmP3Nyn3Tm
        23
    RqPS6rhmP3Nyn3Tm  
       2017-12-06 02:51:17 +08:00 via iPad
    完全不靠谱。楼主可以去了解一下 Web of trust 工作原理,这种阴谋论真的很低级
    likuku
        24
    likuku  
       2017-12-06 03:02:17 +08:00   ❤️ 1
    @jimzhong [这篇文章是标题党吧。有几个 Linux 用户会不检查指纹盲目导入 Key ?]

    除非特别重要的包 /特别重要的机器,一般情况下用户才懒得去检查指纹(与官方渠道给的指纹对比)。
    likuku
        25
    likuku  
       2017-12-06 03:04:06 +08:00
    [由于有些用户喜欢使用 root 用户执行的 apt 命令]....

    不用 root 身份,怎么用 apt-get 安装更新软件包?有着办法么? sudo 等同于取得 root 权限,这个不算。
    autoxbc
        26
    autoxbc  
       2017-12-06 03:27:24 +08:00
    主要 apt 那个 key 错误的提示一点也不友好,既没有除错方法,也没有安全提示。大多数人就是搜索一下,然后按照教程导入 key,又不都是搞安全的,谁知道 GPG 套路这么深。
    autoxbc
        27
    autoxbc  
       2017-12-06 03:44:37 +08:00
    @ryd994 #22 原理安全不代表实操无漏洞,我演示一下

    1. 光盘内置 key 保存在当前系统中,可能在升级中损坏,至少我遇到过一次

    2. key 损坏后,任何升级 /安装动作都会提示 key 校验错误

    3. 用户第一反应是换源,源出错是很常见的,换源过程中录入一个污染源

    4. 仍然无法更新,用户搜索得知需要导入 key,用户大概率不知道 GPG 是什么东西

    5. 导入 key 后正常更新,此时已经中招,整个过程十分自然
    bao3
        28
    bao3  
       2017-12-06 05:19:03 +08:00 via iPhone
    兄弟,你申请网站 ssl 证书不也邮箱,但你以为这些场合是以邮箱作为合法验证?其实邮箱在这里只是一个 flag 而已
    ryd994
        29
    ryd994  
       2017-12-06 05:40:16 +08:00 via Android   ❤️ 1
    @autoxbc 1.验证光盘是安装前步骤之一,你不做是你的事
    2.用户傻逼不能怪系统不安全
    这个问题,任何系统都无法解决。Windows 的安装光盘一样可以篡改植入 CA,一样可以劫持系统更新。或者植入管理软件,Windows 本身就支持域管理员设置 wsus。我是不是可以搞个大新闻,说 Windows 或者 Mac 都不安全?
    ryd994
        30
    ryd994  
       2017-12-06 05:41:59 +08:00 via Android
    @autoxbc Windows,请求管理员权限点一下,什么都出去了。更况且,嫌烦不开 UAC 的人多了去了。
    yingfengi
        31
    yingfengi  
       2017-12-06 08:02:57 +08:00 via Android
    就像 https 你安装莫名其妙的 CA,一个道理
    Tyanboot
        32
    Tyanboot  
       2017-12-06 08:09:59 +08:00 via Android
    @Shura Arch 也不能不用 root 跑 pacman。
    momocraft
        33
    momocraft  
       2017-12-06 08:25:03 +08:00
    随便找一个命令就敢 root 执行的用户会中任何污染, 这不是 pgp deb 或 debian 的问题.
    jyf007
        34
    jyf007  
       2017-12-06 08:39:15 +08:00
    我记得 gentoo 被入侵有一种方式是 portage 树植入木马,条件是 rsync 同步的 portage 树.我已经切换成 git 同步 https 协议的 portage 树了,现在唯一可信的地方是 ca-certification
    jasontse
        35
    jasontse  
       2017-12-06 08:59:10 +08:00 via Android
    自己挖坑自己跳,这算什么?
    Owenjia
        36
    Owenjia  
       2017-12-06 09:05:37 +08:00
    @jyf007 gentoo 是比较坑,看着 websync 同步下来几个密钥文件,但默认情况下并没有做验证……
    loading
        37
    loading  
       2017-12-06 09:09:04 +08:00
    所以一般第三方源还是谨慎,特别是要添加 key-ring 等操作。

    其实退一步说,例如 android 的 apk 下载时被劫持,然后一般用户都打开了信任未知来源,怪谁?
    loading
        38
    loading  
       2017-12-06 09:09:45 +08:00
    系统系统的安全弱点,始终是人。
    UnknownR
        39
    UnknownR  
       2017-12-06 10:05:56 +08:00
    不 root 运行 apt 会报错
    lain0
        40
    lain0  
       2017-12-06 11:34:04 +08:00
    你都手動把攻擊者的 public key 導入信任了,當然能通過包簽名檢驗。

    所以在網頁上看到指示用戶執行的命令,不要不看清楚或不明白意思就在自己機器執行了。
    pynix
        41
    pynix  
       2017-12-06 12:15:49 +08:00
    大新闻。。。
    tairan2006
        42
    tairan2006  
       2017-12-06 12:46:23 +08:00
    sudo 和 root 的权限不是一样的么…
    tywtyw2002
        43
    tywtyw2002  
       2017-12-06 12:59:07 +08:00
    这文章建立在一个基础上,添加了伪造的 gpg-key。

    但是为什么要去添加一个新的 gpg-key 呢?这算是属于钓鱼的范畴,跟漏洞有什么关系?完全是标题党。

    基本上除了一个 n 年没有升级过系统的系统,基本上没有必要去添加官方的 gpg-key 的。
    flyfishcn
        44
    flyfishcn  
       2017-12-06 13:16:16 +08:00
    @besto
    @pq
    @likuku
    @UnknownR
    @tairan2006
    原文他的意思是你目前登录的用户,如果你用 root,apt 完之后,你运行 apt 下来的软件也是 root 权限。但是如果是 sudo apt,apt 完,你不加 sudo 直接运行的话,是普通用户的权限。
    flyfishcn
        45
    flyfishcn  
       2017-12-06 13:17:34 +08:00
    @Shura 原文他的意思是你目前登录的用户,如果你用 root,apt 完之后,你运行 apt 下来的软件也是 root 权限。但是如果是 sudo apt,apt 完,你不加 sudo 直接运行的话,是普通用户的权限。
    ThatIsFine
        46
    ThatIsFine  
       2017-12-06 14:33:18 +08:00
    不加 sudo 能装的有几个?
    ryd994
        47
    ryd994  
       2017-12-06 16:35:51 +08:00 via Android
    @tywtyw2002 密钥是一直滚动的。旧密钥停用前就会保证新密钥已经部署完成。
    所以如果旧到连新密钥都不认了,那当前系统已经旧到没有升级的意义了,赶紧擦了重装吧。

    @flyfishcn 我自己私用的服务器还真就是长期 root 登录的。反正禁了密码,不担心安全问题。执行命令前多看一遍,能救命。普通用户删了 home 其实和歇菜也没区别。

    对外服务必须降权,最小暴露面原则。
    jyf007
        48
    jyf007  
       2017-12-07 10:15:57 +08:00
    @Owenjia 对,所以我用的 gentoo 都直接通过 git-https 方式同步 github 的 portage 树,再重新编译 stage3
    安全的重点变成了 app-misc/ca-certificates
    cnfzv
        49
    cnfzv  
       2017-12-07 11:56:48 +08:00
    @tywtyw2002 问个问题,有些时候更新包时提示需要导入 GPG key 是什么原因?
    iwtbauh
        50
    iwtbauh  
       2017-12-08 09:27:30 +08:00 via Android
    @pq chrome 能导入 key 是因为你安装 chrome 时就是 root 啊,deb 里有安装后自动执行的脚本,这些脚本是 Google 事先写好的,这个脚本就把 Google 的 key 导入进去了呗
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2646 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 15:49 · PVG 23:49 · LAX 08:49 · JFK 11:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.