Ubuntu 14.04操作系统信任链(IMA)扩展分析实验

一、实验目的

1.    了解TPM安全芯片的组成和作用

2.    掌握计算平台信任链扩展的原理及作用

3.    掌握IMA的工作原理及作用

二、实验内容

信任链扩展的准则是“Measure before load”,即在加载下一阶段组件并把控制权移交给它之前首先对其进行度量,记录组件度量值并使用TPM将此度量值保护起来。

下图是计算平台信任链扩展原型图:

1.扩展Linux操作系统为其增加IMA功能,使信任链由OS层扩展到用户应用层。

2.编写以下代码加载或运行,观察IMA是如何作用的:

(1)用户应用程序

(2)共享库

(3)内核模块

三、实验过程、结果

实验步骤:

1.      在VMware Workstation 11上创建Ubuntu 14.04 x64虚拟机,Ubuntu 14.04的内核本身已经集成了IMA相关代码,因此不需要再编译和加载新内核。同时Ubuntu 14.04也已经mount了securityfs文件系统,因此以下命令也省略:

mount -tsecurityfs securityfs /sys/kernel/security

2.      通过以下命令查看IMA记录的应用度量值:

cat/sys/kernel/security/ima/ascii_runtime_measurements

3.      编写以下代码加载或运行,观察IMA是如何作用的:

(1)用户应用程序

编写任意C应用程序testima_exe,编译并运行,观察ima  securityfs的变化。程序的编译和运行可参考如下命令:

gcctestima_exe.c -o testima_exe
./testima_exe

testima_exe.c源码:

#include <stdio.h>

int main()
{
	printf("Test IMA!\n");
    return 0;
}

在没有运行任何程序时,运行cat/sys/kernel/security/ima/ascii_runtime_measurements命令后,结果如下图所示。

运行cat /sys/kernel/security/ima/ascii_runtime_measurements命令后,观察到结果如下图所示,./testima_exe出现在最后一行,可见运行C应用程序会导致IMA度量值变化。

(2)共享库

编写Linux共享库libtestima,并编写C应用程序testima_lib链接此共享库,编译并运行,观察ima securityfs的变化。参考命令如下:

gcc-o libtestima.so -fPIC -shared libtestima.c
cplibtestima.so /lib

gcctestima_lib.c -o testima_lib  -l testima
./testima_lib

libtestima.c源码:

#include <stdio.h>

void print_testima()
{
	printf("Test IMA from lib!\n");
}

testima_lib.c源码:

extern void print_testima();

int main()
{
	print_testima();
    return 0;
}

运行cat /sys/kernel/security/ima/ascii_runtime_measurements命令后,观察到结果如下图所示,./testima_lib和/lib/libtestima.so出现在最后两行,可见运行加载lib会导致IMA度量值变化。

(3)内核模块

编写Linux内核模块testima_ko,编译并加载,观察ima securityfs的变化。参考命令如下:

make

insmodtestima_ko.ko
dmesg

rmmodtestima_ko.ko
dmesg

testima_ko.c源码:

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>

MODULE_LICENSE("GPL");

static int __init hello_init(void)
{
	printk(KERN_INFO "Hello testima_ko!\n");
	return 0;
}

static void __exit hello_exit(void)
{
	printk(KERN_INFO "Goodbye testima_ko!\n");
}

module_init(hello_init);
module_exit(hello_exit);

Makefile源码:

obj-m := testima_ko.o

all:
	make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:
	make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

运行cat/sys/kernel/security/ima/ascii_runtime_measurements命令后,观察到结果如下图所示,/osv-exp3/ko/testima_ko.ko出现在最后一行,可见加载内核模块会导致IMA度量值变化。

四、实验总结

1. 实验收获:

学到了很多IMA方面的知识,也进一步熟悉了Linux操作系统的命令用法。

2. 总结实验过程中遇到的问题及解决方法:

IMA功能默认未启动,cat /sys/kernel/security/ima/ascii_runtime_measurements命令不返回正确结果。

解决方案:

修改/boot/grub/grub.cfg文件,在“menuentry ‘Ubuntu‘”后面添加“quiet ima_tcb”来启用IMA功能(如下图所示),再重启机器即可。

3. 总结实验的不足之处,以及进一步的改进措施:

对Linux操作系统的命令还不够熟练,需要进一步操作。

时间: 2024-07-29 02:03:37

Ubuntu 14.04操作系统信任链(IMA)扩展分析实验的相关文章

BCM94352HMB蓝牙BCM20702A0在Ubuntu 14.04下的驱动方法

作者:秋忆 出处:http://www.cnblogs.com/qiuyi21/p/bcm20702a0_ubuntu.html 先确认蓝牙的产商编号(idVendor)和产品编号(idProduct),Linux下可通过lsusb或usb-devices命令查看,Windows下在设备管理里查看,如下图所示.我的蓝牙idVendor为0x13d3,idProduct为0x3404. Broadcom的大部分蓝牙设备都需要一个产商的固件补丁(RAM patch file),Linux下叫firm

[操作系统][Ubuntu 14.04] 安装Flash 安装QQ2013

[操作系统][Ubuntu 14.04] 安装Flash 安装QQ2013_郑少群个人网 一.安装Flash 打开Firefox浏览器弹出的Flash安装提醒早都烦死了,那么Ubuntu14.04怎么安装Flash呢? 1.32位系统命令行安装: 第一步 更新库: ? sudo apt-get update ? ? 第二步 安装Flash用下面的代码: sudo apt-get install flashplugin-installer ? 这样就将Flash和依赖装好了. 2.32位系统可视化

Ubuntu 14.04.2 + Vmware 9.0扩展磁盘分区

在Vmware 9.0下安装了Ubuntu 14.04.2 Desktop LTS版本,接着下载了Ubuntu内核源码树并用该源 码编译了内核,完成后又想在Ubuntu系统下安装源码阅读工具以及一些其他一些辅助工具,结果发现磁 盘空间不够了,总不能重新安装系统把这些动作重来一遍或者拷贝大量的数据吧?这实在是太浪费时间 了.还好,Vmware为我们提供了便利. 这里,其实我最终的目标是要达到扩大磁盘分区的容量.这要分两步来走: 第一步,要扩大安装Ubuntu系统时所创建的磁盘的容量. 这可以很方便

NVIDIA DIGITS 学习笔记(NVIDIA DIGITS-2.0 + Ubuntu 14.04 + CUDA 7.0 + cuDNN 7.0 + Caffe 0.13.0)

转自:http://blog.csdn.net/enjoyyl/article/details/47397505?from=timeline&isappinstalled=0#10006-weixin-1-52626-6b3bffd01fdde4900130bc5a2751b6d1 NVIDIA DIGITS-2.0 + Ubuntu 14.04 + CUDA 7.0 + cuDNN 7.0 + Caffe 0.13.0环境配置 引言 DIGITS简介 DIGITS特性 资源信息 说明 DIGI

ubuntu 14.04编译安装xen4.4总结

1. 安装环境 操作系统:ubuntu14.04 xen版本:xen4.4 2. 依赖包的安装 在安装xen之前先进行依赖包的安装,在不停得尝试之后,总结出以下需要安装的依赖包. suso apt-get install gcc make binutils zlib1g-dev python-dev sudo apt-get install libncurses5-dev libcurl4-openssl-dev libx11-dev sudo apt-get install uuid-dev

Ubuntu 14.04 安装配置备忘录

完全在 Linux 下工作,大概有3年时间了. 之前都是用 Windows, 而把 Linux 装在虚拟机里,现在反过来,把 Windows 装在了虚拟机里,只是因为偶尔还要用网银的缘故. 以我这几年的使用经验, 一句话: Linux 用过之后就回不去了. 以下记录我的 Ubuntu 14.04 Linux 安装配置, 算是备忘录. 需要说明的一点是: 我从来不觉得使用 Debian, CentOS, 或者 Arch, Gentoo 的人很牛, 只能说明你们不珍惜时间,就爱瞎折腾, 当然如果你是

Ubuntu 14.04配置虚拟主机

虚拟主机常用于在一个单独的IP地址上提供多个域名的网站服务.如果有人想在单个VPS的单个IP地址运行多个网站,这是非常有用的.在这个教程中,让我告诉你如何设置在Ubuntu 14.04 LTS的Apache网页服务器设置虚拟主机.请注意,这个教程只针对Ubuntu14.04的64位版本. 我不保证它也可以工作在其它更低的Ubuntu版本或者Ubuntu衍生版本(虽然可能过程是类似的). 方案 在这个教程中,我会使用Ubuntu 14.04 64位 LTS,并搭建2个测试网站分别命名为“unixm

Ubuntu 14.04下Redis安装及简单测试

摘要: Redis是目前业界非常受到欢迎的一个内存数据库,一般用作系统的中间缓存系统,用以提升整体商业系统的吞吐量和响应速度.本文将简要介绍安装的主要过程以及给出一个简要的测试代码. 1.  系统环境和版本说明 Linux操作系统选用Ubuntu 14.04, Redis的版本选取目前的最新稳定版本redis-3.07. 客户端选用了Redis的Java版本jedis 2.4.2. 2.  Redis的安装步骤 a. 下载Redis的安装包 wget http://download.redis.

[Linux 小技巧] Ubuntu 14.04 下编译、安装、配置最新开发版 GoldenDict

1. 背景介绍 GoldenDict 是一款非常优秀的跨平台电子词典软件,支持 StarDict.Babylon 等多种词典.其 PC 版基于 Qt 编写,完全免费.开源且没有广告.GoldenDict 的 Android 版是另外一个全新实现的系统,采用了付费版去广告.免费版显示广告的策略,这里就不详细讨论了. GoldenDict 在 GitHub 上的地址是 https://github.com/goldendict/goldendict,截至目前(2015-10-17)已经有 1872