바이브코더를 위한 보안가이드 (SECURITY.md)
AI를 활용한 코딩(바이브코딩)은 개발 속도를 극적으로 높여주지만, 동시에 치명적인 보안 취약점을 양산할 수 있는 양날의 검입니다. 본 가이드라인은 일반적인 바이브코딩 시 발생하기 쉬운 기초적인 실수 5가지와, 이를 방지하기 위한 20년 차 보안 전문가의 관점 및 실무 프롬프트를 안내합니다.
💡 참고자료: 바이브코더를 위한 기초 보안 A to Z (요즘IT)
1. 🚨 바이브코더가 흔히 하는 기초 보안 실수 5가지
AI가 작성한 코드는 기능은 동작할지라도 '문단속'이 전혀 안 되어 있는 경우가 많습니다.
- 데이터베이스 접근제어(RLS) 누락: Supabase와 같은 BaaS(Backend as a Service) 사용 시, Row Level Security(RLS)를 켜지 않아 누구나 데이터베이스 전체를 읽고 쓸 수 있는 상태로 배포됩니다.
- API 키 하드코딩: OpenAI, Anthropic 등의 LLM API 키나 서비스 키를 프론트엔드 코드나 GitHub 퍼블릭 리포지토리에 그대로 노출하여 막대한 요금 폭탄을 맞습니다.
- 인증 검사 누락: 화면(UI) 상에서만 관리자 버튼을 숨길 뿐, 실제 서버 API 단에서의 토큰/세션 권한 검증 로직을 빼먹습니다.
- 요청 횟수 제한(Rate Limiting) 부재: 짧은 시간에 무수히 많은 API 요청을 쏟아내는 매크로 공격에 대비하지 못해, 서버 다운 및 과금 문제를 일으킵니다.
- 입력값 검증 부재 (SQL/Prompt Injection): 사용자 입력을 검증 없이 그대로 쿼리문이나 프롬프트에 합쳐버림으로써, 공격자가 시스템 권한을 탈취하거나 의도치 않은 동작을 수행하게 만듭니다.
2. 🛡️ 보안 전문가의 심층 가이드 (Beyond the Basics)
단순히 실수를 고치는 것을 넘어, 근본적으로 안전한 시스템 아키텍처와 개발 습관을 갖춰야 합니다.
2.1 제로 트러스트(Zero Trust) 아키텍처의 내재화
- "Never trust, always verify": AI가 생성한 코드, 외부에서 들어온 사용자 입력값, 심지어 사내 시스템 간의 API 호출조차 모두 신뢰하지 마세요.
- 방어적 프로그래밍: AI 코드를 리뷰할 때는 예외(Exception) 처리, 경계값 검사, 그리고 인가(Authorization) 누락 여부를 최우선으로 점검해야 합니다. 클라이언트에서 한 번, 서버에서 다시 한 번 이중으로 검증하는 습관이 필수입니다.
2.2 Shift-Left Security (보안을 개발 초기 단계로)
- 보안 검토를 배포 전이 아니라 AI 코딩 단계와 CI/CD 파이프라인의 가장 앞단으로 당겨야 합니다.
- Git Hooks 활용: 코드를 커밋하기 전(pre-commit)에
git-secrets나trufflehog같은 도구를 활용해 API 키나 패스워드가 섞여 있는지 자동으로 탐지하고 차단하세요.
2.3 소프트웨어 공급망 보안 (Supply Chain Security)
- AI 모델은 오래된 라이브러리, 이미 취약점이 발견된 패키지(CVE), 혹은 오타를 노린 악성 패키지(Typosquatting)를 당당하게 추천할 수 있습니다.
- 패키지를 설치(
npm install,pip install)하기 전, 공식 문서를 교차 검증하고npm audit또는Snyk를 활용해 취약점을 스캔하는 절차를 반드시 거치세요.
2.4 AI 에이전트의 권한 최소화 원칙 (Least Privilege)
- AI 에이전트에게 데이터베이스 접속 권한이나 운영 인프라 접근 권한을 줄 때, 절대 Admin/Root 권한을 부여하지 마세요.
- AI가 수행할 수 있는 작업의 범위를 '읽기 전용'이나 '특정 테이블/디렉토리'로 엄격하게 제한하여, 의도치 않은 대량 삭제(
DROP TABLE)나 시스템 파괴를 원천 차단해야 합니다.
3. ✍️ 안전한 코딩을 위한 프롬프트 템플릿
바이브코딩 시 애초에 취약점이 없는 코드를 유도하기 위해서는 프롬프트 자체에 보안 요구사항을 명시해야 합니다.
[템플릿 1] 백엔드 API 엔드포인트 생성 시
text
[요구사항]
다음 기능에 대한 [Node.js/Spring Boot/Python] API 엔드포인트를 작성해 주세요.
- 기능: 사용자 프로필 업데이트 API
[보안 요구사항 - 필수 적용]
1. 사용자의 JWT 토큰을 검증하고, 본인 또는 관리자 권한인지 체크하는 인가(Authorization) 미들웨어를 반드시 포함할 것.
2. 쿼리 파라미터나 바디(Body)로 들어오는 모든 입력값에 대해 엄격한 타입 검사(Validation) 및 XSS 방어(Sanitization)를 수행할 것.
3. 데이터베이스 쿼리 작성 시 SQL Injection을 방지하기 위해 ORM(예: Prisma, TypeORM) 구조 또는 Parameterized Query를 사용할 것.[템플릿 2] 프론트엔드 연동 코드 작성 시
text
[요구사항]
프론트엔드(React/Vue)에서 LLM API(예: OpenAI)와 통신하는 서비스를 구현해 주세요.
[보안 요구사항 - 필수 적용]
1. 프론트엔드 브라우저 코드 내부에 절대 API 키를 하드코딩하지 말 것.
2. 프론트엔드 -> 자체 백엔드(BFF) -> LLM API 형태로 우회 통신하도록 아키텍처를 잡고, 백엔드 프록시 코드를 함께 작성할 것.
3. 백엔드 프록시 코드에는 특정 IP나 유저당 1분에 10회 이상 요청하지 못하도록 Rate Limiting(요청 제한) 로직을 추가할 것.[템플릿 3] 코드 보안 리뷰 (SAST 대용)
text
당신은 20년 경력의 시니어 보안 아키텍트입니다. 다음 코드를 분석하여 OWASP Top 10(또는 모바일 보안 기준) 관점에서 취약점이 없는지 리뷰해 주세요.
[분석할 코드]
(코드 삽입)
[리뷰 포인트]
1. 암호화되지 않은 민감 데이터(API 키, 비밀번호) 노출 여부
2. 권한 탈취(Broken Access Control) 가능성
3. 안전한 최신 암호화 해시 알고리즘(예: bcrypt, Argon2) 사용 여부
4. 취약점이 발견될 경우, 이유와 함께 안전하게 수정된 코드 제시