<source media=\"(prefers–color–scheme: light)\" srcset=\"/ semgrep/ semgrep /raw/develop/images/ semgrep -logo -light.svg“> <source media=\"(prefers-color-scheme: dark)\" srcset=\"/ semgrep/ semgrep /raw/develop/images/ semgrep -logo -dark.svg“>
以可笑的速度进行代码扫描。
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社区版将错过许多真实的阳性,因为它只能在单个功能或文件的边界内分析代码。如果您想将semgrep用于安全目的( SAST , SCA或秘密扫描),则强烈建议使用semgrep AppSec平台,因为它添加了以下关键功能:
- 改进的核心分析功能(跨文件,跨功能,数据流达到),可将假阳性大大降低25%,并将检测到的真实阳性增加250%
- 通过semgrep助手(AI)对发现的上下文后期处理,以进一步将噪声降低约20%。此外,助手通过量身定制的,逐步的补救指导丰富了发现,即人类在80%的时间内发现可行的发现。
- 可自定义的政策和无缝集成到开发人员工作流程中,使安全团队对何时,何时以及如何向开发人员提出不同发现(IDE,PR评论等)进行了详细的控制
semgrep AppSec平台在SAST,SCA和SECRETS上使用20000多个专有规则开箱即用。专业规则是由semgrep安全研究团队编写和维护的,并且非常准确,这意味着AppSEC团队可以充满信心地将发现直接带给开发人员而不减速他们。
semgrep在您的计算机或构建环境中本地分析代码:默认情况下,代码永远不会上传。入门→。
语言支持
semgrep代码支持30多种语言,包括:
Apex·Bash·C·C ++·C#·Clojure·飞镖·锈·scala·方案·固体·Swift·Terraform·打字稿
semgrep供应链支持15个包装管理人员的12种语言,包括:
c#(nuget)·飞镖(pub)·go(go模块, go mod )·java(gradle,maven)·javascript/tesscript/tesscript(npm,yarn,yarn,yarn 2,yarn 3,yarn 3,pnpm)·kotlin(gradle,maven)红宝石(RubyGems)·锈(货物)·Scala(Maven)·Swift(Swiftpm)
有关更多信息,请参阅支持的语言。
入门
- 来自semgrep AppSec平台
- 来自CLI
对于新用户,我们建议从semgrep AppSec平台开始,因为它提供了一个视觉界面,一个演示项目,结果进行分解和探索工作流程,并在CI/CD中快速进行设置。扫描仍然是本地的,并且代码没有上传。另外,您也可以从CLI开始,然后导航终端输出以进行一次性搜索。
选项1:从semgrep AppSec平台入门(建议)
-
在semgrep .dev上注册
-
探索演示发现以了解semgrep工作方式
-
通过导航到
Projects > Scan New Project > Run scan in CI扫描您的项目 -
选择您的版本控制系统,然后按照入门步骤添加您的项目。设置后, semgrep将在每次拉请求后扫描您的项目。
-
[可选]如果要本地运行semgrep ,请按照CLI部分中的步骤操作。
笔记:
如果有任何问题,请在semgrep Slack中寻求帮助。
选项2:从CLI入门
- 安装semgrep CLI
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\”>
# 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供应链:一个检测第三方库中可触及漏洞的依赖扫描仪
- semgrep Code的Pro规则: semgrep的安全研究团队撰写的600多个高信任规则
- semgrep Code的Pro Engine:高级代码分析引擎,旨在检测复杂的漏洞并减少误报
-
转到您的应用程序的根目录并运行
semgrep ci。这将扫描您的项目以检查源代码及其依赖项中的漏洞。 -
尝试与
-e交互作用地编写您自己的查询。例如,检查python ==的检查左侧和右侧是相同的(可能是一个错误):$ semgrep -e '$X == $X' --lang=py path/to/src
semgrep生态系统
semgrep生态系统包括以下内容:
-
semgrep社区版 – 一切核心的开源程序分析引擎。适用于对误报的临时用例,具有很高的容忍度 – 想想顾问,安全审计师或penters。
-
semgrep APPSEC平台 – 轻松地编排和扩展SAST,SCA和秘密扫描一个组织,没有压倒性开发人员的风险。自定义哪些发现开发人员可以看到,他们看到它们的位置,并与Github,Gitlab,Circleci等CI提供商集成。包括免费和付费层。
-
semgrep代码(SAST) – 用SAST在您的脆弱性积压上取得真正的进步,以最大程度地减少噪音,并使开发人员自行快速解决问题,即使他们没有安全知识。易于部署安全的护栏和量身定制的逐步修复指导意味着开发人员实际上可以解决问题,因为他们没有放慢脚步。
-
semgrep供应链(SSC) – 一种高信号依赖扫描仪,可检测开源第三方库和功能中的可触及漏洞。
-
semgrep Secrets(秘密扫描) – 使用语义分析,改进的熵分析和验证的秘密检测,以准确表面敏感的凭证在开发人员工作流程中。
-
semgrep助理(AI) – 助手是一名AI驱动的APPSEC工程师,可帮助开发人员和APPSEC团队优先级,分类和补充semgrep调查结果。人类在97%的时间内同意助理自动进出决策,而利率产生的补救指导是有帮助的80%的时间。有关助手工作方式的概述,请阅读此概述。
-
其他资源:
- semgrep Playground-用于编写和共享规则的在线交互工具。
- semgrep注册表-2,000多个社区驱动的规则涵盖了安全性,正确性和依赖性漏洞。
加入已经在Gitlab,Dropbox,Slack,Figma,Shopify,Hashicorp,Hashicorp,Snowflake和Bitt的公司等公司使用semgrep数十万其他开发人员和安全工程师。
semgrep由软件安全公司semgrep ,Inc。开发和商业支持。
semgrep规则
semgrep规则看起来像您已经编写的代码;没有抽象的语法树,正则摔跤或痛苦的DSL。这是查找Python print()语句的快速规则。
单击此处,在semgrep的操场上在线运行它。
例子
请访问Docs>规则示例以获取用例和想法。
| 用例 | semgrep规则 |
|---|---|
| 禁止危险的API | 防止使用EXEC |
| 搜索路线和身份验证 | 提取弹簧路线 |
| 强制使用安全默认 | 安全设置烧瓶饼干 |
| 流入水槽的污染数据 | 将dataflow expressjs dataflow到sandbox.run |
| 执行项目最佳实践 | 使用AsserTEqual进行==检查,始终检查子过程调用 |
| 编纂特定于项目的知识 | 在进行交易之前验证交易 |
| 审核安全热点 | 在Apache气流中查找XSS,硬编码的凭据 |
| 审核配置文件 | 查找S3 ARN用途 |
| 从弃用的API中迁移 | DES被弃用,弃用的烧瓶API,弃用的散景API |
| 应用自动修复 | 使用ListerandServetls |
扩展
请访问Docs>扩展程序,以了解有关在您的编辑器或预先使用中使用semgrep信息。当集成到CI中并配置为扫描拉的请求时, semgrep只会报告该拉请求引入的问题;这使您可以开始使用semgrep而无需修复或忽略预先存在的问题!
文档
浏览网站上的完整semgrep文档。如果您是semgrep的新手,请查看文档>“入门或交互式教程”。
指标
使用注册表中的远程配置(例如--config=p/ci )向semgrep .dev报告假规则指标。
当使用来自本地文件的配置(例如--config=xyz.yml )时,仅在用户登录时发送指标。
要禁用注册表规则指标,请使用--metrics=off 。
semgrep隐私政策描述了指导数据收集决策的原则以及在启用指标时未收集和未收集的数据的分解。
更多的
- 常见问题(常见问题解答)
- 贡献
- 为开发人员建立说明
- 在semgrep社区懈怠中提出问题
- CLI参考和退出代码
- semgrep YouTube频道
- 许可证(LGPL-2.1)
- 许可semgrep
升级
要升级,请运行以下命令与您安装semgrep的方式相关联:
semgrep
# Using pip
$ python3 -m pip install –upgrade semgrep
# Using Docker
$ docker pull semgrep / semgrep :latest\”>
# Using Homebrew $ brew upgrade semgrep # Using pip $ python3 -m pip install --upgrade semgrep # Using Docker $ docker pull semgrep / semgrep :latest
