WhiteHat Code 백서
AI 시대의 코드 보안 — 자동으로 찾고, 판단하고, 고치다
요약
AI 코딩 도구의 확산으로 소프트웨어가 만들어지는 속도는 폭발적으로 빨라졌습니다. 그러나 검증되지 않은 코드도 그만큼 빠르게 배포됩니다. WhiteHat Code는 AI가 생성한 애플리케이션 코드를 대상으로, 규칙 기반 정적 분석·의존성 취약점 스캔·LLM 심층 분석을 결합해 배포 전에 위험을 찾아냅니다. 원가(LLM 토큰)를 결제금액의 1/10 이하로 유지하는 맵-리듀스 비용 모델과, 무료부터 풀서비스까지의 4단계 티어가 핵심입니다.
1. 문제 — AI 생성 코드의 보안 격차
AI는 "동작하는" 코드를 잘 만들지만, 안전한 기본값을 보장하지 않습니다. 실무에서 반복적으로 관찰되는 문제는 다음과 같습니다.
- 하드코딩된 시크릿: API 키·서비스 자격증명·프라이빗 키가 코드/클라이언트에 노출
- 인가 결함: IDOR, 누락된 접근 제어, 행 수준 보안(RLS) 미설정, public 스토리지 노출
- 취약한 의존성: 알려진 CVE가 있는 패키지의 방치
- 인젝션·인증 우회: 신뢰되지 않은 입력의 위험 sink 도달
개발 인력이 적은 팀일수록 이 격차를 메우기 어렵습니다. 사람이 수백 개 파일을 일일이 검토하는 것은 비현실적입니다.
2. 접근 — 결정론 우선, LLM은 선택적으로
WhiteHat Code의 분석은 두 층으로 구성됩니다.
- 결정론 층 (토큰 0) — 규칙 엔진, 스택 자동 인식(프레임워크별 룰), 의존성 SCA(OSV 조회), 그리고 라우트를 파싱한 구조 추출(REST API 맵 + 시퀀스·유스케이스·API 다이어그램). 명백한 취약점 대부분을 비용 없이 잡습니다.
- LLM 심층 층 (예산 상한) — 규칙이 볼 수 없는 로직/인가 결함을, 추출된 라우트를 컨텍스트로 삼아 감사합니다.
결정론 층이 신호를 좁혀 주므로, LLM은 정말 필요한 곳에만 예산을 씁니다.
3. 비용 모델 — 맵-리듀스와 1/10 원가
LLM 토큰 원가는 결제금액의 1/10 이하로 설계됩니다. 이를 위해 분석을 맵-리듀스로 구성합니다.
- Map: 파일을 토큰 예산 단위 청크로 나눠 청크별로 감사. 예산을 초과하면 남은 청크를 건너뛰고 로깅(무성한 truncation 금지).
- Reduce: 부분 결과를 코드로 병합·중복 제거·심각도 정렬 (토큰 0).
- 하드 예산 상한: 호출 전 비용을 추정해 초과를 예방하고, 호출 후 실제 사용량으로 정확히 차감 → 총합이 상한을 넘지 않음.
프롬프트 캐싱으로 청크마다 반복되는 시스템 프리픽스를 재사용하면 입력 비용이 크게 줄어, 1/10 규칙을 여유 있게 지킵니다.
4. 티어 — 필요한 만큼 확장
| 티어 | 포함 | 가격 |
|---|---|---|
| FREE | 자동 스캔 (정적 + SCA + 구조 + 경량 LLM) | 무료 |
| EXPERT | + LLM 심층 분석 + 전문가(사람) 리뷰 | 15만원 ($100) |
| RUNNER | + 로컬 러너 실행(동적) + 전문가 분석 | 150만원 ($1,000) |
| FULL | + 문제 해결 + 컨설팅 + 배포 | 별도협의 |
코드로 게이트하는 것은 로컬 러너(동적 실행)뿐이며, 전문가 분석·컨설팅·배포는 사람이 이행하는 서비스입니다. 모델은 티어별로 최적화합니다 — 무료는 경량 모델로 구조 파악, 유료는 상위 모델로 심층 감사.
5. 보안 원칙
- 동의 우선: 명시적 동의 → 로그인 → 권한(소유권·GitHub 설치) → 티어 순으로 게이트.
- 코드 비저장: 소스는 분석 후 폐기하고, 결과(시크릿은 마스킹)만 소유 계정에 저장.
- 동적 실행의 격리: 남의 코드를 실행하는 로컬 러너는 API와 분리된 격리 배포에서만 동작 — egress 차단·리소스 상한·비루트·일회용. 기본은 실행 없이 "무엇이 실행될지"만 분석하는 유계 모드.
6. 결론
AI가 코드를 빠르게 만드는 시대에, 보안 검증도 자동화되어야 지속 가능합니다. WhiteHat Code는 결정론적 분석으로 원가를 억제하고, LLM을 예산 안에서 선택적으로 사용하며, 사람의 전문성은 기계가 못 잡는 곳에만 투입합니다. 무료 자동 스캔에서 시작해 조직의 필요에 따라 확장하세요.