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 by · Python · 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