安全开发之以数据流转视角吃透应用层攻击面分析
2024-7-30 15:38:9 Author: www.freebuf.com(查看原文) 阅读量:1 收藏

freeBuf

主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

什么是攻击面分析?为什么要做攻击面分析?

攻击面分析这个概念有很多师傅研究过,也有很多公司已经落地,攻击面分析很大,大到从资产管理、供应链管理、数据管理等方方面面,涵盖内部攻击面与外部攻击面,包括主机层、网络层、应用层等各个层级,这里我想以开发的视角浅谈,以数据流转全过程去分析应用程序的攻击面管理。

从我个人来看,攻击面分析是关于映射出需要审查和测试安全漏洞的系统部分。攻击面分析的目的是理解应用程序中的风险领域,让开发人员意识到应用程序的哪些部分容易受到攻击,寻找最小化攻击面的方法,并注意到攻击面何时以及如何变化,以及这些变化对风险意味着什么。这里的重点在于保护应用程序免受外部攻击——它不考虑对用户或系统操作者的攻击(例如,恶意软件注入、社会工程攻击),并且对内部威胁的关注较少。

攻击面分析能够帮助业务:

  • 确定需要审查/测试安全漏洞的系统功能和部分
  • 确定需要深度防御保护的高风险代码区域——业务需要保护的系统部分
  • 确定何时更改了攻击面并需要进行某种威胁评估

定义应用程序的攻击面

攻击面是指攻击者可能进入系统的所有不同点,以及他们可能获取数据的地方。这里不仅包括暴露面,还包括非暴露面(如开源组件),所以我个人来看,攻击面是包括暴露面更大的范围。

应用程序的攻击面是:

  • 进入和退出应用程序的所有数据/命令路径的总和
  • 保护这些路径的代码(包括认证、授权、活动日志记录、数据验证和编码)
  • 应用程序中使用的所有有价值数据,包括密钥和秘密、知识产权、关键业务数据、个人数据
  • 保护这些数据的代码(包括加密和校验和、访问审计以及数据完整性和操作安全控制)。

而底层逻辑,即数据流,即数据全生命周期流转所造成的安全风险。

如何识别和映射攻击面(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为基础做整体安全开发建设。这里我列出一些关键的步骤供各位师傅们参考:

  1. 数据流映射
    1. 绘制数据流图,标识数据在系统中的所有入口点和出口点。
  2. 资产识别
    1. 确定所有处理、存储或传输数据的资产,包括服务器、数据库、网络设备等。
  3. 数据分类和标记
    1. 根据数据的敏感性对数据进行分类和标记,以便实施适当的安全措施。
  4. 输入验证
    1. 在数据进入系统时进行严格的输入验证,防止恶意数据导致安全漏洞。
  5. 实施访问控制
    1. 确保只有授权用户才能访问、修改或删除数据。
  6. 数据传输安全
    1. 使用加密协议(如TLS/SSL)保护数据在传输过程中的安全。
  7. 数据存储安全
    1. 对存储的数据进行加密,确保数据在静态时的安全性。
  8. 会话管理
    1. 实施安全的会话管理策略,包括安全的会话创建、维护和销毁机制。
  9. 权限和访问控制审核
    1. 定期审核权限和访问控制策略,确保它们仍然符合业务需求和安全要求。
  10. 安全配置
    1. 确保所有系统和服务都按照安全最佳实践进行配置。
  11. 监控和日志记录
    1. 实施全面的监控和日志记录策略,以便及时发现和响应异常行为。
  12. 数据备份和恢复
    1. 定期备份数据,并确保可以迅速恢复以应对数据丢失或损坏。
  13. 数据脱敏
    1. 在开发、测试或非生产环境中使用数据时,对敏感数据进行脱敏处理。
  14. 数据加密和保护
    1. 对敏感数据实施加密措施,并使用强加密算法。
  15. 第三方组件管理
    1. 定期审查和更新第三方组件,以修复已知的安全漏洞。并结合开源软件治理进行内部第三方软件管理
  16. 安全测试
    1. 进行彻底的安全测试,包括静态代码分析、动态代码分析和渗透测试。
  17. 漏洞扫描和修复
    1. 定期进行漏洞扫描,并及时修复发现的安全漏洞。
  18. 应急响应计划
    1. 制定和测试应急响应计划,以便在发生安全事件时迅速采取行动。
  19. 安全培训和意识
    1. 对开发人员、运维人员和最终用户进行安全培训和意识提升。
  20. 合规性检查
    1. 确保数据处理活动符合相关的法律、法规和行业标准。

通过这些措施,可以有效地管理和减少应用程序的攻击面。重要的是要建立一个持续的安全评估和改进过程,确保产品安全。

已在FreeBuf发表 0 篇文章

本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022


文章来源: https://www.freebuf.com/articles/system/407350.html
如有侵权请联系:admin#unsafe.sh