针对多种语言的轻量级静态分析。使用类似源代码的图案查找漏洞变体。
项目描述
超高速代码扫描。
本存储库包含Semgrep OSS(开源软件)的源代码。Semgrep OSS是一款快速的开源静态分析工具,用于搜索代码、查找错误和在编辑器、提交和CI时间强制执行代码标准。Semgrep是代码的语义grep:当使用grep "2"
时,只会匹配确切的字符串2,而Semgrep会在搜索2时匹配x = 1; y = x + 1
。它支持30多种语言!Semgrep规则看起来就像你已经写的代码;无需抽象语法树、正则表达式搏斗或痛苦的DSL:下面了解更多。
对于需要SAST、SCA和秘密扫描的公司,我们在Semgrep OSS之上提供了一个产品套件,可以扫描代码和包依赖项以查找已知问题、软件漏洞,并高精度地找到秘密
- Semgrep Code使用更深入的跨文件分析功能和高精度Pro规则以及社区规则来查找错误和漏洞
- Semgrep Supply Chain通过功能级可达性分析来查找具有已知漏洞的依赖项
- Semgrep Secrets来查找不应检查到源代码中的硬编码凭据
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 modules, 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开始,在终端输出中导航以运行一次性搜索。
选项1:从Semgrep Appsec平台开始入门(推荐)
-
在semgrep.dev上注册
-
通过探索演示结果来学习Semgrep是如何工作的
-
通过导航到
项目 > 扫描新项目 > 在CI中运行扫描
来扫描您的项目 -
选择您的版本控制系统,并按照入门步骤添加您的项目。在此设置之后,Semgrep将在每次pull request之后扫描您的项目。
-
(可选)如果您想本地运行Semgrep,请按照CLI部分中的步骤操作。
注意
如果有任何问题,请在Semgrep Slack中寻求帮助。
选项2:从CLI开始入门
- 安装Semgrep CLI
# 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 Supply Chain:一个依赖项扫描器,可检测第三方库中的可到达漏洞
- Semgrep Code的专业规则:由Semgrep安全研究团队编写的600多条高置信度规则
- Semgrep Code的专业引擎:一种高级代码分析引擎,旨在检测复杂漏洞并减少误报
-
进入您的应用程序根目录并运行
semgrep ci
。这将扫描您的项目以检查源代码及其依赖项中的漏洞。 -
尝试使用
-e
参数交互式编写自己的查询。例如,检查Python中左右两边相同的==(可能是一个错误):$ semgrep -e '$X == $X' --lang=py path/to/src
Semgrep生态系统
Semgrep生态系统包括以下产品
- Semgrep Code - 使用Semgrep的专有规则(由我们的安全研究团队编写)扫描代码,使用跨文件和跨函数分析。旨在发现OWASP Top 10漏洞并防范关键安全风险。Semgrep Code提供免费和付费两个级别。
- Semgrep Supply Chain (SSC) - 一种高信号依赖项扫描器,在整个软件开发生命周期(SDLC)中检测可到达的开源第三方库和函数中的漏洞。Semgrep Supply Chain提供免费和付费两个级别。
- Semgrep Secrets [新!] - 使用语义分析、改进的熵分析和验证相结合以准确检测开发工作流程中的敏感凭据。请预约演示以申请产品的早期访问。
- Semgrep AppSec平台 - 以规模部署、管理和监控Semgrep,提供免费和付费两个级别。与GitHub、GitLab、CircleCI等持续集成(CI)提供商集成。
- Semgrep OSS引擎 - 该开源引擎和社区贡献的规则是所有事物的核心(本项目)。
了解更多关于Semgrep的信息,请访问
- Semgrep Playground - 一个在线交互式工具,用于编写和共享规则。
- Semgrep注册表 - 2,000多条由社区驱动的规则,涵盖安全、正确性和依赖项漏洞。
加入GitLab、Dropbox、Slack、Figma、Shopify、HashiCorp、Snowflake和Trail of Bits等公司成千上万的开发人员和安全工程师,他们已经在使用Semgrep。
Semgrep由软件安全公司Semgrep, Inc.开发和商业支持。
Semgrep规则
Semgrep规则看起来就像您已经编写的代码;没有抽象语法树、正则表达式角斗或痛苦的DSL。以下是一个用于查找Python print()
语句的快速规则。
通过点击此处在Semgrep的Playground中在线运行。
示例
请访问文档 > 规则示例以获取用例和想法。
用例 | Semgrep规则 |
---|---|
禁止危险API | 防止使用exec |
搜索路由和身份验证 | 提取Spring路由 |
强制使用安全默认值 | 安全设置Flask cookies |
污点数据流入接收器 | ExpressJS数据流到sandbox.run |
强制执行项目最佳实践 | 使用assertEqual进行==检查,始终检查子进程调用 |
将项目特定的知识编码化 | 在执行交易前验证交易 |
审计安全热点 | 在Apache Airflow中找到XSS,硬编码凭据 |
审计配置文件 | 查找S3 ARN使用情况 |
从弃用API迁移 | DES已弃用,弃用的Flask API,弃用的Bokeh API |
应用自动修复 | 使用listenAndServeTLS |
扩展
访问文档 > 扩展 了解如何在您的编辑器或pre-commit中使用Semgrep。当集成到CI并配置为扫描pull请求时,Semgrep将仅报告由该pull请求引入的问题;这可以让您在不修复或忽略现有问题的情况下开始使用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
项目详情
semgrep-1.90.0.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | db68c10560e29543b54e8492f3f936e4472f1942a6236fceb09330047b10a43a |
|
MD5 | 93d15f383ed3f32aa0a52216f2cdf0f5 |
|
BLAKE2b-256 | 5765443418d8195cf5f05bb86dc2823e0880527674dfcb2abeb64bc86ab84dd1 |
哈希值 用于 semgrep-1.90.0-cp38.cp39.cp310.cp311.py37.py38.py39.py310.py311-none-musllinux_1_0_aarch64.manylinux2014_aarch64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | f81bad17c782600cff828b94083fefddc4313a7acdcff03b8340c4ae8a30614b |
|
MD5 | f56c5e8d5cb8d27fa3b453c59ded1436 |
|
BLAKE2b-256 | 1edbc4284766c5d0ecfb314a8b00dcbca8f9fbc01940e4a7b3af0f9f77d46310 |
哈希值 用于 semgrep-1.90.0-cp38.cp39.cp310.cp311.py37.py38.py39.py310.py311-none-macosx_11_0_arm64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 7878cebc3bacd90a029a07d05c9d86dbad0cc94d1b52c084a31c444823e7c6a8 |
|
MD5 | 3777c67206bda4c9faf42a6daa4a1288 |
|
BLAKE2b-256 | ce28825b6a2f7ab275741c7652c82eadbbb727d4ea552038fe8ff16ac7b4c131 |
哈希值 用于 semgrep-1.90.0-cp38.cp39.cp310.cp311.py37.py38.py39.py310.py311-none-macosx_10_14_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c4db0ca6bffb30e16e416e2be68838afda1b04f5be470f7e8ce1d9fb60ab69c0 |
|
MD5 | 55479e511391f1a44ff4a6090e6a70a3 |
|
BLAKE2b-256 | 7360ca853e4b00974943b91f777e53280081098bdabbf96c991f4b130a69fd2d |
哈希值 用于 semgrep-1.90.0-cp38.cp39.cp310.cp311.py37.py38.py39.py310.py311-none-any.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b90fef7562101f76b66a3836b4e8d0619bf73aa14d27515c7645a7b758f36214 |
|
MD5 | 1c2f8f236cfca9f70b20a23e8bcba00c |
|
BLAKE2b-256 | 1645533fd7b4ed449781c49e0b11108976f5f74c0246a5448502c0876315e439 |