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는 단일 함수 또는 파일의 경계 내에서만 코드를 분석할 수 있으므로 많은 참양성을 놓칠 수 있습니다. 보안 목적( SAST , SCA 또는 비밀 검색 )으로 Semgrep을 사용하려는 경우 Semgrep AppSec 플랫폼은 다음과 같은 중요한 기능을 추가하므로 강력히 권장됩니다.
Semgrep AppSec 플랫폼은 SAST, SCA 및 비밀 전반에 걸쳐 20000개 이상의 독점 규칙을 사용하여 기본적으로 작동합니다. Pro 규칙은 Semgrep 보안 연구 팀에서 작성하고 유지 관리하며 매우 정확합니다. 즉, AppSec 팀은 속도를 늦추지 않고 결과를 개발자에게 직접 전달할 수 있다는 자신감을 가질 수 있습니다.
Semgrep은 컴퓨터 또는 빌드 환경에서 로컬로 코드를 분석합니다. 기본적으로 코드는 업로드되지 않습니다 . 시작하세요 →.
Semgrep 코드는 다음을 포함하여 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 · Generic(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(작곡기) · Python(pip, pip-tool, Pipenv, Poetry) · Ruby(RubyGems) · Rust(Cargo) · 스칼라(Maven) · 스위프트(SwiftPM)
자세한 내용은 지원되는 언어를 참조하세요.
신규 사용자의 경우 시각적 인터페이스, 데모 프로젝트, 결과 분류 및 탐색 워크플로를 제공하고 CI/CD 설정을 빠르게 하기 때문에 Semgrep AppSec Platform으로 시작하는 것이 좋습니다. 스캔은 여전히 로컬이며 코드는 업로드되지 않습니다. 또는 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 Platform - 개발자를 압도할 위험 없이 조직 전체에서 SAST, SCA 및 비밀 검색을 쉽게 조정하고 확장합니다. 개발자가 볼 수 있는 결과와 볼 수 있는 위치를 사용자 정의하고 GitHub, GitLab, CircleCI 등과 같은 CI 제공업체와 통합하세요. 무료 및 유료 계층이 모두 포함됩니다.
Semgrep 코드(SAST) - 노이즈를 최소화하고 개발자가 보안 지식이 없더라도 스스로 문제를 신속하게 해결할 수 있도록 지원하는 SAST를 사용하여 취약점 백로그를 실질적으로 진행하세요. 배포하기 쉬운 보안 가드레일과 맞춤형 단계별 해결 지침을 통해 개발자는 속도 저하를 느끼지 않고 실제로 문제를 해결할 수 있습니다.
Semgrep Supply Chain(SSC) - 오픈 소스 타사 라이브러리 및 기능에서 도달 가능한 취약점을 감지하는 높은 신호 종속성 스캐너입니다.
Semgrep Secrets(비밀 검색) - 의미 체계 분석, 향상된 엔트로피 분석 및 유효성 검사를 사용하여 개발자 워크플로에서 중요한 자격 증명을 정확하게 표시하는 비밀 탐지입니다.
Semgrep Assistant(AI) - Assistant는 개발자와 AppSec 팀 모두가 대규모로 Semgrep 조사 결과의 우선 순위를 지정하고 분류하고 해결하는 데 도움이 되는 AI 기반 AppSec 엔지니어입니다. 인간은 보조 자동 분류 결정에 97%의 시간 동안 동의하며 생성된 해결 지침이 80%의 시간 동안 유용한 것으로 평가합니다. 어시스턴트 작동 방식에 대한 개요를 보려면 이 개요를 읽어보세요.
추가 리소스:
GitLab, Dropbox, Slack, Figma, Shopify, HashiCorp, Snowflake 및 Trail of Bits와 같은 회사에서 이미 Semgrep을 사용하고 있는 수십만 명의 다른 개발자 및 보안 엔지니어와 함께하세요.
Semgrep은 소프트웨어 보안 회사인 Semgrep, Inc.에서 개발하고 상업적으로 지원합니다.
Semgrep 규칙은 이미 작성한 코드와 유사합니다. 추상 구문 트리, 정규식 레슬링 또는 고통스러운 DSL이 없습니다. 다음은 Python print()
문을 찾는 빠른 규칙입니다.
여기를 클릭하여 Semgrep의 놀이터에서 온라인으로 실행해 보세요.
사용 사례 및 아이디어를 보려면 문서 > 규칙 예시를 방문하세요.
사용 사례 | Semgrep 규칙 |
---|---|
위험한 API 금지 | exec 사용 방지 |
경로 검색 및 인증 | Spring 경로 추출 |
보안 기본값 사용 시행 | Flask 쿠키를 안전하게 설정 |
싱크로 유입되는 오염된 데이터 | sandbox.run으로의 ExpressJS 데이터 흐름 |
프로젝트 모범 사례 시행 | == 확인에는 AssertEqual을 사용하고, 항상 하위 프로세스 호출을 확인하세요. |
프로젝트별 지식을 체계화 | 거래를 하기 전에 확인하세요 |
보안 핫스팟 감사 | Apache Airflow에서 XSS 찾기, 하드코딩된 자격 증명 |
감사 구성 파일 | S3 ARN 용도 찾기 |
더 이상 사용되지 않는 API에서 마이그레이션 | DES는 더 이상 사용되지 않습니다. 더 이상 사용되지 않는 Flask API, 더 이상 사용되지 않는 Bokeh API |
자동 수정 적용 | ListenAndServeTLS 사용 |
편집기에서 Semgrep을 사용하거나 사전 커밋하는 방법을 알아보려면 문서 > 확장 프로그램을 방문하세요. CI에 통합되고 풀 요청을 스캔하도록 구성된 경우 Semgrep은 해당 풀 요청으로 인해 발생한 문제만 보고합니다. 이를 통해 기존 문제를 수정하거나 무시하지 않고도 Semgrep 사용을 시작할 수 있습니다!
웹사이트에서 전체 Semgrep 문서를 찾아보세요. Semgrep을 처음 사용하는 경우 Docs > 시작하기 또는 대화형 튜토리얼을 확인하세요.
레지스트리에서 원격 구성(예: --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