【云驻共创】CodeArts Check全面守护软件质量与安全
前言
本文主要围绕着“龙翔老师”老师的这场直播课,由浅入深的给大家介绍以下3点内容
1.为什么要用CodeArts Check(即CodeArts Check诞生的背景)
2.CodeArts Check 能做什么
3.我们在日常工作中,应该怎样使用CodeArts Check
CodeArts Check 诞生的背景
现阶段,很多小公司在实现软件功能需求时,往往没有考虑任何的安全问题,更不会进行代码规范的审核和检查。那如果不进行代码检查,有没有关系呢?
答案当然是肯定的,因为可能会导致以下危害:
-
安全漏洞:未经过代码检查的程序容易存在漏洞,黑客可能利用这些漏洞攻击系统,导致数据泄露、系统崩溃等问题。
-
低质量的代码:没有经过代码检查的程序可能存在代码冗余、复杂度高、可读性差等问题,导致代码难以维护、修改和扩展,甚至可能导致系统崩溃。
-
时间和成本的浪费:未经过代码检查的程序可能需要花费更多的时间和精力进行调试和问题修复,增加开发成本和周期。
-
法律责任:在某些行业和国家,软件开发公司需要遵守法规和标准,如果未经过代码检查而导致软件出现故障或安全问题,可能会面临法律责任和经济损失。
全球网络攻击频发,2001-2022的10+年数据表明安全漏洞持续增长,企业风险持续增加。
也正是因为软件安全风险高,后期修复成本高。因此,安全左移才成为了趋势
常见的软件漏洞
业界目前的TOP软件漏洞主要以“外部输入校验”和“注入类安全问题”为主
龙翔老师帮我们列举了2022/06月 CWE 4.8 统计出的 TOP 25的安全问题,它们分别是
- CWE-787:跨界内存写
- CWE-79: 在web页面生成时对输入的转义处理不恰当(跨站脚本)
- CWE-89: SQL命令中使用的特殊元素转义处理不恰当(SQL注入)
- CWE-20: 输入验证不恰当
- CWE-125:跨界内存读
- CWE-78: OS命令中使用的特殊元素转义处理不恰当(OS命令注入)
- CWE-416:释放后使用
- CWE-22: 对路径名的限制不恰当(路径遍历)
- CWE-352:跨站请求伪造(CSRF)
- CWE-434:危险类型文件的不加限制上传
- CWE-476:空指针解引用
- CWE-502:不可信数据的反序列化
- CWE-190:整数溢出或超界折返
- CWE-287:认证机制不恰当
- CWE-798:使用硬编码的凭证
- CWE-862:授权机制缺失
- CWE-77: 在命令中使用的特殊元素转义处理不恰当(命令注入)
- CWE-306:关键功能的认证机制缺失
- CWE-119:内存缓冲区边界内操作的限制不恰当
- CWE-276:缺省权限不正确
- CWE-918:服务端请求伪造(SSRF)
- CWE-362:使用共享资源的并发执行不恰当同步问题(竞争条件)
- CWE-400:未加控制的资源消耗(资源耗尽)
- CWE-611:XML外部实体引用的不恰当限制(XXE)
- CWE-94: 对生成代码的控制不恰当(代码注入)
CWE指的是常见缺陷列表(Common Weakness Enumeration),它是MITRE公司(一个非盈利机构)继CVE(Common Vulnerabilities and Exposures)之后的又一个安全漏洞词典。
MITRE公司希望通过这一词典,给用户提供一个识别、减轻、阻止软件缺陷的通用标准。CWE也可以作为人们购买软件的安全衡量标准,尤其是在购买旨在阻止或发现具体安全问题的安全工具时。
CWE官网为:https://cwe.mitre.org/data/definitions/1387.html
在上面,我们可以看到业界最新的TOP软件安全漏洞
命令注入
系统使用外部输入来构造OS命令时,由于未对可能与期望执行OS命令不一致的输入进行清理,或过滤处理不当,攻击者可能会利用此漏洞执行攻击者没有权限执行的、系统所不期望的危险命令。
命令注入漏洞一直是行业内焦点漏洞、危害大。
命令注入攻击通过Web界面实施,从而在Web服务器上执行操作系统命令。攻击者通过Web界面提供操作系统命令,以执行操作系统命令。任何未正确处理(Sanitize)的Web界面会遭受这个漏洞利用。
目录遍历攻击
由于应用程序未对外部输入的文件名或路径做有效地验证与清理,攻击者通过输入包含“上一层”目录符号(如Windows中的“…\”与Unix中的“…/”)的文件路径,导航访问到服务器上的受限目录与文件
代码检查实践
三大使用场景
-
开发者自学自测
-
企业自检自查
-
ISV源码安全审计
代码检查记录统计
- 用户数:10.17万
- 开发语言:30种
- 各类规范:40+种
- 日均扫描:573亿
典型应用场景
-
软件开发阶段对代码质量和安全问题进行自动化检查,支持内置安全规范、要求到软件生产作业流,帮助企业软件内生安全
-
提供深度代码安全检查能力,帮助政务云运营者和大企业管控ISV软件安全质量,构建供应链安全体系
无缝对接作业流
-
本地编写代码,利用IDE插件实时检查
-
上传代码到代码托管服务合并时增量检查
-
持续集成,调用代码检查服务,持续看护版本质量
-
推送检查报告到代码检查服务
核心竞争力
1.能力全面:全面支持代码的风格、质量、安全检查及度量
- 10+语言,7000+规则,100+编译器及版本支持
- 支持代码圈复杂度和代码重复率度量、防止代码腐化
2.能力专业:专业、深度代码安全检查能力、领先友商
- 提供跨函数、跨文件检查能力,提供污点分析检查能力
- 支持注入类、信息泄露类(AccessKey)等Top安全漏洞检查,覆盖10000+场景,能力全面领先开源标杆
- 支持华为云编程规范,兼容支持CWE、OWASP TOP 10、CERT、SANS TOP 25、MISRA检查
3.高效、精准、易用:无缝对接作业流,端云协同,安全左移
- 提供CloudIDE\VSCode\IDEA\CodeArts IDE代码检查能力,支持代码编写时自动检查和问题自动修复
- 精准定位缺陷,提供全面修复建议和复合开发者信息的辅助分析信息流
- 无缝融入作业流,支持分支间忽略警告自动同步。提升用户作业效率
六大产品特性
这是六大产品特性的汇总图,后续会逐个进行讲解
特性一、自主研发高效精准代码分析引擎,轻松驾驭大规模代码扫描场景
CodeArts Check不仅内置丰富的开源工具,还打造能力全面的自研引擎。该引擎凝聚了国内40+博士、海外研究所50+专家、国内外10+专业学者的合作成果,经过华为内部15万研发人员大规模持续催熟打磨而成;针对代码的可读、可维护、安全、可靠、可测试、高效、可移植等方面进行了全面的分析,并融合华为30多年对代码质量及可信度提升方面的持续思考与探索、实践,积累了丰富的检查规则,形成独有的检查能力
特性二、支持5个业界主流标准、内置5种语言华为编程规范
-
支持的业界主流编程标准和优秀实践有:ISO 5055、CERT、CWE、OWASP TOP 10、CWE/SANS TOP25
-
内置华为多年研发经验总结的5种语言编程规范(C/C++/JAVA/Python/GO)
特性三、支持主流开发语言、内置丰富检查规则集,开箱即用
-
支持C/C++、Java、Python、GO、JavaScript、CSS、HTML、PHP、C#、Android等市场主流开发语言
-
满足嵌入式、WEB应用、移动应用等开发场景所需
-
提供4000+规则集梳理各场景需要,内置全面检查规则集、关键检查规则集、移动领域规则集、华为编程规范规则集等10+规则集,便于用户开箱即用
-
企业用户也可以基于规则库,定制满足业务场景个性需求的检查规则集
特性四、日均百亿级扫描能力,强力支持大型开发团队
-
具备强大的高并发处理能力,服务日均扫描百亿行级代码
-
服务通过AZ容灾、跨region级容灾多活、支持过载保护、服务依赖和隔离等一系列高可用特性,实现服务故障自探测、自隔离、自恢复,为大型应用和团队提供可靠支持
-
针对检查业务峰谷明显的业务特征,通过强大的弹性调度能力,快速高效的调配资源满足业务所需,保障业务高峰0等待
特性五、问题精准定位、详尽修复指导、结果自动继承,加速问题闭环
-
问题精准定位到行、提供修复指导(内置编程规范说明、正确示例、错误示例、修复建议),提高问题分析效率
-
自动根据代码提交信息匹配问题责任人,IDE插件提供自动修复能力,提升问题修复效率
-
自动同步已处理的忽略问题、对于经过审视判定为不需要处理的问题,同一代码仓库只需处理一次
特性六、无缝对接开发作业流和用户看板,保障检查流程自动落地
-
提供丰富的API接口、提供IDE代码检查插件、与代码仓协同支持代码提交时自动检查,与CI/CD流水线同时支持软件全量代码检查,逐层防范代码缺陷引入
-
同时通过灵活的任务管理、支持排除目录设置以避免无效扫描
-
支持混合语言检查、简化部署,一站式掌握整个版本代码质量
服务入口
CodeArts Check 服务入口主要有3个,它们的下载地址分别是
- IDEA插件:https://plugins.jetbrains.com/plugin/20956-huawei-cloud-codearts-check
- VSCode插件:https://marketplace.visualstudio.com/items?itemName=HuaweiCloud.codecheck&ssr=false#overview
- CloudIDE插件:https://marketplace.ide.huaweicloud.com/plugin/f8d1b76e-0826-408a-8506-1f33f7f008e5/overview
IDEA插件
在菜单栏点击“File”,然后选择“Settings”,在打开的设置对话框中,定位到“Plugins”,然后搜索“CodeArts Check”,安装“Huawei Cloud CodeArts Check”插件
我这里使用“华为账号登录”的方式,它会打开一个华为云自动登录的网站,只要你之前勾选过记住账号密码,那现在就只要选择账户,就可以自动登录了。
选择账户的模式还支持“多账户切换”
登录成功后,你就可以返回你的IDEA了
在项目上右击,可以看到CodeArts Check新增的3个功能选项
- 项目检查(对整个项目进行扫描。非必要不推荐,因为扫描可能会耗费大量的时间)
- 文件检查(只对单个文件进行扫描)
- 一键格式化(帮你将代码进行标准的格式化)
我这里只对单个java文件进行扫描,可以看到 Huawei Cloud Toolkit 检查到了如下这么多问题(严重质量,提示质量,一般质量)
在“规则详情”中,会给你描述这是什么“问题”,应该遵守什么“规范”,“正确的代码示例”和“错误的代码示例”
但是这个“基础版”的,并不会给出“自动修复代码的预览”
VSCode插件
在VSCode 安装插件的位置上搜索“CodeArts Check”,第一个就是“Huawei Cloud CodeArts Check”
安装好后,可以看到底部状态栏上显示“Huawei Cloud Toolkit : Offline”,这是因为我们首次安装完成,还未登录。点击该按钮进行登录
- 第一个按钮是通过浏览器进行登录
- 第二个按钮是通过华为云的AK/SK密钥进行登录
密钥的路径在华为云登录页面,点开账号,“我的凭证”页面下的“访问密钥”里(如果没有创建过,就自行创建一个)
“账号密码”方式与“AK/SK”的登录方式二选一,我这里用“AK/SK”的登录方式举例
输入“AK/SK”后,会弹出一个“隐私声明”的对话框,点击“同意并继续”按钮
下面是插件登录成功后的界面(点击“CONFIGURATION”也可以打开该页面)
将该配置页面拉到最底可以看到,当前仅支持如下3种语言:C、CPP、JAVA(并不支持JS、HTML和CSS)
在项目或文件处右击,可以看到CodeArts Check新增的3个功能选项
- CodeArts Check Project Check
项目检查(对整个项目进行扫描。非必要不推荐,因为扫描可能会耗费大量的时间) - CodeArts Check File Check
文件检查(只对单个文件进行扫描) - CodeArts Check Auto Format
一键格式化(帮你将代码进行标准的格式化)
检查完成后,点击上图左下角的x和感叹号按钮,即可弹出“检测结果”页面
(对于 C/C++,不仅能提示你哪里不符合规范,还能给出直接的修复建议)
(结合上文对IDE中JAVA代码的测试情况)可以说,华为云CodeArts Check对 C/C++ 的支持是大于Java的!
此外,它也有个不足的地方,那就是不会自动检测文件编码格式的错误
IDE Online
除了本地的IDE和VSCode,你还可以使用华为云的 IDE Online 进行插件试用
链接地址:https://marketplace.ide.huaweicloud.com/plugin/f8d1b76e-0826-408a-8506-1f33f7f008e5/overview
安装插件之前,需要创建实例
点击创建实例后,即会进入如下界面,该界面的地址为:https://devcloud.cn-north-4.huaweicloud.com/cloudide/home
点击“开通服务”,即可进入付费页面(当前免费开通,但使用需要付费)
购买方式
CodeArts Check 产品的地址为:https://www.huaweicloud.com/product/codecheck.html
下面还有详尽的产品解说视频以及产品的优势和其应用场景,你可以仔细的阅读完毕后,再考虑是否购买,以及购买哪种规格的产品
服务的购买方式有
- 针对日常质量和规范检查,购买CodeArts解决方案套餐基础版、专业版、铂金版就可以使用CodeCheck服务
- 针对TOP安全问题拦截检查,可以在已购买CodeArts解决方案套餐版本基础上增购特性包“代码安全检查增强包”
- 检查插件
我把大致的资费情况总结成了下表
产品规格 | 基础版 | 专业版 | 铂金版 | 资源包 | 特性包 |
---|---|---|---|---|---|
价格详情 | 5人(含)以下免费,新增人数50元/人/月 | 6人起购,前5人1元/月,第6人起200/人/月 | ¥600元/月/人 ,100人起售 | 2000 | 360000 |
因为我这里是个人开发者,所以我购买这个基础版 就够了(另外团队成员在5人以下的,也可以使用基础版来免费体验华为云CodeArts Check的这个能力,来帮助企业实现一个更加安全规范的上线产品)
CodeArts Check还非常贴心的给你提供了一个价格计算器,还有详尽的价格说明,地址如下:
https://www.huaweicloud.com/pricing.html?tab=detail#/devcloud
常见问题
1.CodeArts Check 对项目的通用性强么?比如不同行业的项目都可以支持吗?
答:CodeArts Check是一款通用性较强的代码检查工具,可以用于多个行业的项目。它支持Java、Python、JavaScript等多种编程语言,并且具有高度的可扩展性,可以根据不同项目的需求进行自定义配置。因此,无论是Web开发、移动应用开发、数据分析等不同行业的项目,都可以通过CodeArts Check实现代码质量的监测和优化。
2.CodeArts Check如何接入现有软件供应链,需要注意哪些因素?
答:CodeArts Check可以通过多种方式接入现有软件供应链,具体接入方式取决于项目的具体情况和需求。以下是一些常见的接入方式和需要注意的因素:
集成到CI/CD流程中:将CodeArts Check作为自动化测试和质量检查的一部分,集成到项目的CI/CD流程中,如Jenkins、GitLab CI等。需要注意的因素包括:将CodeArts Check的检查结果与构建结果进行关联,及时通知开发人员;配置CodeArts Check的检查规则和阈值,以符合项目的需求。
集成到IDE中:将CodeArts Check作为IDE插件集成到开发人员的开发环境中,如VS Code、IntelliJ IDEA等。需要注意的因素包括:确保插件版本与项目依赖的CodeArts Check版本一致;配置插件的检查规则和阈值,以符合项目的需求。
集成到代码仓库中:将CodeArts Check作为Git Hook、SVN Hook等集成到代码仓库中,在代码提交时进行检查。需要注意的因素包括:确保Hook脚本的权限和路径设置正确;配置Hook脚本的检查规则和阈值,以符合项目的需求。
无论采用哪种方式接入现有软件供应链,都需要注意以下因素:
项目特定的检查规则:CodeArts Check提供了一些通用的检查规则,但在实际项目中可能需要根据项目的特点进行自定义配置。
检查结果的及时通知:及时通知项目成员检查结果,有助于发现并解决问题,提高代码质量。
检查过程的效率和稳定性:CodeArts Check的检查过程应该尽可能地快速和稳定,以避免对开发流程的影响。
3.CodeArts Check可以同时配置到多个代码仓库吗,比如svn?
答:是的,CodeArts Check 扫描工具可以同时配置到多个代码仓库中,包括 SVN、Git 等版本控制系统。在配置扫描任务时,可以指定需要扫描的代码仓库路径、分支或标签等信息,也可以同时指定多个代码仓库路径,以便对多个代码仓库进行扫描。
同时,CodeArts Check 扫描工具支持并发扫描,可以同时对多个代码仓库进行扫描,提高扫描效率和速度。在配置扫描任务时,可以设置扫描线程数量,以控制并发扫描的数量,确保扫描效率和稳定性。
4.CodeArts自研的引擎检查能力如何?跟业界检查工具和引擎相比,检查能力是否有明显差距?
答:CodeArts Check自研的引擎检查能力相对较强,能够检测出许多常见的代码问题,如空指针引用、未使用的变量、重复代码等。此外,CodeArts Check还提供了一些具有针对性的检查规则,例如针对Spring框架、数据库操作、Web安全等方面的检查规则,有助于提高代码的安全性和可靠性。
与业界常用的检查工具和引擎相比,CodeArts Check的检查能力可能存在一些差距。一方面,CodeArts Check的检查规则相对较为简单,可能无法涵盖到一些高级的检查功能,如机器学习、深度学习等方面的检查功能。另一方面,CodeArts Check的检查结果可能存在一些误报和漏报,需要开发人员进行手动确认和调整。
但是,CodeArts Check的优势在于其易用性和可定制性。开发人员可以根据项目的具体情况进行自定义配置,以满足项目的需求。同时,CodeArts Check的检查过程简单、快速,对于开发人员来说,使用起来非常方便。因此,CodeArts Check在实际使用中具有一定的优势,尤其适用于小型项目和中小型企业。
5.CodeArts Check现在支持免费体验新特性吗?
答:目前,CodeArts Check提供了免费试用的功能,开发人员可以在免费试用期内使用最新的特性和功能。免费试用期为14天,试用期过后需要付费继续使用。
在免费试用期内,开发人员可以使用CodeArts Check提供的全部功能,包括代码检查、定制化检查规则、多种编程语言支持、集成开发环境等。试用期结束后,如果需要继续使用CodeArts Check,开发人员需要选择相应的付费方案。
需要注意的是,虽然CodeArts Check提供了免费试用的功能,但是试用期内的检查结果可能会受到限制,如每天检查的代码数量、检查结果的存储时长等。因此,在选择CodeArts Check的免费试用功能时,开发人员需要了解试用期内的限制,并根据自己的需求进行选择。
6.CodeArts Check有插件吗?能嵌入到VSCode 吗?
答:有VSCode插件,本文有做具体描述
7.CodeArts Check扫描Object-C,还有C++代码需要先编译吗?现在好多工具扫描都需要先编译?
答:CodeArts Check 扫描 Object-C 和 C++ 代码时,需要先进行编译才能进行扫描。这是因为 Objective-C 和 C++ 是编译型语言,代码需要先编译成可执行文件或动态链接库,才能进行代码扫描和检测。
CodeArts Check 扫描工具支持自动化编译和构建,可以根据项目的构建配置文件(如 Makefile、CMakeLists.txt 等)进行自动化构建和编译,然后对生成的可执行文件或动态链接库进行扫描和检测。这样可以提高工具的扫描效率和准确性,同时也可以避免手动编译和构建带来的错误和不便。
8.CodeArts Check 能接入本地的版本控制工具吗?比如git
答:CodeArts Check 扫描工具支持接入本地的版本控制工具,包括 Git、SVN 等,以便在扫描过程中能够直接获取代码仓库中的最新代码版本进行分析和检测。通过与版本控制工具的集成,可以实现自动化的代码扫描和检测,让开发人员更轻松地进行代码质量管理和优化。
9.CodeArts Check扫描出的明文密码保存,一般这种整改方法都有哪些?毕竟加密有时又引出了密钥明文的问题
答:CodeArts Check 扫描出的明文密码应该被视作一种安全漏洞,需要立即进行整改。通常可以采用以下方法进行整改:
替换明文密码为加密密码:将明文密码替换为加密密码,可以使用常见的密码加密算法,如MD5、SHA-256等。
使用安全存储方案:对于需要存储密码的应用程序,可以使用安全的存储方案,如使用加密的数据库或加密的配置文件等。
使用第三方验证方案:可以使用第三方验证方案,如OAuth、OpenID Connect等,避免直接存储密码,提高安全性。
对于加密后的密码,确实也存在密钥明文的问题,但是相对于明文密码,加密后的密码更加安全。在实际应用中,可以采用一些安全的密钥管理方案,如使用硬件安全模块(HSM)等,来保护密钥的安全性。同时,还可以采用双因素认证等方式,增强密码的安全性。
10.CodeArts Check代码扫描是静态的还是根据上下文判断的,有人工智能思想吗?类似于最近的chatGPT改代码
答:扫描是根据上下文去匹配相应的规则。目前还没有实现人工智能算法
直播回放
如果你想更全面更深入的了解华为云CodeArts Check 插件,推荐你可以看下这位老师的直播回放(本文主要也是对这篇直播课的总结、拓展与延伸)
回放链接和直播内容摘要都给你列在下面了
标题: CodeArts Check,全面守护软件质量与安全
内容摘要: 质量是软件产品的生命线,如何高效进行代码质量检查工作?如何做到在代码开发阶段事前就能修正软件缺陷和安全隐患?本期直播由华为云资深产品专家揭秘,支撑了华为15万研发人员的CodeArts Check如何一站式完成代码检查作业!
讲师: 龙翔 华为云PaaS DTSE技术布道师
17年软件开发、产品经理从业经验,8年代码检查领域经验。熟悉静态代码分析技术、企业级代码检查解决方案和落地成功实践。深耕代码检查、污点分析等前沿技术,为各类开发者和客户提供丰富的代码检查应用实践
直播链接: https://bbs.huaweicloud.com/live/DTT_live/202302161600.html
总结
最后,恭喜你,经过上面的学习,你已经基本掌握了“为什么要使用华为云的CodeArts Check插件,它能给你带来什么样的好处”,以及“在IntelliJ IDEA和VSCode中,如果使用该插件”。
那么快来动手尝试一下,给你手上的代码来个“质的飞跃”吧!
本文参与华为云社区【内容共创】活动第22期。
任务6:DTSE Tech Talk 技术直播 NO.19:CodeArts Check,全面守护软件质量与安全
- 点赞
- 收藏
- 关注作者
评论(0)