使用 X11 显示服务器的Ubuntu不能保证Snap包的安全
CoreOS的安全研究人员,Linux内核开发贡献者Matthew Garrett发表文章说:使用 X11 显示服务器的Ubuntu不能保证Snap包的安全。
Ubuntu 16.04于4月21日发布,其中的一个亮点是Snap包格式。Snap让上游开发者更加方便地向Ubuntu发布新版本软件。Snap包自带相关依赖包,并且能自行升级到新版本,不需依赖apt-get包管理器升级。Snap包在沙盒环境中运行,不能窃取用户的数据。
这是Canonical的官方说法。如果你用的是Mir显示服务器,那么这些说法是正确的,Snap确实加固了安全。但是Ubuntu 16.04桌面版的显示服务器默认是X11。X11老旧的设计很不安全,这是众所周知的。Snap软件包可以访问其他X11软件的数据并发送到其他计算机。实际上在X11显示服务器环境中,任何程序都能接收其他程序的按键数据。
Mir和Wayland显示服务器都没有X11的安全漏洞。和Snap类似的一个项目是Gnome的xdg-app,同样是为了让应用程序在沙盒环境中运行,但xdg-app不支持X11,只支持Wayland,因为X11存在先天性的安全隐患。
为了证明他的观点,Matthew Garrett在Github写了一个程序,证明snap包在X11环境下是可以访问用户数据的。读者若有兴趣,可以在虚拟机中安装Ubuntu 16.04,按照下面的步骤测试。
首先在Ubuntu 16.04安装git
sudo apt-get install git
克隆Matthew Garrett的Github仓库
git clone https://github.com/mjg59/xevilteddy
cd进入新创建的xevilteddy目录。
cd xevilteddy/
安装snapcraft
sudo apt-get install snapcraft
安装libxtst-dev
sudo apt-get install libxtst-dev
制作snap包,在当前目录下会生成一个xevilteddy_0.1.snap文件。
snapcraft snap
安装生成的snap包。
sudo snap install xevilteddy_0.1*.snap
运行这个snap程序。
/snap/bin/xevilteddy.xteddy
Matthew Garrett说,运行上面这条命令后会出现一只泰迪熊并记录Firefox浏览器里的键盘敲击。但是我在测试中并没有看见泰迪熊,而是出现一条错误消息: bad system call,中文意思是错误的系统调用。
我在Firefox里输入文字后,终端里也没有显示我的键盘敲击记录。貌似Matthew Garrett的这个小泰迪熊程序有bug。但X window系统的确是不安全的。
Ubuntu服务器版默认没有X11显示服务器,所以Snap包对Ubuntu服务器没有安全威胁。