如何着手构建应用安全程序?

“让我们从头开始,从一个很好的地方开始。”

电影《音乐之声》中玛利亚的建议同样适用于构建有效的应用安全程序。这是充满障碍的道路,对于尚未侧重安全性的企业来说,这可能非常遥远且复杂,甚至还无法开始。

其他企业则可能愿意部署前面的步骤,这是一件好事。Manicode Security公司联合创始人Jim Manico建议:“企业需要去尝试、犯错,并坚持适合自己的方法。”

近日在罗马举行的2016年OWASP AppSec大会,专家们与来自全球各地近700名与会者探讨了“从哪里开始”的问题。下面是从这些讨论和对话中总结的技巧。

创建应用安全程序的第一步

“从管理的角度来看,企业可研究OWASP的SAMM(软件保证成熟度模型)框架,并将从中大大受益,”Minded
Security公司首席执行官Matteo
Meucci建议,“SAMM带领企业了解他们应该如何管理威胁建模、如何执行安全测试、如何执行安全代码审查、如何管理漏洞等。”

SAMM工具集可通过图形说明企业拥抱应用安全程序的能力。通过利用该仪表板,企业可建立发展成为更成熟企业的路线图。

Meucci称:“SAMM可很好地帮助企业了解在哪里投资以及如何改进。”

企业的应用安全程序通常是在软件设计和构建后,即侧重对应用的测试。然而,在AppSec大会很多人都认为在后期阶段查看安全问题并不够。

“有些企业从动态分析(动态应用安全测试DAST)开始,这只是在应用发布之前,”应用测试公司Checkmarx产品营销主管Amit
Ashbel称,“这有时候会导致发布延迟,而且,开发人员需要从头来过去解决问题。实际上,你应该在代码编写时静态形势下分析代码,在最后的动态分析应该只是最后的检查,不会对项目带来影响,因为漏洞已经被修复。”

对应用安全的静态和动态测试

Manico对这种非此即彼的立场有着不同的看法,他指出“任何明智的应用安全程序都应该同时涉及静态和动态测试”。单独依靠任一种测试都不足够。

Meucci同意称这种非此即彼的做法有风险。

“这些项目通常会失败,”Meucci称,“他们失败的原因不是因为开发人员没有时间回过头去修复发现的漏洞,而是因为他们发现了太多漏洞不知道如何解决。”

风险分析公司Security Innovation国际渠道销售总监Tony Luzza称:“这个问题是两面的,首先,首席信息安全官(CISO)在开发生命周期的后期才得到应用渗透测试结果,其次,他们将发现的结果交给不懂安全或者不具备修复漏洞技能的团队。”

对于开发后进行测试的企业,很多人都有着错误的假设:他们可以发现漏洞、优先处理它们,并在修复漏洞后可销售软件。这并不是成功的做法,而且可能会有漏洞未被发现。为什么呢?软件团队承受着巨大的压力,他们要在规定时间内推出产品。而且运行整个测试和发布过程是巨大的噩梦,特别是当存在很多安全漏洞需要对软件架构进行更改时。

根据专家表示,最好的建议是:尽早测试以及频繁测试。在编码阶段使用静态应用安全测试(SAST)并使用动态测试来捕捉可能溜走的漏洞。

Ashbel称:“企业通常忘记这并不是只使用一种类型的测试来节省资金。”

但这只是开始,想要构建有效的应用安全程序,还有很多工作要做。

“你应该进行静态测试和动态测试,但这只是成熟安全软件开发生命周期的部分元素,”Manico称,“还应该考虑安全标准和要求、架构风险分析、设计风险分析、DevOps基础设施、安全框架和库。考虑开发人员培训、测试规划、卓越可用性中心,评估安全指标、测试评估和成熟安全SDLC的其他方面。”

作者:Sean Martin

来源:51CTO

时间: 2024-09-12 04:02:15

如何着手构建应用安全程序?的相关文章

在PaaS上构建SaaS应用程序需要注意什么

遗留系统含有成千上万个执行一大批业务功能的服务组件.比如说,假设贵企业运行的一个内部遗留系统中的一套组件向企业高管提供一份统计报告.为了赶在截至日之前获得这份每周提交的报告,该高管应该考虑将必要的组件迁移到新的软件即服务(SaaS)应用程序. 如果经济可行性研究表明这种迁移是明智的决策,他应该与其他高管以及由开发人员.系统工程师和业务分析人员组成的一个团队合作,将遗留系统细分成多个组件,然后着手开发那个应用程序. 1.识别遗留系统资产 开发团队.高管和遗留系统负责人需要识别遗留系统的资产.这些资

JSF 1.2入门,第1部分 构建基本应用程序

简介:JavaServer Faces(JSF)技术是一种服务器端框架,它提供一种基于组件的 Web 用户 界面开发方式.JSF 1.2(集成在 Java Enterprise Edition 5 中)纠正了 JSF 的一些缺陷并添加了一 些出色的特性.这个教程系列讨论如何使用 JSF 1.2.本系列偏重示例,较少解释理论 - 这是为 了帮助您尽快开始使用 JSF. 开始之前 关于本系列 这个教程系列讨论 JavaServer Faces(JSF)技术的基础知识.JSF 是一种用于 Java W

用Ext JS构建Ajax应用程序:一种用于富因特网应用程序开发的JavaScript框架

简介:Ext JS 是一种强大的 JavaScript 库,它通过使用可重用的对象和部件简化了 Asynchronous JavaScript + XML(Ajax)开发.本文介绍 Ext JS,概述它背后的面向对象 JavaScript 设计概念,解释如何使用 Ext JS 框架开发富因特网应用程序的用户界面元素. 当今有许许多多的 Web 开发框架,开发人员很难判断哪些框架值得花时间去学习.Ext JS 是一种 JavaScript 开发框架,这种强大的 JavaScript 库通过使用可重

使用Grails构建富Internet应用程序,第1部分:使用Grails和Flex构建Web应用程序

简介:富 Internet 应用程序(Rich Internet Applications,RIA)通过浏览器保证桌面应用程序 的动态性和功能.RIA 的主要特征之一就是将表示层移动到客户机,并使用服务器上健壮的 RESTful 服 务层支持它.这种想法借助 SOUI(Service Oriented User Interface)和 SOFEA(Service Oriented Front End Architecture)之类的热门词汇得到传播. 关于本系列 这个系列探索一些应 用程序架构,

用开源工具创建BlackBerry应用程序,第3部分 构建社交网络应用程序

在数字时代,社交网络应用程序对消费者和业务市场的影响是最有吸引力的 奇迹之一.营销专家改变了与潜在客户打交道的方式,具有相同志趣的群体能够 快速组建起来,这都与社交网络分不开.2008 年秋季的美国总统竞选表明,社 交网络已经成为成功的政治竞选的一部分.社交网络与流行的.强大的 BlackBerry 平台的结合将是一个充满活力的组合.本教程是"用开源工具 创建 BlackBerry 应用程序"系列的第 3 部分,它探索了为何 BlackBerry 是编写和部署社交网络应用程序的强大移动

eSWT移动扩展简介,第1部分: 使用简单小部件快速构建移动应用程序

简介 随着移动平台变得越来越复杂,移动计算需求将会不断增长.嵌入式 Standard Widget Toolkit (eSWT) Mobile Extension 是一种 Eclipse 技术,可以用于为各种移动电话开发具有本地外观的 Java 应用程序. eSWT 是嵌入式 Rich Client Platform (eRCP) 项目的一部分,为构建移动应用程序提供标准的嵌入式小部件.eSWT 主要关注如何满足移动设备的功能和用户体验需求.eSWT 提供了对设备上的用户界面功能的高效.可移植的

JDeveloper构建Struts应用程序

内置的Struts支持提高了Oracle Java集成开发环境的生产力. Jakarta Struts是一个由Apache software foundation支持的开放源码项目.Struts提供了一个使用标准J2EE(Java 2 Platform,Enterprise Edition)组件(如JavaServer Pagers(JSP).servlet和JavaBean)构建Model 2--模型-视图-控制器(Model-View-Controller,MVC)应用设计范例的一个变体--

用Eclipse、WTP和Derby构建Web应用程序

简介 Eclipse 是使用 Java 技术开发 Web 应用程序的理想平台.动态 Web 应用程序的 3 层设计非常适合与运行在 servlet 容器(例如 Apache Jakarta Tomcat)中的 JSP 和 Servlet 相结合.持久数据层可以适当地由 Derby 数据库提供.用于开发 J2EE 和 Web 应用程序的 Eclipse Web Tools Platform (WTP) 项目工具集,加上 Derby Eclipse 插件,可以提供快速而简便的 Web 开发. 本文讨

构建 Android 应用程序一定要绕过的 30 个坑

本文讲的是构建 Android 应用程序一定要绕过的 30 个坑, 学习领域有两类人 - 一类是那些通过艰苦努力一步一步学习的人,一类是学习别人的经验教训走捷径的人.在此,我想分享一些自己的经验给大家: 添加使用第三方依赖库前,请再三思考,它绝对是一个慎重的决定; 如果用户看不见有些界面, 请一定不要绘制它!; 除非真的需要,否则不要使用数据库; 应用程序中 65k 方法数的限制很快就能达到,我意思是真的很快!不过 multidexing 能拯救你; RxJava 是对 AsyncTask 和其