推荐序一
计算技术已经并且还将继续改变世界,而软件是计算技术中最具灵活性的部分。过去几年出现了很多“软件定义××”的说法,从软件定义网络(Software Defined Network,SDN)到软件定义边界(Software Defined Perimeter,SDP),甚至有“软件定义一切”的说法。抛开软件与硬件到底谁更重要的争论,过去几十年中人们发明了许多编程语言、编程框架、软件库、软件开发工具、集成环境,并且研究出数种软件生命周期模型,也一直在探索如何高效、大规模、安全无错地进行软件开发。
软件中的Bug一直是开发者的“大敌”,这其中既包含导致软件不能正常工作的功能性Bug,也包括非设计者所预期的、被恶意利用的漏洞。可以说,软件漏洞其实是软件Bug的一种,但过去的软件开发管理模式把二者人为割裂了——测试团队负责对软件功能、性能、集成做测试,安全团队负责对软件安全漏洞做测试,而且往往采用串行工作方式,即做完功能、性能和集成测试,再提交给安全团队做安全性测试。
在数字化转型背景下,这种开发模式已经不能满足时代需求。
虽然被当作网络安全专家,其实我在30年从业经历中,多数时间在从事软件开发工作,从一线编程人员到互联网企业CTO,也是一个不断探索软件开发生命周期模型,满足软件开发过程中不断变化的用户需求,平衡软件开发质量与工期,以及与不完美的程序员一起工作,与软件Bug和脆弱性搏斗,从而交付用户可用的产品或工程的过程。
1996年,做“内蒙古邮政综合网”项目时,我的开发团队是名副其实的“杂牌军”,有来自北大方正的编码质量超级棒的编程“大神”,有内蒙古方正派来的苦干型技术骨干,也有内蒙古邮政系统各地选派的能力参差不齐的程序员。而邮政综合网系统的运行需要数十万行C代码支撑。为了让这支“杂牌军”产出质量可控的代码,除了有大神级的架构师做良好的架构设计外,我们借鉴《编程精粹:编写高质量C语言代码》(Writing Solid Code)中所讲述的微软公司的C语言编程规范,建立了自己的编程规范,包括要求程序员在自己的C程序中做内存越界检查、内存使用时采用内存监督函数、在函数的入口处设置断言等,并要求程序员自己编写单元测试代码,要求大家追求程序“无错”。事后回想,这个项目能成功交付,和当初采用的一整套编程规范有很大关系。
到2000年,我开始带更大的团队,给电信运营商开发BSS/OSS系统,同时面对数十个省/市级运营商。该系统的用户需求差异大且变化迅速,我们绞尽脑汁,想把系统架构设计得更灵活,试用了面向领域的架构设计等软件工程方法,并引入统一建模语言做需求分析和设计,引入CMM规范,试图用经典的软件工程模型,通过过程控制解决产出质量问题,还因此购买了Rational公司的全套工具。带领团队奋战一年多后,虽然设计系统通过了CMM Level 3的认证,但作为负责人的我内心充满了挫折感:一是感觉CMM规范流程太“重”,难以满足客户需求变化快、工期紧的工程需要;二是工具不够给力,对引入的迭代开发模型难以提供良好的支持。
2003年进入互联网行业之后,我经历了完全不同的开发文化的洗礼,深感互联网业务变化快,开发模型需要更敏捷。经典软件工程中所不齿的“三边模型”成了我们的日常工作模式:快速开发、简单测试后便逐步放量到生产环境,检测到用户侧的程序崩溃或通过社区倾听了用户反馈,再快速迭代。所以当DevOps模型出现的时候,我没有任何惊奇,因为我们其实早已经在这么做,后来遇到的问题就是安全管理流程如何与DevOps流程结合。
2010年,我开始同时管理研发、运维和信息安全团队,意识到之前采用的开发、运维与安全的串行工作模式不能满足互联网快节奏的要求,于是要求安全团队主动往开发前端渗透,不等开发团队做安全提测,直接用网络听包手段和服务器上安装的Agent程序跟进程序员提交到测试服务器上的新代码,在程序员和测试人员进行功能、性能测试的同时,安全团队的漏洞扫描程序即对代码进行扫描,并及时沟通,这实际上就是“安全左移”的实践。
现在的时代,互联网企业的开发、运营理念开始快速向各行各业渗透。在这个过程中,以“快”为特色的互联网软件开发模式被广泛接受,安全变得越来越重要。我们追求的目标变成:快速开发,快速部署,同时还要安全。
同时,软件开发模式也在改变。过去,由软件公司生产软件,软件发布前通常经过严格的测试,出厂的软件质量相对可控;现在,软件开发越来越走向“众包模式”和“群智模式”,即使在商业软件中也大量使用开源软件,而开源软件未必经过严格测试,这就让“既快又安全”这个目标遇到空前挑战。
2017年,DevSecOps概念应运而生,并因为能解决软件开发过程中的痛点问题得到人们追捧,而各种应用测试工具(SAST、DAST、IAST)、源代码级与目标码级软件成分分析(SCA)工具、模糊测试漏洞挖掘(Fuzzing)工具、运行时应用程序自我保护(RASP)工具也层出不穷。在当时,能够提高软件生产效率和安全性的工具一定会获得良好发展。
我是悬镜安全的天使投资人之一,在2014年就投资了悬镜。当时子芽带领的创业团队还在从事漏洞挖掘和攻防对抗服务类的工作,我被这群具有北大背景的年轻人对计算技术和网络安全技术的热爱和追求所打动。经过8年的不断探索,悬镜最终找准了DevSecOps敏捷安全方向,并成为国内开发安全的领军企业。
子芽写的这本《DevSecOps敏捷安全》系统地介绍了DevSecOps所涉及的概念和技术,尤其重要的是第三部分介绍了DevSecOps落地实践,第四部分探讨了软件供应链安全管理这个现在让大家普遍感觉头疼的问题,第五部分做了未来趋势的展望。
如子芽在书中所说,此书非常适合企业的CTO和CIO阅读。
——谭晓生 正奇学苑、璟泰创投创始人