4/21 日,Canonical 揭晓了他们最新的 Ubuntu Linux 操作系统 Ubuntu 16.04 LTS(Xenial Xerus),在这个版本中,有个重要的功能是,Ubuntu 16.04 LTS 可以同时支持 deb 和 snap 两种软件包格式。snap 软件包格式用在 Canonical 的物联网操作系统 Snappy Ubuntu Core 中。
snap 软件包格式用来设计配合 Canonical 的新一代显示服务器 Mir 协同工作,它默认用在 Ubunut Touch 移动操作系统上,支持 Ubuntu 电话,以及新的 Ubuntu 平板: BQ Aquaris M10 Ubuntu 版,以给用户提供一流的安全性。
通过在 Ubuntu 桌面版和 Ubuntu 服务器版中支持安装 snap 软件包,Canonical 在给 Ubuntu 用户及时地提供软件更新方面取得了长足进展。Mozilla 是第一个在 Ubuntu 上以 snap 软件包格式提供软件的厂商,估计今年稍晚时候就会提供 Firefox 的 snap 包。
在 X11 下 snap 软件包并不安全
据著名的 CoreOS 安全开发者及 Linux 内核贡献者 Matthew Garrett 称, Canonical 的新式 snap 软件包格式用在 X.Org 服务器(X11 Window 系统)下很不安全,而 X11 目前仍旧是 Ubuntu 16.04 LTS 的默认显示服务器。
这个问题本质上是由于 X11 的古老设计,众所周知它在安全性上很差。Matthew Garrett 制作了一个简单的 snap 软件包来演示这个问题,它可以做到从其它的 X11 软件中偷取数据,比如可以获取你在 Mozilla Firefox 浏览器中输入的内容。
“我做了一个快速的概念验证,从 git 上获取了 XEvilTeddy,安装 Snapcraft (它在 16.04 中), 用 snapcraft 制作 snap,然后运行 sudo snap install xevilteddy*.snap,接着执行 /snap/bin/xevilteddy.xteddy。这是一个可爱的泰迪熊,真萌~ 现在打开 Firefox 并输入东西,然后去看看你的终端窗口。哦,天哪,我的小秘密呢… 再开一个终端窗口,然后将输入焦点放到其上,哦,我的天,一个被劫持的命令,它被替换成一个 curl 会话,可以上传你的 SSH 私钥到鬼才知道的某个地方。”
到目前为止,snap 格式还没流行起来,特别是因为目前只有很少的软件包支持这种格式。但是这也许不久就会改变,越来越多的开发者会以 snap 格式提供他们的软件,所以 Canonical 需要为使用 X11 的 Ubuntu 的安全性做些工作。
这也是为何大多数 GNU/Linux 发行版应该尽快切换到 Wayland 或 Mir 显示服务器的另外一个原因,尤其是现在的大多数桌面环境(如 GNOME 和 KDE)都支持它们了。不过,从另外一方面说,这个 snap 的安全问题不会影响到 Ubuntu 服务器操作系统,因为它根本没有显示服务器。
我们按照 Mr. Garrett 的指导,在一个最新更新的 Ubuntu 16.04 LTS 的机器上使用 Snapcraft 创建了 xevilteddy 的 snap 包。成功的创建了 snap 并安装之后,我们确认,当你看到如下的截屏时,这表明 xevilteddy 应用可以偷取你在另外一个 X11 应用中输入的任何内容,也能够使用 curl 将你的 SSH 密钥发送到远程的站点去。