首页 > 网络安全 > 远程浏览器隔离(RBI)

远程浏览器隔离(RBI)

2020年3月8日 发表评论 阅读评论 1,840 次浏览

Web形态的应用越来越多,那么作为Web应用的客户端载体浏览器的安全威胁也尤为重要。目前已有一个针对如此场景的安全防御方案为远程浏览器隔离(RBI)解决方案。顾名思义,也就是让浏览器运行在远程云端(安全沙箱里),和本地终端隔离开来,这样即使浏览器被感染,恶意软件也无法侵害终端用户的系统。

RBI的核心功能在技术实现上没有难度,毕竟其基础技术,比如远程桌面、远程应用发布都是很成熟的,产品成功关键应该在一些非功能特性(比如TCO,安全日志,性能等)以及用户体验上。

有不少初创公司在做RBI,比如menlosecurity等,并且也有做得好而被传统安全企业收购的,比如色列安全初创企业Fireglass被赛门铁克收购。

找到一个远程浏览器隔离方案的开源代码:https://github.com/dosyago/RemoteView

从GitHub上提供的演示地址来看,RemoteView会在本地浏览器绘制一个浏览器的外框(带tab标签,地址栏,历史记录前后退键),然后在这个框框里展示用户实际打开的页面的内容,不过这个内容只是图像(利用canvas元素),也就是用户打开的页面会在远程执行渲染,而把渲染的结果图像再传到用户本端浏览器进行显示,这样即便用户打开的是一个恶意地址,那么受安全威胁的也是远程端,而本地只是显示网页渲染后的最终图像,从而达到隔离安全威胁的目的。

有几个关键点:
1,用户本地浏览器流向远程端的数据主要为用户的输入(比如要打开的网页地址),鼠标的操作等。
2,远程端到用户本地浏览器的数据主要是图像,也就是渲染后的网页图像,不会传送网页的HTML或JS源码,因此所有安全威胁都被隔离在远程端。
3,图像的传输肯定要做优化,否则体验会很不好,也就是感觉卡顿的情况。还有在本地浏览器里绘制的一个模拟浏览器(远程浏览器),提供的功能如果很少的话,也会影响体验,比如搜索功能,本地只有网页图片,要做搜索的话,比较困难。

在本地试用下这个开源:
一,测试环境
$ cat /etc/issue
Ubuntu 18.04.3 LTS \n \l
$ uname -a
Linux lenky-virtual-machine 5.0.0-27-generic #28~18.04.1-Ubuntu SMP Thu Aug 22 03:00:32 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

二,准备源码
$ wget https://codeload.github.com/dosyago/RemoteView/tar.gz/v2.0.3
$ tar xf RemoteView-2.0.3.tar.gz
$ cd RemoteView-2.0.3/
$ chmod a+x *.sh

三,准备依赖环境
$ sudo apt update && sudo apt -y upgrade
$ sudo apt-get install -y npm
$ sudo apt install -y curl git wget
$ sudo ./setup_machine.sh
$ sudo apt-get install docker docker.io containerd runc

四,直接运行官方提供镜像
直接使用docker pull下载docker镜像时会报错,先按如下方式修改使用国内源:

$ sudo vi /etc/docker/daemon.json
$ cat /etc/docker/daemon.json

{
  "registry-mirrors": ["https://registry.docker-cn.com"]
}

$ sudo systemctl stop docker
$ sudo systemctl start docker

再执行即可:
$ sudo docker pull dosyago/browsergapce:1.0

等待结束后,查看下载的镜像如下:

$ sudo docker images
[sudo] password for lenky:
REPOSITORY             TAG                 IMAGE ID            CREATED             SIZE
dosyago/browsergapce   1.0                 d46a0c2ce0ec        3 months ago        2.2GB

继续进行如下操作:

$ pwd
/home/lenky/remoteview/docker
$ wget https://raw.githubusercontent.com/dosyago/RemoteView/master/chrome.json --user-agent="Mozilla/5.0 (X11;U;Linux i686;en-US;rv:1.9.0.3) Geco/2008092416 Firefox/3.0.3" --no-check-certificate
$ sudo su -c "echo 'kernel.unprivileged_userns_clone=1' > /etc/sysctl.d/00-local-userns.conf"
$ sudo su -c "echo 'net.ipv4.ip_forward=1' > /etc/sysctl.d/01-network-ipv4.conf"
$ sudo sysctl -p
$ sudo docker run -d -p 8002:8002 --security-opt seccomp=$(pwd)/chrome.json dosyago/browsergapce:1.0
$ sudo docker ps
CONTAINER ID        IMAGE                      COMMAND                  CREATED              STATUS              PORTS                              NAMES
da763f696660        dosyago/browsergapce:1.0   "docker-entrypoint.s…"   About a minute ago   Up About a minute   5002/tcp, 0.0.0.0:8002->8002/tcp   blissful_sinoussi

表示docker已经成功运行,那么此时这台Ubuntu 18.04就成了“远程端”。
找一台Windows PC,在谷歌浏览器里访问Ubuntu 18.04提供的浏览器隔离服务(其中192.168.214.140为Ubuntu 18.04的IP地址):

http://192.168.214.140:8002/

可以看到在谷歌浏览器里嵌入了“远程浏览器”,在远程浏览器输入www.baidu.com就可以实现本地PC对百度的隔离访问。

五,源码编译获得镜像
略…

六,源码分析
粗略看了一下,主要源码全部都是JavaScript实现(当然还有HTML/CSS等),估计性能过不去,全新模拟浏览器的方案工作量太大了,体验也难以做好,感觉这条技术路有点颠。直觉上还是认为远程应用发布技术会更靠谱一点,待进一步分析。

转载请保留地址:http://www.lenky.info/archives/2020/03/2712http://lenky.info/?p=2712


备注:如无特殊说明,文章内容均出自Lenky个人的真实理解而并非存心妄自揣测来故意愚人耳目。由于个人水平有限,虽力求内容正确无误,但仍然难免出错,请勿见怪,如果可以则请留言告之,并欢迎来讨论。另外值得说明的是,Lenky的部分文章以及部分内容参考借鉴了网络上各位网友的热心分享,特别是一些带有完全参考的文章,其后附带的链接内容也许更直接、更丰富,而我只是做了一下归纳&转述,在此也一并表示感谢。关于本站的所有技术文章,欢迎转载,但请遵从CC创作共享协议,而一些私人性质较强的心情随笔,建议不要转载。

法律:根据最新颁布的《信息网络传播权保护条例》,如果您认为本文章的任何内容侵犯了您的权利,请以Email或书面等方式告知,本站将及时删除相关内容或链接。

  1. Bin
    2020年3月18日22:14 | #1

    服务端收到客户端的url,打开chrome,生成网页,这些一帧帧的图片或者视频流,是如何被websock获取传回客户端的?
    browsergapce docker是个黑盒子吧,不知道里面实现的原理。

  1. 本文目前尚无任何 trackbacks 和 pingbacks.