什么是攻击面分析?为什么要做攻击面分析?
攻击面分析这个概念有很多师傅研究过,也有很多公司已经落地,攻击面分析很大,大到从资产管理、供应链管理、数据管理等方方面面,涵盖内部攻击面与外部攻击面,包括主机层、网络层、应用层等各个层级,这里我想以开发的视角浅谈,以数据流转全过程去分析应用程序的攻击面管理。
从我个人来看,攻击面分析是关于映射出需要审查和测试安全漏洞的系统部分。攻击面分析的目的是理解应用程序中的风险领域,让开发人员意识到应用程序的哪些部分容易受到攻击,寻找最小化攻击面的方法,并注意到攻击面何时以及如何变化,以及这些变化对风险意味着什么。这里的重点在于保护应用程序免受外部攻击——它不考虑对用户或系统操作者的攻击(例如,恶意软件注入、社会工程攻击),并且对内部威胁的关注较少。
攻击面分析能够帮助业务:
- 确定需要审查/测试安全漏洞的系统功能和部分
- 确定需要深度防御保护的高风险代码区域——业务需要保护的系统部分
- 确定何时更改了攻击面并需要进行某种威胁评估
定义应用程序的攻击面
攻击面是指攻击者可能进入系统的所有不同点,以及他们可能获取数据的地方。这里不仅包括暴露面,还包括非暴露面(如开源组件),所以我个人来看,攻击面是包括暴露面更大的范围。
应用程序的攻击面是:
- 进入和退出应用程序的所有数据/命令路径的总和
- 保护这些路径的代码(包括认证、授权、活动日志记录、数据验证和编码)
- 应用程序中使用的所有有价值数据,包括密钥和秘密、知识产权、关键业务数据、个人数据
- 保护这些数据的代码(包括加密和校验和、访问审计以及数据完整性和操作安全控制)。
而底层逻辑,即数据流,即数据全生命周期流转所造成的安全风险。
如何识别和映射攻击面(checklist)
识别攻击面的方法有很多,可以通过图片和笔记开始构建攻击面的基线描述。通过阅读源代码并识别不同的入口/出口点:
- 用户界面(UI)表单和字段
- HTTP头和cookies
- API
- 文件
- 数据库
- 其他本地存储
- 电子邮件或其他类型的消息
- 运行时参数
- ……
也可以根据功能、设计和技术将模型分解为不同的类型:
- 登录/认证入口点
- 管理界面
- 查询和搜索功能
- 数据输入(CRUD)表单
- 业务工作流
- 事务接口/API
- 操作命令和监控接口/API
- 与其他应用程序/系统的接口
- ……
这里我以数据视角整理了一个攻击面checklist供各位师傅与开发的朋友们共同参考:
数据收集与输入
- 用户输入:通过Web表单、API请求、命令行界面等途径收集用户数据。
- 自动输入:来自自动化工具、设备或其他系统的自动化数据输入。
- 第三方数据源:集成第三方服务或平台提供的数据。
数据传输
- 前端到后端:用户输入在前端收集后,通过HTTPS请求发送到后端服务器。
- 内部网络传输:后端服务之间的内部API调用或消息传递。
- 外部网络传输:与外部系统或服务的交互,如支付网关、邮件服务等。
数据处理
- 业务逻辑处理:根据业务需求对数据进行加工、计算和逻辑判断。
- 数据清洗:去除无效或不完整的数据,标准化数据格式。
- 数据转换:将数据转换成适合处理和存储的格式。
数据存储
- 数据库存储:关系型数据库、NoSQL数据库或其他持久化存储解决方案。
- 缓存存储:使用内存缓存如Redis来提高访问速度。
- 文件存储:将数据以文件形式存储在服务器或对象存储服务中。
数据访问与检索
- 用户查询:用户通过应用程序界面发起查询请求。
- 数据API:为其他系统或服务提供的数据访问接口。
- 后台访问:系统管理员或维护人员对数据的访问。
数据输出与展示
- 用户界面展示:将处理后的数据展示在用户界面上。
- 数据导出:允许用户将数据导出为CSV、Excel、PDF等格式。
- API响应:通过API将数据以JSON、XML等格式返回。
数据加密
- 传输加密:使用HTTPS、TLS等协议加密数据传输。
- 存储加密:对存储的敏感数据进行加密,如使用AES加密算法。
- 字段级加密:对敏感字段,如密码、个人身份信息等进行加密。
数据备份与恢复
- 定期备份:定期对关键数据进行备份。
- 灾难恢复计划:制定灾难恢复策略和流程。
- 备份验证:定期验证备份数据的完整性和可用性。
数据归档与删除
- 数据归档:将旧数据转移到低成本存储,以便于长期保存。
- 数据删除:根据数据保留政策,安全地删除不再需要的数据。
- 彻底销毁:对敏感数据进行彻底的删除处理,确保无法恢复。
数据审计与监控
- 访问日志:记录用户对数据的访问和操作行为。
- 操作审计:审计关键操作,如数据修改、删除等。
- 异常检测:使用入侵检测系统(IDS)或异常行为分析工具监控可疑活动。
数据隐私与合规性
- 数据脱敏:在处理或展示数据时,对敏感信息进行脱敏处理。
- 隐私政策:制定明确的隐私政策,告知用户数据收集、使用和共享的方式。
- 合规性评估:确保数据处理活动符合GDPR、CCPA等数据保护法规。
数据安全控制
- 访问控制列表:定义不同用户或角色对数据的访问权限。
- 权限最小化:确保用户和系统仅拥有完成其任务所需的最小权限。
- 数据完整性校验:使用哈希算法或数字签名确保数据未被篡改。
管理攻击面
这里的管理攻击面有两种思路,一是围绕着数据流做针对性安全编码checklist。另一种是以SDL为基础做整体安全开发建设。这里我列出一些关键的步骤供各位师傅们参考:
- 数据流映射:
- 绘制数据流图,标识数据在系统中的所有入口点和出口点。
- 资产识别:
- 确定所有处理、存储或传输数据的资产,包括服务器、数据库、网络设备等。
- 数据分类和标记:
- 根据数据的敏感性对数据进行分类和标记,以便实施适当的安全措施。
- 输入验证:
- 在数据进入系统时进行严格的输入验证,防止恶意数据导致安全漏洞。
- 实施访问控制:
- 确保只有授权用户才能访问、修改或删除数据。
- 数据传输安全:
- 使用加密协议(如TLS/SSL)保护数据在传输过程中的安全。
- 数据存储安全:
- 对存储的数据进行加密,确保数据在静态时的安全性。
- 会话管理:
- 实施安全的会话管理策略,包括安全的会话创建、维护和销毁机制。
- 权限和访问控制审核:
- 定期审核权限和访问控制策略,确保它们仍然符合业务需求和安全要求。
- 安全配置:
- 确保所有系统和服务都按照安全最佳实践进行配置。
- 监控和日志记录:
- 实施全面的监控和日志记录策略,以便及时发现和响应异常行为。
- 数据备份和恢复:
- 定期备份数据,并确保可以迅速恢复以应对数据丢失或损坏。
- 数据脱敏:
- 在开发、测试或非生产环境中使用数据时,对敏感数据进行脱敏处理。
- 数据加密和保护:
- 对敏感数据实施加密措施,并使用强加密算法。
- 第三方组件管理:
- 定期审查和更新第三方组件,以修复已知的安全漏洞。并结合开源软件治理进行内部第三方软件管理
- 安全测试:
- 进行彻底的安全测试,包括静态代码分析、动态代码分析和渗透测试。
- 漏洞扫描和修复:
- 定期进行漏洞扫描,并及时修复发现的安全漏洞。
- 应急响应计划:
- 制定和测试应急响应计划,以便在发生安全事件时迅速采取行动。
- 安全培训和意识:
- 对开发人员、运维人员和最终用户进行安全培训和意识提升。
- 合规性检查:
- 确保数据处理活动符合相关的法律、法规和行业标准。
通过这些措施,可以有效地管理和减少应用程序的攻击面。重要的是要建立一个持续的安全评估和改进过程,确保产品安全。
已在FreeBuf发表 0 篇文章
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022