
作者简介:
郭振新,OWASP吉林区域负责人,径点科技资深研发工程师、VP、安全部门负责人。拥有10年软件安全和软件研发经验,软件公司安全团队从0到1的建设经验。
每个公司的实际情况不同,每个公司所面临的业务场景也不尽相同。这里表达一些对软件公司应用安全建设实践的一些看法和经验,希望可以给读者带来一些思路和帮助。
创建安全团队
创建安全团队首先需要确定核心人员,关于核心人员需要具备的素质和能力,总结下主要有以下几点:
- 有较好的研发背景。其实安全和研发底层技术是互通的,有时候只是换个角度思考问题,拥有较好研发背景的人理解安全问题会简单很多,可以深刻体会研发人员的痛点,与研发人员沟通毫无障碍,并且可以从研发人员的角度思考问题,这将会给接下来的工作带来特别大的帮助。
- 沟通能力相对较强,安全部门一定离不开与各个部门的协调,所以沟通能力对于安全团队的人而言尤为重要。
- 最好对于安全有一定的兴趣,兴趣驱动可以使人走的更远。
至于核心人员的来源,无非两种,招聘和内部培养。我们公司所在的二线城市很难招到具备上述能力的人,所以我们采用的是内部培养的方式,实践证明也是一个不错的选择。如果安全团队是刚需,那么从软件公司找一个符合上述要求的人来进行培养应该不是特别困难的事儿。
确定好核心人员后,接下来就是围绕着核心人员添加符合公司业务的相关人员。例如渗透测试人员,合规人员等。
除了安全团队内部的人员外,每个应用产品也许需要有自己的安全负责人,配合安全团队完成软件安全流程。
软件安全流程
有了安全团队之后,如何提高软件安全呢?如下图所示,可以分为三个阶段去讨论安全流程。这个流程已经在我们公司落地并且对于产品安全起到了关键作用。

1. 设计阶段
2021版的OWASP Top 10添加了Insecure Design,呼吁软件研发行业更多地使用威胁建模、安全设计模式,由此可见在设计阶段考虑和重视安全的重要性。
理论上所有功能都需要系统性的安全设计,但是实际上由于资源等原因很难落地,所以我们使用了折中的方案。由产品安全负责人在设计阶段需要将核心/安全相关功能挑选出来,然后与安全团队一起构思和讨论相关功能的安全设计。实践证明这种方式确实可以提前发现有重大安全漏洞的设计,避免后期发现时需要大量的人力物力去弥补设计阶段带来的问题。
当然,每一个功能或者每一行代码都可能引起安全漏洞,但是在资源有限的情况下,更严格的对待那些更容易出严重漏洞的功能对应用安全有更好的帮助,这些功能包括认证功能,权限设计功能,加密功能等。
2.研发阶段
在研发阶段,我们在DevOps中嵌入安全工具来实现DevSecOps,这里列出一些我们已经在使用的工具类型。
- 静态代码扫描工具(SAST)
- 动态代码扫描工具(DAST)
- 软件成分分析工具(SCA)
- 容器漏洞扫描工具
关于容器漏洞扫描工具相关讨论的较少,在这里简单介绍一下。
现代软件开发中,容器技术给我们带来了极大的方便,但同时也带来了一些安全风险,基础镜像或基础库中如若含有安全漏洞,也会给产品镜像带来漏洞。而容器漏洞扫描工具就是针对于此问题的解决方案。
其它类型的工具已经是老生常谈,故不在此占用篇幅赘述。
其实可以嵌入DevOps中的工具比这些要多,例如交互式应用安全测试(IAST),只是评估时并没有找到针对我们技术栈的相对完善的解决方案,所以暂时没有使用相关工具。
通过在设计阶段和研发阶段的安全流程,可以实现应用开发的安全左移,有效的防止缺陷产生并且尽早找出漏洞,防止其演变为需花费巨资加以修复的灾难性漏洞。
3. 测试阶段
在应用实现完成后,需要对应用进行渗透测试。主要分为两个部分:
a. 由安全团队测试核心/安全相关功能。
因为在设计阶段已经将核心/安全相关功能挑选出来,所以这个时候安全团队的渗透测试人员就可以针对相关功能进行渗透测试,使用最好的资源以保证这些功能的安全性。
b. 由测试团队测试非核心/安全相关功能。
对于这一点可能会有人担心,测试团队是否可以胜任渗透测试的工作。我们的做法是首先由安全团队培训测试团队基础的测试步骤,然后将渗透测试写成测试案例交由测试团队进行测试。尤其是针对于Web应用的渗透测试,大部分测试点并不难掌握,通过培训测试团队也可以很好的掌握相关的技能。
实践证明优秀的常规测试人员通过培训和测试案例,也可以很好的完成渗透测试。将一些非核心/安全相关功能交由常规测试人员进行测试,可以大量的节省安全团队的资源,同时也能对提高应用安全起到很大的帮助。
- End -