本文描述及介绍了一些常见的Firefox浏览器的沙盒设置,可作为平时闲暇时操作的参考。
2015年8月,安全专家Cody Crews 告知了Mozilla,称发现一个俄罗斯的新闻网站被植入恶意广告,而其中经研究是利用Firefox的PDF Viewer上的漏洞实施攻击的。该漏洞的 payload 会搜索本地文件系统的敏感文件,并将其上传至攻击者的服务器端。而针对其中的上传行为,事实上Firefox也有相应的技术进行防范。其中Firejail沙盒的默认配置会阻断.ssh, .gnupg以及.filezilla对/home目录下所有文件的访问权限。而更高级的设置则可以阻断所有程序对文件的访问。
接下来,也让我们来了解下Firejail沙盒的相关操作吧!
开启 Firefox
首先,可以通过下面命令来开启沙盒,
$ firejail firefox
温馨提醒: 在默认设置中,因为Firefox是使用单一进程来处理多个浏览器窗口。所以如果用户已经在运行Firefox,我们需要使用 -no-remote 命令选项,否则最后只能有一个新的标签或一个新的窗口连接到现有的浏览器进程,具体操作如下:
$ firejail firefox -no-remote
文件系统容器
沙盒中包含了一个文件系统容器,该容器的启用状态会和沙盒保持同步,即会随着沙盒的开启而启用,随着沙盒的关闭而关闭。同时,该文件系统容器也是基于用户计算机本地的文件系统。所以也强烈地推荐用户能定期地升级操作系统。在这种情况下,沙盒只允许Firefox访问“一小组”文件和目录,而所有用户的私人信息也会被移除。下图为将home路径下的部分文件和目录设置为白名单。
关于其余文件系统中的目录或者文件的默认访问权限如下:
•/boot – 黑名单(不允许任何操作) •/bin – 只读 •/etc – 只读; 其中,/etc/passwd以及/etc/group只允许当前用户进行操作 •/home – 只显示給当前用户 •/lib, /lib32, /lib64 –只读 •/proc, /sys –挂起并映射到新的PID 命名空间 •/sbin – 黑名单 •/selinux – 黑名单 •/usr – 只读; 其中,/usr/sbin 为 黑名单 •/var – 只读;
同时文件系统中的密码文件,密钥以及开发工具也会从沙盒中移除。如果 Firefox尝试访问一个黑名单文件,针对这种事件,沙盒将会生成日志信息传递到 syslog中。日志样例如下,
安全过滤器
以下的安全过滤器会被默认开启,这些安全过滤器的作用在于减少内核攻击面,并保护文件系统容器的安全性。主要有以下安全过滤机制:
1、seccomp-bpf(BSD Packet Filter),是一种用于Unix内核网络数据包的过滤机制,支持32/64位。它能使一个进程进入到一种“安全”运行模式,该模式下的进程只能调用4种系统调用(system calls),即read(), write(), exit()和sigreturn(),否则进程便会被终止; 2、protocol,这个过滤机制会检查socket系统调用的第一次冲突。它支持 IPv4, IPv6, UNIX 及 netlink; 3、noroot user namespace ,只允许为当前用户分配一个命名空间; 4、capabilities,沙盒会屏蔽Linux的所有性能,对root权限用户在沙盒中的操作进行限制。
当有冲突出现,seccomp 会根据配置的默认规则,强制关闭浏览器进程。同时将日志信息传递給syslog。具体日志信息如下,
到这里,对于大部分用户来说,默认的“firejail firefox”设置其实已经足够了。接下来,将分享一些特定的应用场景。
高安全度设置
一般来说,比如去访问银行帐户或任何其他涉及敏感私人信息的网站之前,可以启用该配置。该应用场景是在用户访问受信任的网站,但并不信任安装在浏览器中的插件的情况下使用。我们可以通过使用 –private 命令,选择恢复浏览器默认出厂配置,之后我们也可以看到被清空了的home目录。
此外,我们还需要关注我们的DNS设置,因为目前家用路由器安全性较低,而最常见的路由攻击方法是重配置DNS并将用户的流量重定向到一个假冒的银行网站。那么针对这种情况,我们可以通过使用 firejail中的 –dns 命令来指定沙盒的DNS配置:具体命令如下,
$ firejail --private --dns=8.8.8.8 --dns=8.8.4.4 firefox -no-remote
在这里我们也需要增加-no-remote 命令来避免浏览器遭关闭。
工作设置
在这个设置中,我们在/home/username/work目录下,进行日常的工作,邮件发送和相关的网页浏览,可通过以下命令实现,
$ firejail --private=/home/username/work thunderbird & $ firejail --private=/home/username/work firefox -no-remote &
Mozilla的Thunderbird以及Firefox会将~/work路径识别为用户的home目录。该配置即使沙盒关闭仍将维持着。
网络设置
假设eth0是主要的以太网接口,通过以下命令,我们将创建一个新的TCP/IP堆栈,并将之连接到主机以太网络,然后我们开启下浏览器。
$ firejail --net=eth0 firefox
以下为在沙盒中网络命名空间的具体实现方式,
Firejail 通过以下命令,对网络进行ARP扫描,获取到一个新的IP地址。
$ firejail --net=eth0 --ip=192.168.1.207 firefox
提醒: Ubuntu 中,在主机网络空间中运行本地的DNS服务器。该服务器在沙盒中是不可见的。所以需要使用–dns 命令去配置一个额外的DNS服务器,具体命令如下,
$ firejail --net=eth0 --dns=8.8.8.8 firefox
防火墙机制设置
在默认情况下,如果一个网络命名空间被请求,Firejail将会为定期的网络浏览行为特别配置一个网络过滤器。这是一个定期iptable过滤器。我们能够对这个过滤器进行定义。下面命令的目的是禁止对本地网络的访问,
$ firejail --net=eth0 --netfilter=/etc/firejail/nolocal.net firefox
流量整形
网络带宽作为一种成本较高的消耗性资源,被分享給多个运行在系统上的沙盒。而流量整形可通过控制沙盒中数据流量的输入输出来提高网络性能。Firejail,基于 Linux tc 命令,实现了一个简单的限制流量速度功能。该整形功能运行于沙盒层面。具体的设置命令如下,
$ firejail --name=browser --net=eth0 firefox & $ firejail --bandwidth=browser set eth0 80 20
在这个例子中,我们设定了一个带宽为每秒80M的接收端和一个带宽为每秒20M的发送端。当然,当沙盒正在运行时,我们也可以改变甚至重置上述的值,
$ firejail --bandwidth=browser set eth0 40 10 $ firejail --bandwidth=browser clear eth0
* 参考来源: firefox-guide ,FB小编troy编译,转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)