Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
도구/GitHubGitHub/0xdea/semgrep-rules
Static Code Analysis (SAST)Vulnerability AnalysisCode AnalysisBinary AnalysisLearning & EducationCurated Resources
GitHub0xdea/semgrep-rules

semgrep-rules

취약점 연구를 용이하게 하기 위한 제 Semgrep 규칙 모음입니다.

저장소 보기
86689726일 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
웹사이트

semgrep-rules

validate

"공격 표면이 곧 취약점이다. 그곳에서 버그를 찾는 것은 단지 세부 사항일 뿐이다."

-- Mark Dowd

"어떤 세부 사항은 다른 것보다 더 중요하다."

-- Fedor G. Pikus

취약점 연구를 돕기 위한 제 Semgrep 규칙 모음입니다.

Program in C

블로그 게시물

  • https://hnsecurity.it/blog/semgrep-ruleset-for-c-c-vulnerability-research
  • https://hnsecurity.it/blog/automating-binary-vulnerability-discovery-with-ghidra-and-semgrep
  • https://hnsecurity.it/blog/big-update-to-my-semgrep-c-cpp-ruleset
  • https://hnsecurity.it/blog/streamlining-vulnerability-research-with-the-idalib-rust-bindings-for-ida-9-2/
  • https://hnsecurity.it/blog/my-semgrep-c-cpp-ruleset-is-ready-for-prime-time-again/

참고 항목

  • https://appsec.guide/docs/static-analysis/semgrep/
  • https://semgrep.dev/docs/writing-rules/overview
  • https://semgrep.dev/r

설정 및 사용 방법

  1. Semgrep를 설치합니다.
  2. Semgrep 레지스트리를 통해 이 규칙을 사용하려면 대상 소스 코드 저장소의 루트 폴더에서 다음을 실행합니다.
root@kitploit:~
# 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 저장소를 로컬에 클론한 후 다음을 실행할 수 있습니다.

root@kitploit:~
# 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를 사용할 것을 권장합니다:

root@kitploit:~
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++

실전에서 검증된 C(때때로 C++) 규칙 세트입니다.

버퍼 오버플로

  • insecure-api-gets. 안전하지 않은 API 함수 gets의 사용.
  • insecure-api-strcpy-strcat. 잠재적으로 안전하지 않은 API 함수 strcpy, stpcpy, strcat의 사용.
  • insecure-api-sprintf-vsprintf. 잠재적으로 안전하지 않은 API 함수 sprintf 및 vsprintf의 사용.
  • insecure-api-scanf. scanf 계열의 잠재적으로 안전하지 않은 API 함수 사용.
  • incorrect-use-of-strncat. strncat에 잘못된 크기 인자가 전달됨.
  • use-of-source-size-in-copy. strncpy, , 및 변형 함수에 잘못된 크기 인자가 전달됨.

정수 오버플로

  • integer-wraparound. 잠재적인 정수 랩어라운드 오류.
  • unsafe-strlen. strlen의 반환값을 short로 캐스팅하는 것은 위험할 수 있음.
  • integer-truncation. 잠재적인 정수 잘림(truncation) 오류.
  • signed-unsigned-conversion. 잠재적인 signed/unsigned 변환 오류.
  • incorrect-unsigned-comparison. 부호 없는 변수가 음수인지 확인함.

포맷 문자열

  • format-string-bugs. 잠재적인 포맷 문자열 버그.

메모리 관리

  • insecure-api-alloca. 잠재적으로 안전하지 않은 API 함수 alloca의 사용.
  • use-after-free. free 이후 잠재적인 사용(use-after-free).
  • double-free. 잠재적인 이중 free.
  • incorrect-use-of-free. 힙에 없는 메모리에 대해 free 호출.
  • unchecked-ret-malloc. malloc, calloc, realloc 등의 반환 코드를 확인하지 않음.
  • putenv-stack-var. 스택에 할당된 변수로 putenv 호출.
  • ret-stack-address. 스택에 할당된 변수의 주소를 잠재적으로 반환함.
  • . 잠재적으로 일치하지 않는 C 메모리 관리 루틴.

명령어 주입

  • command-injection. system 또는 popen을 통한 잠재적인 OS 명령어 주입.

경쟁 조건

  • insecure-api-access-stat. 안전하지 않은 API 함수 access, stat, lstat 등의 사용.
  • insecure-api-mktemp-tmpnam-tempnam. 안전하지 않은 API 함수 mktemp, tmpnam, tempnam의 사용.
  • insecure-api-signal. 안전하지 않은 API 함수 signal의 사용.

권한 관리

  • incorrect-order-setuid-setgid. 잘못된 순서로 호출된 권한 관리 함수.
  • unchecked-ret-setuid-seteuid. setuid 및 seteuid의 반환 코드를 확인하지 않음.

서비스 거부

  • regex-dos. 지수적 실행 시간을 보여 ReDoS로 이어질 수 있는 정규 표현식.

기타

  • incorrect-use-of-memset. memset 인자의 잘못된 순서.
  • insecure-api-rand-srand. 잠재적으로 안전하지 않은 API 함수 rand 및 srand의 사용.
  • overlapping-source-destination. 복사 함수에서 소스와 대상이 겹침.
  • suspicious-assert. 어서션 매크로 사용으로 인한 잠재적으로 잘못된 크기 검사.
  • interesting-api-calls. 흥미롭고 잠재적으로 안전하지 않은 API 함수 호출.
  • unchecked-ret-scanf. scanf 계열 함수의 반환 코드를 확인하지 않음.
  • insecure-api-ato. 잠재적으로 안전하지 않은 API 함수 atoi, atol, atof의 사용.
  • high-entropy-assignment. 비밀일 수 있는 고엔트로피 값의 할당.

노이즈

이 규칙들은 잠재적으로 너무 많은 노이즈를 생성하여 일반적인 사용에는 부적합한 것으로 간주됩니다.

일반

  • bad-words. 버그의 존재를 암시하는 키워드 및 주석.

변경 로그

  • CHANGELOG.md

TODO

단기 실행 항목

  • 열려 있는 이슈 및 풀 리퀘스트를 처리합니다.
  • 기존 규칙에 새로운 검사를 추가하고 필요한 곳에 새 규칙을 추가합니다.
  • 코드에서 잠재적인 핫스팟을 놓치지 않으면서 전반적인 정확도를 개선하고 오탐(false positive)을 줄입니다.
  • 성능을 확인합니다 (test_public_repos.py 참조).
  • 최적화가 필요한 느린 규칙을 찾기 위해 실제 코드에 대한 추가 --time 벤치마킹을 수행합니다.

장기 실행 항목

  • Semgrep 파싱을 개선하기 위해 일반적인 디컴파일러가 생성한 의사 코드를 정리하는 스크립트를 추가합니다.
  • 파일 간 및 함수 간 분석을 지원하는 Semgrep Pro 엔진으로 규칙을 포팅합니다.
  • 규칙에 데이터 흐름 분석을 적용하기 위해 적합한 곳에 테인트 모드를 구현합니다.
  • 일부 오탐(false positive) 을 줄이는 데 유용할 수 있는 기호 전파(symbolic propagation)를 조사합니다.
  • 이 연구에서 설명한 대로 Semgrep 래퍼 및 후처리기를 구현합니다.

도메인별 규칙 세트

  • 전용 커널 규칙(Linux, BSD, macOS 등)을 구현합니다.
  • 전용 crypto 및 rng 규칙을 구현합니다.
  • 전용 C++ 규칙을 구현하고 C 규칙과 분리된 다른 폴더로 이동합니다.
  • Rust를 위한 특정 규칙 세트를 만듭니다.
도구 다운로드
memcpy
snprintf
  • incorrect-use-of-sizeof. 포인터가 가리키는 대상 대신 포인터에 sizeof 연산자를 실수로 사용함.
  • unterminated-string-strncpy. strncpy 및 stpncpy 사용 후 명시적인 NUL 종료가 없음.
  • off-by-one. 잠재적인 off-by-one 오류.
  • unsafe-ret-snprintf-vsnprintf. snprintf 및 vsnprintf 반환값의 잠재적으로 안전하지 않은 사용.
  • unsafe-ret-strlcpy-strlcat. strlcpy 및 strlcat 반환값의 잠재적으로 안전하지 않은 사용.
  • pointer-subtraction. 크기를 결정하기 위해 포인터 뺄셈을 잠재적으로 사용함.
  • write-into-stack-buffer. 스택에 할당된 버퍼로의 직접 쓰기.
  • mismatched-memory-management
  • mismatched-memory-management-cpp. 잠재적으로 일치하지 않는 C++ 메모리 관리 루틴.
  • memory-address-exposure. 잠재적인 기본 메모리 주소 노출.
  • argv-envp-access. 명령줄 인자 또는 환경 변수 접근.
  • missing-default-in-switch. switch 문에서 default 케이스 누락.
  • missing-break-in-switch. switch 문에서 break 또는 이에 상응하는 구문 누락.
  • missing-return. void가 아닌 함수에서 return 문 누락.
  • typos. 보안에 영향을 미칠 수 있는 잠재적인 오타.