Semgrep 是一种快速、开源、静态分析工具,可以搜索代码、查找错误并强制执行安全护栏和编码标准。 Semgrep 支持 30 多种语言,可以在 IDE 中运行,作为预提交检查以及 CI/CD 工作流程的一部分。
Semgrep 是代码的语义 grep。虽然运行grep "2"
只会匹配确切的字符串2 ,但 Semgrep 将匹配x = 1; y = x + 1
搜索2时x = 1; y = x + 1
。 Semgrep 规则看起来就像您已经编写的代码;没有抽象语法树、正则表达式角力或痛苦的 DSL。
请注意,在安全上下文中,Semgrep OSS 将错过许多真正的肯定,因为它只能分析单个函数或文件边界内的代码。如果您想将 Semgrep 用于安全目的( SAST 、 SCA或机密扫描),强烈建议使用 Semgrep AppSec 平台,因为它添加了以下关键功能:
Semgrep AppSec 平台开箱即用,具有 20000 多个跨 SAST、SCA 和机密的专有规则。 Pro 规则由 Semgrep 安全研究团队编写和维护,并且非常准确,这意味着 AppSec 团队可以放心地将发现结果直接提供给开发人员,而不会减慢他们的速度。
Semgrep 在您的计算机或构建环境中本地分析代码:默认情况下,代码永远不会上传。开始吧→。
Semgrep Code支持 30 多种语言,包括:
Apex · Bash · C · C++ · C# · Clojure · Dart · Dockerfile · Elixir · HTML · Go · Java · JavaScript · JSX · JSON · Julia · Jsonnet · Kotlin · Lisp · Lua · OCaml · PHP · Python · R · Ruby · Rust·Scala·Scheme·Solidity·Swift·Terraform·TypeScript·TSX·YAML·XML·通用(ERB、Jinja等)
Semgrep Supply Chain支持 15 个包管理器中的 12 种语言,包括:
C# (NuGet) · Dart (Pub) · Go (Go 模块、 go mod
) · Java (Gradle、Maven) · Javascript/Typescript (npm、Yarn、Yarn 2、Yarn 3、pnpm) · Kotlin (Gradle、Maven) · PHP (Composer) · Python (pip、pip-tool、Pipenv、Poetry) · Ruby (RubyGems) · Rust (Cargo) · Scala (Maven) · Swift (SwiftPM)
有关详细信息,请参阅支持的语言。
对于新用户,我们建议从 Semgrep AppSec 平台开始,因为它提供了可视化界面、演示项目、结果分类和探索工作流程,并且可以快速进行 CI/CD 中的设置。扫描仍然是本地的,代码不会上传。或者,您也可以从 CLI 开始并导航终端输出以运行一次性搜索。
在 semgrep.dev 上注册
探索演示结果以了解 Semgrep 的工作原理
通过导航到Projects > Scan New Project > Run scan in CI
扫描项目
选择您的版本控制系统并按照入门步骤添加您的项目。完成此设置后,Semgrep 将在每次拉取请求后扫描您的项目。
[可选] 如果您想在本地运行 Semgrep,请按照 CLI 部分中的步骤操作。
如果有任何问题,请在 Semgrep Slack 中寻求帮助。
# For macOS
$ brew install semgrep
# For Ubuntu/WSL/Linux/macOS
$ python3 -m pip install semgrep
# To try Semgrep without installation run via Docker
$ docker run -it -v "${PWD}:/src" semgrep/semgrep semgrep login
$ docker run -e SEMGREP_APP_TOKEN=<TOKEN> --rm -v "${PWD}:/src" semgrep/semgrep semgrep ci
semgrep login
创建您的帐户并登录到 Semgrep。登录 Semgrep 可以让您访问:
转到应用程序的根目录并运行semgrep ci
。这将扫描您的项目以检查源代码及其依赖项中的漏洞。
尝试使用-e
交互地编写您自己的查询。例如,检查 Python == ,其中左侧和右侧相同(可能是错误): $ semgrep -e '$X == $X' --lang=py path/to/src
Semgrep 生态系统包括以下内容:
Semgrep OSS - 一切核心的开源程序分析引擎。适用于对误报具有较高容忍度的临时用例 - 想想顾问、安全审计员或渗透测试人员。
Semgrep AppSec 平台 - 在整个组织中轻松编排和扩展 SAST、SCA 和 Secrets 扫描,而不会有让开发人员不知所措的风险。自定义开发人员可以看到哪些结果、在哪里看到结果,并与 GitHub、GitLab、CircleCI 等 CI 提供商集成。包括免费和付费级别。
Semgrep 代码 (SAST) - 使用 SAST 在漏洞积压方面取得真正的进展,最大限度地减少噪音,并使开发人员能够快速自行修复问题,即使他们没有安全知识。易于部署的安全护栏和量身定制的分步修复指南意味着开发人员实际上可以解决问题,因为他们不会感到放慢速度。
Semgrep Supply Chain (SSC) - 一种高信号依赖性扫描器,可检测开源第三方库和函数中可触及的漏洞。
Semgrep Secrets(秘密扫描) - 秘密检测,使用语义分析、改进的熵分析和验证来准确地显示开发人员工作流程中的敏感凭证。
Semgrep Assistant (AI) - Assistant 是一位人工智能驱动的 AppSec 工程师,可帮助开发人员和 AppSec 团队大规模确定 Semgrep 发现的优先级、分类和修复。人们在 97% 的情况下同意助理自动分类决策,并在 80% 的情况下将生成的补救指导评为有帮助。有关 Assistant 工作原理的概述,请阅读此概述。
其他资源:
加入已经在 GitLab、Dropbox、Slack、Figma、Shopify、HashiCorp、Snowflake 和 Trail of Bits 等公司使用 Semgrep 的数十万其他开发人员和安全工程师的行列。
Semgrep 由软件安全公司 Semgrep, Inc. 开发并提供商业支持。
Semgrep 规则看起来就像您已经编写的代码;没有抽象语法树、正则表达式角力或痛苦的 DSL。下面是查找 Python print()
语句的快速规则。
单击此处在 Semgrep's Playground 中在线运行它。
访问文档 > 规则示例以获取用例和想法。
使用案例 | 语义规则 |
---|---|
禁止危险API | 防止使用 exec |
搜索路由和身份验证 | 提取 Spring 路线 |
强制使用安全默认值 | 安全地设置 Flask cookie |
受污染的数据流入接收器 | ExpressJS 数据流进入 sandbox.run |
实施项目最佳实践 | 使用assertEqual进行==检查,始终检查子进程调用 |
整理项目特定知识 | 在进行交易之前验证交易 |
审核安全热点 | 在 Apache Airflow 中查找 XSS,硬编码凭据 |
审核配置文件 | 查找 S3 ARN 用途 |
从已弃用的 API 迁移 | DES 已弃用、已弃用 Flask API、已弃用 Bokeh API |
应用自动修复 | 使用listenAndServeTLS |
访问文档 > 扩展以了解如何在编辑器或预提交中使用 Semgrep。当集成到 CI 并配置为扫描拉取请求时,Semgrep 将仅报告该拉取请求引入的问题;这使您可以开始使用 Semgrep,而无需修复或忽略预先存在的问题!
在网站上浏览完整的 Semgrep 文档。如果您是 Semgrep 新手,请查看文档 > 入门或交互式教程。
使用注册表中的远程配置(例如--config=p/ci
)向 semgrep.dev 报告假名规则指标。
使用本地文件中的配置(如--config=xyz.yml
)不会启用指标。
要禁用注册表规则指标,请使用--metrics=off
。
Semgrep 隐私政策描述了指导数据收集决策的原则以及启用指标时收集和未收集的数据的详细信息。
要升级,请运行以下与您安装 Semgrep 的方式相关的命令:
# Using Homebrew
$ brew upgrade semgrep
# Using pip
$ python3 -m pip install --upgrade semgrep
# Using Docker
$ docker pull semgrep/semgrep:latest