利用LXD进行Linux服务器提权

2019年11月12日00:03:41 发表评论

前言

在这篇文章中,我们将跟大家介绍如何通过利用LXD的漏洞,实现目标设备lxd组用户的提权。

通过适当的操作,本地lxd组的用户成员可以理解将自己的权限提升为主机操作系统的root权限。这种特性与该用户是否已被授权sudo权限无关,而且全程也无需用户输入密码。研究人员表示,LXD SNAP包中甚至也存在这样的漏洞。

LXD是一个root进程,它可以负责执行任意用户的LXD UNIX套接字写入访问操作。而且在某些情况下,LXD甚至都不会对调用它的用户权限进行检查和匹配,现在社区也有很多种方法可以利用LXD的这种特性来实施攻击。

其中的一项技术就是使用LXD API来将目标主机的根文件系统加载进一个容器中,而本文讨论的也是这项技术。一旦成功,攻击者就可以将低权限的用户提升为root权限,并且能够在不受任何限制的情况下访问目标系统的各种数据资源。

LXD和LXC

Linux Container(LXC)通常被认为是一种轻量级虚拟化技术,它介于Chroot和完整开发的虚拟机之间,LXC可以创建一个跟正常Linux操作系统十分接近的环境,但是不需要使用到单独的内核资源。

Linux Daemon(LXD)是一个轻量级容器管理程序,而LXD是基于LXC容器技术实现的,而这种技术之前Docker也使用过。LXD使用了稳定的LXC API来完成所有的后台容器管理工作,并且增加了REST API支持,更进一步地提升了用户体验度。

容器技术

所谓的容器技术,也就是在主机操作系统中创建一个隔离的环境,以允许某个进程或应用程序在一个不影响主操作系统以及其他进程的环境下运行。

技术实现

  1. 目标主机系统:Ubuntu v18.04
  2. 攻击者设备:Kali Linux或其他设备

提权开始

接下来,我们开始操作!

我们已经在主机设备中创建好了一个名叫“raj”的本地用户账号。

LXD安装与配置

  1. 执行下列命令完成LXD的安装:apt install lxd
  2. LXD依赖组件:apt install zfsutils-linux

接下来,配置“raj”用户账号,将“raj”添加进LXD组中,执行下列命令:usermod --append --groups lxd raj

现在我们需要配置LXD,我们可以使用命令“lxd init”来开启LXD初始化进程。在初始化的过程中,程序将会要用户选择某些配置选项,其中的大多数选项都可以直接使用默认配置。不过在后端存储选项中,我们需要选择“dir”,而不要选择“zfs”。

配置好LXD之后,你需要使用LXC创建一个容器。这里我们为“Ubuntu:18.04”创建了一个容器,并命名为了“intimate-seasnail”。配置完成之后,我们可以使用lxc list命令来查看所有可用的容器:

  1. lxc launch ubuntu:18.04
  2. lxc list

使用lxc exec命令即可与容器建立连接,该命令需要提供目标容器名称:

  1. lxc exec intimate-seasnail -- /bin/bash

发表评论

后发表评论