Xen安全架构sHype/ACM策略配置图文教程,



实验要求

1.     熟悉Xen虚拟化平台部署;

2.     Xen sHype/ACM安全架构中的Simple TE和Chinese Wall策略及其实现机制的分析与验证。


第1章           Xen环境部署


1.1           版本选择


由于Ubuntu使用广泛,软件包易于下载,我们选择Ubuntu系统进行Xen部署。可选择的LTS系统如下[1]:

1)Ubuntu 10.04系统采用的是Linux 2.6.32内核,由于Linux 3.0以下内核不支持Xen[2],需要重新编译内核,较为费时费力,内核编译后支持Xen 4.0;

2)Ubuntu 12.04系统采用Linux 3.2+内核,支持Xen 4.1;Xen从4.1开始将xm工具集列为deprecated[3]。而进行ACM/sHype策略方面的配置利用xm工具实现较为方便;

3)Ubuntu 12.04系统采用Linux 3.2+内核,支持Xen 4.2;从Xen 4.2开始,不再支持ACM安全模块,因此不合适;

4)Ubuntu 14.04系统采用Linux 3.13+内核,支持Xen 4.4;

5)Ubuntu 15.04系统采用Linux 3.19.3内核,支持Xen 4.5,Xen从4.5开始取消xm工具集(xend),用xl工具集进行代替[3]。


综合以上几点原因,Xen环境采用Ubuntu 12.04 x64部署较为合适,Xen版本选择4.1,但是本文选择的是Ubuntu 14.04 x64 + Xen 4.1的组合,事实证明也是可以安装成功的。

根据文章[4]中的建议,应该选择64-bit的Ubuntu安装较为合理。因此我们的安装镜像最后确定为ubuntu-14.04-desktop-amd64.iso。

由于Xen的dom0系统支持的显卡有限,不支持VMware Workstation虚拟机中的默认显卡,在安装Xen后重启会导致系统黑屏,无法使用。因此此实验不能选择VMware虚拟机,只能选择物理机上安装Ubuntu进行实验。

利用[5]中的教程进行Ubuntu 14.04 LTS x64的U盘安装盘的制作,再利用该安装盘进行安装即可。如果是与Windows双系统,则需要用EasyBCD恢复引导菜单,通过引导菜单进入Ubuntu系统。


1.2           Xen源码下载及安装依赖包


由于Xen发布的二进制安装包默认不含有XSM功能,开启XSM功能必须改变编译选项并进行重新编译。因此本文需要从Xen源码进行安装。

从2013年2月开始,Xen源码采用git进行管理,其git库地址为:

git://xenbits.xen.org/xen.git


源码下载采用的命令是:

git clone git://xenbits.xen.org/xen.git
cd xen
git checkout stable-4.1


编译需要用到git,需要提前安装好:

apt-get install git

接着安装依赖包:

apt-get install bcc bin86 gawk bridge-utils iproutelibcurl3 libcurl4-openssl-dev bzip2 module-init-tools transfig tgif texinfotexlive-latex-base texlive-latex-recommended texlive-fonts-extratexlive-fonts-recommended pciutils-dev mercurial build-essential make gcclibc6-dev zlib1g-dev python python-dev python-twisted libncurses5libncurses5-dev patch libvncserver-dev libsdl-dev libjpeg62-dev iasl libbz2-deve2fslibs-dev git-core uuid-dev ocaml libx11-dev bison flex binutils xorg-devudev gettext libgcrypt11-dev libssl-dev pciutils libglib2.0-dev  gcc-multilib fakeroot pkg-config libpci-devcrash crash kexec-tools makedumpfile

1.3           Xen源码编译


1)在Xen 4.0以后,XSM有ACM和FLASK两个模块,默认都不开启,需要选择其中一个,然后进行编译,其Config.mk文件内容如下:

XSM_ENABLE ?= n
FLASK_ENABLE ?= n
ACM_SECURITY ?= n


2)从Xen 4.2开始,FLASK成为默认的XSM模块,当启用XSM时默认启用FLASK,而ACM默认不启动。其Config.mk文件内容如下:

XSM_ENABLE ?= n
FLASK_ENABLE ?= $(XSM_ENABLE)

 

由于本文采用的版本是Xen4.1,因此需要按照以下命令修改Config.mk:

XSM_ENABLE ?= y
FLASK_ENABLE ?= n
ACM_SECURITY ?= y

 

然后运行如下命令进行编译:

make dist或make xen tools stubdom
make install-xen
make install-toolsPYTHON_PREFIX_ARG="--install-layout=deb"
make install stubdom

1.4           修改/etc/modules


修改/etc/modules文件,添加以下行:

xen-evtchn
xen-gntdev
xen-netback
xen-blkback
xenfs
blktap

1.5           添加Lib搜索路径


修改/etc/ld.so.conf.d/libc.conf文件,添加如下几行:

/usr/local/lib(已有)
/lib64
/usr/lib
/usr/lib64

运行ldconfig命令使修改生效。


1.6           修改grub启动项


步骤一:修改/etc/default/grub文件,将GRUB_TIMEOUT=10修改为GRUB_TIMEOUT=-1,将GRUB_HIDDEN_TIMEOUT=0修改为GRUB_HIDDEN_TIMEOUT=10。

步骤二:执行update-grub。

对于Ubuntu 14.04在/boot/grub/grub.cfg中能自动生成’Ubuntu, with Xen hypervisor’启动项,不需要像在Ubuntu 12.04中一样自己手动再配置。

重启系统。


1.7           测试Xen环境


首先启动xend:

//首先启动xencommons
service xencommons start
//启动xend之前关闭网卡启动xend之后重启网卡(如果不这样做会提示出错,原因暂不详)
ifconfig eth0 down
service xend start
ifconfig eth0 up

接着运行xm list命令,结果如下:


 

Name            ID   Mem      VCPUs         State      Time(s)
Domain-0     0     15610    8                   r-----       1305.5

修改/etc/xen/xend-config.sxp文件,去掉xend-unix-server no的注释,并改为xend-unix-server yes,去掉xend-unix-path/var/lib/xend/xend-socket的注释。


1.8           创建虚拟机


首先,需要制作虚拟机的磁盘文件,输入以下命令创建10GB的磁盘文件

dd if=/dev/zero of=vm1disk bs=1k seek=10000kcount=0
mkfs -t ext3 vm1disk
(当需要回复确认时,回答y)
mount -o loop vm1disk /mnt
cp -ax /{root,dev,var,etc,usr,bin,sbin,lib} /mnt
mkdir /mnt/{proc,sys,home,tmp}


然后对/mnt/etc/fstab,/mnt/etc/hostname进行自定义的修改,这里省略不做修改。

umount /mnt


此时,虚拟机磁盘文件vm1disk就已创建完毕,用类似的方式创建vm2disk。

接着,编辑虚拟机配置文件/root/domain1.xm,其内容如下所示:

kernel= "/boot/vmlinuz-3.13.0-24-generic.efi.signed"
memory = 512
name = "domain1"
dhcp = "dhcp"
disk = ['tap:aio:/root/vm1disk,sda1,w']
root = "/dev/sda1 ro xencons=tty"


最后,运行命令:

xm createdomain1.xm


正常情况下,虚拟机domain1应该已经启动。通过xm console domain1命令可以打开虚拟机domain1的终端命令行,如下图所示。



接着类似地创建domain2.xm,再运行xm create domain2.xm启动domain2虚拟机。


1.9           测试ACM/sHype环境


修改/etc/xen/xend-config.sxp,增加(xsm_module_name acm),否则,ACM策略类型将被认为不支持(未指定使用的xsm类型),出错标识为运行xm getpolicy命令,提示Supported security subsystems :      None。修改源代码中的xend-config.sxp似乎没有效果,只能修改编译后的文件。

运行xensec_toolgetpolicy命令,结果如下,则说明ACM/sHype环境至此就搭建完成了。


在Windows上安装Python 2.7 x64和wxPython 3.0 x64 for Python 2.7,其中wxPython的下载页面如下:http://www.wxpython.org/download.php#msw

同样在Ubuntu上安装wxPython:

apt-get install python-wxgtk2.8 python-wxtools


运行以下命令,如果能出现下图所示界面,说明策略配置工具安装完毕。

python /usr/sbin/xensec_ezpolicy



第2章           ACM策略配置

在xensec_ezpolicy里,点击New Org按钮,新添加三个组织:A-Bank、B-Bank和AutoCorp,并且在A-Bank下创建两个部门:SecurityUnderwriting和MarketAnalysis。然后选中__UNLABELED__、A-Bank和B-Bank三项,点击Create run-time exclusion rulefrom selection按钮,将其加入到一个冲突集中,接着用类似方法将__UNLABELED__、A-Bank.MarketAnalysis和A-Bank.SecurityUnderwriting三项加入到一个冲突集中。最终结果如下图所示:


 

选择菜单里的File ->Save as Xen ACM Security Policy …将策略文件保存到路径:/etc/xen/acm-security/policies/mytest-security_policy.xml

该文件最终内容如下所示:


<?xml version="1.0" encoding="UTF-8"?>
<!-- Auto-generated by ezPolicy        -->
<SecurityPolicyDefinition xmlns="http://www.ibm.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.ibm.com ../../security_policy.xsd ">
    <PolicyHeader>
        <PolicyName>mytest</PolicyName>
        <Date>Tue Jun 09 14:41:58 2015</Date>
        <Version>1.0</Version>
    </PolicyHeader>

    <SimpleTypeEnforcement>
        <SimpleTypeEnforcementTypes>
            <Type>SystemManagement</Type>
            <Type>__UNLABELED__</Type>
            <Type>A-Bank</Type>
            <Type>A-Bank.SecurityUnderwriting</Type>
            <Type>A-Bank.MarketAnalysis</Type>
            <Type>B-Bank</Type>
            <Type>AutoCorp</Type>
        </SimpleTypeEnforcementTypes>
    </SimpleTypeEnforcement>

    <ChineseWall priority="PrimaryPolicyComponent">
        <ChineseWallTypes>
            <Type>SystemManagement</Type>
            <Type>__UNLABELED__</Type>
            <Type>A-Bank</Type>
            <Type>A-Bank.SecurityUnderwriting</Type>
            <Type>A-Bank.MarketAnalysis</Type>
            <Type>B-Bank</Type>
            <Type>AutoCorp</Type>
        </ChineseWallTypes>

        <ConflictSets>
            <Conflict name="RER">
                <Type>__UNLABELED__</Type>
                <Type>A-Bank</Type>
                <Type>B-Bank</Type>
            </Conflict>
            <Conflict name="RER">
                <Type>__UNLABELED__</Type>
                <Type>A-Bank.MarketAnalysis</Type>
                <Type>A-Bank.SecurityUnderwriting</Type>
            </Conflict>
       </ConflictSets>
    </ChineseWall>

    <SecurityLabelTemplate>
        <SubjectLabels bootstrap="SystemManagement">
            <VirtualMachineLabel>
                <Name>SystemManagement</Name>
                <SimpleTypeEnforcementTypes>
                    <Type>SystemManagement</Type>
                    <Type>__UNLABELED__</Type>
                    <Type>A-Bank</Type>
                    <Type>A-Bank.SecurityUnderwriting</Type>
                    <Type>A-Bank.MarketAnalysis</Type>
                    <Type>B-Bank</Type>
                    <Type>AutoCorp</Type>
                </SimpleTypeEnforcementTypes>
                <ChineseWallTypes>
                    <Type>SystemManagement</Type>
                </ChineseWallTypes>
            </VirtualMachineLabel>

            <VirtualMachineLabel>
                <Name>__UNLABELED__</Name>
                <SimpleTypeEnforcementTypes>
                    <Type>__UNLABELED__</Type>
                </SimpleTypeEnforcementTypes>
                <ChineseWallTypes>
                    <Type>__UNLABELED__</Type>
                </ChineseWallTypes>
            </VirtualMachineLabel>

            <VirtualMachineLabel>
                <Name>A-Bank</Name>
                <SimpleTypeEnforcementTypes>
                    <Type>A-Bank</Type>
                </SimpleTypeEnforcementTypes>
                <ChineseWallTypes>
                    <Type>A-Bank</Type>
                </ChineseWallTypes>
            </VirtualMachineLabel>

            <VirtualMachineLabel>
                <Name>A-Bank.SecurityUnderwriting</Name>
                <SimpleTypeEnforcementTypes>
                    <Type>A-Bank.SecurityUnderwriting</Type>
                </SimpleTypeEnforcementTypes>
                <ChineseWallTypes>
                    <Type>A-Bank</Type>
                    <Type>A-Bank.SecurityUnderwriting</Type>
                </ChineseWallTypes>
            </VirtualMachineLabel>

            <VirtualMachineLabel>
                <Name>A-Bank.MarketAnalysis</Name>
                <SimpleTypeEnforcementTypes>
                    <Type>A-Bank.MarketAnalysis</Type>
                </SimpleTypeEnforcementTypes>
                <ChineseWallTypes>
                    <Type>A-Bank</Type>
                    <Type>A-Bank.MarketAnalysis</Type>
                </ChineseWallTypes>
            </VirtualMachineLabel>

            <VirtualMachineLabel>
                <Name>B-Bank</Name>
                <SimpleTypeEnforcementTypes>
                    <Type>B-Bank</Type>
                </SimpleTypeEnforcementTypes>
                <ChineseWallTypes>
                    <Type>B-Bank</Type>
                </ChineseWallTypes>
            </VirtualMachineLabel>

            <VirtualMachineLabel>
                <Name>AutoCorp</Name>
                <SimpleTypeEnforcementTypes>
                    <Type>AutoCorp</Type>
                </SimpleTypeEnforcementTypes>
                <ChineseWallTypes>
                    <Type>AutoCorp</Type>
                </ChineseWallTypes>
            </VirtualMachineLabel>
        </SubjectLabels>

        <ObjectLabels>
            <ResourceLabel>
                <Name>SystemManagement</Name>
                <SimpleTypeEnforcementTypes>
                    <Type>SystemManagement</Type>
                </SimpleTypeEnforcementTypes>
            </ResourceLabel>

            <ResourceLabel>
                <Name>__UNLABELED__</Name>
                <SimpleTypeEnforcementTypes>
                    <Type>__UNLABELED__</Type>
                </SimpleTypeEnforcementTypes>
            </ResourceLabel>

            <ResourceLabel>
                <Name>A-Bank</Name>
                <SimpleTypeEnforcementTypes>
                    <Type>A-Bank</Type>
                </SimpleTypeEnforcementTypes>
            </ResourceLabel>

            <ResourceLabel>
                <Name>A-Bank.SecurityUnderwriting</Name>
                <SimpleTypeEnforcementTypes>
                    <Type>A-Bank.SecurityUnderwriting</Type>
                </SimpleTypeEnforcementTypes>
            </ResourceLabel>

            <ResourceLabel>
                <Name>A-Bank.MarketAnalysis</Name>
                <SimpleTypeEnforcementTypes>
                    <Type>A-Bank.MarketAnalysis</Type>
                </SimpleTypeEnforcementTypes>
            </ResourceLabel>

            <ResourceLabel>
                <Name>B-Bank</Name>
                <SimpleTypeEnforcementTypes>
                    <Type>B-Bank</Type>
                </SimpleTypeEnforcementTypes>
            </ResourceLabel>

            <ResourceLabel>
                <Name>AutoCorp</Name>
                <SimpleTypeEnforcementTypes>
                    <Type>AutoCorp</Type>
                </SimpleTypeEnforcementTypes>
            </ResourceLabel>
        </ObjectLabels>
    </SecurityLabelTemplate>
</SecurityPolicyDefinition>

下一步,关闭所有虚拟机,在命令行里执行以下命令,使刚才编辑的策略生效。

xm resetpolicy
xm setpolicy ACM mytest

下面,给domain1和domain2分别设置A-Bank和B-Bank的标签:

xm addlabel A-Bank dom domain1.xm
xm addlabel B-Bank dom domain2.xm

接着,给虚拟磁盘文件设置A-Bank和B-Bank的标签:

xm addlabel A-Bank res tap:aio:/root/vm1disk
xm addlabel B-Bank res tap:aio:/root/vm2disk

设置结果如图所示。这样才能保证虚拟机domain1能访问磁盘文件vm1disk,虚拟机domain1能访问磁盘文件vm1disk,虚拟机才会创建成功,从而验证了STE策略。



然后创建domain1虚拟机,保持domain1开启的同时,再启动domain2虚拟机:

xm create domain2.xm
xm create domain2.xm


这时我们会发现domain2虚拟机创建失败,如下图所示,提示Error: Domain inconflict set with running domain?




这是由于在ChineseWall策略里,虚拟机domain1的标签为A-Bank,虚拟机domain2的标签为B-Bank,而A-Bank和B-Bank在同一个利益冲突类(Run-time Exclustion Rules)中,因此无法同时在同一个主机中运行。


第3章           遇到的错误与解决方案


1. 编译tools时失败,提示check_python_devel函数检查失败,是个bug

解决方案:修改/xen/tools/check/check_python_devel文件,去掉里面的验证

 

2. 编译tools时失败,提示undefinedreference to symbol 'timer_settime@@GLIBC_2.3.3

解决方案:按照http://stackoverflow.com/questions/18286738/undefined-reference-to-symbol-timer-settimeglibc-2-3-3里的说明,将/xen/tools/ioemu-remote/Makefile.target里的LIBS+=-lm修改为LIBS+=-lz -lrt –lm


3. 编译tools时失败,提示xg_main.c:181:52:error: 'ulong' undeclared (first use in this

function)

解决方案:参照http://lists.xen.org/archives/html/xen-devel/2012-12/msg00429.html

修改/xen/tools/debugger/gdbsx/xg/xg_main.c,在文件开头加入#include <sys/types.h>


4. 编译tools时失败,提示ocamlfind:command not found

解决方案:apt-getinstall ocaml-findlib


5. 编译tools时失败,提示Error:Unbound module Xenbus

解决方案:修改/xen/tools/ocaml/xenstored/connection.ml里的Line:118,把那三行注释掉,添加let is_backend_mmap con =false


6. Ubuntu如何进行视频录制

解决方案:利用kazam进行视频录制,使用方法如下:

apt-get install kazam
apt-get install pulseaudio
pulseaudio //打开pulseaudio服务器
kazam //运行视频录制软件

第4章           参考资料


[1] List of Ubuntu releases. http://en.wikipedia.org/wiki/List_of_Ubuntu_releases#Table_of_versions

[2] Ubuntu12.04安装Xen4. http://www.cppblog.com/LIULIANG/archive/2012/09/21/191481.html

[3] XEND. http://wiki.xen.org/wiki/XEND

[4] Ubuntu 10.04 (with grub2)安装 Xen 4.0.1. http://www.codesky.net/article/201107/174124.html

[5] 怎么用u盘安装ubuntu. http://jingyan.baidu.com/article/a3761b2b66fe141577f9aa51.html

 

 

相关内容