使用Wine和bwrap/bubblewrap隔离运行Windows应用程序的命令行工具
项目描述
什么是沙鸟酒?
沙鸟酒 是一个命令行工具,可以在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
项目详情
下载文件
下载您平台上的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源分发
构建分发
沙丁鱼-4.1.0.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 3c4ed000418bb0a4aac710f55b42912dd778d29fd78c29bd4613f7f8458e7dd3 |
|
MD5 | 1c8dbfcbebdb1fe7e9abf2b5e42e5c1b |
|
BLAKE2b-256 | 3d9929d44b99c2dafa695bbd3d30559dab79fa76e85efa624fe94f726e4ebbde |
沙丁鱼-4.1.0-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | f6c200a0a2c8801551b0044ab489708071fac1119d012b09a7134645f28663cf |
|
MD5 | 99017e0223152d04ca6f90aff71d208c |
|
BLAKE2b-256 | eaddb19d4c350b2b53595b99a3417c9a293e1afc14ac5c35e35490b684bd9b7f |