logo资料库

【2018hit计算机系统安全】实验二:细粒度权限管理及实现root能力的分发和管理.docx

第1页 / 共16页
第2页 / 共16页
第3页 / 共16页
第4页 / 共16页
第5页 / 共16页
第6页 / 共16页
第7页 / 共16页
第8页 / 共16页
资料共16页,剩余部分请下载后查看
计算机学院系统安全 实验二 细粒度权限管理及实现 root 能力的分发和管理
一、实验内容 (1) 模拟系统中密码修改机制,在自主访问控制系统中实现细粒度的权 限管理。配合第 3 章 在基于用户权限管理基础上,进行细粒度的权 限管理。 (2) 利用 root 的能力机制实现系统加固,有效实现 root 能力的分发和 管理。提供程序比较进行 root 能力管理前后系统安全性的差异。配 合第 4 章 实现 root 的多种能力的有效管理,提高 root 用户权利的 合理分发,测试 root 能力管理的安全性和有效性 二、实验设计 1.1 Linux 密码修改机制,passwd 程序功能的仿制实现 1、passwd 程序功能描述 在 Linux 中,passwd 程序是可信任的,修改存储经过加密的密码的影子密码 文件(/etc/shadow),passwd 程序执行它自己内部的安全策略,允许普通用户 修改属于他们自己的密码,同时允许 root 修改所有密码。为了执行这个受信任 的作业,passwd 程序需要有移动和重新创建 shadow 文件的能力,在标准 Linux 中,它有这个特权,因为 passwd 程序可执行文件在执行时被加上了 setuid 位, 它作为 root 用户(它能访问所有文件)允许,然而,许多程序都可以作为 root 允许(实际上,所有程序都有可能作为 root 允许)。这就意味着任何程序(当以 root 身份运行时)都有可能能够修改 shadow 文件。 2、实验要求 自己编制文件和程序,仿制 passwd 程序修改/etc/shadow 的功能,包括: a) 自己设置一个类/etc/shadow 文件 aaa,该文件中约定好内容格式,和读 取该文件的程序相配合,文件中包括超级用户及其内容、普通用户及其内容 b)编制程序使得:Root 用户能够读取和修改 aaa 文件中所有用户的内容普通 用户仅能够读取和修改 aaa 文件中属于自己用户的内容 c)普通用户能以 root 身份执行所编制的类 passwd 程序 2.1 root 的 capability 使用 1、 修改系统内核,配置 capability 的能力位,实现几种能力位的设置可验 证。 样例:redhat 2.4 下的能力 1)函数说明 getcap 可以获得程序文件所具有的能力(CAP). getpcaps 可以获得进程所具有的能力(CAP). setcap 可以设置程序文件的能力(CAP). 2、实验要求: (1)实现3种基本能力位的授权和查看,并分析授权前和授权后的差异; (2)系统启动时关闭某能力位,对系统的应用和安全性有何影响,以具体 能力位为例说明,比如 cap_sys_module,cap_linux_immutable (3)组合系统的部分能力位,实现系统的网络管理功能,或用户管理功能、 文件管理功能。 (4)编制攻击程序,测试能力位的安全性。
三、实验过程 1. 密码修改机制,passwd 程序功能的仿制实现 把 shadow 文件复制一下:然后粘贴在文件 myshadow 里,用命令: cat /etc/myshadow 查看复制文件。 Lab2.c 文件根据输入命令: ./lab2 show 是输出全部用户 ./lab2 change [user] password 是对 password 进行修改, 默认改为 6$FaUYKA8B$。因为 shadow 其实是加密后的密码,这里用 6$FaUYKA8B$来表示新密码。
Root 用户能够读取和修改 aaa 文件中所有用户的内容普通用户仅能够读取 和修改 aaa 文件中属于自己用户的内容 普通用户能以 root 身份执行所编制的类 passwd 程序
我们可以看到普通用户的 euid 和 suid 都为 0; 而且 shadow 文件属于 root,在组 shadow 中,但是 lab2 却可以修改它。说 明用户是用 root 权限去修改的 shadow。 下图中,Sakura 用户不可以看 shadow 文件,没有权限,但是却可以通过执 行./lab2 去查看权限位和密码加密值。说明普通用户能以 root 身份执行所编制 的类 passwd 程序。 2. root 的 capability 使用 (1)实现3种基本能力位的授权和查看,并分析授权前和授权后的差异; 授权能力 1:CAP_CHOWN 0(允许改变文件的所有权)
授权前:普通用户无权修改/bin/ls 的文件拥有者 授权普通用户可以用/bin/chown 程序更改任意文件的 owner,如下: setcap cap_chown=eip /bin/chown 查看/bin/chown 程序的能力值,如下: getcap /bin/chown /bin/chown = cap_chown+eip 切换到 test 用户,将/bin/ls 程序的 owner 改为 test,如下: su - test chown test.test /bin/ls ls -l /bin/ls -rwxr-xr-x. 1 test test 118736 Jun 14 2010 /bin/ls 授权后:可以看到普通用户 user1 成功修改了/bin/ls 文件的拥有者 1) cap_chown=eip: 是将 chown 的能力以 cap_effective(e),cap_inheritable(i),cap_permitted(p)三 种位图的方式授权给相关的程序文件. 2)如果改变文件名,则能力保留到新文件. 3)用 setcap -r /bin/chown 可以删除掉文件的能力. 4)重新用 setcap 授权将覆盖之前的能力. 授权能力 2:CAP_DAC_READ_SEARCH 2(忽略所有对读、搜索操作的限制) 授权前:普通用户无权查看/etc/shadow 文件的内容 授权后:普通用户可以查看/etc/shadow 文件的内容 setcap cap_dac_read_search=eip /bin/cat 切换到普通用户 su – test 查看/etc/shadow,如下: cat /etc/shadow root:$6$3hJf.BoIVU/cdLKb$JxLXcQScrLS032aFPAQvVc4RzKYNadcIIzxmzAIw.jejrYO Hhqdr0oV7sNBL.IhGBo.mMOYEdevlnCp2OGku8.:15094:0:99999:7::: bin:*:14790:0:99999:7::: daemon:*:14790:0:99999:7::: adm:*:14790:0:99999:7:::
授权能力 3:CAP_KILL 5 (允许对不属于自己的进程发送 kill 信号) 首先在终端 1 以 root 身份启动一个进程 top: 授权前:在终端 2 普通用户试图结束 top 进程,没有权限不够的提醒,但是 终端 1 root 用户的 top 进程还在运行。 我们先模拟没有加 CAP_KILL 能力的情况,如下: 终端 1,用 root 用户启用 top 程序,如下: su - root top 终端 2,用 test 用户 kill 之前的 top 进程,如下: pgrep top 3114 /bin/kill 3114 kill: Operation not permitted 我们发现无法对不属于自己的进程发送信号. 授权后:在终端 2 普通用户 user1 成功结束了终端 1 的 top 进程 下面我们用 CAP_KILL 能力的程序向不属于自己的进程发送信号,如下: 设定 kill 命令的 kill 位,如下: setcap cap_kill=eip /bin/kill 杀掉 3114 进程,没有问题,如下: /bin/kill 3114 echo $? 0 注意:普通用户要用/bin/kill 这种绝对路径的方式,而不能用 kill 这种方式.
除了以上的一步步操作,也可以直接运行以下代码: (2)系统启动时关闭某能力位,对系统的应用和安全性有何影响,以具体能 力位为例说明,比如 cap_sys_module,cap_linux_immutable 早期 linux 上信任状模型非常简单,就是"超级用户对普通用户"模型。普 通用户的很多操作需要 root 权限,这通过 setuid 实现。如果程序编写不好, 就可能被攻击者利用,获得系统的控制权。使用能力机制(capability)减小这 种风险。系统管理员为了系统的安全可以剥夺 root 用户的能力,这样即使root 用户也将无法进行某些操作。而这个过程又是不可逆的,也就是说如果一种 能力被删除,除非重新启动系统,否则即使 root 用户也无法重新添加被删除 的能力。 系统引导时删除部分能力能保护系统。如保护系统工具和日志的完整性。 CAP_SYS_MODULE:插入和删除内核模块:(但是对于在启动时,尚未加
分享到:
收藏