类 Unix 系统安全编程指南
1. 安全编程的挑战
在 Linux 和 Unix 等类 Unix 系统上设计和实现真正安全的程序是一项艰巨的任务。因为一个真正安全的程序必须对潜在恶意用户控制的所有可能输入和环境做出适当响应。开发者需要深入了解平台,遵循相关指南,并采用保证流程,如检查和同行评审技术,以减少程序的漏洞。
2. 安全编程的关键准则
2.1 输入验证
要验证所有输入,包括命令行输入、环境变量、CGI 输入等。不要仅仅拒绝“坏”输入,而是要定义什么是“可接受”的输入,并拒绝任何不匹配的输入。
2.2 避免缓冲区溢出
确保长输入(以及长中间数据值)不能被用于控制程序。目前,这是主要的编程错误。
2.3 构建程序内部结构
- 确保接口安全。
- 最小化权限。
- 使初始配置和默认设置安全。
- 实现故障安全机制。
- 避免竞态条件,例如在共享目录(如 /tmp)中安全地打开文件。
- 只信任可信赖的通道,例如大多数服务器在进行安全检查或处理敏感数据(如购买商品的价格)时不能信任其客户端。
2.4 谨慎调用其他资源
- 将其值限制为有效值,尤其要关注元字符。
- 检查所有系统调用的返回值。
2.5 谨慎回复信息
- 尽量减少反馈。
- 处理对不可信用户的完整或无响应输出。
下面用表格总结这些关键准则:
| 准则 | 具体内容 |
| — | — |
| 输入验证 | 定义可接受输入,拒绝不匹配输入 |
| 避免缓冲区溢出 | 防止长输入控制程序 |
| 构建程序内部结构 | 确保接口安全、最小化权限等 |
| 谨慎调用其他资源 | 限制值、检查返回值 |
| 谨慎回复信息 | 减少反馈、处理输出 |
3. 相关资源和技术文章
网络上有大量关于安全编程的技术文章,以下是一些相关资源:
- [Advosys 2000] Advosys 咨询公司(原名为 Webber 技术服务公司)的《编写安全的 Web 应用程序》:http://advosys.ca/tips/web - security.html
- [Al - Herbish 1999] Al - Herbish 的《安全 Unix 编程常见问题解答》:http://www.whitefang.com/sup.
- [Aleph1 1996] Aleph1 的《为了乐趣和利益而破坏栈》:http://www.phrack.com/search.phtml?view&article=p49 - 14 或 http://www.2600.net/phrack/p49 - 14.html
下面是一个 mermaid 流程图,展示安全编程的基本流程:
graph LR
A[开始] --> B[输入验证]
B --> C{是否有效输入}
C -- 是 --> D[构建程序内部结构]
C -- 否 --> E[拒绝输入]
D --> F[避免缓冲区溢出]
F --> G[谨慎调用其他资源]
G --> H[谨慎回复信息]
H --> I[结束]
E --> I
这些资源涵盖了安全编程的各个方面,从基础概念到具体的编程技巧和漏洞分析,为开发者提供了丰富的学习资料。通过参考这些资源,开发者可以更好地理解和应用安全编程的原则,提高程序的安全性。
4. 更多相关资源介绍
除了前面提到的资源,还有许多其他有价值的资料可供安全编程学习者参考:
- [Anonymous 1999] 《Maximum Linux Security: A Hacker’s Guide to Protecting Your Linux Server and Workstation》:提供了关于保护 Linux 服务器和工作站的黑客视角指南。
- [Anonymous 1998] 《Maximum Security : A Hacker’s Guide to Protecting Your Internet Site and Network》:从黑客角度出发,介绍保护互联网网站和网络的方法。
- [Anonymous Phrack 2001] 《Once upon a free()》:探讨了相关编程中的特定问题。
以下用列表形式继续列举部分资源:
- [AUSCERT 1996] 澳大利亚计算机应急响应团队(AUSCERT)和 O’Reilly 的《A Lab Engineers Check List for Writing Secure Unix Code》:ftp://ftp.auscert.org.au/pub/auscert/papers/secure_programming_checklist
- [Bach 1986] Bach 的《The Design of the Unix Operating System》:介绍 Unix 操作系统的设计。
- [Beattie 2002] Beattie 等人的《Timing the Application of Security Patches for Optimal Uptime》:关于安全补丁应用时间以实现最佳正常运行时间的研究。
4.1 资源分类与特点
| 资源类型 | 特点 | 示例 |
|---|---|---|
| 编程指南类 | 提供具体编程的指导和技巧 | [Advosys 2000]、[Al - Herbish 1999] |
| 黑客视角类 | 从攻击者角度分析安全问题 | [Anonymous 1999]、[Anonymous 1998] |
| 操作系统设计类 | 讲解操作系统底层设计对安全的影响 | [Bach 1986] |
5. 不同资源在安全编程流程中的作用
不同的资源在安全编程的各个环节都能发挥重要作用。下面通过一个 mermaid 流程图来展示:
graph LR
A[输入验证阶段] --> B[编程指南类资源]
A --> C[黑客视角类资源]
D[构建内部结构阶段] --> B
D --> E[操作系统设计类资源]
F[避免溢出阶段] --> B
G[调用资源阶段] --> B
H[回复信息阶段] --> B
B --> I[提高编程安全性]
C --> I
E --> I
在输入验证阶段,编程指南类资源可以提供详细的输入验证方法和代码示例,黑客视角类资源则能让开发者了解攻击者可能利用的输入漏洞。在构建内部结构阶段,操作系统设计类资源有助于开发者理解系统底层机制,从而更好地设计安全的程序内部结构。避免缓冲区溢出、调用资源和回复信息等阶段,编程指南类资源都能提供关键的技术支持,最终共同提高编程的安全性。
6. 总结
安全编程是一个复杂且重要的领域,尤其是在类 Unix 系统上。通过遵循输入验证、避免缓冲区溢出、构建安全的程序内部结构、谨慎调用资源和回复信息等关键准则,并充分利用网络上丰富的相关资源,开发者可以显著提高程序的安全性。同时,了解不同资源在安全编程流程中的作用,能够更有针对性地学习和应用,从而在实际编程中更好地抵御各种潜在的安全威胁。希望广大开发者能够重视安全编程,不断学习和实践,为构建更安全的软件环境贡献力量。
超级会员免费看
1066

被折叠的 条评论
为什么被折叠?



