深入了解现代 SAST 工具​​

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

现在我们已经掌握了一些资源,并且对 CodeQL 和 Semgrep 有所了解,让我们深入了解它们。虽然这两种工具都是现代静态分析工具的很好的例子,但它们却大不相同。

使用案例

我首先要说的是,对于 CodeQL 和 Semgrep,我都关心一个用例,它增强了我的漏洞研究工作流程,以帮助识别给定代码库中的安全漏洞,以及 GitHub 和 R2C 主要试图向您推销的用例,利用这些工具作为左移策略的主要组成部分。他们的目标是取代您现有的 SAST,或者成为尚未推出的公司的首次实施。他们的目标是集成到 CI 管道中,以每隔一段时间或作为代码评审过程的一部分运行,并在问题投入生产之前识别问题。从他们的许可模式中可以清楚地看出这一点,我们将很快讨论。

有几类问题可用于:

  • 安全漏洞
  • 非安全漏洞
  • 样式执行/检查

这两种工具都附带一个查询和规则库,这些查询和规则实现对这些示例的检测,并能够编写自己的查询和规则。我没有花太多时间评估每个库附带的库,以真正说明质量或全面性,因为在我的大多数使用中,我已经编写了自定义规则来检测非常具体的条件,这些条件相当适合代码库本身,而不是一般规则。

这主要用于执行变体分析,以识别存在特定漏洞模式的其他位置或执行数据流分析,同时消除采取特定步骤以消除漏洞的情况(例如,清理SQL查询的输入)。我的假设是,这些库中的通用查询和规则可能相当有限,除了最令人震惊的问题,以避免误报并应用于尽可能广泛的代码库集。包含的库是我想在未来更深入地研究的东西,但从浏览它们来看,它们本身似乎对我的用例并没有特别帮助。

发牌

许可实际上是一件大事,具体取决于您要做什么以及您需要哪些功能。CodeQL 许可相当简单。您可以完全免费使用该工具的所有功能,只要您将其与开源代码一起使用即可。第二个你想把它与封闭的源代码一起使用(除了一些狭窄的剥离),你需要一个商业许可证。这是GitHub高级安全(GHAS)中包含的内容,这是他们的商业产品之一,也是GitHub Enterprise(SaaS或服务器)的附加组件,您可以在其中按组织的每个用户付费。如果您不是现有的 GitHub 客户或尝试在 GitHub 生态系统之外使用它,祝你好运。

他们真的不想卖给你许可证,除非你准备投入一些大笔资金(数十万美元),否则他们甚至不想和你说话,即使你告诉他们你已经批准了预算并试图向他们扔钱。他们的商业模式主要集中在销售 GHAS 和向每个承诺用户收取每个正在扫描的存储库的费用,而不是为漏洞研究人员提供商业访问。作为一个领导一个进攻性安全团队的人,这个团队在短期内定期进出回购,并且没有工程师使用工具本身,这对我们来说不是一个实用或现实的选择。定价与我们的用例不一致,对于以这种方式使用它的大多数团队/企业来说是不现实的。

经过大量的来回,一些冷冰冰的电子邮件,以及骚扰合适的人,我能够获得一些非开源工作的许可证,但这是迄今为止在漏洞研究中合法使用CodeQL最痛苦的绊脚石之一。根据您的用例,这可能很重要,也可能无关紧要。除非您在内部漏洞研究团队中,或者作为咨询安全服务公司进行开放式评估,否则似乎没有很多情况可以访问您想要使用 CodeQL 的闭源码。

Semgrep 许可既简单又复杂,具体取决于您关心的功能。R2C 提供了 Semgrep 的开源版本,可用于开源和闭源软件。此 OSS 版本仅限于文件内过程内分析。他们还在销售一个新的Pro版本,其中包括具有过程间分析的文件内和具有过程间分析的迭代文件。这在“团队”层及以上层可用,同样按开发人员每月计费。他们还提供“安全顾问/早期创业公司是否有特殊定价?定价页面上的常见问题解答,这实际上是大多数研究人员将要选择Pro的道路。 不清楚此选项的许可是什么样子的,或者如果您想要Pro,获得它有多难。

到目前为止,我主要在我的用例中使用 OSS,它已经完成了我使用的狭窄范围所需要的。除了文件间和过程间支持外,OSS 和 Pro 之间的另一个主要区别是增加了一些仅限 Pro 的语言支持。在撰写本文时,唯一提到的是Apex,这是Salesforce用于定制的语言。

工具

在之前的文章中,我已经谈到了工具,特别是关于CodeQL VS Code扩展和Semgrep游乐场。我想更深入地介绍这些工具以及生态系统中存在的其他一些工具。鉴于Microsoft拥有GitHub,GitHub拥有CodeQL,很明显他们会选择VS Code来构建。我非常直言不讳地不喜欢VS Code。我认为烤面包机弹出窗口非常烦人,很多扩展都有问题,整体集成非常受欢迎。话虽如此,CodeQL 扩展非常适合使用。它确实使体验明显改善。

在代码完成、快速查询、数据库管理、集成到 GitHub、AST 可视化、查询历史记录以及与查询结果的交互之间,您真的不能要求更好的方法来使用 CodeQL。如果使用 VS Code 进行代码浏览和代码库审核,则尤其如此,它确实可以让您保持所有位置并非常集成所有内容。如果您正在迭代查询,那就太好了,因为它允许您逐步进行,尤其是当您开始重构(例如将独立查询转换为类)或开始使用更高级的功能(例如数据流或污点跟踪)时。

肯定有改进的余地,我已经给了他们一些直接的反馈。作为喜欢 JetBrains 产品的人,很高兴看到他们的生态系统中的官方扩展,但我并没有为此屏住呼吸。但这在 CodeQL 方面确实如此

GitHub本身有许多集成,并将其引入“代码扫描”,这是他们利用CodeQL的SAST产品,但一般来说,这对于漏洞研究来说可能不会特别有趣。

在Semgrep方面,故事就没有那么好了。还有一个VS Code扩展,尽管它特别指出它没有主动维护。因此,我没有亲自使用它。它是开源的,但自 2022 年以来一直没有更新。

在交互式处理结果方面,我发现的最佳选择是利用Semgrep可以生成的SARIF输出。如果您从未使用过 SARIF,它是一种使用 JSON 的开放标准文件格式,旨在成为静态分析工具之间的交换格式。VS Code 有一个扩展名,增加了对 SARIF 文件的支持。它可以加载它们并打开一个交互式窗格,该窗格允许您深入了解结果并将您带到代码中已匹配的位置。它甚至可以很好地与基于污点跟踪的发现一起使用,并专门注释发生不同污点步骤的代码。加载文件有点挑剔,但总体上效果很好。不幸的是,我还没有找到 JetBrains 生态系统的良好扩展,所以再次陷入 VS Code 中。如果这是你习惯的,你应该有宾至如归的感觉。

R2C还提供了Semgrep应用程序。它实际上是为了集成、管理调查结果和处理规则管理。总的来说,我觉得它对我的用例不是特别有用。我倾向于在本地编写规则并自己管理它们的运行/分发。如果你在一个集群中耕种,我可以看到它很有帮助,但总的来说,我的工作流程保持得很好。

语言支持

根据您使用的语言,这可能是您可以使用哪些工具的决定因素之一。这两种工具都涵盖了广泛的通用语言。您可以在此处查看 CodeQL 的支持矩阵,在此处查看 Semgrep 的支持矩阵。它们在击中许多通用语言方面都做得很好,尽管CodeQL特别不支持PHP和C,并且Semgrep中的C++支持是实验性的。需要注意的另一件事是,虽然列出了对各种语言的支持,但所有支持并不相同。

如果您浏览两者中的问题跟踪器,您会发现许多特定语言未按预期运行的问题。在我迄今为止有限的经验中,在语言支持的错误方面,我在 CodeQL 上遇到的问题比我在 Semgrep 上遇到的问题要少。我不能说客观的质量或正确性,但我可以提供一些我遇到的问题的例子。在到达那里之前,我认为简要介绍一下两者的工作原理是有意义的,因为这将提供一些背景。

我对 CodeQL 如何实现对语言的支持的理解是,他们为特定语言构建了一个提取器。这通常利用语言的编译器/解释器对代码进行建模并创建存储在数据库中的必要关系。然后需要构建一个标准库,对可用于编写查询的语言语法和语义进行建模。这个标准库是用 CodeQL 本身编写的。在大多数情况下,标准库至少会因语言而异,这意味着了解一种语言不一定会翻译成另一种语言,这可能会令人沮丧,但根据我的经验,文档非常好,从一种语言到另一种语言并不难。大多数高级概念都非常相似。

我的理解是,提取器本身是开源的,理论上你可以构建自己的,尽管作为一个做过相当多解析器开发和分析工作的人,这对于个人的大型语言来说似乎不是很实用,考虑到上面讨论的许可问题,我可能不会这样做。最终这意味着,在某些/大多数情况下,真正的解析器用于解析正在分析的代码,因此如果语言实现认为它是有效的代码,CodeQL 也应该如此。

另一方面,Semgrep利用了Tree-sitter,这是一个在许多项目中使用的通用解析器生成器库。由于Tree-sitter和Semgrep OSS是开源的,理论上也可以添加对新语言的支持,但目前还不清楚这将需要多少工作,以及它是否适用于Semgrep的Pro版本。从 GitHub 问题来看,他们似乎利用开箱即用的语法来解析语言,这是一把双刃剑。这意味着他们以最少的工作免费获得大量语言支持,但他们也仅限于现有语言,除非他们想编写自己的语言,并且受到可用语法质量的限制,除非他们想修复它们。这似乎导致能够更快地为更多语言提供支持,但这些语言并不总是最正确的。

这方面的一个例子是我在 Semgrep 的 PHP 处理中发现的一个问题,尽管 PHP 没有对函数强制区分大小写,但它将函数调用视为区分大小写。这会导致 Semgrep 中的假阴性检测。一般来说,除了偶尔的错误之外,许多非常通用的东西似乎在语言中运行良好,但是当你进入语言中一些更深奥和鲜为人知的功能时,你开始看到它们被错误地处理。

自动修复

我想指出这一点以及Semgrep提供的一些有趣的东西,这些东西可能对漏洞研究用例特别有用,也可能不是特别有用,但对于利用这些工具作为左移策略一部分的人来说可能很有趣。Semgrep 提供了在规则中定义自动修复的功能。当模式匹配时,可以将修复应用于源。从理论上讲,这可以用来自动提交拉取请求,而不需要工程师自己编写修复程序。它似乎不是非常灵活,可能不是处理披露的理想方式,如果你想这样做,但这是一种选择。

如果它是你想要利用的东西,那么它的有用性可能会非常依赖于规则(例如,你能以编程方式定义如何以正确的方式修复代码)。我不知道有多少次会有一条明确的路径,并且可能会有负面的二阶效应。

例如:

  • 它是否破坏了下游软件(例如 API 损坏)?
  • 它是否会更改序列化/数据格式并损坏/中断持久存储?

这些是严重的问题,我会担心依赖它,但可能是最简单的问题,直到我有一些实际经验来支持它的使用。

总结

我希望这有助于概述 CodeQL 和 Semgrep 之间的一些异同,并真正展示它们的优势和劣势所在。将来,我们将深入研究查询和规则,并对两者进行深入比较。

参考:goingbeyondgrep

sast/dast/iast对比介绍 为了发现软件的安全漏洞和缺陷,确保应用系统是安全可靠的,就需要针对Web系统做应用检测,识别Web应用程序中架构的薄弱环节,以免轻易的受到恶意攻击者的攻击。主要市场上主要的检测技术主要是DAST、SAST、RAST和IAST,每种技术都有一定的优缺点,本节将介绍相关工具特点。SAST是静态应用安全测试技术,SAST工具的技术实践大致可分为以下几种:(1) 正则匹配:代表工具Cobra,Raptor;(2) 基于语法树:代表工具P3C,Fireline;(3) java语言可基于class文件:代表工具Fi 阅读详情

相关推荐

SAST :静态应用程序安全测试

静态应用程序安全测试 (SAST) 一直是应用程序安全工作的核心部分。

网络研究观 2436

国内外主流静态分析类工具汇总

笔者从事该软件安全方面工作,在工作和学习中收集了国内外比较主流的静态分析类工具,供大家参考。大多是资料来自于网络整理,如有不足或欠缺,还请在评论中指出。我进行修正。也欢迎同行多多交流。 我使用0标注北大软件CoBOT,因为他是国内第一款基于主流SAST技术的静态分析工具,填补了国内在缺陷检测、安全漏洞软件工具上的空白。值得称赞的工具。 0、北大软件CoBOT CoBOT(库博)是北京大学...

manok的专栏 2万+

代码审计-审计工具介绍-DAST+SAST+IAST项目

各类语言审计工具 PHP:Seay RIPS CheckMarx Fortify VCG Kunlun-M NET:VCG Fortify CheckMarx Java:Fortify CheckMarx VCG Python:Bandit Fortify CheckMarx JS:Kunlun-M NodeJsScan Fortify CheckMarx Go:Gosec CheckMarx

xiaoheizi的博客 2057

几款静态扫描工具SAST)的比较

最近公司因为安全的发展需求,需要调查一下市场上的SAST工具,看看是否有哪些工具能够更好滴满足公司提高安全开发和安全集成的需求。经过大量的调查把各种工具的一些特性罗列如下: 参数 Checkmarx ShiftLeft Snyk Coverity Veracode Contrast Fortify Sonarqube CodeQL Semggrep 支持语言 JavaScript, Java,PHP, Pyth...

jimmyleeee的专栏 1万+

如何打破SAST代码审计工具的局限性?

尽管要解决SAST工具的局限性问题并非易事,但不可否认SAST工具仍是软件安全测试的重要组成部分。确保软件安全地交付上线,是SAST工具的开发者和使用者共同向往的目标。开发者在不断努力迭代优化SAST工具,逐步提升工具易用性和性能,以满足广大使用者的检测需求;而使用者则借助现代软件工程方法,结合敏捷开发和DevSecOps理念,合理配置和使用SAST工具,以充分发挥其检测优势,从而提高软件最终的安全性。推荐阅读揭秘!企业什么情况下急需代码审计工具了解代码安全,一篇文章搞懂白盒检测(SAST)及其作用。

芯_v_648374雨馨博客 916

2025 自动代码审计工具灵脉 SAST 的应用实践

未实现指向分析,会产生一定的误报。灵脉SAST白盒代码审计平台(灵脉AI)是基于多模智能引擎的新一代静态代码安全扫描产品,提供源代码缺陷检测、源代码合规检测、源代码溯源检测三大能力,能从编码源头识别安全风险,帮助企业解决软件开发过程中的安全缺陷、质量缺陷和编码规范缺陷,确保研发团队高质量交付。1 融合SCA双倍AI驱动引擎进行同步检测,并支持组件漏洞可达性分析,通过评估第三方组件的安全性、审查代码的合规性和最佳实践,帮助确保整个数字供应链的安全性和可信度,提供供应链安全审查并实现供应链安全能力支撑。

软件供应链安全选型指南 1785

如何为 SAST 工具设置误报基准?

许多 SAST 工具都无法避免误报的问题。这些工具经常报告一些实际不存在的漏洞,这种不准确性让安全团队耗费大量时间来对误报进行分类和处理,这时设置误报基准就显得十分必要。通过设置误报基准,安全团队可以确定一个参考的点或者标准来衡量安全工具的有效性。

分享 GPU 管理与大模型推理相关技术实践 728

为什么SAST和SCA在SDLC中很重要?

SAST主要用于测试内部开发的代码,SCA主要用于管理导入的开源组件。 同时使用这两种方法,可以同时覆盖这两个领域可能存在的安全漏洞。

m0_50579386的博客 2640

如何选择合适的SAST工具

随着敏捷开发的流行,安全左移的重要性也越来越重要,实现安全的自动化,也就需要大量工具的支持,SAST工具是其中非常重要的一个工具。如何选择一个合适的SAST工具就非常重要。本文集合自己几年的SAST的开发经验和多年的SAST的使用经验,介绍一些选择SAST工具的几个需要关注的重要的方面。 1. 支持的语言与框架 这一点不言而喻,工具支持的语言是最重要的,如果使用的语言工具都不支持或者支持的不足够好,这种工具再好,也没有用。 当然,语言支持了,只是第一步,因为一个工程的开发,不可能在原生语言基础上来开发

jimmyleeee的专栏 1293

SAST扫描工具指南

SAST扫描工具指南 一、项目目录结构及介绍 开源项目https://github.com/AppThreat/sast-scan.git虽然在提供的信息中没有详细列出具体的目录结构,但一般高质量的SAST(静态应用安全测试)工具会有以下典型的项目布局: src: 此目录通常包含项目的主要源代码,包括分析引擎、命令行接口等。 docs: 文档目录,存放项目说明、用户手册、API文档等。 exa...

gitblog_00944的博客 662

DevSecOps实践:CI/CD流水线集成SAST工具详解

通过集成SAST工具到CI/CD流水线,团队可以在代码提交阶段快速发现安全问题,大幅降低修复成本。结合自动化工具、规则优化和团队协作,DevSecOps实践能够有效提升云原生应用的安全性。对于初学者,建议从GitHub Actions + SonarQube入门,逐步探索更复杂的场景。本文将从基础概念到实战细节,逐步拆解如何在CI/CD流水线中高效集成SAST工具,帮助初学者快速掌握技术框架。点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】(温馨提示:本工坊不打灰工,只烧脑洞🔥)

like21a的博客 1488

网安加·百家讲坛 | 张飞:SAST基础原理及五款主流工具对比

详细对比五款主流SAST工具的优势与劣势,助您选择工具时快速决策。

WAJXY2021的博客 2818

DevSecOps实践:CI/CD流水线集成SAST工具的完整指南

分阶段集成策略开发阶段:IDE插件实时提示漏洞(如VS Code SonarLint)。代码审查阶段:GitHub Action自动拦截高危漏洞。生产发布前:全量扫描并生成合规报告(如ISO 27001)。

like21a的博客 1159

2025年如何挑选静态应用安全测试(SAST工具

AI漏洞代码自动修复:灵脉SAST全新接入AI大模型智能算法:通过将用户代码进行分块并构建向量索引、建立用户代码向量库,基于RAG及LLM编排技术,AI大模型对需要修复的漏洞代码进行检索,快速精确地匹配并提供最适合当前代码上下文的修复方案及修复建议。但理想情况下,你的SAST解决方案还应该能够显示每个API中存在的漏洞,让你可以根据API的业务价值来确定待修复漏洞的优先级。此外,如果你的SAST能够发现并盘点源代码中的API,找出未记录的API,那你也可以通过DAST来测试这些未记录的API。

软件供应链安全选型指南 1096

SAST静态分析工具所支持的规则

综合国内外SAST工具支持的规则,这些规则包括了国际标准、国内标准、行业标准等,这里我罗列了一下,这些规则对应的标准集合

manok的专栏 1458

国内外四款SAST工具约登指数

主要是通过Java语言基准测试案例对SAST工具进行评价。通过Yonden Index(约登指数)进行计算。约登指数等于测试的敏感性和特异性之和减掉1而得出。

manok的专栏 1908

SAST工程化实践

模式匹配基础rules:pattern: |},message: 使用不安全的HTTP客户端配置元变量高级应用rules:patterns:if $ERR!= nil {...message: 错误返回值未检查。

caishuangxi111的博客 926
上一篇: 如何Docker Compose进行集成测试
下一篇: Neo4j迅速了解
why811
博客等级 码龄17年 10粉丝 75原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值