
취약점 연구를 용이하게 하기 위한 제 Semgrep 규칙 모음입니다.
"공격 표면이 곧 취약점이다. 그곳에서 버그를 찾는 것은 단지 세부 사항일 뿐이다."
-- Mark Dowd
"어떤 세부 사항은 다른 것보다 더 중요하다."
-- Fedor G. Pikus
취약점 연구를 돕기 위한 제 Semgrep 규칙 모음입니다.
# high priority scan (quick wins)
semgrep --severity ERROR --config "p/0xdea"
# high and medium priority scan (recommended)
semgrep --severity ERROR --severity WARNING --config "p/0xdea"
# full scan (might include marginal findings and more false positives)
semgrep --config "p/0xdea"
또는 이 GitHub 저장소를 로컬에 클론한 후 다음을 실행할 수 있습니다.
# full scan
semgrep --config semgrep-rules/rules /path/to/source
# specific rule scan
semgrep --config semgrep-rules/rules/c/command-injection.yaml /path/to/source
[!TIP]
--no-git-ignore스위치를 지정하면 git 추적 상태나.gitignore규칙과 관계없이 파일을 스캔할 수 있습니다.
보다 간소화된 경험을 위해 Semgrep 스캔 출력을 SARIF 형식으로 저장하고 VS code에서 SARIF Explorer를 사용할 것을 권장합니다:
semgrep --sarif --sarif-output=/path/to/source/SEMGREP.sarif --config semgrep-rules/rules /path/to/source
code /path/to/source # then open the SEMGREP.sarif file in VS code with SARIF Explorer
포함된 SARIF 출력 예제도 참조하세요.
Semgrep CLI 1.169.0으로 테스트했습니다.
실전에서 검증된 C(때때로 C++) 규칙 세트입니다.
gets의 사용.strcpy, stpcpy, strcat의 사용.sprintf 및 vsprintf의 사용.scanf 계열의 잠재적으로 안전하지 않은 API 함수 사용.strncat에 잘못된 크기 인자가 전달됨.strncpy, , 및 변형 함수에 잘못된 크기 인자가 전달됨.strlen의 반환값을 short로 캐스팅하는 것은 위험할 수 있음.alloca의 사용.free 이후 잠재적인 사용(use-after-free).free.free 호출.malloc, calloc, realloc 등의 반환 코드를 확인하지 않음.putenv 호출.system 또는 popen을 통한 잠재적인 OS 명령어 주입.access, stat, lstat 등의 사용.mktemp, tmpnam, tempnam의 사용.signal의 사용.setuid 및 seteuid의 반환 코드를 확인하지 않음.memset 인자의 잘못된 순서.rand 및 srand의 사용.scanf 계열 함수의 반환 코드를 확인하지 않음.atoi, atol, atof의 사용.이 규칙들은 잠재적으로 너무 많은 노이즈를 생성하여 일반적인 사용에는 부적합한 것으로 간주됩니다.
--time 벤치마킹을 수행합니다.memcpysnprintfsizeof 연산자를 실수로 사용함.strncpy 및 stpncpy 사용 후 명시적인 NUL 종료가 없음.snprintf 및 vsnprintf 반환값의 잠재적으로 안전하지 않은 사용.strlcpy 및 strlcat 반환값의 잠재적으로 안전하지 않은 사용.