现代 IT 环境通常包含各种应用程序:在内部开发的软件、托管的软件平台、开源工具以及购买的解决方案。由于这些应用会访问敏感系统、数据以及其他 IT 资产,网络犯罪分子渴望在攻击过程中加以利用。
CIS Control 16 提供应用软件安全控制,以强化您组织的安全态势。本文解释了如何落实这些 CIS controls ,帮助您降低因编码错误、身份验证薄弱、不安全设计、不安全基础设施以及其他漏洞所带来的风险;这些都是攻击者用来访问敏感数据和系统的手段。
请注意,在 CIS Critical Security Controls Version 8 之前,关于如何保护应用程序的主题由 CIS Control 18 涵盖。
16.1. 建立并维护安全的应用程序开发流程
第一步是建立并实施一个安全的应用程序开发流程,涵盖安全编码实践、安全的应用程序设计标准与流程,以及第三方代码的安全性。同时,请确保为参与应用程序生命周期的所有人员(包括开发团队和实施团队)提供有关该流程的培训。其目标是营造一种网络安全意识文化,使每个人都理解贵组织的安全实践,并积极工作以尽量减少风险暴露。
这种做法也将提升贵组织对行业法规、法律要求以及内部治理要求的符合性。
16.2. 建立并维护一个流程,用于接收并处理软件漏洞
你还需要一个健全的漏洞管理流程,用于接收并处理软件漏洞。定期开展风险评估,以发现网络安全方面的不足,并建立流程,让团队成员在发现安全问题时(包括在事件响应期间)能够轻松提交。
务必指定负责处理漏洞报告并监控修复流程的角色,并考虑投资部署漏洞跟踪系统。
16.3. 对安全漏洞进行根本原因分析
要缓解安全漏洞,必须通过根本原因分析来理解潜在问题。根本原因分析不仅能帮助你解决特定漏洞,还能帮助你制定安全的配置基线,从而强化你的安全与合规态势。
16.4. 建立并管理第三方软件组件清单
创建第三方软件组件清单,包括团队在开发过程中使用的组件以及计划在未来使用的组件。请评估并记录这些软件组件对应用程序可能带来的风险,并通过识别和记录任何变更或更新来妥善管理你的清单。
16.5. 使用最新且可信的第三方软件组件
尽可能使用成熟且经过验证的软件和库。为这些组件寻找可信的来源,并在使用前评估软件是否存在任何漏洞。
确保所有第三方软件组件都拥有持续的开发者支持;如果没有,请禁用或移除这些组件。持续接收安全更新的软件资产有助于将风险暴露降至最低。务必仅使用可信且经过验证的来源来获取这些更新。当然,你还需要确保在合理的时间内安装更新,以维持系统和设备的完整性。
16.6. 建立并维护用于评估应用程序漏洞严重性的评级体系与流程
评估应用程序漏洞的严重性有助于你优先安排风险修复工作。专业提示:在设计你的评级体系时,请务必纳入该应用程序以及该漏洞对你的业务流程有多关键(有多重要)。另外,也可以考虑为应用程序建立一个最低安全可接受水平。
16.7. 在应用程序基础设施中使用标准化的加固(hardening)配置模板
使用业界推荐的模板来配置你的服务器、数据库以及 SaaS 和 PaaS 组件,有助于确保安全的配置,从而缓解漏洞并提升网络安全“卫生”(cyber hygiene)。
16.8. 将生产环境与非生产环境系统分离
为生产系统以及用于开发和测试的非生产系统创建并维护独立的运行环境。监控与生产环境之间的所有交互,以防止未授权人员访问它们。
除了活动监控之外,还应通过有效的账户管理来保障您的 IT 环境安全。仅授予用户账户其所需的权限,并将管理权限降到最低。还可以在使用 Active Directory 的环境中,借助 Group Policy 实施额外的数据保护措施。
16.9. 培训开发人员掌握应用程序安全理念与安全编码
您的开发人员需要接受有关编写安全代码的培训。只有当培训内容针对团队所处的特定环境和职责进行定制时,培训效果才最为显著。培训应包括应用程序安全领域的标准实践以及通用安全原则,并努力提高安全意识。SANS Institute 是学习信息安全与网络安全知识的优秀资源。
在编写安全代码方面的投入可以通过减少进行漏洞检测与修复所需的工作量来为您节省资金。
16.10. 在应用架构中应用安全设计原则
安全设计原则包括“永远不要信任用户输入”的指导方针,这涉及对所有用户操作进行验证,并进行显式的错误检查。
安全设计还包括尽量减小应用基础设施的攻击面。比如,你的团队可以移除不必要的程序、重命名或删除默认账户,并关闭未受保护的服务和端口。
16.11. 利用已验证的模块或服务来构建应用安全组件
用于应用安全组件的已验证模块或服务可用于 Identity management、加密、审计和日志记录。使用它们可以减少实施与设计错误,并将开发人员的工作量降到最低。
例如,使用现代操作系统有助于确保应用程序得到有效的识别、身份验证和授权,并创建安全的审计日志。仅使用经过广泛审查的标准加密算法,可以降低可能危及系统的缺陷风险。
16.12. 实施代码级安全检查
利用静态和动态分析工具,帮助你通过测试错误来确保开发者遵循安全编码实践。调研可用工具,找出那些能够对你的代码有效运作的工具。
16.13. 开展应用程序渗透测试
渗透测试可以帮助你发现应用程序中的漏洞,而这些漏洞可能在代码审查和自动化代码扫描过程中被忽略。本组件(CIS CSC 16)中的测试目标是识别弱点,包括互联网安全方面的差距,并评估你的应用程序环境在网络安全方面的韧性以及防御机制。
请记住,渗透测试的有效性取决于测试人员的技能。
16.14. 开展威胁建模
在威胁建模中,经过专门培训的开发人员会在开始编码之前,重点从每个访问级别或入口点出发,评估应用程序的设计中存在的安全风险。以结构化方式梳理应用程序、架构和基础设施,有助于进一步理解薄弱环节,从而改进网络防御,并保护数据免受未经授权的访问、窃取或破坏。
分享到
了解更多
关于作者
Dirk Schrader
安全研究高级副总裁(VP)
Dirk Schrader 是 Netwrix 的常驻 CISO(EMEA)以及安全研究高级副总裁(VP)。他拥有 CISSP(ISC²)和 CISM(ISACA)等资质,是一位在 IT 安全领域拥有 25 年经验的老兵。Dirk 致力于以现代化的方式应对网络威胁,从而推动网络韧性的发展。Dirk 曾参与全球范围内的网络安全项目:职业初期从技术与支持岗位做起,随后在大型跨国公司和小型初创企业中分别担任销售、市场与产品管理等职务。他已发表大量文章,强调为实现网络韧性,需要重视变更管理与漏洞管理。