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

警惕! Ubuntu APT 源污染...

  •  
  •   pq 2017 年 12 月 5 日 9893 次点击
    这是一个创建于 2965 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    唉,真不如 Fedora 的 metalink 那种分层级校验 hash 码的方式那样让人有安全感。
    pq
        6
    pq  
    OP
       2017 年 12 月 6 日
    @wevsty 对的,这一步确实是不容易让用户中招。
    Osk
        7
    Osk  
       2017 年 12 月 6 日 via Android
    添加 key 验证的不是邮箱地址而是 key 的指纹是否正确。添加了 apt key 指责 apt 不安全和乱装 ca 证书被中间人怪 https 不安全是一个道理啊。
    pq
        8
    pq  
    OP
       2017 年 12 月 6 日
    @besto
    @Shura
    sudo 应该跟直接用 root 一样危险。基本上所有发行版的在线更新,都得用 root,否则没权限替换本地硬盘上的文件呀。
    pq
        9
    pq  
    OP
       2017 年 12 月 6 日
    @Osk 嗯,所以得养成经常看看 apt-key finger 并上官网核对一下指纹的习惯。
    Shura
        10
    Shura  
       2017 年 12 月 6 日
    @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 月 6 日
    @pq 所以作者指责用户用 root 权限运行 apt,我很难理解。可能原文作者是 archlinux 重度患者吧。
    pq
        12
    pq  
    OP
       2017 年 12 月 6 日
    @Shura 哦,明白了,原来是个公用服务器呀,我原来还以为只要这个服务器接受的 key 就会自动被全球 Ubuntu 用户信任呢。
    Phariel
        13
    Phariel  
       2017 年 12 月 6 日 via Android
    逗呢 debian 的世界里不用 root 权限能不被 permission denied 的有几个?
    Osk
        14
    Osk  
       2017 年 12 月 6 日
    @pq 还有就是,只看短 ID 也不保险: https://lwn.net/Articles/689792
    xfspace
        15
    xfspace  
       2017 年 12 月 6 日 via Android
    “执行 sudo apt-get update,看是否更新正常,如果报错请导入证书文件,”
    这文章标题太大,用 apt-key 导入,此时用户是先知的;如果说 APT source 被污染了后,通过其他手段检查才发现,用户是属于后知。
    0ZXYDDu796nVCFxq
        16
    0ZXYDDu796nVCFxq  
       2017 年 12 月 6 日 via iPhone
    @pq #12 那这不就是类似 CA 的东西了……

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

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

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

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

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

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

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

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

    其实退一步说,例如 android 的 apk 下载时被劫持,然后一般用户都打开了信任未知来源,怪谁?
    loading
        38
    loading  
       2017 年 12 月 6 日
    系统系统的安全弱点,始终是人。
    UnknownR
        39
    UnknownR  
       2017 年 12 月 6 日
    不 root 运行 apt 会报错
    lain0
        40
    lain0  
       2017 年 12 月 6 日
    你都手把攻者的 public key 入信任了,然能通包名。

    所以在上看到指示用行的命令,不要不看清楚或不明白意思就在自己器行了。
    pynix
        41
    pynix  
       2017 年 12 月 6 日
    大新闻。。。
    tairan2006
        42
    tairan2006  
       2017 年 12 月 6 日
    sudo 和 root 的权限不是一样的么…
        43
    tywtyw2002  
       2017 年 12 月 6 日
    这文章建立在一个基础上,添加了伪造的 gpg-key。

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

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

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

    对外服务必须降权,最小暴露面原则。
    jyf007
        48
    jyf007  
       2017 年 12 月 7 日
    @Owenjia 对,所以我用的 gentoo 都直接通过 git-https 方式同步 github 的 portage 树,再重新编译 stage3
    安全的重点变成了 app-misc/ca-certificates
    cnfzv
        49
    cnfzv  
       2017 年 12 月 7 日
    @tywtyw2002 问个问题,有些时候更新包时提示需要导入 GPG key 是什么原因?
    iwtbauh
        50
    iwtbauh  
       2017 年 12 月 8 日 via Android
    @pq chrome 能导入 key 是因为你安装 chrome 时就是 root 啊,deb 里有安装后自动执行的脚本,这些脚本是 Google 事先写好的,这个脚本就把 Google 的 key 导入进去了呗
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1450 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 16:52 PVG 00:52 LAX 08:52 JFK 11:52
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86