实例介绍
该书详细介绍了linux中关于selinux部分功能的实现流程和关键代码分析
7.1.1.3基于创建者SID的文件系统.,, 7.1.2 Gcncralizcd Sccurity Context labeling ,,,,63 7.1.4 Mount-Point labeling 66 7.1.5 Initial SId 8 7.1.5.1 Initia1SID和 Initial sc的定义 7.1.5.2 Initia1SID和 Initial sc的写出和解析 70 7.1.5.3 Initia1SID和 Initia1SC的使用 71 7.1.6进程创建的内核数拥结构的标签 72 7.2何时需要为应用程序开发pp? ●··垂·看垂 72 3设计pp的一般过程 7.4为vock程序编写v1ock.pp ●垂春·垂 76 7.4.1第一阶段:定义基本的te,fc和.if文件 76 7.4.2第二阶段:根据 AVC Denied msg补充相应的规则 80 7.4.3第三阶段:使用 don audit规则屏蔽与冗余操作枓关的错误信息 7.4.4其他注意事项 8 7.5为 samhain程序编写 samhain.pp.. 85 7.5.1第一阶段:定义基本的.te,,fc和.if文件 事垂垂 7.5.2第二阶段:根据 AVC Denied msg补充相应的规则 0 7.5.3第三阶段:使用 don audi t规则屏蔽与冗余操作相关的错误信息 92 7.5.4图解:使用 samhain时的 Domain transition过程 春春鲁看D垂垂春 ,,93 7.6使用 SLIDE来开发pp,分析 SELinux源代码. 7.7编写pp时的注意事项 中垂鲁鲁··● ,,,,,,,,,,,94 8. SELinux问题分析步骤总结. 8.1排除DAC权限的问题 ,,,96 8.2检查用户当前所扮演的角色 96 3分析 AvC Denied message: Target的标签正确吗?, 8.4在系统启动过程中适时地修复错误的文件标签 97 应用程序的实际行为要和其pp的假设相一致 ,,,,98 8.6明确相应 domain所缺少的权限 8.7其他注意事项 8.7.1在 Permissive模式卜调试 ,99 8.7.2取消所有的 dontaudit规则. 8.7.3当心 MLS Constraints 100 8.7.4检査 SeLinux- aware应用程序的配置和编译选项 ,.101 8.7.5积极地和社区交互. 101 8.7.6使用 strace直接定位失败的系统调用(重要!).………102 8.8 selinux问题分析过程和方法举例( Revisited) ,,102 8.8.1实例一:用户无法在 console上正常登录-使用 strace定位失败操作102 8.8.2实例二: sysadm r无法正确使用 useradd命令 108 SELinux开发笔记.…, ,114 9.1使能对/dev/ console的支持 114 9.1.1提出问题:20101213及之前的 epolicy缺乏对 conso1e的支持 9.1.2分析问题 ··p 9.1.3解决问题 .116 9.1.4测试结果 117 9.1.5使用 strace观察 consolo被重新打标签的细节(new) ,,,,117 9.2 Socket labeling开发 ,118 9.2.1提出问题: socket默认继承其创建者的SID的副作用 ,,,,,118 9.2.2分析问题 119 9.2.3解决问题 119 9.2.4测试结果. ,.123 9.3给 role transition规则添加c1ass的支持,,..,,124 9.3.1提出问题-当前 role transition规则只对 process类有效 ,,124 9.3.2分析问题 ..,,,,,.124 9.3.3解决问题 D垂垂垂 ,,,,,125 9.3.4测试结果 ,,,,,131 9.3.5其他说明. 133 9.3.6经验总结 ●非春 …135 9.4增加 role attribute的攴持(new). ,,,136 9.4.1提出问题之一:roe- dominance规则的局限性 136 9.4.2提出问题之二:期望的 role attribute使用模型..140 9.4.3分析问题 142 9.4.4解决问题 D 143 9.4.5测试结果 63 9.4.6一个有意思的编译问题 ,,,,168 9.4.7有关role- types规则语法的讨论. ,,.171 9.5区分 tuna1e和 boolean(new). ··· 172 9.5.1提出问题无用的 tunable分支被写入 policy.X. 72 9.5.2分析问题 173 9.5.3解决问题 ,,174 9.5.4测试结果. 187 9.5.5其他经验总结 9.N在策略中指定 newcontext的缺省设置方法(todo) 192 9.N.Ⅰ提出问颋- newconteκt的设置策略被硬编码到机制中 192 10. SeLinux内核驱动分析小记 194 10.1LSM核心数据结构及相应回调函数 ,194 10.2 sELinux核心数据结构 .194 10.2.1 selinux对内核数据结构的扩展 194 10.2.1.1进程的安全属性 195 10.2.1.2文件和打开文件描逋符的安全属性 .,,.,,,,,,..195 10.2.1.3 socket的安全属性 10.2.1.4文件系统超级块的安全属性 196 0.2,2AVC数据结构. 197 10.2.3內核 policy中保存TE规则的数据结构. ,199 10.2.4內核 policy中保存RBAC规则的数据结构. 鲁鲁 ,,,,,200 10.2.5 SeLinux规则在内核中的检查点总结(new).. ,,,,,,201 10.3情景分析:打开文件时的相关函数调用链 201 10.4通过 SEL inuxfs访问内核 Security Server ,,,,,,,,,,,,,,208 10.4.1/ selinux/load和1 oad policy命令一装载冰解析 policy.二进制文件209 10.4.2/sc1inux/ relate1及 compute relabel命令-查询 type change规则211 10.4.3/ selinux/ create及 compute create命令-查询type_ transition规则211 10.4.4/ selinux/ member及 compute member命令-查询 type member规则.212 10.4.5/ selinux/ access文件和 compute av命令-查询a11ow规则...213 10.4.6/ selinux/user文件和 compute_user命令-查询用户登录后可能的SC213 10.4.7/ selinux/ initial contexts/-查询 Initia1SI对应的安全上下文214 10.4.8/ selinux/ class/-查询内核 class datum数拥结构(todo 10.5情景分析: Domain transition的实现 ●··垂·看垂 ,,,,,,,,,,,,,,,,,,,,,215 10.5.1 selinux setprocattr凼数-/proc/lpid/attr/“文件驱动 216 10.5.2 do execve的行为和相关 seLinux内核驱动 垂垂看 218 10.6情景分析:文件系统的挂载和新文件的创建 21 10.6.1文件系统的挂载过程(new) ..221 10.6,2确定新创建文件的标签...236 10.7 Context数据结构和u32sid之间的映射 241 10.7.1 sidtab node的定义和 sidtab的组织结构 .241 10.7.2 sidra_ insert函数- sidtab node的插入 · ,,,,,,,,,,,,,,242 10.7.3 sidtab context to sid函数返回或分配sid ..243 10.7.4 security transition sid函数-计算新 subject/ object的sid....244 10.7.5创建 context并注册到 sidtab以获得sid的时机. 249 10.7.6 security context to sid函数返回Sc字符对应的sid....250 10.7.7 sidtab scarch corc囪数- sidtab node的查找 ,,,251 10.7.8 security sid to context core函数-返回sid所对应的SC宇符串252 10.8 Class Mapping. .254 10.8,1C1 ass mapping的作用.. ,,,,,254 10.8,2 Class Mapping的创建 垂垂垂· ,,,,,,,,,,,,,,,,254 10.8.3 Class mapping的使用-c1ass/perm内核态和用户态索引的转换.257 10.8,4增加 class或者权限的方法 258 10.9和文件操作相关的回调数 9. 1 selinux file mprotect回调函数 259 10.10和 AF UNIX SOCket相关的回调函数(todo) ,263 10.11和程序执行相关的操作(todo) .264 10.11.1se1 inux bprm secureexec凼数-扩展 AT SECURE机制 264 10.11.1.1C库 AT SECURE机制介绍 264 10.11.1.2C库 AT SECURE机制演示 267 10.11.1.3 SELinux对 AT SECURE机制的扩展( Revisited) .269 11.用户态应用程序对 SeLinux的支持 272 11.11 selinux相关文件分析 ,272 11.1.1 selinux config,c文件.,, 272 11.1.2 gelfilecon.c文件, ,,,,272 11.1.3 procattr.c文件 .272 11.1.4 compute relate1.c文件(访问/ selinux/ relate1)..273 11.2 newrole源代码分析, 274 11.2.0 newrole命令的使用模型 274 2.1main函数 73 11.2.2 parse command linc arguments函数. ,,,276 11.2.3 relabel tty函数 276 1.3PAM模块分析. .,277 11.3.1 pam sC1inux.so作用分析(TODO 277 11.3.2pam1 oginuid,so作用分析 ,278 11.3.3 pam name space.so作用分析 .,279 11.3.3.1多态( polyinstantiation)的作用 ,,,,,,,,,,,279 11.3.3.2LSP对多态的配置 ,,,,,,,,,,,,,,281 11.3.3.3 SELinux对 polyinstantiation的支持 .,,,,281 11.3.3.4解决在使能多态后 crond的使用间题 282 11.3.3.5 pam namespace,so源代码分析(IODO 11.3.3.6有关 pam namespace.so的剩余问题 84 12. refpolicy的编译,链接,扩展 ,,,,,,,,,285 12.1描朮标识符的数据结构 85 12.1.1 type datum t 85 12.1.2 common datum t 12.1.3c1 ass datum t.,,,,,., ,,,.286 12.1.4ro1 e datum t..,,,,,, 曲D ,.,287 12.2描朮规则的数据结构.. 288 12.2.1 AVTAB AV和 AVTAB TYPE类规则. .,,,,288 12.2.2 rolc transition规则 ●·垂 ,,,,,,,,,,,,,,,,,290 12.3用户态 policy t数据结构分析. 12.3.1 policy t数据结构综诚 290 12.3.2 symtab符号表. 294 12.3.3 avrule block t, avrule decl t FH scope stack t 12.3.4 scope datum t-描迒标识符的定义者和使用者 297 12.3.5 scope index t-描逋一个b1ock/dec1内定义或引用的标识符.297 12.3.6 cond node t-描朮一个ir- else conditiona 298 12.4 module的编译- checkmodu1e.. 301 12.4.1编译过程核心数拥结构关系图 301 12.4.2 define policy- policy module词法分析... .302 12.4.3 begin optional- optional_ policy词法分析 304 12.4.4 declare type-type标识符的定义, ,303 12.4.5 require type-声明对type标识符的外部依赖 315 12.4.6 define te_ arab-TE规则的词法分析.. 318 12.4.7 define role_ trans- role transition规则的词法分析 324 12.4.8 define conditional-if- else conditiona1的词法分析. 29 12.5 module的链接- semodule1ink. 12.5.1链接过程核心数据结构关系图 340 12.5.2 symtab符号表的拷贝 ...,,,,,,341 12.5.2.1 p types符号表的拷贝 ,,..341 12.5.2.2所有其他标识符符号表的拷贝 ,,,,,,,,,,,,,,344 12.5.2.3 p roles符号表的修正 12.5.3 Scope符号表的拷贝 349 12.5.4链接过程的主要囪数调用链 12.6 module的扩展- semodule_ expand 370 12.6.1 expand过程核心数据结构关系图 ..370 12.6.2type的拷贝.. 371 12.6.3 common的拷贝 ,,,374 12.6.10 expand过程的核心函数调用链 ,.,,,376 12.6.11展开规则的“字面”描诚- copy and expand avrule block囪数..383 12.71ink和 expand过程的图解(new) ,,,,,,,,400 12.7.1Role/ attribute标识符的1ink和 expand..…………400 12.7.2 symtab的1ink和 expand ,,,,,,403 128规则中的m4宏定义(new).. ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,405 13. seLinux的应用 410 13. 1 Labeled Networking (half-baked) ,,,,,,,,,,,,,,,,,,,,,,,410 13.1.1 IPsec简介 ,,,,,410 13.1.2 seLinux对本地网络的控制( compat-net) ,,,,,,。,,,,,,,416 13.1.3用 Labeled ipsec实现分布式网络控制..417 13.1.4 Linux內核ⅹIM相关数据结构. 418 13.1.5和 IPsec相关的类,权限和援囗 D 418 13.1.6LSM中和 Labeled ipsec相关的回调函数 ,419 13.1.6.1检查一个f1ow(发送或接收)能否使用一个SPD条目 419 13.1.6,2给SPD/SAD分配安全属性. ,,,421 13.1.6.3释放SPD/SAD中的安全属性 ,,,,,,,,,,,,,,,.424 13.1.6.5逐包检查一个 socket能够接收一个skb 424 13.1.6,4获取发送方的安全上下文字符串.. ,,423 1.7 Labeled ipsec环境的搭建. 13.1.8观察 Labeled ipsec的行为 430 13.1.9和 Labeled ipscc相关的 SeLinux规则 ,432 参考文献 434 简化 selinux操作的bash配置方法 本文档各个版本的说明 437 注 第1至5章包含自己对《 SELinux By example》一书的学习心得; 第6至9章包含自己实际经验的总结 第10和11章为 selinux内核和用户态源代码分析总结 第12章为 refpolicy的编译过程源代码情景分析; 第13章打算收录些 SeLinux在内核或者用户态的应用,比如 Labeled Networking,XACl等。 l, Refpolicy有300+个p的实现,了解核心pp的实现,必须首先了解应用程序的行为以及安全目标 2,阅读 sELinux- aware应用程序源代码,看如何使用 libselinux库函数,学习 sELinux用户态编程 3,了解 sELinux语法,标识符的二进制表示形式,内核态和用户态的数据结构; 4,学习 policy module的 compile/ expansion/1ink过程 5,按照类别,逐步掌握LSM回调囪数的调用时机,所在内核子系统的原理,以及 SELinux对LSM回调函 数的实现(参考《 Implementing sElinux as a lsm module》一文) 6,掌握 seLinux对各个内核子系统核心数据结构的扩展 7,学习XAC规范,体会如何开发 Userspace Ob、 ject Manager; 8,积极阅读 Joshua,Dan等人的b1og,向前奉们学与。 9,积极关注 selinux邮件列表上的问答和讨论,丰富自己的视野 希望能通过自己坚持不懈的努力,证得同满的 sELinκ知识和智慧。 引子 1,软件的缺陷不可避免(无论过去,现在,或将来); 2,没有底层操作系统的支持就无法真正实现上层软件的安全性 D. Baker,《 Fortresses Built Upon Sand》 操作系统中访问控制模型的演化 1.1访问控制模型的概念( Reference moni tor) subjects Access objects Alert Yes or No? Feference validation Mechanism Rulee lampcrpra吋 DB Verifiable RY M 由上图可见,访问控制模型由如下四部分组成 1, Subjects:访间的发起者,比如系统中的进程 2, Objects:被访闩的对象,比如架作系统所管理的仼何资源丶数捃(包拈进程,任意类型文件,Tc尸端 口,甚至单个网络报文。总而言之,任何内核数据结构都可能成为被访问的对象) 3, Rules de:规则库,在用户态实现的访问策略,定义 Object的属性并规定哪些Sub、ect可以通过什 么样的方式对它进行访问; 4,RVM( Reference validation mechanism):在操作系统内实现的机制,是汸问控制策略的执行者,在 访问操作过程中根据规则库判断当前操作是否合法; Hinx首先需要标识访问者和被访问的对象,由下文可知相关信息保存在进程的 task struct以及其他 内核数据结构中 security指针所指向的数据结构中(注意这些数据结构都是运行时动态创建的,安全属 性信息来源于文件在辅存上的扩展属性,以及规则库中的 Initia1S1定义等)。白用户态定义的访问 规则库指定哪些访闩老能够以何种方弌访问哪些对象,而内核屮的SεLix机制则根据当前操作的访问 者和被访问对象,查询规则库得到Yes/No结论。 1.2DAC( Discretionary Access Contro1)的致命伤 ¨ discretionary”一词的含义为“ not contro1 led bv strict rules, but decided on by someone in a position of authority”,所以DAc的本质是由文件的属主定义其它用户对该文件的许可访问方 式,其“ owner-group-wor ld”模型如下: S 1s -1 /usr/bin/passwd rwsr-xr-x I rootroot 37084 2009-04-04 13: 49/usr/bin/passwd 系统中所有文件属主给各自文件所定义的“ owner-group-wor d”模型的总和,即为DAC下访问规则库的 实现。 DAC的开发环境(相对封闭的开发社区,或大学实验室)和对软件使用环境的假设(软件没有缺陷且运行 环境友好)注定了DAC存在着天生缺陷:进程和文件的安全属性都基于(且总是基于)uid/euid和 gid/egid,无论进程执行什么应用程序,其uid/euid都不改变(暂不考虑 setuid类程序),无 法将进程所执行程序的行为和可靠性(安全性)标识到进程的安全属性中,导致操作系统无法有 针对性地对进程施加访问控制 比如,用户登录 shell进程会创建子进程以执行shel1的外部命令,子进程继承父进程的uid/gid,所以 无法通过uid/gid来区分父子进程,即无法区分用户人为的操作和通过程序执行的操作。比如,无法限 制 passwd程序只能被用户在命令行执行,而不能被属于该用户的其它进程执行。显然,“用户(登录 hc11进程)是可信的”绝对不等于“用户执行的程序(后继fork的子进程)也是可信的”。登录sh1 进程的行为由用户有意识地支配,而属于该用户的进程的行为则由其执行的实际程序决定。但是程序可 能冇在安全漏洞,一巨被攻击植入恶意代码,黑客将具有该用户在系统上的所有权力(比如恶意删除用 户的文件,盗取uid/gid所能读取的文件的内容,执行 passwd程序修改用户的密码) 另外,用户进程可以执行各种应用程序,而这些程序自身的行为丶对系统安仝性的景响都不尽相同,比 如网络类应用程序更容易受到外界病毒的攻击,相应地操作系统应该对此类应用施加更为严格的访冋控 制。显然无法通过进程的uid/gid来描当前进程所执行的程序的安全性,因此操作系统也无法有针对 性地实施访问控制。 综上所逋,仪将uid/gid来作为进程和文件的安全属性是远远不够的 最后,DAC的另一个缺点是对权力的管理和划分不够细致(只有两种情况:root或non-root),无法进 步细分丶限制root用户的能力。一旦euid/ egid为0的进稈被攻破,将危害整个系统的安全 1.3MAC( Mandatory access Contro1)的起源 针对DAC的缺点,在ⅥAC中不再由访问对象的属主定义不同用户对其的许可访问方式,而是由匿定的规则 库决定。 MAC最初的研究由美国军方的MLS(u1ti- Leve1 Security)应用所推动,它将访问主体和被访问对象分 成不同的安全级别,严格控制信息只能从低安全级别向高安全级别流动:低安全级别的丰体只能向高安 全性的数捃对象中追加新的数据,并∏禁上读取;高安全级别的主体能够读取低安全级别的数据,并且 禁止任何形式的写入(即“ no read up, no write down”) ⅥS只定位于数据保密性而并不关心数据完整性和最小权能原则( east, Privilege),以及对进程的能 力进行分类。后来的FASK安全系统模型着眼于解决这些不足,而 SELinux则是FASK在 Linux内核中的 实现 1.4 Selinux的TE( Type Enforcement)模型 SELinux作为MAC的一和实现,通过中央规则库( policy.x,二进制数据文件)给所有进程丶所有文件 内核数据结构定义各自的安全标识(标签,1abel/type),明碓定义被访问对象所支持的访问方式,并 规定进程标签对被访问对象的合法的访问方式。在配置 SELinux时给整个文件系统上的所有文件设置标 签,在系统启动过程中init进程经由 selinux接口装载 policy.X到內核空间,由內核中的 Securitv Server在处理用户态系统调用时实时査询(注,这里所说的“ Security server”,即为 sELinux内核驱 动中定义的各种数据结构,比如 sistah, policy, AVC cache,以及在 services.c文件中定义的各种 以“ security”开头的函数) 【实例截图】
【核心代码】
标签:
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论