操作系统安全——MLS多级安全模型和BIBA安全模型实训文档
MLS多级安全模型和BIBA安全模型实训文档
实训文档:实训3文档https://gitee.com/zhongjiacheng/TrainDocument
实训环境
操作系统:2.6.18-128.7NFSARKxen(国产安全系统)
系统特点:
三权分立:系统管理员、审计管理员、安全管理员。
该系统切换用户不用su
,用Alt + Sysrq + K
组合键(Linux可信路径机制)。
审计管理员:auditadm; 系统管理员:root; 安全管理员:secadm;
这里说一个重点!你的系统里有多种安全策略时要注意!主体的操作权限一般是取交集的!也就是说!允许某一操作,一定要确保你系统里的所有策略都支持!(暂时下此定论,个人实践所得猜测)
NFSA系统的MLS多级安全模型
子任务一、
任务描述:测试NFSARK系统的MLS机制(禁止用户对文件上读功能,只能同等级写)(缺省范畴,只比较密级)
1、首先需要存在两个用户test1、test2,并且分别设置s0和s2的安全等级。
test1的security context 是user_u:user_r:user_t:s0(默认情况就是这样);
test2的security context 是user2_u:user_r:user_t:s2;(需要手动修改安全上下文)
修改test2的安全上下文:
首先需要创建一个se用户user2_u:
semanage user -a(add) -R(role) user_r -P(prefix) user -L(level) s2 -r(range) s2 user2_u
;然后将se用户user2_u映射到linux用户test2:
semanage login -a(add) -s(se user) user2_u -r(range) s2 test2
使用id查看主体的安全上下文,设置成功:
2、使用root管理员在/目录下创建一个test文件夹,并且在test文件夹中创建四个不同安全等级的文件s0-s3,内容分别是打印"Hello mls-sX"。并且权限都是777(包括父目录test)
3、分别登录test1、test2对这四个文件进行读写操作。
由于test1安全等级是s0、test2安全等级是s2。根据NFSARK系统的MLS策略(下同读,同写),我们可以验证出这个结果。
test1只能读和写mls-s0(下同读,同写)
test2可以对mls-s(0-2)读(下同读)、只能对mls-s2写(同写)
子任务二、
任务描述:测试NFSARK系统的MLS机制(禁止用户对文件上读功能,只能同等级写)(缺省密级,只比较范畴)
1、准备主体实验环境:test1-3用户,范畴分别是c0、c2、c1,c2。
与子任务一步骤相同,先创建SE用户,然后映射Linux用户,这里只展示SE用户。
semanage user -l
2、准备客体实验环境:mls-c(0-3),范畴分别是c0、c1、c2、c0-c3
3、验证NFSARK系统的MLS策略,同密级看主体客体范畴的互相包含关系 来比较安全等级。
验证结果与理论验证相同。主体比客体的安全等级高或者相等,可以读。主体和客体安全等级相同可以写。
子任务三、
任务描述:测试NFSARK系统的MLS机制(禁止用户对文件上读功能,只能同等级写)(综合密级和范畴比较安全等级)
1、准备主体实验环境:test3用户,密级s2,范畴c1、c2。
2、准备客体实验环境:mls-c(0-4),安全等级分别是[s0, {}]、[s1, {c0}]、[s2, {c2}]、[s3, {c1 c2}]、[s2, {c1 c2}]。
3、验证NFSARK系统的MLS策略,综合密级的大小和范畴的互相包含关系 来比较主客体的安全等级,验证最终的执行结果
通过比较可以得出结果。
test3用户可读mls-s0、mls-s2、mls-s4,可写mls-4。
其中对mls-s1是不可比的操作,因为主客体的范畴没有互相包含的关系、对mls-s3是被支配的关系,没有权限读,因为范畴相同看密级,s3 > s2,所以主体等级低于客体。
子任务四、
任务描述:针对NFSARK系统MLS机制的小练习
1、有一个user用户,它的se用户是user_u,密级是s0,缺省范畴,它在自己的家目录下轻松愉快的创建了文件newfile,写入内容保存了一下。
2、安全管理员secadm改变了newfile的密级,改为了s3。
pvexec chcon user_u:object_r:user_home_t:s3
3、user用户再次登录操作已发现主体的安全等级已经不能读与写了。
子任务五、
上读的审计功能
1、准备主体环境test1:[s0,{}]
2、准备客体环境
3、审计管理员添加审计规则,并切换到主体用户test1对/test/路径下的两个文件进行cat操作
插入审计点在路径下
auditctl -w /test;
4、审计管理员查询审计日志,查看是否记录
ausearch -f mls-s0/mls-s1
使用文件名查询审计日志
子任务六、
使用NFSARK的MLS机制对写入进行控制
1、主体环境:test1、安全等级[s0, {}];
和子任务五相同
2、客体环境:test1家目录创建一个testdir,并进行wget下载操作。
3、安全管理员修改testdir的安全等级为[s3, {}];
pvexec chcon -l s3 /home/test1/testdir
4、切换到test1用户再次尝试wget到 testdir下失败,并且进入文件夹的权限都不够了。是因为NFSARK系统的MLS规定只有安全等级相同才能写入(下载到文件夹里内容,相当于写文件夹),同时主体被客体支配,也不能读。
BIBA完整性模型
前言
BIBA模型有自主策略和非自主策略两大类,这两类策略都分别又有几种策略实现。BIBA完整性模型不同与BLP机密性模型,BIBA模型是一个策略的集合,多种策略供选择,BLP模型的策略固定。在BIBA模型中最经典核心的就是严格完整性策略(NO READ DOWN,NO WRITE UP)。
BIBA模型的策略是通过比较主体和客体或者主体和主体之间安全等级的高低(支配关系),来限制操作的。安全等级通常由两个维度来表示[密级, {范畴}]。当A密级大于等于B并且A的范畴包含B的范畴,我们称这种关系叫A支配B(A安全等级大于B)。当两个实体(主体或客体)的范畴没有互相包含的关系时,称之为不可比。BIBA模型给每一个主客体都赋予了安全等级。
NFSARK系统支持BIBA模型的非自主访问策略中的严格完整性策略。与BIBA模型的定义不同,NFSARK系统主客体的密级可以是一个范围。详情见实训文档。
NFSARK系统通过标签label标记主客体的安全等级。BIBA模型的密级g分成了0-31的32级别,范畴t分成了0-223的224类。
high标签:等价于g31.t0-t223
equal标签:等价于low-high,g0-g31.t0-t223
low标签: 等价于g0
提供一系列命令,对biba模型的控制进行支持。值得一提的是,NFSARK系统对BIBA模型的控制只能在安全管理员和root维护模式下进行。
子任务一、
任务描述:学习开启和关闭biba
使用enablebiba
可以查询biba的开启状态、enablebiba -s 0/1
可以开启biba或者关闭biba。开启和关闭biba必须要在维护模式下。
1、查看biba状态
2、在维护模式下尝试关闭和开启biba
进入维护模式的方法是重启系统,随意按键盘,会出现图形化界面,选择第二个模式进入即可。
子任务二、
任务描述:学习使用chbiba命令修改用户的完整等级
1、在维护模式下修改当前root用户的完整等级
chbiba -u 标签
修改当前用户的完整等级
2、在用户模式下无权限作此操作。
子任务三、
任务描述:学习使用setbiba修改客体的完整等级
1、root用户在家目录下创建一个test文件
2、在维护模式下将test文件的完整等级降级到equal
3、用户模式下无权限
子任务四、
任务描述:使用ls --biba查看目录的BIBA标签
1、查询/var一层文件的BIBA标签
ls --biba /var
2、递归查询/var目录下所有文件的BIBA标签
ls -R --biba
BIBA策略管理
前言
子任务一、
任务描述:编译biba策略
1、root管理员在维护模式下,使用policy_parser编译一个策略bibafile
先准备一个策略文件bibafile,内容为
user:"test":g10:g10
然后
policy_parser bibafile bibafile.bin
编译生成二进制文件
2、root管理员在普通模式下无权限编译
3、安全管理员在普通模式下可编译
子任务二、
任务描述:加载biba二进制策略文件
1、root用户在维护模式下,使用loadbiba加载子任务一编译的策略文件。
loadbiba -f bibafile.bin
2、root用户在普通模式下无权限执行。
3、安全管理员在普通模式下加载策略二进制文件,成功。
loadbiba -f bibafile.bin
子任务三、
任务描述:在普通模式下编译加载策略文件
1、在/bibatest/目录下准备一个策略文件policy
policy内容为:user:“test”:equal:g25
2、切换到安全管理员编译加载策略文件
policy_parser policy policy.bin
loadbiba -f policy.bin
发现在根目录的bibatest中不允许加载policy.bin,
查看上下文发现policy.bin的type是biba_config_t,只能在维护模式下修改安全上下文的type才能加载。
因此选择copy该bin文件到安全管理员的家目录加载的方式解决。
成功。
子任务四、
任务描述:读取高安全等级文件
准备环境:
user1 equal:g15、user2 equal:g15~g20,缺省了范畴t;
1、安全管理员将/bibatest/test1的密级设为默认的高级别,将/bibatest/test2的密级设为25~30之间
chbiba -f /bibatest/test1 high
chbiba -f /bibatest/test2 g25~g30
2、user1和user2都可以对test1、test2执行cat,因为客体的安全等级更高。
子任务五
任务描述:尝试写入被支配关系的客体
1、子任务4的环境,尝试用user1去写如test1和test2
结果显而易见,biba完整性模型不能写高。
子任务六
任务描述:尝试读支配关系的客体
1、子任务4\5的环境,将test1和test2的客体安全等级降级,通过降低它们的密级。
chbiba -f 文件名 密级:范畴
2、切换到安全等级为[g15, {}]的user1主体尝试读安全等级为[g0, {}]的test1和安全等级为[g1~g5, {}]的test2。
读取失败,必然!因为!NoReadDown!
子任务七、
任务描述:写低安全等级文件(严格完整性策略支持的!)
1、任务6的环境可以直接用,因为任务6正好是主体user1安全等级大于客体test1
没问题!这里用user2写test2同理,因为user2的密级是g15g20,test2的密级是g1g5。必然支配关系必然可写。
为什么不用user1写test2,user1的安全等级也大于test2啊!那是因为!test2的文件属主的test1,它对应的9位权限码字段给没有others的写权限。这里体会一下多策略权限取交的理念。