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

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 程序并尝试运行,保护仍然会有效,并且权限会丢弃。

展开阅读全文

150讲轻松搞定Python网络爬虫

05-16
【为什么学爬虫?】        1、爬虫入手容易,但是深入较难,如何写出高效率的爬虫,如何写出灵活性高可扩展的爬虫都是一项技术活。另外在爬虫过程中,经常容易遇到被反爬虫,比如字体反爬、IP识别、验证码等,如何层层攻克难点拿到想要的数据,这门课程,你都能学到!        2、如果是作为一个其他行业的开发者,比如app开发,web开发,学习爬虫能让你加强对技术的认知,能够开发出更加安全的软件和网站 【课程设计】 一个完整的爬虫程序,无论大小,总体来说可以分成三个步骤,分别是: 网络请求:模拟浏览器的行为从网上抓取数据。 数据解析:将请求下来的数据进行过滤,提取我们想要的数据。 数据存储:将提取到的数据存储到硬盘或者内存中。比如用mysql数据库或者redis等。 那么本课程也是按照这几个步骤循序渐进的进行讲解,带领学生完整的掌握每个步骤的技术。另外,因为爬虫的多样性,在爬取的过程中可能会发生被反爬、效率低下等。因此我们又增加了两个章节用来提高爬虫程序的灵活性,分别是: 爬虫进阶:包括IP代理,多线程爬虫,图形验证码识别、JS加密解密、动态网页爬虫、字体反爬识别等。 Scrapy和分布式爬虫:Scrapy框架、Scrapy-redis组件、分布式爬虫等。 通过爬虫进阶的知识点我们能应付大量的反爬网站,而Scrapy框架作为一个专业的爬虫框架,使用他可以快速提高我们编写爬虫程序的效率和速度。另外如果一台机器不能满足你的需求,我们可以用分布式爬虫让多台机器帮助你快速爬取数据。   从基础爬虫到商业化应用爬虫,本套课程满足您的所有需求! 【课程服务】 专属付费社群+每周三讨论会+1v1答疑
©️2020 CSDN 皮肤主题: 黑客帝国 设计师: 上身试试 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值