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

简介: 3 提升 Set-UID 程序的安全性exec函数 exec函数系列通过将当前进程映像包装为新的,来运行紫禁城。有许多exec函数的版本,工作方式不同。

3 提升 Set-UID 程序的安全性

  • exec函数
    • exec函数系列通过将当前进程映像包装为新的,来运行紫禁城。有许多exec函数的版本,工作方式不同。它们可以归类为:
      • 使用/不适用 Shell 来启动新程序。
      • 通过 Shell 处理命令行参数(Shell 可以引入比我们预期的更多功能。要注意 Shell 是个强大程序)。
    • 启动子进程涉及到依赖问题以及属性继承,我们之前看到它可能存在问题。函数execlpexecvp使用 Shell 来启动程序。它们使程序的执行依赖于当前用户安装的 Shell。例如,依赖于PATH和其它环境变量的值。函数execv跟家安全,因为它不向代码引入任何这种依赖。
    • system(CMD)调用向 Shell 传递字符串来执行子进程(即作为单独派生的进程)。它是个用于执行 EXEC 函数的方便的前端。
    • popen的标准实现也与之相似。这个函数打开到新锦成管道,以便执行命令,并读取任何输出作为文件流。这个函数也启动 Shell 来解释命令字符串。
  • 如何安全地调用程序?
    • 避免任何 Shell 的调用。不使用system,而是execveexecve不调用 Shell,system调用。
    • 避免execlp (file, ...)execvp(file,...),它们的语义类似于 Shell。它们使用文件内存作为 Shell 的标准输入,如果文件不是有效的可执行目标文件。
    • 小心可能使用 Shell 实现的函数。
      • Perl 的open函数可以执行命令,通常通过 Shell 来这么做。
  • 提升system的安全性

    • 要记住system首先调用/bin/sh。在 Ubuntu 中,它使用参数sh, -c和用户提供的字符串来调用execv /bin/sh
    • 在一些 Ubuntu 的早起版本中(例如 9.11),/bin/sh(实际上是 Bash)忽略 Set-UID 位选项。因此,在 Set-UID 中调用system(CMD)时,CMD 不会使用 Root 权限执行,除非 CMD 本身也是个 Set-UID 程序。下面 代码在 Bash 中丢弃了 Set-UID 位。

      if (running_setuid && privileged_mode == 0) 
          disable_priv_mode ();
      
      ... 
      void disable_priv_mode () { 
          setuid (current_user.uid);
          setgid (current_user.gid); 
          current_user.euid = current_user.uid; 
          current_user.egid = current_user.gid;
      }
    • 但是,上面的保护看似破坏了一些需要使用system的 Set-UID 程序。因此,从某个版本起,由于添加了其它条件(对于 11.04 和 12.04),保护被移除了。

      if (running_setuid && privileged_mode == 0 && act_like_sh ==0) 
          disable_priv_mode ();

      如果 Bash 通过/bin/sh符号链接调用,act_like_sh设为 1,因此权限没有禁用。但是,如果你直接将 Bash 变成 Set-UID 程序并尝试运行,保护仍然会有效,并且权限会丢弃。

相关文章
|
6天前
|
JavaScript Java 测试技术
基于Java的西藏民族大学创新学分管理系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的西藏民族大学创新学分管理系统的设计与实现(源码+lw+部署文档+讲解等)
14 0
|
6月前
|
安全 Cloud Native Go
猫头虎博主赠书二期:《Go黑帽子 渗透测试编程之道(安全技术经典译丛) 》
猫头虎博主赠书二期:《Go黑帽子 渗透测试编程之道(安全技术经典译丛) 》
50 0
|
10月前
|
监控 安全 容灾
CISP 考试教材《第 3 章 知识域:信息安全管理》知识整理
CISP 考试教材《第 3 章 知识域:信息安全管理》知识整理
86 0
|
11月前
Contest1041 - 2018年软件学院程序设计大赛(高年级组)重现赛
Contest1041 - 2018年软件学院程序设计大赛(高年级组)重现赛
|
SQL 安全 算法
(*长期更新)软考网络工程师学习笔记——Section 10 网络安全
(*长期更新)软考网络工程师学习笔记——Section 10 网络安全
(*长期更新)软考网络工程师学习笔记——Section 10 网络安全
|
C语言
让人心驰神往的CS专业,真相竟然是……
大家好,我是小熊(xiong)妹,现在在读大一,恩,传说中毕业就能年薪百万的计算机专业。 如果你问我,计算机学生一周中最重要的是什么,我会毫不犹豫地回答:最重要的当然是保住头发啦~
120 0
让人心驰神往的CS专业,真相竟然是……
|
SQL 运维 大数据
软件技术专业-就业提示(一、实施工程师)(下)
软件技术专业-就业提示(一、实施工程师)(下)
123 0
|
测试技术
软件技术专业-就业提示(一、实施工程师)(上)
软件技术专业-就业提示(一、实施工程师)(上)
97 0
|
NoSQL 虚拟化 容器
Google的系统工程师(SA)如何工作,互联网营销
  本文根据系统管理领域知名博客 Thomas A. Limoncelli 的 What is system administration like at Google 整理而成,添加了部分笔者观点。   Google的系统工程师(System Administrator)如何工作   由于Google的服务已经集群化,系统工程师并不大量接触硬件比如做安装服务器等事情。
1320 0
|
算法 物联网 区块链
干货!区块链入门、进阶、行业专家观点!1000篇好文帮你破解区块链密码!(下篇)
互联网时代已经深入整个世界,区块链问世时,人们感受到的是另一个全新时代脚步正在靠近,春节期间引发社区热点的“三点钟无眠区块链”给了2018年开场红,区块链正要迎来它的新元年。云栖社区特整理出1000篇关于区块链的文章分享给大家,从技术原理到应用实践,应有尽有。以下为下篇: