🐷OpenStack渗透场景

什么是Openstack

OpenStack是一个开源的云计算管理平台项目,是属于基础设施即服务(IaaS),是一个云操作系统。

  • Nova(控制 )

    • 提供计算资源,虚拟机、容器等;

  • Glance(镜像 )

  • Swift(对象存储 )

  • Cinder(块存储 )

  • Neutron(网络 )

  • Heat(编排服务 )

  • Ceilometer(计量服务,监控,计费 )

  • Keystone(身份管理 )

    • API客户端身份验证,多租户授权

  • Horizon

    • 提供Web界面

Keystone

keystone是OpenStack组件之一,identity service认证服务;

1. 一次建立;

(1) User向Keystone发送用户密码身份信息,Keystone验证成功后向User配发Token;

2. 三次请求,三次确认;

(1) User向Nova发出带有Token的实例创建请求,Nova收到请求后向Keystone验证有效性;

(2) Token被证实有效后,Nova向Glance服务发送镜像传输请求,Glance再次向Keystone验证Token有效性;

(3) Token被证实有效后,Glance向Nova提供镜像目录查询和传递服务,Nova获取镜像后继续向Neutron请求创建网络服务,Neutron再向Keystone验证有效性;

(4) Token被证实有效后,Neutron允许Nova使用网络服务;

3. 一个最终结果;

(1) Nova启动虚拟机成功,向用户返回创建实例成功的通知;

Nova

主要功能是负责管理实例虚拟机的生命周期、网络管理、存储卷管理;

对外提供服务接口为REST API,内部组件模块之间的通信基于RPC消息传递机制;

工作原理:

1. User获取认证后向Nova服务中的Nova-api发送一个请求,用于创建虚拟机实例;

2. Nova-API接收到请求后进行身份验证,然后将创建虚拟机实例的消息存到队列中(Queue);

3. Nova-scheduler从消息队列中(Queue)接收到消息开始调度,从多个计算节点选取最优节点,将创建虚拟机实例消息存放到队列中;

4. Nova-compute获取到信息后,在自身节点上执行创建虚拟机实例操作;

5. 创建虚拟机同时,计算节点通过消息队列向Nova-Conductor发送查询数据库的信息的消息,Conductor收到信息生会去访问数据库并给出回应消息;

  • Nova-API

    • 接收并响应最终用户的计算API调用请求,通常将请求转发给Nova其它组件进行自带;

  • Nova-API-Metadata

    • 用于接收来自实例的元数据请求;

  • Nova-Compute

    • 通过Hypervisor API创建和终止实例的工作进程;

    • 默认情况使用KVM虚拟化引擎;

    • 主要功能就是接收来自消息队列的请求,然后执行对应的系统命令;

  • Nova-Scheduler

    • 负责从队列中获取虚拟机实例请求;

  • Nova-Conductor

    • 主要为了使Nova-Compute服务与数据库之间进行交互;

  • Nova-placement-api

    • 追踪每个提供者的库存和使用情况,比如计算节点的资源,存储池使用情况以及IP分配情况;

  • Nova-Cert

    • 是服务器守候进程,主要为基于X509认证的Nova Cert提供服务;

  • Nova-NoVNCproxy

    • 虚拟机控制台服务,提供用于通过VNC连接访问正在运行实例的代理;

  • QUEUE

Glance

Glance主要负责镜像的注册和查询传递服务,这些镜像可以是用户自己制作上传的镜像,也可以是当前实例的快照,这两种类型的镜像都可以快速用于实例部署;

工作原理:

1. glance-api接收到对应服务请求,对该服务进行响应;

2. glance-api服务将会对请求进行判断,与metadata相关操作就会把任务交给glance-registry进行处理,对应数据库操作如与image自身相关操作,将交给store backend进行处理;

主要组件:

  • glance-api

    • 作用就是接收请求,但自身不处理请求,对外提供REST API响应image查询、获取和存储的调用;

    • 使用ps -ef | grep glance-api,查看进程信息;

  • glance-registry

    • 主要负责处理和存取image和metadata;

    • 使用ps -e | grep glance-registry,查看进程信息;

  • Dadatabase

    • 主要用于保存images的metadata信息;

  • Store backend

    • 实际用于存储,glance自身并不存储image,而是将image放在backend中;

    • 配置文件:/etc/glance/glanc e-api.conf

Neutron

主要提供云计算环境下的网络服务;

Neutron具体作用是允许用户创建和管理网络对象,例如:网络、子网、端口;

涵盖了二层交换、三层路由、负载、防火墙等;

工作原理:

1. 当要创建一个虚拟网络时,server收到创建的请求,通过消息队列通知对应的插件;

2. OVS插件收到消息后,将需要创建网络信息,名称,ID等,保存到数据库中并通过消息队列通知运行在各个节点上的agent;

3. agent,收到消息后会在节点上创建对应设备、例如vlan设备;

  • neutron-server

    • 运行于控制节点,提供相应的API;

  • neutron plugin

    • core plugins,提供二层虚拟网络支持、网络、子网、端口等;

    • service plugins,提供路由器、防火墙、安全组等;

  • neutron agent

    • 负责接收消息并且执行任务的模块;

  • neutron provide

    • 主要提供虚拟机或物理网络设备;

  • queue

    • 各个模块之间相互通信

  • neutron database

    • 存储网络信息数据库;

安装Openstack

手动部署较为麻烦,中途各种报错,排错等部署了一天

手动部署openstrack需要的组件:

· Mysql

· Mongodb

· RabbitMQ

· keystone

· HTTP

· glance

· nova

· neutron

· horizon

DevStack

OpenStack为入门者和开发者推出了一个OpenStack开发环境:devstack。通过devstack,你可以在一个主机节点上部署一个“五脏俱全”的OpenStack Cloud。

国内网络环境问题,导致安装难度加大

· vultr + Ubuntu 20

渗透场景

这里有两种场景:

· 获取到OpenStack控制台权限;

· OpenStack下的虚拟主机权限;

虚拟主机权限场景

能做什么? 怎么去找控制端?

  • 一般政务云租户管理端都会对外开放,所以从正面也是最为直接的方式。

  • 在内网中端口查找关于用keystone 5000端口或者其它组件相应的端口查找管理网段。

  • 一般情况是虚拟主机是无法到达管理网段,已做逻辑隔离。

    • 管理网络,openstack管理网

    • 内部网络,内部数据库、nova、之间的通讯

    • 共有网络,虚拟主机

攻击策略:

Ø 网络暴露:管理控制台,弱口令、高危漏洞

Ø 网络暴露:API 接口,未授权访问、越权、高危漏洞

Ø 网络暴露:三方组件引入的接口

Ø 网络暴露:容器服务

Ø 网络暴露:运营/运维服务

Ø OpenStack 部署在企业的业务生产网,云的底座网络、物理设备与业务网络在同一安全域,物理设备的监控和管理可横向攻击

相关端口

Ø Glance API 3260

Ø Glance API 9191

Ø Glance API 9292

Ø Nova API 3333

Ø Nova API 8775

Ø Nova API 8776

Ø EPMD 4369

Ø Keystone API 5000

Ø Keystone API 35357

Keystone API爆破

一般keystone就是控制面板密码

登录成功返回的资源:

直接绑定host即可

BurpSuite操作太麻烦直接本地安装

执行命令

控制台权限场景

某政务云案例:

搜索引擎 —> 某省政务外网 —> 政务云平台,3A认证,基于Openstack二次开发,存在Shiro反序列化漏洞 —> 获取openstack云平台系统root权限 —> 网卡信息可跨(172,10,192)网段 —> 通过翻取系统任务计划,发现运维脚本,脚本中存储了云平台节点所有帐号密码(获取294云节点服务器权限)—> 再通过翻取系统配置文件,登录云平台数据库,获取云平台所有帐号密码(获取519个SSO帐号密码)—> 可控制某省政务云单位500+ —> 通过翻取系统文件获得Zabbix Server监控系统(9个)—> 控制openstack云平台,可控制1400+云主机权限,影响整个省政务单位,完全控制某政务云。

关于第一种场景能做的事情很多,对当前主机信息收集例如:计划任务、历史命令、环境变量等,相关openstack配置文件进行收集,能够发现数据库配置文件、以及节点信息。

关注配置文件信息:

云平台仪表盘登录帐号密码通常情况下是放在/root/目录下,名为keystonerc_admin开头等,没有特定文件,包含一些.sh脚本中也有可能存在云平台的登录帐号密码;

常用命令

通过这些网段再定位相关目标网段,针对性刷分。

下载快照

在无法进入系统的情况下,通过获取快照进行到系统获取数据;

创建快照后,通过配置文件查看快照存放位置:/etc/glance/glance-api.conf

对照ID下载镜像:

然后下载镜像进入到虚拟机获取相关数据。

加密方式

一般情况下查询keystone数据库中的user表就可以了,但openstrack默认安装情况下分了两个表;

user存储用户名称及信息; password存储密码;

加密信息:

$为分割符,无意义;

2b是bcrypt加密版本号;

04是cost的值;

后一段是salt值;

最后才是密码的密文

找到用户密码但是不可解,密码复杂度太高;

强密码,hashcat基本无解。

使用penglab项目,https://github.com/mxrch/penglab

重置租户密码

当无法解密但又需要登录到某个租户的时候

查看用户列表:

如果没有keystone 就用openstack user list

修改密码:

如果不存在,则:

具体看目标系统,有些则是在租户上可直接重置虚拟机密码,有些则无这个功能。

Last updated

Was this helpful?