为什么需要应用开发安全管理
今天的互联网经济中,尤其对于金融、运营商、电子商务等企业,软件应用不光承载着其核心业务,同时还生成、处理、存储着各类企业的核心敏感信息:账户信息、隐私、业务数据、金融交易记录等,一旦软件应用的安全性不足,不但短期内业务中断、声誉受损,各种信息资产还将透过地下交易流入地下经济产业链,从而造成其业务受到持续影响,给企业造成巨大的财务和信誉风险。
针对这一趋势变化,大多数企业已经着手实施了关于应用安全性改善的措施,但只有极少数用户实现了从需求-部署的端到端应用安全管理,事实上,数据表明,大多数企业通常选择将应用安全的风险从开发阶段转移至部署甚至是运营阶段,从而导致了漏洞修复的成本居高不下。
业界实践
渗透测试:从攻击者能力出发,以攻击者视角进行的黑盒测试,从而获得应用系统安全的主观评价,而渗透测试的结果仅能模拟和验证攻击场景,很难应用于切实改善。
应用安全扫描和测试:针对已上线的应用系统,利用工具进行大范围高效率的扫描和探测,而由于扫描和测试基本在发布和上线后进行,即便发现安全缺陷和不足,已属亡羊补牢。
开发管理平台:项目需求文档的提交,不关注安全问题的发现。
软件安全架构咨询:借助安全专业咨询顾问进行安全架构的设计和规划,同时尝试将业务与安全相结合,但其效果在一定程度上仍取决于安全功能的实现和验证。
代码级分析工具和技术:借助人工和自动化审计工具,在源代码层面进行安全静态分析和动态测试,而分析和审计的结果分析尚需要专家级安全人员的介入,而目前专家级安全人员目前是大多数企业的瓶颈。
需求分析阶段
任何一个应用软件或者应用系统的核心价值均与其企业使命/业务价值紧密联系。而针对与来自于行业、国家监管机构以及资本市场的要求以及该应用承载业务的分析,将形成该应用软件或系统的安全需求。需求分析作为生命周期理论上实质性的第一步,也是较传统安全实践手段(代码审计、渗透测试等)更为具备业务特色的一个新增安全活动,对系统业务安全性要求的细粒度分析,将为后续业务数据流呈现以及威胁建模过程典型重要的依据和基础。
识别关键安全目标
识别关键安全目标的目的是为了更好的将业务需求、产品设计和安全保障结合起来。识别关键安全目标的方法可以通过两项实践完成:
第一:业务需求整理。对业务部门的最原始需求进行汇总。
第二:业务需求安全分析。通过整理业务需求,将其作为输入,提炼出需求中产品实现的安全关注点,即关键安全目标。对业务需求的关键安全目标分析可从三个方面考虑:
- 业务需求的考虑:业务部门对软件产品的业务功能实现要求涉及的安全
- 行业需求的考虑:监管部门对业务的合规要求涉及的安全
- 安全实践的考虑:现有国际和国内安全体系框架,等级保护,ISO27002等涉及的安全。
定义安全目标路线图
路线图是一个非常灵活的方法,它是把未来的发展趋势、需求、发展重点、发展策略、相关分析等转换成图表来表示。
在应用软件开发生命周期管理中,借鉴路线图的思想,将安全目标实现的每个条件、保证措施、实现过程用路线图的方式表示,定义每个进程的目标,从软件需求提出到最终产品完成并投入使用,便成为了安全目标路线图。在实践中,我们根据选择不同的开发模式和开发方式来确定开发路线图,制定最优的安全过程
安全功能设计阶段
本阶段主要是基于前期的安全需求分析,通过受攻击面分析(Attack surface Analysis)和威胁建模(Threat Modeling)两个主要手段,对业务的进行数据流层的呈现和分析,利用STRIDE模型将数据流以及其要素转化成威胁在应用系统的立足点,最终在此基础上形成明确的基于业务流程的安全设计方案。
受攻击面分析
受攻击面是指应用软件任何可被人或其他程序访问的部分。而针对其进行分析的目的是为了减少应用和数据暴露在不可信用户面前的数量。受攻击面将会定位各类数据的进入点,如网络输入/输出,文件输入/输出等,同时更进一步针对进入点的数据类型、信道和协议、访问方法和权限进行尽可能完备的分析,为后续的威胁建模奠定基础。以下是典型的受攻击面分析对象:
- 文件格式:如PDF、JPG
- 协议:如HTTP、SSL
- 方法和动作:针对HHTP,如GET,、POST、PUT、HEAD、 OPTIONS、 TRACE