Skip to content

trident90/kisa-secure-coding-rules

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

KISA 소프트웨어 개발보안 가이드 - Semgrep 룰셋

행정안전부 「소프트웨어 개발보안 가이드」 구현단계 49개 보안약점을 점검하기 위한 Semgrep 룰셋입니다.

📋 49개 보안약점 항목 매핑

1. 입력데이터 검증 및 표현 (17개)

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 - -

2. 보안기능 (16개)

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 -

3. 시간 및 상태 (2개)

No 보안약점 CWE 룰 ID Java Python JS Go C
34 경쟁조건: 검사시점과 사용시점(TOCTOU) CWE-367 KISA-TS-001
35 종료되지 않는 반복문 또는 재귀함수 CWE-835 KISA-TS-002

4. 에러처리 (3개)

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 -

5. 코드오류 (5개)

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 -

6. 캡슐화 (4개)

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 - - - -

7. API 오용 (2개)

No 보안약점 CWE 룰 ID Java Python JS Go C
48 DNS lookup에 의존한 보안결정 CWE-350 KISA-AM-001 -
49 취약한 API 사용 CWE-676 KISA-AM-002

🚀 설치 및 사용법

1. Semgrep 설치

# pip로 설치
pip install semgrep

# 또는 brew로 설치 (macOS)
brew install semgrep

2. 룰셋 다운로드

git clone https://github.com/your-org/kisa-secure-coding-rules.git
cd kisa-secure-coding-rules

3. 스캔 실행

# 전체 룰셋으로 스캔
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

4. CI/CD 통합

GitHub Actions

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/

GitLab CI

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

🔗 참고자료

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors