AI Sparkup

복잡한 AI 세상을 읽는 힘 ⚡

AI가 작성한 코드, 테스트 통과해도 보안 위험 투성이?

Sonar 연구팀이 주요 AI 모델 5개가 생성한 4,442개 Java 코드를 분석한 결과, 기능 테스트를 통과한 코드라도 하드코딩된 패스워드, 경로 탐색 취약점 등 심각한 보안 결함이 모든 모델에서 공통으로 발견되었습니다.

Assessing the Quality and Security of AI-Generated Code: A Quantitative Analysis (출처: Reddit)

AI가 개발자의 든든한 파트너로 자리잡은 지금, 놀라운 통계가 하나 있습니다. GitHub의 보고서에 따르면 AI 어시스턴트가 개발자 코드의 평균 46%를 작성하고 있다고 합니다. ChatGPT부터 GitHub Copilot, Claude까지 – 이들 도구가 생성하는 코드는 빠르고 정확해 보입니다. 하지만 정말 안전할까요?

코드 품질 분석 전문 기업 Sonar의 연구진(Abbas Sabra, Olivier Schmitt, Joseph Tyler)이 최근 발표한 논문 “AI 생성 코드의 품질과 보안 평가: 정량적 분석”에서 충격적인 사실이 드러났습니다. Claude Sonnet 4, GPT-4o, Llama 3.2 90B 등 주요 AI 모델 5개의 코드 생성 능력을 4,442개의 Java 과제로 분석한 결과, 기능 테스트를 통과한 코드에도 심각한 보안 취약점이 숨어있었습니다.

AI 모델별 코드 결함 유형 분포 – 모든 모델에서 일관된 패턴을 보임 (출처: arxiv 논문)

충격적 발견: 테스트 통과가 안전을 보장하지 않는다

이 연구에서 밝혀진 가장 중요한 사실은 기능적 정확성과 코드 품질 사이에 직접적인 상관관계가 없다는 점입니다.

테스트 통과율이 가장 높았던 Claude Sonnet 4(77.04%)가 오히려 통과한 코드당 가장 많은 결함(2.11개)을 보였습니다. 반대로 통과율이 가장 낮았던 OpenCoder-8B(60.43%)는 통과한 코드당 결함이 가장 적었습니다(1.45개).

연구진은 약 550개의 SonarQube 규칙을 사용해 MultiPL-E-mbpp-java, MultiPL-E-humaneval-java, ComplexCodeEval 등 3개 벤치마크에서 생성된 코드를 분석했습니다. 결과는 개발자들의 일반적인 믿음을 뒤집는 것이었습니다.

모든 AI 모델의 공통 약점들

분석 결과 놀랍도록 일관된 패턴이 나타났습니다. 모델의 아키텍처나 크기에 관계없이 모든 AI가 비슷한 유형의 결함을 생성했습니다:

결함 유형 분포 (모든 모델 공통)

  • 코드 스멜(Code Smells): 90-93%
  • 버그: 5-8%
  • 보안 취약점: 약 2%

특히 심각한 것은 보안 취약점의 심각도입니다. 전체 취약점 중 60-70%가 BLOCKER 등급으로, 즉시 해결해야 할 치명적 수준이었습니다.

발견된 주요 보안 취약점들

연구에서 발견된 가장 심각한 보안 결함들을 살펴보면:

1. 경로 탐색 및 주입 공격(Path-Traversal & Injection)

  • Claude Sonnet 4의 34.04%, GPT-4o의 33.93%에서 발견
  • 사용자 입력으로 파일 경로나 명령어 조작 가능

2. 하드코딩된 인증 정보(Hard-Coded Credentials)

  • OpenCoder-8B의 29.85%, Llama 3.2 90B의 23.58%에서 발견
  • 소스코드에 패스워드나 API 키를 직접 작성

3. 암호화 설정 오류(Cryptography Misconfiguration)

  • Claude Sonnet 4의 24.82%에서 발견
  • 약한 암호화 알고리즘이나 부적절한 키 관리

4. XML 외부 엔티티(XXE) 취약점

  • XML 파서 보안 설정 누락으로 외부 엔티티 공격에 노출

세대가 바뀌어도 문제는 그대로

특히 흥미로운 발견은 Claude 3.7 Sonnet과 Claude Sonnet 4의 비교 분석입니다. 새로운 모델이 기능적 성능은 개선되었지만(72.46% → 77.04%), 보안 측면에서는 오히려 악화되었습니다.

  • BLOCKER급 버그 비율: 7.1% → 13.71%로 거의 두 배 증가
  • BLOCKER급 취약점 비율: 56.03% → 59.57%로 증가

이는 AI 모델의 발전이 모든 품질 속성에서 균일하게 이루어지지 않음을 보여줍니다. 벤치마크 점수 향상이 역설적으로 더 심각한 버그와 취약점을 동반할 수 있다는 것입니다.

왜 이런 일이 벌어질까?

AI 모델들이 이런 공통적 약점을 보이는 근본 원인은 학습 데이터의 한계입니다.

인터넷에 공개된 코드들 중 상당수가 보안 모범 사례를 제대로 따르지 않았기 때문에, AI가 이런 불안전한 패턴을 그대로 학습했습니다. AI는 통계적 패턴 복제는 뛰어나지만, 보안 위험을 구별하는 의미론적 분석 능력은 부족합니다.

또한 AI는 토큰별 지역적 생성에 최적화되어 있어, 전체 프로젝트 맥락이나 리소스 수명 주기를 추적하기 어렵습니다. 예를 들어 파일 스트림을 열었지만 모든 실행 경로에서 닫는 것을 보장하지 못하는 경우가 많습니다.

실무진을 위한 대응 전략

그렇다면 AI 코딩 도구를 포기해야 할까요? 절대 그렇지 않습니다. 올바른 안전장치만 구축하면 됩니다.

가장 중요한 것은 정적 분석 도구의 필수 도입입니다. SonarQube나 CodeQL 같은 도구를 CI/CD 파이프라인에 통합하여 AI 코드 전용 품질 게이트를 설정해야 합니다. 이번 연구에서 사용된 약 550개 규칙처럼 포괄적인 규칙셋으로 버그, 취약점, 코드 스멜을 자동 탐지할 수 있습니다.

코드 리뷰 프로세스도 대폭 강화해야 합니다. AI 생성 코드라고 해서 인간 검토를 생략해서는 안 됩니다. 특히 하드코딩된 자격증명이나 리소스 누수 패턴처럼 AI가 자주 만드는 실수들을 집중적으로 점검해야 합니다. 보안이 중요한 프로젝트라면 보안 전문가의 추가 검토도 권장됩니다.

소프트웨어 구성 분석(SCA)도 필수입니다. AI가 자주 사용하는 구버전 라이브러리들의 CVE 취약점을 점검하고, 의존성 관리 및 라이선스 컴플라이언스까지 확인해야 합니다. AI의 학습 데이터 특성상 오래된 코드 패턴을 재현하는 경우가 많기 때문입니다.

마지막으로 프롬프트 엔지니어링 전략도 중요합니다. 단순히 기능 구현만 요청하지 말고 “보안을 고려한 코드 작성”이나 “최신 보안 표준 준수” 같은 요구사항을 명시적으로 포함해야 합니다.

AI 코드 보안 검증을 위한 워크플로우 (출처: SonarSource)

모델 선택 시 고려사항

이번 연구는 AI 코딩 도구 선택에 대한 새로운 통찰을 제공합니다. 무엇보다 기능적 성능만으로 도구를 판단해서는 안 된다는 점이 핵심입니다. Pass@1 점수가 높다고 반드시 좋은 도구는 아니며, 생성 코드의 복잡성과 유지보수성까지 종합적으로 고려해야 합니다.

특히 놀라운 발견은 모델 크기가 클수록 좋은 것은 아니라는 점입니다. 작은 모델이 때로는 더 깔끔한 코드를 생성합니다. 실제로 OpenCoder-8B는 Claude Sonnet 4보다 결함 밀도가 낮았습니다. 이는 “더 큰 모델이 무조건 좋다”는 고정관념을 깨는 결과입니다.

모델별 고유한 특성을 파악하는 것도 중요합니다. Claude Sonnet 4는 높은 성능을 보이지만 복잡한 코드를 생성하고 주석을 많이 포함합니다(16.4%). GPT-4o는 제어 흐름 실수가 전체 버그의 48.15%를 차지하는 특징이 있습니다. 반면 OpenCoder-8B는 낮은 성능이지만 간결하고 결함이 적은 코드를 생성합니다.

따라서 개발팀은 자신들의 프로젝트 특성에 맞는 모델을 선택하고, 해당 모델의 약점을 보완하는 검증 프로세스를 구축해야 합니다.

AI 코딩의 미래와 우리의 역할

이번 연구는 현재 AI 코딩 도구들이 확률적 생성 모델의 본질적 한계를 가지고 있음을 보여줍니다. 하지만 이는 AI를 버리라는 뜻이 아니라, 더 현명하게 사용하라는 뜻입니다.

연구진은 이런 결함들을 “현재 기술의 특징”이라고 표현했습니다. 버그가 아니라 통계적 패턴 복제에 의존하는 방법론의 내재적 결과라는 의미입니다.

개발자의 역할은 AI가 생성한 코드를 맹신하는 것이 아니라, 비판적으로 검토하고 개선하는 것입니다. 특히 보안 측면에서는 더욱 신중해야 합니다.

앞으로는 프롬프트 엔지니어링 기법 개선, 보안 중심 모델 학습, 자동화된 코드 리팩토링 등을 통해 이런 한계들이 점진적으로 개선될 것으로 기대됩니다.

AI는 우리의 생산성을 높여주는 훌륭한 도구입니다. 하지만 안전장치 없이는 위험한 도구가 될 수도 있습니다. 이번 연구 결과를 바탕으로 정적 분석과 인간 검토를 결합한 더욱 안전하고 효과적인 AI 코딩 문화를 만들어나가야 할 때입니다.


참고자료:


AI Sparkup 구독하기

구독을 신청하면 최신 게시물을 이메일로 받아볼 수 있습니다.

Comments