GOPS现场 | 对话龙智大规模安全研发技术专家,分享静态代码、开源组件扫描干货

2022GOPS全球运维大会·深圳站,我们对话了龙智大规模安全研发技术专家李培,与大家分享静态代码和开源组件扫描的干货知识、工具选型建议,以及企业在引入工具时必须考虑的条件。

https://www.bilibili.com/vide...

视频文字实录

Q:龙智在此次GOPS大会呈现的主题是“大规模、敏捷、安全、开放的研发与运营之路”,并带来了静态代码扫描解决方案,可否简要介绍一下,在DevOps实践中,引入静态代码扫描的必要性或价值?

A: 它是代码静态分析工具,主要用于发现代码里的潜在缺陷,或者是写得不好的地方。

写完代码后,会经过单元测试、构建、测试,如果没有经过静态扫描,有些问题是手动测试难以发现的,用场景来触发是非常难抓到问题的。但是,这种问题有可能会在上线或产品Deliver后,造成致命一击。我以前也遇到过这种问题。

首先一大类,就是使用C/C++语言,可能有内存管理问题。内存各种指针或者泄露这类问题。另一个,web应用可能会隐藏安全隐患,可能会被攻击,或者有明文密码以及慢的SQL查询,这些东西都隐藏在代码中,不知道什么时候就会跳出来,造成不可挽回的损失。

在软件开发过程中有个理论:发现问题的节点越晚,那成本不是翻一倍,而是呈指数级上升。其实很好理解,比如说一个开发人员在写代码阶段,发现有什么问题立刻就能改正,只需花费几分钟,或半小时、一小时就纠正了这个问题。但如果是在构建过程中发现这个问题,构建部门的人已经参与其中,发现了编译问题,赶紧返回去,这样一般就要花费超过两个小时。如果到测试阶段,很多人可能要把版本升级,开始测试,测试到一半发现问题导致测不下去,然后再把版本返回,再进行修改。这么一折腾,三、五天的时间就过去了,所以说成本是呈指数级上升的。

静态扫描工具尽可能地帮助您把这些隐藏的、难以发现的问题提前扫清,这个投资十分值得。

Q:静态代码扫描工具SonarQube在哪些行业用得比较多?

A: 互联网行业应用SonarQube较多,因为SonarQube支持多种语言,并且有开源版本——SonarQube社区版,很多用户已经在使用。但是,SonarQube的企业版会提供更多功能。

在功能和性能上,企业版都会比社区版都更强大。企业版提供高达29种语言,包括最常见的C/C++等。另外,社区版没有一些安全扫描规则。还有一个关键点,企业版有助于提高分析的性能,因为它可以在后台进行分析。当服务器部署在公司后,很多项目都会进行扫描,当并发的情况发生时,社区版只能轮流进行扫描。有时候可能一整天都扫不完。企业版则可以最高并发10个进程,处理分析结果。因为它支持多种语言,在开源社区里有很好的口碑,所以做web应用的使用更多一点。

Q:SonarQube提倡“边写边清理”,一边写代码,一遍清理问题,会不会很麻烦?

A: “边写边清理”实际上并不麻烦。边写边清理的意思是,比如今天干了一天活,主管当天反馈今天哪一项没做好,这就是可反馈、可掌控的。但假如说干了两年以后,在第二年年末某一天,去年的每一天都做错了很多事情,一天或三天之内修改好,这时候肯定茫然无措,不知道该如何是好,因为欠账太多。

每天写的代码是有限的,一年可能也就写个万八千行,如果每天都聚焦于新写的代码,这就是一个完全可接受、可执行的工作。但是如果一个公司有很多遗留代码,需要接手老前辈遗留的几十万行或几百万行代码,忽然某一天,说这些代码很多不合规,需要立即把这些问题解决,那会觉得这是无法完成的任务,“边写边清理”就是这个意思。

Q:这个产品的使用是否复杂?

A: 这个产品的部署很简便,因为它的社区版有很好的群众基础。虽然,很多客户会自己部署,但作为SonarQube授权合作伙伴,创实(龙智子公司)会提供专业、详细的文档以及远程知识。

Q:它的独特之处,以及您的团队如何帮助客户正确使用它?

所有静态扫描工具的一个普遍难点是:怎么扫描。为什么?大部分静态扫描工具不要求进行编译,这是一个卖点,也是一个缺点。有很多项目依赖于第三方库,或者是第三方编译指令,不进行编译就无法准确的分析依赖项和存在的问题。所以现在主流的产品都需要进行编译,例如C/C++/C#/Java,这四种语言都需要编译,有些脚本语言不需要编译。

但是,要在各个意想不到的平台上,把这些编译出来。因为用户使用平台可能不一样,如果是嵌入式的客户,全世界有成百上千种嵌入式编辑器,可能是一个完全没见过的编辑器,如何帮助它运行,就是我们工作的重点。

帮助客户把分析运行起来,把项目分析出结果,以及分析问题是否属于误报或漏报,以及指标、复杂度,以及SonarQube提供哪些产品,比如说关于代码的度量,这些就是我们工作的重点。

Q:请介绍下这次龙智推荐的另一款工具Mend。

A: Mend(原名WhiteSource)的老本行是SCA,与SonarQube正好互为补充。因为SonarQube用于分析自己的代码,Mend用于分析别人的代码。现在的软件开发中,可能会引用很多第三方开源组件。客户可能没有足够的能力或者时间,来保证这些开源组件符合安全或功能要求,这存在很大的风险。

企业如果拥有一定规模,不允许出现这种意外,那么肯定要对产品中包含的开源组件进行安全以及法规方面的检查,从这一点来说两者是互补的。

Q:他们各自的使用场景是什么,可以如何结合使用,提高DevOps的安全性?

A: SonarQube和Mend都是持续检查,因为代码始终在变化,就有产生新的问题,所以需要持续检查。但SonarQube和Mend持续检查针对的方面还不太一样。

一般来说有几个方面,一个是对主分支进行周期性的检查,这个是必备的,是公司的底线。要想实现公司要求的合规性、安全性,都需要周期的对发布分支或者管理分支进行检查,这个是公司指标的硬性要求。

另外,还有两个可选的检查方面,一个是客户端,比如说有追求的程序员可能希望代码不被别人指手画脚。这时,就可以在客户端进行一个快速检查。不管是开源代码扫描还是静态扫描,都可以用公司统一的质量门来做。

还有一个是在CI/CD的流程中。比如说每次提交,如果觉得每次提交频率太高,不需要这么频繁,那么也可以每小时检查一次。一小时内提交的变更,都进行开源组件和认证代码的质量检查,都是可行的。

Q:对于企业,引入一款工具不是一件简单的事情,这么做的必要性在哪里?

A: 这些软件对于需要做这些事情的公司来说,是一个必选项,而不是一个可选项。不能把它理解为一个花钱的选项,因为它是一个帮你省钱的选项。

为什么这么说?实际上,软件开发很多时候会让人觉得好像表面上省了钱,比如说用差的机器或工具,可能节约了一笔费用,但损失的是劳动生产力。这会对业务造成长久的损伤,延迟产品交付,最终导致根本竞争力下降。所以,我认为一个成熟的,或有一定规模的软件公司,必须考虑这些事情。

比如软件成分分析,可以避免出现电商系统宕机,或因为引入开源组件造成的意外攻击,又或是引发诉讼,这些都会对公司造成严重困扰。

如需了解DevSecOps行业最新动态与消息,请立即联系DevSecOps研发安全运营一体化解决方案供应商——龙智:
官网:www.shdsd.com
电话:400-666-7732
邮箱:[email protected]

你可能感兴趣的:(静态开源软件)