4 最小权限原则

最小权限原则(最早由 Saltzer 和 Schroeder 提出):

每个程序和系统用户都应该具有完成任务所必需的最小权限集合。

限制代码运行所需的安全权限,有一个非常重要的原因,就是降低你的代码在被恶意用户利用时,造成的损失。如果你的代码仅仅使用最小权限来执行,恶意用户就难以使用它造成损失。如果你需要用户使用管理员权限来执行代码,任何代码中的安全缺陷,都会通过利用该缺陷的恶意用户,潜在造成更大的损失。

编写特权程序时的问题:

  • 程序需要该权限吗?

    • 如果程序不需要任何特殊权限来运行,它不应该是个特权程序。
  • 程序需要所有权限吗?
    • 我们只给予程序完成任务所需的最小权限集合。
    • 许多操作系统不向我们提供多种选择;我们可以选择包含所有 Root 权限的集合,或者不包含任何权限的集合。多数 Unix 系统就是这样,你要么是 Root 要么不是,没有中间值。
    • 多数现代 Unix 系统(和 Windows)引入了更多选择。这些系统将 Root 权限划分为多种字权限。使用这种自粒度,我们就可以更好应用最小权限原则。
  • 程序现在需要权限吗?
    • 程序通常偶尔不需要特定权限,它们在这个时候就变得不必要了。我们应该暂时禁用它们来满足最小权限原则。这么做的好处就是,放置程序犯下意外的错误,使之不能对需要禁用权限的事情造成损失。下面的图像展示了这个要点。
    • 稍后,禁用的权限可能就必要了,我们之后可以开启它。
    • 要记住,开启或禁用权限可以在特定场景下降低损失,当攻击者不能像漏洞程序注入代码的时候。如果攻击者可以向漏洞程序注入代码,注入的代码自己就能够开启权限。
  • 程序在未来需要权限吗?
    • 如果权限不再需要了,它就是不必要的,应该永久溢出,所以最小权限集合应基于未来的需求来调整。

Unix 为我们提供了什么机制,来实现最小权限原则?

  • 实用的系统调用:setuid()seteuid()setgid(),和setegid()
  • seteuid(uid):它为调用进程设置有效 UID。
    • 如果调用进程的有效 UID 是超级用户,uid参数可以是任何东西。这通常由超级用户用来暂时让渡/获取权限。但是,进程的超级用户权限并没有丢失,进程可以拿回来。
    • 如果调用进程的有效 UID 不是超级用户,UID 参数只能是有效 UID,真实 UID,以及保存的 UID。这通常由特权程序使用来恢复他的权限(原始的特权有效 UID 保存在保存的 UID 中)。
  • setuid(uid):它设置了当前进程的有效 UID。如果调用者的有效 UID 是 Root,也会设置真实和保存的 UID。
    • 如果调用进程的有效 UID 是超级用户,真实、有效和保存的 UID 全部会设为uid参数。之后,程序就不能够拿回 Root 权限(假设 UID 不是 Root)。这用于永久让渡高权限的访问权。
    • 想要暂时放弃 Root 权限的 Set-Root-UID 程序,假设身份是非 Root 用户,之后不能使用setuid来拿回权限。你可以使用seteuid调用来完成它。
    • 如果调用进程的有效 UID 不是超级用户,但是 UID 是调用进程的真实 UID 或者保存的 UID,那么有效 UID 会设置为uid。这类似于seteuid
  • 示例(在 Fedora 中):进程使用有效 UID = 0 来运行,真实 UID= 500,在调用它们之后,有效和真实 UID 是什么?
    • setuid(500); setuid(0);:答案:500/500(第一个调用生成 500/500,第二个调用失败)。
    • seteuid(500); setuid(0);:答案:0/500(第一个调用生成 500/500,第二个调用生成 0/500)。
    • seteuid(600); setuid(500);:答案:500/500(第一个调用生成 600/500,第二个调用生成 500/500)。
    • seteuid(600); setuid(500); setuid(0);:答案:0/500(第一个调用生成 600/500,第二个调用生成 500/500,第三个调用生成 0/500)。

雪城大学信息安全讲义 3.4 最小权限原则相关推荐

  1. 雪城大学信息安全讲义 五、竞态条件

    五.竞态条件 原文:Race Condition Vulnerability 译者:飞龙 1 竞态条件漏洞 下面的代码段属于某个特权程序(即 Set-UID 程序),它使用 Root 权限运行. 1: ...

  2. 雪城大学信息安全讲义 4.1~4.2

    四.缓冲区溢出漏洞和攻击 原文:Buffer-Overflow Vulnerabilities and Attacks 译者:飞龙 1 内存 这个讲义的"区域"(Area)和&quo ...

  3. 雪城大学信息安全讲义 3.1 Set-UID 机制如何工作

    三.Set-UID 特权程序 原文:Set-UID Programs and Vulnerabilities 译者:飞龙 这个讲义的主要目标就是来讨论特权程序,为什么需要他们,他们如何工作,以及它们有 ...

  4. 雪城大学信息安全讲义 3.3 提升 Set-UID 程序的安全性

    3 提升 Set-UID 程序的安全性 exec函数 exec函数系列通过将当前进程映像包装为新的,来运行紫禁城.有许多exec函数的版本,工作方式不同.它们可以归类为: 使用/不适用 Shell 来 ...

  5. 雪城大学信息安全讲义 七、格式化字符串漏洞

    七.格式化字符串漏洞 原文:Format String Vulnerability 译者:飞龙 printf ( user_input ); 上面的代码在 C 程序中十分常见.这一章中,我们会发现如果 ...

  6. 雪城大学信息安全讲义 六、输入校验

    六.输入校验 原文:Input Validation 译者:飞龙 1 环境变量(隐藏的输入) 环境变量是隐藏的输入.它们存在并影响程序行为.在编程中忽略它们的存在可能导致安全隐患. PATH 在 Sh ...

  7. 雪城大学信息安全讲义 4.5

    5 堆或 BSS 的缓冲区溢出 堆或 BSS 的内容 字符串常量 全局变量 静态变量 动态分配的内存 示例:覆盖文件指针 /* The following variables are stored i ...

  8. 雪城大学信息安全讲义 4.3~4.4

    3 对抗措施 3.1 应用安全工程原则 使用强类型语言,例如 Java.C#,以及其他.使用这些语言,可以避免缓冲区溢出. 使用安全的库函数 可能拥有缓冲区溢出问题的函数:gets.strcpy.st ...

  9. 雪城大学信息安全讲义 3.2 Set-UID 程序的漏洞

    2 Set-UID 程序的漏洞 2.1 隐藏的输入:环境变量 特权程序必须对所有输入进行安全检查.输入检查实际上是访问控制的一部分,特权程序必须这么做,来确保程序的安全.很多安全问题都是输入检查的错误 ...

最新文章

  1. MySQLWorkbench里的稀奇事之timestamp的非空默认值
  2. SCOI 2014 new :未来展望
  3. 大文件及文件夹上传(续)
  4. (三)SpringBoot之配置文件详解:Properties和YAML
  5. 解放你的双手-Sql Server 2000智能提示工具[破解版]
  6. 电商促销类插画素材,适合各种活动banner设计
  7. 上传相关js和jquery对象
  8. mysql 2.71828_Picasso 2.71828 用法
  9. BIO,NIO的区别,使用场景。
  10. 使用Visual Studio 2013编写Windows程序
  11. java 性能调优案例_java性能调优实战,java性能调优
  12. 计算机功能自定义,电脑鼠标自定义按键设置方法
  13. 西工大第三届“探索·解密”趣味密码比赛-个人WriteUp
  14. 下载dns linux命令,linux dns 部署命令(示例代码)
  15. 8000字干货:那些很厉害的人是怎么构建知识体系的
  16. 【每日最爱一句】2013.07.10
  17. html怎么设置页脚注释,Word写论文时怎么插入页脚注释?
  18. woo 语言最简单的生成验证码方式,是个人都能看懂,反正比py简单多了
  19. python求两个数的最大公约数穷举法_求两个数字的最大公约数-Python实现,三种方法效率比较,包含质数打印质数的方法...
  20. linux qq远程桌面连接,还在用QQ远程桌面?这款软件还能用手机控制电脑!

热门文章

  1. Fastone api provided for SMIC
  2. Cadence基础操作:Schematic编辑
  3. 公司文档数据如何才能做到防泄密
  4. Tegra_Multimedia API 例程学习之--00_video_decode
  5. 教师ppt计算机培训心得,教师多媒体教学培训心得体会范文
  6. open ssl android编译,aosp 编译过程中Jack server SSL error 错误解决方法
  7. 用Python计算利率,告诉你亏了多少?
  8. 趣头条们何以成就“无米之炊”
  9. 医用电子体温计开发方案
  10. 羊毛党如何撸MORE.ONE 的糖果(图文教程)类似candy one