保证主机的安全
保证主机安全时,无论是 Web 服务器、应用程序服务器或数据库服务器,本指南把不同的安全配置设置分成单独的类别。按照这种方法,可以注意特定的类别并检查安全性,或应用与该特定类别相关的安全设置。按照这种方法在服务器上安装新软件时,可以评估安全设置的影响。例如,可以提出如下问题:该软件创建新的帐户吗?该软件添加任何默认服务吗?该服务以什么身份运行?是否创建了任何新的脚本映射?
主机配置的类别
图 2 显示了本指南第 IV 部分中使用的不同的类别,“保证网络、主机和应用程序的安全。”
图 2. 主机安全的类别
按照这些类别提供的框架,可以系统地评估或保证服务器配置的安全,而不是在特别的基础上应用安全设置。这些特定类别的基本原理如表 2 中所示。
表 2. 主机配置类别的基本原理
类别
说明
修补程序和更新
存在许多严重的安全风险,因为缺陷被广泛发布且广为人知。发现新的缺陷时,开发代码在第一次成功攻击的几小时内就可能频繁张贴在 Internet 公告板上。对服务器软件使用修补程序并更新是保证服务器安全的第一步。如果服务器没有使用修补程序并更新,将为攻击者和恶意代码提供更多潜在的机会。
服务
服务集合由服务器的角色和其承载的应用程序决定。通过禁用不必要和不用的服务,可以快速轻松地减少受攻击的区域的范围。
协议
为减少受攻击的区域的范围和为攻击者开放的通路,禁用任何不必要或不用的网络协议。
帐户
从服务器可以访问的帐户个数应该限制在必要的服务集合和用户帐户上。另外,应该加强相应的帐户策略,例如强制使用可靠的密码。
文件和目录
文件和目录应该使用受限的 NTFS 权限保证其安全,该权限仅允许访问必要的 Microsoft Windows 服务和用户帐户。
共享
所有不必要的文件共享,包括不需要的默认管理共享,都应该去除。使用受限的 NTFS 权限保证剩余共享的安全。
端口
运行在服务器上的服务监听特定端口以对传入的请求进行服务。必须知道并定期审核服务器上的开放端口,保证不安全的服务没有处于监听状态且对于通信不是可用的。在最坏的情况下,检测到监听端口,但管理员并未开启它。
审核和日志记录
审核是识别入侵者或正在进行的攻击的重要辅助手段。日志记录在确定入侵或攻击如何执行时是特别有用的呈堂证供。
注册表
许多与安全相关的设置在注册表中维护。应用受限的 Windows ACL并阻止远程注册表管理来保证注册表自身的安全。
保证应用程序的安全
如果要检查并分析许多 Web 应用程序的重要安全问题,将发现问题有模式可循。通过将这些问题进行分类,可以系统地处理它们。这些问题区域构成应用程序缺陷的类别。
应用程序缺陷的类别
比评估其潜在弱点更好的评估系统安全性的方法是什么?为评估应用程序的安全恢复能力,可以评估应用程序缺陷的类别。当这么做时,可以创建应用程序安全概况,然后使用这些概况确定应用程序的安全强度。
本指南中将这些类别作为框架使用。由于这些类别反映了安全错误最频繁出现的区域,用它们来为应用程序开发人员和架构师解释指导。这些类别在评估 Web 应用程序的安全性时也作为框架使用。使用这些类别,可以一直关注最影响应用程序安全的关键性的设计和实现方法的选择。应用程序缺陷的类别如表 3 中所述。
表 3. 应用程序缺陷的类别
类别
说明
输入验证
如何知道应用程序收到的输入是有效且安全的?输入验证指应用程序如何在额外处理前筛选、删除或拒绝输入。
身份验证
“您是谁?”身份验证是一个实体验证另一个实体身份的过程,通常通过凭据进行,例如用户名和密码。
授权
“您能做什么?”授权是指应用程序如何提供对资源和操作的访问控制。
配置管理
应用程序以什么身份运行?它连接到哪些数据库?如何管理应用程序?这些设置如何保证安全?配置管理指应用程序如何处理这些操作问题。
敏感数据
敏感数据指应用程序如何处理任何在内存中、线路中、或永久性存储区中都必须保护的数据。
会话管理
会话指用户和 Web 应用程序之间的一系列相关交互。会话管理指应用程序如何处理并保护这些交互。
加密技术
如何保护秘密(机密性)?如何防止对数据或库的篡改(完整性)?如何为必须具有很强的机密性的随机值提供种子?加密技术指应用程序如何加强机密性和完整性。
参数操作
窗体字段、查询字符串参数、和 cookie 值经常用作应用程序的参数。参数操作指应用程序如何防止这些值的篡改和应用程序如何处理输入参数。
异常管理
当应用程序中的方法调用出现故障时,应用程序进行哪些操作?显示了多少?是否返回友好的错误信息给最终用户?是否把有价值的异常信息传递回调用者?应用程序的故障是否适当?
审核和日志记录
谁做了什么以及何时做的?审核和日志记录指应用程序如何记录与安全相关的事件。
安全原则
本指南中使用的建议是基于长期经过验证的安全原则。安全,如同软件工程的许多方面一样,使用一个基于原则的方法,无论实现技术或应用程序情况如何都可以应用核心原则。本指南使用的主要安全原则的小结如表 4 中所示。
表 4. 核心安全原则小结
原则
概念
划分
减少受攻击的区域的范围。自我询问将如何控制一个问题?如果攻击者掌握了应用程序,他或她可以访问哪些资源?攻击者能够访问网络资源吗?如何限制潜在的破坏?防火墙、拥有最少特权的帐户、和拥有最少特权的代码是划分的例子。
使用最少的特权
使用具有最少特权和访问权限的帐户运行进程,如果攻击者设法损害了安全性并运行代码,可以很大程度上减少攻击者的能力。
应用深入的防御手段
使用多网关守卫使得攻击者无法深入。深入的防御手段表示不依赖单层的安全性,或认为某一层可能被绕过或损害。
不要信任用户的输入
当攻击者认定您的应用程序作为目标时,应用程序的用户输入是其主要武器。验证前假定所有的输入都是恶意的,对输入验证应用深入防御策略,采用特别的防范措施保证应用程序中通过信任边界的任何时候的输入都是经过验证的。
在网关处进行检查
提前对呼叫者进行身份验证和授权——在第一个网关处。
出现故障时的安全性
如果应用程序出现故障,不要使敏感数据可以访问到。给最终用户返回友好的错误信息,不要暴露内部系统的细节内容。不要包括可能帮助攻击者利用应用程序缺陷的细节内容。
保证最脆弱的链接的安全
网络层是否有攻击者可以利用的缺陷?主机情况如何?应用程序安全吗?该链中的任何一处脆弱的链接都是违背安全性的机会。
创建安全的默认值
建立的默认帐户是否设置为具有最少的特权?默认帐户是否默认成是被禁用的且在需要的时候可以显式启用?配置是否使用了明文密码?错误出现时,泄露到客户端的敏感信息是否可能被用于对系统造成潜在的不利影响?
减小受攻击的范围
如果不使用的话,将其删除或将其禁用。通过禁用或删除不用的服务、协议和功能来减小受攻击的区域范围。服务器是否需要所有那些服务和端口?应用程序是否需要所有那些功能?
小结
应用程序所受到攻击的数量不断增长。它们使用 HTTP 直接通过环境的前门攻击。用于隔离情况时,传统的防御模型以及对防火墙和主机防御的依赖是不够的。保证应用程序的安全包括在三个层次上应用安全性:网络层、主机层、和应用程序层。安全的网络和主机平台基础结构是必需的。另外,必须使用安全的设计和开发指南(遵循经过时间检验的安全原则)来设计和构建应用程序。