본문으로 건너뛰기

AI 보안 코드 리뷰

기존 도구와의 역할 분담

Gitleaks · grype · Semgrep 등 기존 CI/CD 도구는 알려진 패턴을 기계적으로 탐지합니다. AI 코드 리뷰는 이 도구들이 놓치는 의미론적 취약점을 보완하는 선택 옵션입니다.

도구탐지 방식강점한계
Gitleaks정규식 패턴 매칭하드코딩 시크릿변수에 담긴 시크릿 미탐지
grypeCVE DB 대조알려진 취약점0-day·논리 버그 탐지 불가
Semgrep코드 패턴 규칙일반적 취약 패턴비즈니스 로직 맥락 무시
AI 코드 리뷰자연어 추론논리 흐름·맥락 이해FP율 높음, 비용 발생
빌드 차단보다 리포트 용도로 사용하세요

AI 리뷰는 FP(오탐)율이 높습니다. 빌드를 강제로 실패시키는 용도보다 PR 코멘트 또는 리포트 생성 용도로 운영하는 것이 현실적입니다.


GitHub Actions 구성 예시

PR diff를 Claude API에 전달해 보안 검토 결과를 PR 코멘트로 게시하는 워크플로우입니다.

# .github/workflows/ai-security-review.yml
name: AI Security Review

on:
pull_request:
branches: [main, develop]

jobs:
ai-review:
runs-on: ubuntu-latest
permissions:
pull-requests: write
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Get PR diff
id: diff
run: |
git diff origin/${{ github.base_ref }}...HEAD \
-- '*.py' '*.js' '*.ts' '*.go' '*.java' '*.rb' \
| head -c 8000 > diff.txt
echo "size=$(wc -c < diff.txt)" >> $GITHUB_OUTPUT

- name: AI Security Review
if: steps.diff.outputs.size > 0
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
run: |
pip install anthropic -q
python3 << 'EOF'
import anthropic, pathlib, os

diff = pathlib.Path("diff.txt").read_text()
client = anthropic.Anthropic()

response = client.messages.create(
model="claude-opus-4-7",
max_tokens=1024,
messages=[{
"role": "user",
"content": (
"아래 코드 변경에서 보안 취약점을 검토하라.\n"
"탐지 대상: SQL 인젝션, 인증·인가 우회, 민감 정보 노출, "
"입력값 검증 누락, 안전하지 않은 역직렬화.\n"
"발견 시: 파일명·라인·위험도(High/Medium)·설명 형식으로 출력.\n"
"발견 없으면: 'PASS' 한 줄만 출력.\n\n"
f"```diff\n{diff}\n```"
)
}]
)

result = response.content[0].text
pathlib.Path("review_result.txt").write_text(result)
print(result)
EOF

- name: Post PR comment
if: steps.diff.outputs.size > 0
uses: actions/github-script@v7
with:
script: |
const fs = require('fs');
const result = fs.readFileSync('review_result.txt', 'utf8');
if (result.trim() === 'PASS') return;
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: `## 🔍 AI 보안 코드 리뷰\n\n${result}\n\n> 이 리뷰는 AI가 생성했습니다. 오탐 가능성이 있으니 맥락을 고려해 판단하세요.`
});

주의사항

FP율과 비용

LLM 기반 코드 리뷰는 오탐(False Positive)이 잦습니다. 팀 규모와 PR 빈도에 따라 월 API 비용을 사전에 추산하고, head -c 8000 같은 토큰 절약 장치를 반드시 적용하세요.

민감 코드의 외부 전송

PR diff가 Anthropic 서버로 전송됩니다. 사내 보안 정책상 외부 API 전송이 제한된 경우 도입 전 정책 검토가 필요합니다. 온프레미스 LLM(Ollama 등)으로 대체하는 방안도 고려할 수 있습니다.

컨텍스트 창 한계

파일 전체가 아닌 PR diff 단위로만 분석합니다. 여러 파일에 걸친 복잡한 취약점 흐름은 탐지하기 어렵습니다.


더 알아보기