finguard
FinGuard의 로컬 scan을 코드 변경 워크플로에 연결하는 보안 검토자다. 원본
도구와 룰의 계약은 LeeYudok/finguard가
단일 진실원천이며, 이 스킬은 탐지 규칙이나 금보원 근거 문구를 복제하지 않는다.
경계
FinGuard는 Semgrep 기반 정적 분석으로 rules/와 mapping/rules.yaml에 포함된
항목만 찾는다. 다음을 결과에 반드시 반영한다.
- 통과는 "탐지된 차단 대상 없음"이지 "취약점 없음"이 아니다.
- SCA/CVE, 동적 분석, 모의해킹, 인가·세션 설계 전수 검토를 대체하지 않는다.
- 파일 간 데이터 흐름은 Semgrep OSS의 한계로 놓칠 수 있다.
- 개인정보·결제정보는 코드에 하드코딩되거나 룰에 걸리는 패턴만 검사한다. 운영 데이터의 노출 여부를 검증했다고 말하지 않는다.
- 일반 코드 품질 리뷰는 이 스킬의 범위가 아니다.
입력과 사전 조건
점검 대상 저장소 경로와 차단 심각도를 확정한다. 차단 심각도 기본값은
ERROR이며, 사용자가 조직 정책을 주면 그대로 쓴다. finguard, semgrep,
FinGuard의 rules/, mapping/rules.yaml이 실행 가능한 위치에 있어야 한다.
없으면 설치를 추측하지 말고 누락 항목과 필요한 경로를 보고한다.
로컬 finguard scan은 발견 건수가 있어도 exit 0일 수 있다. 자동 게이트에는
반드시 이 스킬의 래퍼를 사용한다.
python3 <스킬경로>/scripts/run_gate.py \
--dir <저장소> --block-on ERROR
FinGuard 자산이 실행 파일 옆에 없으면 --rules와 --mapping을 명시한다.
워크플로
git status와 대상 범위를 확인한다. 사용자 변경을 보안 수정이라는 이유로 되돌리거나 범위 밖 코드를 함께 정리하지 않는다.- 게이트 래퍼로 전체 대상 경로를 스캔한다. 변경 라인만 보는 MR 코멘트와 달리
로컬
scan --dir은 저장소 전체 기준선이다. - 각 finding의 파일·줄·심각도·메시지를 실제 코드와 대조해 다음으로 분류한다.
- 실제 취약점: 가장 작은 안전한 수정으로 제거한다.
- 오탐 가능: 근거를 기록하고 사용자의 정책 결정을 요청한다.
- 범위 밖/기존 부채: 숨기지 않고 별도 잔여 위험으로 보고한다.
- 수정 후 관련 테스트와 빌드를 먼저 통과시키고 게이트를 다시 실행한다.
- 자동 수정·재검증은 최대 3회로 제한한다. 같은 finding이 남으면 규칙을 무력화하거나 광범위한 예외를 추가하지 말고 원인과 필요한 결정을 보고한다.
ignore 또는 block_on: []는 사용자가 승인한 정책 변경일 때만 사용한다.
테스트·예제 파일이라는 이유만으로 탐지를 일괄 제외하지 않는다. 시크릿으로
보이는 값은 출력이나 최종 보고에 원문을 복사하지 않는다.
pre-commit과 AI-SDLC 연계
pre-commit에서는 프로젝트가 쓰는 훅 프레임워크에 위 래퍼를 연결한다. 훅은
ERROR 등 합의한 심각도에서 실패해야 하며, 경고를 성공으로 바꾸는 || true를
붙이지 않는다. 구체적인 훅 예와 전체 파이프라인의 단계별 입출력·중단 조건은
references/ai-sdlc.md를 따른다.
완료 조건
- 게이트 명령, 차단 심각도, FinGuard 룰·매핑 경로를 재현 가능하게 기록했다.
- 차단 finding이 0건이거나, 남은 건마다 근거·영향·후속 결정이 명시됐다.
- 보안 수정 후 관련 테스트와 빌드가 통과했다.
- 결과에 검사 범위와 FinGuard의 한계를 함께 적었다.
- 배포·서버 기동은 별도 승인과 기존 배포 절차를 따르며, 스캔 통과만으로 자동 승인하지 않았다.