KISA 소프트웨어 개발보안 가이드 - Semgrep 룰셋
행정안전부 「소프트웨어 개발보안 가이드」 구현단계 49개 보안약점 을 점검하기 위한 Semgrep 룰셋입니다.
No
보안약점
CWE
룰 ID
Java
Python
JS
Go
C
1
SQL 삽입
CWE-89
KISA-IV-001
✅
✅
✅
✅
✅
2
코드 삽입
CWE-94
KISA-IV-002
✅
✅
✅
✅
-
3
경로 조작 및 자원 삽입
CWE-22
KISA-IV-003
✅
✅
✅
✅
✅
4
크로스사이트 스크립트(XSS)
CWE-79
KISA-IV-004
✅
✅
✅
✅
-
5
운영체제 명령어 삽입
CWE-78
KISA-IV-005
✅
✅
✅
✅
✅
6
위험한 형식 파일 업로드
CWE-434
KISA-IV-006
✅
✅
✅
✅
-
7
신뢰되지 않는 URL 주소로 자동접속 연결
CWE-601
KISA-IV-007
✅
✅
✅
✅
-
8
부적절한 XML 외부 개체 참조 (XXE)
CWE-611
KISA-IV-008
✅
✅
✅
✅
-
9
XML 삽입
CWE-91
KISA-IV-009
✅
✅
✅
✅
-
10
LDAP 삽입
CWE-90
KISA-IV-010
✅
✅
-
-
-
11
크로스사이트 요청 위조 (CSRF)
CWE-352
KISA-IV-011
✅
✅
✅
✅
-
12
서버사이드 요청 위조 (SSRF)
CWE-918
KISA-IV-012
✅
✅
✅
✅
-
13
HTTP 응답분할
CWE-113
KISA-IV-013
✅
✅
✅
✅
-
14
정수형 오버플로우
CWE-190
KISA-IV-014
✅
-
-
✅
✅
15
보안기능 결정에 사용되는 부적절한 입력값
CWE-807
KISA-IV-015
✅
✅
✅
✅
-
16
메모리 버퍼 오버플로우
CWE-119
KISA-IV-016
-
-
-
-
✅
17
포맷 스트링 삽입
CWE-134
KISA-IV-017
-
✅
-
✅
✅
No
보안약점
CWE
룰 ID
Java
Python
JS
Go
C
18
적절한 인증 없는 중요기능 허용
CWE-306
KISA-SF-001
✅
✅
✅
✅
-
19
부적절한 인가
CWE-285
KISA-SF-002
✅
✅
✅
✅
-
20
중요한 자원에 대한 잘못된 권한 설정
CWE-732
KISA-SF-003
✅
✅
✅
✅
✅
21
취약한 암호화 알고리즘 사용
CWE-327
KISA-SF-004
✅
✅
✅
✅
✅
22
암호화되지 않은 중요정보
CWE-311
KISA-SF-005
✅
✅
✅
✅
-
23
하드코드된 중요정보
CWE-798
KISA-SF-006
✅
✅
✅
✅
✅
24
충분하지 않은 키 길이 사용
CWE-326
KISA-SF-007
✅
✅
✅
✅
-
25
적절하지 않은 난수값 사용
CWE-330
KISA-SF-008
✅
✅
✅
✅
✅
26
취약한 비밀번호 허용
CWE-521
KISA-SF-009
✅
✅
✅
✅
-
27
부적절한 전자서명 확인
CWE-347
KISA-SF-010
✅
✅
✅
✅
-
28
부적절한 인증서 유효성 검증
CWE-295
KISA-SF-011
✅
✅
✅
✅
-
29
사용자 하드디스크에 저장되는 쿠키를 통한 정보노출
CWE-539
KISA-SF-012
✅
✅
✅
✅
-
30
주석문 안에 포함된 시스템 주요정보
CWE-615
KISA-SF-013
✅
✅
✅
✅
✅
31
솔트 없이 일방향 해쉬함수 사용
CWE-759
KISA-SF-014
✅
✅
✅
✅
-
32
무결성 검사 없는 코드 다운로드
CWE-494
KISA-SF-015
✅
✅
✅
✅
-
33
반복된 인증시도 제한 기능 부재
CWE-307
KISA-SF-016
✅
✅
✅
✅
-
No
보안약점
CWE
룰 ID
Java
Python
JS
Go
C
34
경쟁조건: 검사시점과 사용시점(TOCTOU)
CWE-367
KISA-TS-001
✅
✅
✅
✅
✅
35
종료되지 않는 반복문 또는 재귀함수
CWE-835
KISA-TS-002
✅
✅
✅
✅
✅
No
보안약점
CWE
룰 ID
Java
Python
JS
Go
C
36
오류 메시지 정보노출
CWE-209
KISA-EH-001
✅
✅
✅
✅
-
37
오류 상황 대응 부재
CWE-390
KISA-EH-002
✅
✅
✅
✅
✅
38
부적절한 예외 처리
CWE-754
KISA-EH-003
✅
✅
✅
✅
-
No
보안약점
CWE
룰 ID
Java
Python
JS
Go
C
39
Null Pointer 역참조
CWE-476
KISA-CE-001
✅
-
✅
-
✅
40
부적절한 자원 해제
CWE-404
KISA-CE-002
✅
✅
-
✅
✅
41
해제된 자원 사용
CWE-416
KISA-CE-003
-
-
-
-
✅
42
초기화되지 않은 변수 사용
CWE-457
KISA-CE-004
-
-
-
-
✅
43
신뢰할 수 없는 데이터의 역직렬화
CWE-502
KISA-CE-005
✅
✅
✅
✅
-
No
보안약점
CWE
룰 ID
Java
Python
JS
Go
C
44
잘못된 세션에 의한 데이터 정보노출
CWE-488
KISA-EC-001
✅
✅
✅
✅
-
45
제거되지 않고 남은 디버그 코드
CWE-489
KISA-EC-002
✅
✅
✅
✅
✅
46
Public 메소드부터 반환된 Private 배열
CWE-495
KISA-EC-003
✅
-
-
-
-
47
Private 배열에 Public 데이터 할당
CWE-496
KISA-EC-004
✅
-
-
-
-
No
보안약점
CWE
룰 ID
Java
Python
JS
Go
C
48
DNS lookup에 의존한 보안결정
CWE-350
KISA-AM-001
✅
✅
✅
✅
-
49
취약한 API 사용
CWE-676
KISA-AM-002
✅
✅
✅
✅
✅
# pip로 설치
pip install semgrep
# 또는 brew로 설치 (macOS)
brew install semgrep
git clone https://github.com/your-org/kisa-secure-coding-rules.git
cd kisa-secure-coding-rules
# 전체 룰셋으로 스캔
semgrep --config rules/ /path/to/your/project
# 특정 카테고리만 스캔
semgrep --config rules/input-validation/ /path/to/your/project
# 특정 언어 파일만 스캔 (예: Java)
semgrep --config rules/ --include " *.java" /path/to/your/project
# JSON 형식으로 결과 출력
semgrep --config rules/ --json -o results.json /path/to/your/project
# SARIF 형식으로 출력 (GitHub Code Scanning 연동)
semgrep --config rules/ --sarif -o results.sarif /path/to/your/project
name : KISA Security Scan
on : [push, pull_request]
jobs :
semgrep :
runs-on : ubuntu-latest
steps :
- uses : actions/checkout@v3
- name : Run KISA Security Rules
uses : returntocorp/semgrep-action@v1
with :
config : rules/
semgrep :
image : returntocorp/semgrep
script :
- semgrep --config rules/ --sarif -o gl-sast-report.sarif .
artifacts :
reports :
sast : gl-sast-report.sarif
kisa-secure-coding-rules/
├── README.md
├── rules/
│ ├── input-validation/ # 입력데이터 검증 및 표현 (17개)
│ │ ├── sql-injection.yaml
│ │ ├── code-injection.yaml
│ │ ├── path-traversal.yaml
│ │ ├── xss.yaml
│ │ ├── os-command-injection.yaml
│ │ └── ...
│ ├── security-features/ # 보안기능 (16개)
│ │ ├── weak-crypto.yaml
│ │ ├── hardcoded-secrets.yaml
│ │ ├── insecure-random.yaml
│ │ └── ...
│ ├── time-state/ # 시간 및 상태 (2개)
│ ├── error-handling/ # 에러처리 (3개)
│ ├── code-errors/ # 코드오류 (5개)
│ ├── encapsulation/ # 캡슐화 (4개)
│ └── api-misuse/ # API 오용 (2개)
├── tests/ # 테스트 코드
└── docs/ # 상세 문서
심각도
설명
예시
🔴 ERROR
즉시 수정 필요, 심각한 보안 위협
SQL삽입, 명령어삽입, 하드코딩된 비밀번호
🟠 WARNING
수정 권장, 잠재적 보안 위협
취약한 암호화, 부적절한 예외처리
🟡 INFO
검토 필요, 코드 품질 관련
디버그 코드, 주석 내 정보
MIT License