跳转到主要内容

使用Wine和bwrap/bubblewrap隔离运行Windows应用程序的命令行工具

项目描述

pre-commit Run the test suite Run pre-commit

sandwine_threat_model.png

什么是沙鸟酒?

沙鸟酒 是一个命令行工具,可以在GNU/Linux上运行Windows应用程序,它提供的隔离性比原始的 Wine 更好,比原始的 bubblewrap 更方便。它 使用 Wine 和 bubblewrap (>=0.8.0),并不取代它们。 沙鸟酒 是用Python 3编写的自由软件,并受“GPL v3或更高版本”许可证的许可。

安装

# pip3 install sandwine

用法示例

安装Winamp 5.66:没有网络,没有X11,没有声音,没有访问 ~/* 文件的权利

# cd ~/Downloads/
# sha256sum -c <(echo 'ac70a0c8a2928c91400b9ac3774b331f1d700f3486bab674dbd09da6b31fe130  winamp566_full_en-us.exe')
# WINEDEBUG=-all sandwine --dotwine winamp/:rw ./winamp566_full_en-us.exe /S /D='C:\Program' 'Files' '(x86)\Winamp' '5.66'

(/D='C:\Program' 'Files' '(x86)\Winamp' '5.66' 中的奇怪引号是NSIS的 文档行为。)

运行已安装的Winamp:带有声音,带有嵌套的X11,没有网络,没有 ~/* 文件访问权利

# sandwine --pulseaudio --x11 --dotwine winamp/:rw --pass ~/Music/:ro --configure -- winamp

参数 --configure 将在Winamp之前调用 winecfg,这样您就有机会取消这两个复选框

  • 图形:
    • 允许窗口管理器 *装饰* 窗口
    • 允许窗口管理器 *控制* 窗口

如果Winamp在显示主窗口后立即崩溃,请再次运行它,这里有一个Wine错误在工作。

运行Geiss屏保:带声音,带主机X11(小心!),无网络,无~/*文件访问

sandwine --host-x11-danger-danger --pulseaudio --retry -- ./geiss.scr /S

--host-x11-danger-danger使sandwine与主机X11服务器通信,这将暴露您于键盘记录器之下,因此请在使用--host-x11-danger-danger之前重新审视您的威胁模型。

--retry用于在Wine环境中由于图形问题而持续崩溃的程序第二次启动,但不是第一次。可能是Wine的一个错误,需要更多调查。

PS:Geiss屏保的GitHub主页在https://github.com/geissomatik/geiss

运行wget:有网络,无X11,无声音,无访问~/*文件权限

# sandwine --network --no-wine -- wget -S -O/dev/null https://blog.hartwork.org/

参数--no-wine主要用于调试,但在此处需要用来调用非Wine wget。

内部机制

sandwine旨在保护那些

  • 通过/到互联网读取和泄露个人文件的应用程序
  • 从其他运行中的应用程序中读取和泄露按键(相关文章
  • 修改/破坏个人文件
  • 修改/破坏系统文件

为了实现这一点,默认情况下启动的应用程序

  • ${HOME}和/或/home/中看不到任何文件(除非您为相关目录传递了--pass PATH:{ro,rw})。
  • 无法访问互联网(除非您传递了--network)。
  • 无法访问您的本地X11服务器(除非您启用了某种形式的X11集成,理想情况下是嵌套X11)。
  • 无法访问您的声卡。

那么默认情况下与应用程序共享了什么?

默认情况下暴露了什么?

文件

路径 内容
/ 新的tmpfs
/bin 只读绑定挂载
/dev 新的devtmpfs
/dev/dri 带设备访问的读写绑定挂载
/etc 只读绑定挂载
${HOME} 新的tmpfs
${HOME}/.wine 新的tmpfs
/lib 只读绑定挂载
/lib32 只读绑定挂载
/lib64 只读绑定挂载
/proc 新的procfs
/sys 只读绑定挂载
/tmp 新的tmpfs
/usr 只读绑定挂载

环境变量

  • ${DISPLAY}
  • ${HOME}
  • ${HOSTNAME}(带随机的12位十六进制值)
  • ${PATH}(已移除已知不可用的条目)
  • ${TERM}
  • ${USER}

sandwine的功能包括

  • 侧重于安全性、可用性和透明度
  • 通过以下方式提供嵌套X11的支持
    • X2Go nxagent(无缝)
    • Xephyr
    • Xnest
    • Xpra(实验性,小心!)
    • Xvfb(不可见)
  • 支持PulseAudio
  • 由以下提供对/etc/resolv.conf的支持
    • NetworkManager
    • systemd-resolved

威胁模型和已知限制

  • 如果您的生命取决于沙箱,请考虑使用虚拟机而不是sandwine,例如,因为您的用户名已暴露给运行中的应用程序,并且根据您的威胁模型,这可能已经足够了。
  • sandwine不适用于已知恶意软件、病毒和恶意软件。
  • sandwine尚未接受任何已知的外部安全审计。
  • sandwine依赖于bubblewrap来提供其安全性,因此其安全性只能与bubblewrap一样。
  • sandwine不会限制应用程序可以执行的系统调用集合。bubblewrap支持--seccomp--add-seccomp-fd参数以进一步限制这一点,但sandwine目前还没有使用它们。
  • sandwine不会限制应用程序使用大量RAM、CPU时间或磁盘空间。如果您关心的是拒绝服务,您需要超越sandwine的保护。
  • 沙丁鱼依赖在共享只读位置的合理文件权限。如果您在例如 /etc 目录中有包含凭证但被无特权用户可读的文件,沙丁鱼将不会采取任何措施阻止该读取访问。
  • 如果将要运行的Windows应用程序期望GNU/Linux环境并且包含 Linux内核漏洞利用 代码,那么该漏洞利用不太可能被沙丁鱼阻止。
  • 如果您手动允许沙箱中的应用程序与未沙箱化的应用程序通信,并且后者为前者执行命令,那么沙箱无法防止权限提升。想想像Docker守护进程那样的模型,任何人都可以与Docker守护进程通信,从而成为root用户。如果您使用沙丁鱼与类似的东西,沙丁鱼将会有问题。
  • 启动时间低于200毫秒不是一个目标。

报告漏洞

如果您认为您在沙丁鱼中发现了漏洞,请通过电子邮件联系我们,以便我们可以进行更深入的检查,并协调披露


Sebastian Pipping,柏林,2023

项目详情


下载文件

下载您平台上的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分发

sandwine-4.1.0.tar.gz (27.6 kB 查看哈希值)

上传时间

构建分发

sandwine-4.1.0-py3-none-any.whl (26.6 kB 查看哈希值)

上传时间 Python 3

支持者