快捷搜索:  网络  渗透  后门  CVE  扫描  木马  黑客  as

普通用户借助docker容器提权思路分享

随着docker越来越流行,很多公司内部linux机器上docker成了标配。

timg.jpeg

免sudo使用docker

默认情形下使用docker必须要有sudo权限,对于一台机器多用户使用,往往很多用户只有普通权限,怎么样保障普通用户也能顺利使用Docker呢?

这一点想必难不到人人,只要要治理员将需要使用docker的用户添加到docker用户组(装置docker后默认会创建该组)中,用户重新登录机器即可免sudo使用docker了。

docker容器内用户权限不受限

我们知道,用户创建一个docker容器后,容器内默认是root账户,在不需要加sudo的情形下可以任意更改容器内的设置。

正常情形下,这类模式既可以保障一台机器被很多普通用户使用,通过docker容器的隔离,相互之前互不影响;也给用户在容器内开放了足量的权限保障用户可以正常装置软件,修改容器设置等操作。

docker文件映照方便容器内外文件同享

在我们创建容器的时辰,工控黑客 ,docker提供了一个-v选项,提供用户将容器外的host目录映照进容器内,方便的进行容器内外的文件同享。

然而便利却是有了,但潜伏了危害也是可想而知。

结合上面的两点便利,笔者想到一种普通用户借助docker突破权限的制约,达到内陆提权的目的。参见下图:

22.png

提权解读

初始情形下这里host上的test用户是非sudo组用户,只拥有普通权限。为了使用docker,已提前通过治理员将test用户加入docker用户组。

起首我们借助任意一个docker镜像创建一个容器:

docker run -it --rm xxx /bin/bash    #常规使用
docker run -it --rm -v /etc:/etc xxx /bin/bash    #异常使用

这里最症结的一点就是-v选项的参数/etc:/etc

我们知道linux机器上的内陆用户信息首要记录在/etc/目录下,譬如两个常见文件/etc/passwd以及/etc/group两个文件分别记录了用户基本属性与用户分组信息。

正常情形下创建的容器,内部也会有/etc目录,容器内部的用户信息也是记录在该目录。

然而我这里奇奥的将host上的/etc目录直接映照进容器,从而笼盖了容器内的/etc目录。再加上容器内用户默认是root,拥有超级治理员权限,如上图中,通过容器内的root用户在容器内新加了一个用户test1:adduser test1,并赋予该用户sudo权限:usermod -aG sudo test1

至此,docker容器的作用已结束,Ctrl+D退出容器归到host,通过cat /etc/passwd查看一下内陆用户基本属性,想必人人也能猜出这么做会出现什么有趣的征象。图中我没有查看,而是直接su test1,顺利切换到在容器内添加的用户,也就是说在容器内添加的用户实际上也添加到了host上。通过id命令查看该用户也被同步加入到了sudo用户组。

实在到了这一步已经达到了提权的目的,通过普通的test用户借助docker容器成功创建了一个具有sudo权限的用户test1。图中只是增添了一步,借助test1将test也加入sudo用户组,实在结果同样。

当然这里也能够不用增添test1用户,直接在容器内将test用户加入sudo用户组,因为此时test用户对于容器也是可见,也是可以直接操作其所属群组,以下图所示:

1525446808925.png

最后在host上也能够看到test已经被加入sudo用户组了。此时我没有效id命令查看的一个缘故起因是,linux的shell并没有自动更新当前用户信息,可以退出Terminal重新进入。

注:此时要是没有重新连接,test用户照样没法使用sudo命令。

问题影响

在这类多用户借助docker共用一台机器的情形下,普通用户可以轻松的借助docker抬举为sudo用户,从而可以进行任意修改体系设置等种种恶意操作。

以上是内陆用户的损坏还不是很显然,毕竟是公司内部用户大多不会进行恶意操作。然而,很多情形下普通用户为了方便,用户暗码往往配置得很简单,要是攻击者通过其他路子暴力破解普通用户弱口令,就可以很轻松得提示为治理员从事不可制约的恶意操作,这也大大降低了攻击者的攻击难度。

规避措施

docker创建容器默认是以root身份来创建的,普通用户之所以能够创建容器的缘故起因就是这个docker用户组,所以我们应该规避使用这类做法。对于多个用户想使用容器,可以通过治理员集中创建开启了ssh服务的容器,并提供端口映照到host上,让普通用户通过ssh链接进入容器,如许就可以制约普通用户的活动范围在容器内,用户的任意操作也不会扩散到host上。

*

您可能还会对下面的文章感兴趣: