- 1、本文档共8页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
程序无法找到入口:找出并保护程序的入口
疯狂代码 http://CrazyC/ ĵ http:/CrazyC/Security/Article72056.html
本文论述了数据进入您各种途径重点是如何适当地对它们进行处理;您甚至可能还没有了解它们全部!本
文首先论述了如何设计来限制数据可以进入您途径以及您设计会如何影响哪些可以成为输入然后论述了各种区
别输入通道以及如何使用这些通道包括环境变量、文件、文件描述符、命令行、图形用户界面(GUI)、网络数据
以及其他输入
早在 2001 年许多大公司安装了应用“SAP R/3 Web Application Server demo”却没有发现它有个致命漏
洞这个应用中有个名为 saposcol 没有能保护自己免受恶意输入值攻击攻击者可以通过设置 PATH 环境变量来
改变 saposcol 寻找其他位置然后为 saposcol 创建个恶意“扩展”来运行由于 saposcol 具有 uid root 权限这
就意味着这个编程上失误本地用户可以 (作为 root)很快地获得整个计算机系统控制权(参阅 参考资料 中链接以
深入了解这点及本文中提到其他相关内容)
本专栏前期文章 指出了些常见输入数据类型以及检查它们思路方法但是如果您不知道所有数据自何处而来那么
只是知道如何检查数据类型是不够本文讨论了数据进入您各种区别途径 —— 有些并不是显而易见 —— 并着重
讨论了如何适当地去处理它们
如果您不控制攻击者就会来控制
安全中第道防线是检查每个不可信输入但是这是什么意思呢?可以归结为以下 3点:
限制暴露部分如果您分为若干块 —— 这通常是个好主意 —— 那么尽量设计得让攻击者根本不能和大多数块
通信这包括不能让他们利用各块的间通信路径如果攻击者不能查看、修改或者插入他们自己数据到那些通信路
径中(包括作为块间中间人潜入)那是最好了如果那不可能 —— 比如当块的间使用网络通信时 —— 那么使用加
密等机制来防范攻击者后续文章将更深入地讨论这问题
限制暴露部分所允许输入类型有时您可以修改设计以使只有少数输入可以接受 —— 如果可以那么就这样做吧
严格检查不可信输入真正“安全”应该没有任何输入但那种是没有用处因而您需要对来自于不可信源输入路径
数据进行严格检查前期文章 论述了如何检查各种区别类型数据;本文将帮助您确定这些数据来源这并不是说您
只 需检查进入您数据通常明智做法是检查多个位置数据但是您必须至少检查所有数据次并且明智做法是至少在
数据第次进入时进行次检查
类型决定切
您必须检查所有不可信输入 —— 但是什么是不可信输入呢?其中些取决于您要做什么如果您是数据浏览器或
者编辑器(比如文字处理器或者图像显示器)而这些数据有可能来自攻击者所以那是不可信输入如果您响应网络上
请求那些请求可能正是来自攻击者 —— 所以网络连接是不可信输入
另个重要原因是您是如何设计如果您运行时身份是“root”或者其他些特权用户或者有对数据(比如数据库中数
据)访问特权那么从中没有特权部分到那些有特权部分输入是不可信
尤其重要情形是所有“uid”或者“gid”只是运行个 uid/gid 就会获得特权这些特别难以保证安全为什么呢?
uid/gid 有特别多输入 —— 它们中很多输入多得惊人 —— 可以被攻击者控制
常见输入源
下面章节将讨论些常见输入以及如何处理这些输入当您编写时候这些输入每个都应该考虑如果它们不可信定要
谨慎对它们进行过滤
环境变量
环境变量可能令人难以置信地危险尤其是对那些 uid/gid 及它们危险原因在于以下 3个方面:
许多库和由环境变量以非常含糊方式控制着 —— 实际上很多都完全没有文档化命令 shell /bin/sh 使用 PATH
和 IFS 等环境变量加载器 ld.so (/lib/ld-linux.so.2) 使用 LD_LIBRARY_PATH 和 LD_PRELOAD 等环境变量很
多使用 TERM、HOME 和 SHELL 环境变量 —— 所有 这些环境变量都可用于开发这样环境变量数不胜数;对
调试来说它们很多都是晦涩变量并且将它们全部列出也是无济于事实际上您不可能了解全部环境变量有些并没
有文档化
环境变量是继承而来如果 A B而 B CC D那么 D 将获得环境变量就是 A 所获得环境变量除非有些在这个过程
中对其进行了改动这就意味着如果 A 是个安全而 D 开发者为了调试方便
文档评论(0)