semgrep 란?
오픈 정적 분석 툴인 semgrep는 최신 언어들을 위한 오픈 소스 정적 분석 도구입니다. 사용 가능한 언어는 기존의 C, C++을 포함하며 최근 많이 사용되는 Python과 같은 최신 언어들(총 21개) 도 다수 포함하고 있습니다.
유료화된 정적 분석 도구가 아닌 오픈 소스 방식의 정적 분석 도구로 1,500개 이상의 기존 규칙을 포함하며, 이 외 만들기 쉬운 사용자 지정 규칙을 통해 중요한 버그를 찾을 수 있습니다.
Semgrep 장점
- 오픈 소스 방식
- 20개 이상, 현재 21개의 언어에서 작동
Experimental: 현재는 많은 알려진 버그를 실험적으로 지원, 우선순위를 낮게 보고 사용자가 추가 개선이 필요해 보임
Beta: 알려진 버그가 있는 지원 언어, 버그가 보고 되면 Semgrep팀에서 신속히 대응중
GA: 알려진 버그가 거의 없는 프로덕션 수준 지원, 사용자의 버그 보고나 피드백을 찾는 단계로 일반적으로 24시간 이내 지원 응답 중
완성도는 GA < Beta < Experimental 3가지 수준이 있습니다. 이 성숙도의 수준은 다음 요소의 임계값과 결합하여 결정됩니다.
1. 구문 분석 속도
Semgrep 가 주어진 언어의 코드를 구문 분석할 수 있는 정도
2. 기능 지원
주어진 언어에 대해 구현되는 Semgrep의 기능
3. 규칙 집합 수
클라우드 앱의 Semgrep 규칙 그룹 수
Bash (Experimental)
C (Experimental)
C++ (Experimental)
C#
Dockerfile (Experimental)
Generic (Experimental)
Go
HTML (Experimental)
Java
JavaScript
JSON (Beta)
Lua (Experimental)
OCaml (Experimental)
Python
Ruby
Rust (Experimental)
Scala (Beta)
Solidity (Experimental)
Terraform (Beta)
TypeScript
YAML (Experimental)
- 코드처럼 보이는 규칙으로 작성
- 타 정적 분석 도구에서 사용하는 복잡한 구조의 DSL 방식이 아님
#CodeSonar의 Pipeline DSL 언어 예제
pipeline {
agent any
parameters {
string (
defaultValue: 'some-name',
description: 'The name of the project in CodeSonar',
name : 'JOB_NAME'
)
Jenkins Job DSL
Available options
#Jenkins의 DSL 예제
job{
publishers{
codeSonar(String hubAddress, String projectName){
cyclomaticComplexity(int maxComplexity, boolean markAsFailed)
redAlert(int maxAlerts, boolean markAsFailed)
yellowAlert(int maxAlerts, boolean markAsFailed)
newWarningCountIncrease(float percentage, boolean markAsFailed)
overallWarningCountIncrease(float percentage, boolean markAsFailed)
rankedWarningCountIncrease(int minRank, float percentage, boolean markAsFailed)
}
}
}
- 터미널 / 편집기 또는 CI/CD에서 신속하게 결과를 얻을 수 있음 -> 예로 CI/CD인 Jenkins, Github 앱 상에서 결과를 얻기 가능.
CI(Continuous Integration) : 빌드/테스트 자동화 과정, 개발자를 위한 자동화 프로세스인 지속적인 통합을 의미
CD(Continuous Delivery) : 배포 자동화 과정
- Github 앱 사용 시 Semgrep 결과를 PR주석으로 얻고, 한 번의 클릭으로 Semgrep를 프로젝트에 추가 후 중앙집중식으로 한 곳에서 여러 프로젝트의 규칙과 결과를 관리할 수 있습니다.
- 진행 중인 문제에 플래그를 지정, pull 요청에서 결과 얻기 가능
Semgrep는 r2c에서 개발 및 기술 지원을 합니다.
'Integration & Python' 카테고리의 다른 글
Visual Studio Code WSL 설치 연동 & 윈도우 탐색기 WSL 경로 찾기 (0) | 2022.08.04 |
---|---|
Semgrep CLI 설치 및 실행 방법 (0) | 2022.08.04 |
코드 정적 분석 툴 - 코드소나(CodeSonar) 사용 하는 이유 (0) | 2022.07.11 |
파이썬 web3.0 모듈 설치 및 에러 해결 방법 (0) | 2022.02.17 |
파이썬 - --user option or check the permissions 에러 (0) | 2022.02.16 |
댓글