Semgrep介绍

简介

什么是Semgrep

Semgrep 是一个轻量级、开源的静态代码分析工具,专注于代码安全、质量检测以及模式匹配分析。它通过规则语言(类似正则表达式)对代码进行快速扫描,支持多种编程语言和框架。Semgrep 的目标是提供一种易于使用、灵活且高效的代码分析解决方案。

特点

  • 易拓展(Extensible):Semgrep 可在您需要的任何位置运行,从 CLI 到 CI/CD。调查结果可以显示在开发人员工作流程、Semgrep AppSec 平台或通过 API 的现有工具中。

  • 可定制(Customizable):Semgrep 具有实施任何类型的 AppSec 计划所需的功能,旨在让团队随着发展而根据自己的需求定制这些功能。

  • 透明的(Transparent):Semgrep 规则对用户可见,其语法类似于源代码。任何人都可以理解为什么会发现结果以及如何优化它们。

  • 非常快(Ludicrously Fast):Semgrep 的 CI 扫描中位时间为 10 秒。构建最佳的 AppSec 计划是一个迭代过程,Semgrep 不仅可以帮助您实现目标,还可以帮助您快速实现目标。

扫描原理

  • 当 Semgrep 对代码执行分析时,它会创建一个抽象语法树 (AST),然后将其转换为易于分析的中间语言 (IL)。随后,Semgrep 主要在 IL 上进行与语言无关分析(language-agnostic analysis)

  • 它不构建复杂的控制流图(CFG),而是直接在 中间语言 中寻找符合模式的语法结构。

    # 使用 pattern-inside 模拟控制流上下文:检测在for循环内使用eval函数
    rules:
      - id: dangerous-eval-in-loop
        patterns:
          - pattern: eval(...)
          - pattern-inside: |
              for $VAR in ...:
                ...
        message: Avoid using eval inside loops.
        severity: WARNING
        languages:
          - python

其他:

支持的语言

更多语言支持文档:Supported languages | Semgrep

Products

1 Semgrep Code

Semgrep Code 是一种静态应用程序安全测试 (Static Application Security Testing,SAST) 工具,用于检测第一方代码中的安全漏洞。您可以使用 Semgrep Code 扫描本地存储库或将其集成到 CI/CD 管道中,以自动持续扫描代码。

  • 自定义规则:除了 Registry 中可用的规则之外,您还可以编写自定义规则来确定 Semgrep Code 在存储库中检测到的内容

    Types of rules in the Semgrep Registry by author
    社区规则 - 由 Semgrep 团队审查,这些规则包含来自 Semgrep 社区的贡献。社区规则包含一系列规则,包括许多为安全审计员制定的规则。

    第三方规则 - 由外部贡献者直接创建,例如 Trail of Bits、GitLab 等。

    私有规则 - 由您自己的组织编写和发布的规则,仅供您的组织使用。

    专业规则 - 由 Semgrep 团队创建的专有规则,针对需要准确调查结果的安全和软件工程师。这些规则为许多编程语言提供了更大的覆盖范围,并使用了最新的 Semgrep 功能。

  • 支持跨文件分析/单函数分析

  • 数据流跟踪:

2 Semgrep Supply Chain

Semgrep Supply Chain 是一种软件组件分析 (Software Composition Analysis,SCA) 工具,可检测开源依赖项引入的代码库中的安全漏洞

3 Semgrep Secrets

Semgrep Secrets 扫描代码以检测暴露的 API 密钥、密码和其他凭据。一旦暴露,恶意行为者可以利用这些漏洞来泄露数据或访问敏感系统

规则类型

Error个数

Wraning个数

info个数

Java

0

1

0

C/C++

0

0

0

Python

6

18

0

Go

0

2

0

 

Why is it bad practice to call System.gc()?

  • correctness(代码正确性):识别代码中的逻辑或语法错误,确保代码按预期运行。

Error个数

Wraning个数

info个数

Java

3

1

0

C/C++

1

3

0

Python

17

20

1

Go

0

5

2

  • maintainability(可维护性):识别复杂或冗余的代码结构。

    Error个数

    Wraning个数

    info个数

    Java

    0

    0

    0

    C/C++

    0

    0

    0

    Python

    4

    10

    11

    Go

    0

    2

    2

  • performance(性能优化):识别低效算法或数据结构的使用。

    Error个数

    Wraning个数

    info个数

    Java

    0

    0

    0

    C/C++

    0

    0

    0

    Python

    2

    5

    0

    Go

    0

    0

    0

  • portability(可移植性):检测依赖于特定平台或环境的代码。

    Error个数

    Wraning个数

    info个数

    Java

    0

    0

    0

    C/C++

    0

    0

    0

    Python

    0

    0

    0

    Go

    0

    0

    0

  •  security(安全性):识别代码中可能导致安全漏洞的问题,如 SQL 注入、XSS 和 CSRF

XSS:XSS(Cross-Site Scripting,跨站脚本攻击)XSS 是一种网络安全漏洞,攻击者通过在网站中注入恶意脚本,使脚本在其他用户的浏览器中执行,从而窃取数据、冒充用户行为或执行其他恶意操作。

CSRF:(Cross-Site Request Forgery,跨站请求伪造)CSRF 是一种攻击方式,攻击者通过伪造合法用户的请求,强迫用户在未授权的情况下执行操作(如转账、修改密码、发送数据)。

  • Error个数

    Wraning个数

    info个数

    Java

    171

    217

    8

    C/C++

    52

    49

    127

    Python

    299

    309

    63

    Go

    63

    121

    4

自定义规则

参考:Overview | Semgrep

AI-assisted triage and autofix

Semgrep Assistant 提供 AI 驱动的安全建议,帮助您查看、分类和修复 Semgrep 调查结果。

Semgrep In CI

参考:Sample CI configurations | Semgrep

参考文档

Docs home | Semgrep

XSS:XSS(Cross-Site Scripting,跨站脚本攻击)XSS 是一种网络安全漏洞,攻击者通过在网站中注入恶意脚本,使脚本在其他用户的浏览器中执行,从而窃取数据、冒充用户行为或执行其他恶意操作。

CSRF:(Cross-Site Request Forgery,跨站请求伪造)CSRF 是一种攻击方式,攻击者通过伪造合法用户的请求,强迫用户在未授权的情况下执行操作(如转账、修改密码、发送数据)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dusong_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值