
여러 언어에 걸친 정적 코드 분석, 보안 취약점 탐지, 안전한 코딩 관행 적용을 위한 Semgrep 규칙 모음입니다.
이 저장소에는 Trail of Bits가 개발하여 공개한 Semgrep 규칙이 포함되어 있습니다. 이 규칙은 지속적인 개발 노력의 일부이며 보안 감사, 취약점 연구 및 내부 프로젝트에 사용됩니다. 새로운 기술을 식별함에 따라 시간이 지나면서 발전할 것입니다.
Semgrep 지침은 Testing Handbook을 방문하세요.
규칙을 실행하는 가장 쉬운 방법은 Semgrep 레지스트리에서 실행하는 것입니다. 그러려면 프로젝트의 루트 폴더로 이동하여 다음을 실행하세요:```shell $ semgrep --config "p/trailofbits"
또는 이 저장소를 클론하고 프로젝트의 루트 폴더로 이동한 다음, 아래 명령을 사용하여 개별 규칙을 실행할 수 있습니다:```shell
$ semgrep --config /path/to/semgrep-rules/semgreprule.yml
클론된 저장소에서 모든 규칙을 실행하려면:```shell $ semgrep --config /path/to/semgrep-rules/ .
## 유용한 플래그
Semgrep는 `.gitignore` 파일에 있는 파일을 제외한 모든 지원되는 코드 파일에 대해 실행됩니다. `.gitignore`에 있는 파일을 포함한 모든 파일과 디렉터리에 규칙을 실행하려면 `--no-git-ignore` 플래그를 추가하세요.```shell
$ semgrep --config /path/to/semgrep-rules/ . --no-git-ignore
또한 Semgrep에게 특정 패턴과 일치하는 파일 및 디렉터리를 무시하도록 지시할 수 있습니다. 예를 들어, 모든 Go 테스트 파일을 무시하도록 Semgrep에 지시하려면 다음을 실행하면 됩니다:```shell $ semgrep --config /path/to/semgrep-rules/ . --exclude='*_test.go'
`-o`를 사용하여 결과를 파일로 출력합니다:```shell
$ semgrep --config /path/to/semgrep-rules/hanging-goroutine.yml -o leaks.txt'
| ID | Playground | 영향도 | 신뢰도 | 설명 |
|---|---|---|---|---|
| eth-rpc-tracetransaction | 🛝🔗 | 🟥 | 🌕 | EVM 트랜잭션 또는 블록에서 트레이스 정보를 추출하려는 시도를 감지합니다. 교환 또는 브리지 애플리케이션에서는 이러한 엔드포인트를 캡슐화하는 추가 로직을 구현하여 되돌려진 호출 프레임 중에 전송된 값이 계산되지 않도록 해야 합니다. |
| eth-txreceipt-status | 🛝🔗 | 🟥 | 🌕 | 트랜잭션 영수증의 상태가 읽힐 때를 감지합니다. |
| hanging-goroutine | 🛝🔗 | 🟩 | 🌗 | 고루틴 누수 |
| invalid-usage-of-modified-variable | 🛝🔗 | 🟧 | 🌘 | 오류 발생 시 의도하지 않은 할당 가능성 |
| iterate-over-empty-map | 🛝🔗 | 🟩 | 🌗 | 빈 맵에 대한 중복 반복일 가능성이 있습니다. |
| missing-runlock-on-rwmutex | 🛝🔗 | 🟧 | 🌗 | 함수에서 반환하기 전에 RWMutex 잠금에 대한 RUnlock 누락 |
| missing-unlock-before-return | 🛝🔗 | 🟧 | 🌗 | 함수에서 반환하기 전에 mutex 잠금 해제 누락 |
| nil-check-after-call | 🛝🔗 | 🟧 | 🌗 | 가능한 nil 역참조 |
| racy-append-to-slice | 🛝🔗 | 🟧 | 🌗 | 여러 고루틴에서 append에 대한 동시 호출 |
| racy-write-to-map | 🛝🔗 | 🟧 | 🌗 | 여러 고루틴에서 동일한 맵에 대한 동시 쓰기 |
| servercodec-readrequestbody-unhandled-nil | 🛝🔗 | 🟩 | 🌘 | 잠재적으로 잘못된 ServerCodec 인터페이스 구현 |
| string-to-int-signedness-cast | 🛝🔗 | 🟧 | 🌘 | 정수 언더플로 |
| sync-mutex-value-copied | 🛝🔗 | 🟩 | 🌘 | 값 수신기를 통한 sync.Mutex 복사 |
| unmarshal-tag-is-dash | 🛝🔗 | 🟧 | 🌘 | |
| unmarshal-tag-is-omitempty | 🛝🔗 | 🟩 | 🌘 | |
| unsafe-dll-loading | 🛝🔗 | 🟥 | 🌘 | DLL 하이재킹 공격에 취약한 함수 사용 |
| waitgroup-add-called-inside-goroutine | 🛝🔗 | 🟧 | 🌗 | 익명 고루틴 내부의 sync.WaitGroup.Add 호출 |
| waitgroup-wait-inside-loop | 🛝🔗 | 🟧 | 🌗 | 루프 내부의 sync.WaitGroup.Wait 호출 |