深入了解现代 SAST 工具​​

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

现在我们已经掌握了一些资源,并且对 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 :静态应用程序安全测试 静态应用程序安全测试 (SAST) 一直是应用程序安全工作的核心部分。 阅读详情

相关推荐

代码审计-审计工具介绍-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的博客 2055

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

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

manok的专栏 2万+

适合初学者的ROS机器人教程(1): Ubuntu下ROS创建自己的包和使用github下载的包

ROS如何创建自己的包 1. 首先创建catkin工作空间(如果你以及有了请忽略) $ mkdir catkin_ws # 创建一个文件夹里面计划放我们的项目,ws是workspace的缩写 $ cd catkin_ws # 将当前工作文件夹切换到catkin_ws这个文件夹 ~/catkin_ws$ catkin_make # 执行catkin_make创建一ROS项目 此时你的catkin_...

@司南牧|知乎|博客|易懂教程|李韬 3207

几款静态扫描工具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

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

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

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

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

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

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

如何选择合适的SAST工具

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

jimmyleeee的专栏 1292

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

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

m0_50579386的博客 2640

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

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

WAJXY2021的博客 2800

浅谈应用安全测试工具

正确的应用程序安全测试工具可以改善企业安全态势和开发工作流程。如今,应用程序安全从一开始就内置在整个软件生命周期中,即使是具有成熟开发实践的组织也需要自动化工具来在复杂、快速变化的环境中成功地保护他们的软件。以下比较了三个广泛使用的应用程序安全测试工具:静态应用程序安全测试(SAST),动态应用程序安全测试(DAST)和交互式应用程序安全测试(IAST)。

OKCRoss的博客 640

拒绝 “漏洞型加班”!SAST 工具让你下班准时走

SAST(静态应用安全测试)是一种白盒测试方法,通过分析源代码检测安全漏洞与合规风险。其核心优势在于开发早期发现问题,降低修复成本。常见工具包括开源方案(如SonarQube、FindSecBugs)和商业工具(如Checkmarx、Fortify),适用于开发实时检测、CI/CD集成、代码审计等场景。选型建议:小型项目用开源工具,大型企业选择商业方案,云原生团队考虑Veracode等云服务。

行走の飞鱼博客 666

SAST、DAST、IAST几种测试工具的比较

在安全测试中都会遇到SAST(Static Application Security Testing)、DAST(Dynamic Application Security Testing)、IAST(Interactive Application Security Testing)的概念,这三种工具各有优劣势,先比较如下: 比较项 SAST DAST IAST 扫描对象 源代...

jimmyleeee的专栏 7422

安全测试工具综述:选择最适合您的工具

1.背景介绍 在当今的数字时代,数据安全和系统安全成为了企业和组织的重要问题。安全测试是确保系统和数据安全的关键环节。安全测试工具是帮助我们发现和修复安全漏洞的重要手段。本文将对安全测试工具进行综述,帮助您选择最适合您的工具。 2.核心概念与联系 安全测试工具主要包括静态应用安全测试(SAST)、动态应用安全测试(DAST)、源代码审计(SCA)和漏洞扫描(Vulnerability Sca...

AI天才研究院 1956

什么是静态应用程序安全测试 (SAST)?

SAST是一种白盒测试方法,通过直接面向源代码、字节码和二进制文件,检测是否存在缺陷和安全漏洞,由于不需要进行部署应用程序或代码,SAST 扫描可以在 SDLC 的早期进行,也因此可以为开发人员提供实时反馈,及时修复缺陷或漏洞,避免将问题传递到SDLC的下一步。SAST帮助组织自动化安全过程,实现对缺陷和漏洞的快速和准确的解决方案,并持续改进代码的完整性。SAST工具可以快速扫描数百万行代码,并自动识别关键漏洞,包括结构化查询语言注入、跨站脚本和缓冲区溢出,从而提高代码的整体质量。

weixin_50195591的博客 1895

关于Checkmarx、CodeQL和Semgrep的测试结果比较

对于SAST工具而言,对框架的支持非常重要,它可以有效地发现基于某些框架的漏洞,而且现在系统的开发为了提高开发效率,基本上没有从0开始的,都是基于框架的,因此,对于框架的支持程度对于扫描结果的影响很大。Semgrep是在本地扫描,然后将扫描的结果发送到Semgrep的云上,通过Web Portal再显示扫描结果,虽然在数据流里显示了具体的文件与行号,但是,由于不能和源代码联动,在做甄别问题时,就显得比较费劲,如果上传代码到云上,又有泄露的安全风险。本文列列举了工具的各个方面的比较,比较的方面和结果如下。

jimmyleeee的专栏 2333

JAVA代码审计SAST工具使用与漏洞特征

本文来学习、总结下业界常见的 Java 语言代码审计工具的使用,同时通过检验工具的漏洞扫描结果学习下常见漏洞的代码特征,毕竟只有多看看漏洞所在的缺陷代码,才能避免实战中与漏洞“碰面”了却“互不相识”。

道阻且长,行则将至 3292

MATLAB - 激光雷达 - 相机联合标定(Lidar-Camera Calibration)

激光雷达传感器和相机通常在自动驾驶应用中结合使用,因为激光雷达传感器收集三维空间信息,而相机则以二维图像捕捉空间的外观和纹理。您可以融合来自这些传感器的数据来改进物体检测和分类。激光雷达-相机标定可以估算出一个变换矩阵,给出两个传感器之间的相对旋转和平移。在进行激光雷达-相机数据融合时,您可以使用该矩阵。本图说明了激光雷达和相机标定 (LCC) 过程的工作流程,我们使用棋盘格作为标定对象。我们从激光雷达和相机数据中提取棋盘角和平面,然后在它们的坐标系之间建立几何关系,进行标定。

机器人控制与仿真应用 7324

python10 小呆呆小黄人

python10 小呆呆小黄人

上一篇: 如何Docker Compose进行集成测试
下一篇: Neo4j迅速了解
why811
博客等级 码龄17年 6粉丝 75原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值