sVirt:SELinux防护KVM安全

  SELinux最初是由美国安全局NSA发起的项目,是基于强制访问控制(MAC)策略的,为每一个主体和客户都提供了个虚拟的安全“沙箱”,只允许进程操作安全策略中明确允许的文件。当Linux开启了SELinux安全策略,所有的主体对客户的访问必须同时满足传统的自主访问控制(DAC)和SELinux提供的强制访问控制(MAC)策略。

  在虚拟化环境下,通常是多个VM运行在同一个宿主机(物理机)上,通常由同一个用户启动多个VM管理进程(如:qemu-kvm或者vmx等),而这些VM可能为不同的租户服务,如果其中一个VM由于某些脆弱性被恶意控制了,而hypervisor层有缺陷,攻击者就有机会利用被控制的VM发起对同宿主机或其它VM进行恶意攻击。如下图:宿主机中的SELinux安全策略阻止了VM的Attack行为。

SELinux与KVM

  sVirt 项目集成SELinux强制访问控制 (MAC) 安全和基于 Linux 的KVM虚拟化。

确认SELinux策略正常开启

创建img文件

  通过dd命令创建两个大小为20GB的img文件,作为虚拟机的磁盘:

dd if=/dev/zero of=/opt/vm/vm01.img \

  bs=1M count=20480

dd if=/dev/zero of=/opt/vm/vm02.img \

  bs=1M count=20480

  查看两个img文件的安全上下文,其中用户域为unconfined_u,表示不限制用户;角色域为object_r通常表示普通文件或目录;类型域为usr_t;MCS为s0;

qemu-kvm命令配合VNC

/usr/libexec/qemu-kvm -cpu qemu64 \

-drive file=/opt/vm/vm01.img \

-m 2048 \

-cdrom \

/opt/CentOS-6.5-x86_64-bin-DVD1.iso \

-vnc :1

/usr/libexec/qemu-kvm \

-cpu qemu64 \

-drive file=/opt/vm/vm02.img \

-m 2048 \

-cdrom \

/opt/CentOS-6.5-x86_64-bin-DVD1.iso \

-vnc :2

  给两个img文件安装上CentOS-6.5-x86_64操作系统并处于运行状态,此时的两个img文件的安全上下文还是与之前的保持不变。(注:实际在部署KVM虚拟机里以上步骤不是必须,这里是为了演示SELinux安全上下文的变化而考虑的)

virt-manager启动KVM虚拟机

  结束qemu-kvm进程,用专用的virsh或virt-manager工具(这里以图形工具virt-manager为例)启动两个虚拟机,先ssh –X连接到宿主机,再执行virt-manager命令:

  在弹出的窗口里“新建”一个虚拟机,输入名称,单选“Import existing disk image”根据向导创建并启动虚拟机:

  当两个虚拟机都通过virt-manager启动之后管理窗口如下:

确认安全上下文变化

  此时再看一下两个img文件的安全上下文,除了角色域object_r没有变化之外,用户域、类型域、MCS都发生了变化。

  再确认一下对应进程的安全上下文:

  可以看出img文件的MCS与进程的MCS是严格对应的,且对虚拟机进行重启操作时会自动给进程和img文件重新分配MCS。这种安全机制可以严格控制威胁的范围,提高云平台的安全性。

SELinux阻止非法访问

  介绍一下MCS不同时阻止相互访问,将/bin/bash拷贝一个为/opt/test_sh,并查看一下当前的安全上下文:

  由于在SELinux的默认安全策略里,使用svirt_t类型的入口程序必须类型为qemu_exec_t,这里修改一下test_sh的类型:

MCS为s0:c0,c1的操作

  以特定的SELinux安全策略来运行,这里切换一下类型为svirt_t和MCS为s0:c0,c1,并查看当前用户的安全上下文以确认,之后通过echo命令向/tmp/test文件(由于SELinux安全策略限制,此时只能向/tmp目录下写新建文件)里随便写内容,写成功后再查看一下/tmp/test的安全上下文。MCS都是一致的。

MCS为s0:c0,c2的操作

  再以特定的SELinux安全策略来运行,这里切换一下类型为svirt_t和MCS为s0:c0,c2,并查看当前用户的安全上下文以确认,之后通过echo命令向/tmp/test文件(这个文件是前一步创建的)里随便写内容,由于安全策略的限制会写入失败,提示:Permission denied(下图红线部分)。确认文件MCS与当前环境的MCS是不一致的。

来点感动自己的鸡汤

  所有被SELinux安全策略阻止的操作都会有相应的日志记录,当系统auditd服务启动时会记录在audit.log日志,否则记录在message日志里。

  安恒信息明御综合日志审计平台能对提供对云计算环境下sVirt所提供的SELinux安全策略对KVM安全防护的事件日志进行完美的解析、处理、预警和展现。

原文发布于微信公众号 - 安恒信息(DBAPP2013)

原文发表时间:2015-08-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏云极客Frey

腾讯云容器微服务API设计实践

本文会在腾讯云容器服务上面构造微服务基础小项目, 通过搭建ELK集群,实现利用Logstash 采集Nginx日志,收纳及利用kibana展示的功能。

2.5K22
来自专栏云知识学习

linux下安装安装杀毒软件clamav杀毒

一、安装clamav文件 相关下载链接:http://www.clamav.net/downloads 使用命令:wget 加上对应版本的软件链接

90913
来自专栏静下来

腾讯云Linux系统盘网站数据更换至数据盘

主要看你原网站的目录叫什么名称,如果原网站目录文件夹是用的一键安装包,也就是叫:alidata 那就不能按照第四步来了,这样可能会出错的。 今天来把腾讯云的也挂...

6066
来自专栏bluesummer

Windows下docker的安装,将ASP.NET Core程序部署在docker中

参考文章: https://www.cnblogs.com/jRoger/p/aspnet-core-deploy-to-docker.html https...

4676
来自专栏叔叔的博客

Docker Swarm

docker-machine ls, 看看有没有虚拟主机,没有就Docker Machine创一个

1482
来自专栏finleyMa

docker学习系列14 使用haproxy实现mysql集群的负载均衡

在上节中我们创建了 mysql 集群。 实际工作中,我们不希望让某一数据库节点处理所有的请求,这样的话单个负载高,性能差。

6922
来自专栏智能合约

centos安装lnmp环境

4075
来自专栏云原生架构实践

Jenkins 配置CI/CD任务

任务内容是部署/更新一个mysql数据库的容器,类似任务都在yourcompany-database任务视图下。

1675
来自专栏北京马哥教育

通过实例来学习使用Linux KVM

KVM是Kernel-based Virtual Machine的缩写,从名字上可以知道,KVM是在支持虚拟化硬件环境上,基于Linux操作系统内核的虚拟化技...

2232
来自专栏魏艾斯博客www.vpsss.net

centOS 如何安装 lnmp 环境

3904

扫码关注云+社区

领取腾讯云代金券