SecureVibeBench: Evaluating Secure Coding Capabilities of Code Agents with Realistic Vulnerability Scenarios
이 논문은 인간 개발자가 실제로 취약점을 도입한 시나리오를 반영한 새로운 벤치마크 'SecureVibeBench'를 제안하고, 이를 통해 현재 코드 에이전트들이 기능적 정확성과 보안성을 동시에 갖춘 코드를 생성하는 데 있어 여전히 심각한 어려움을 겪고 있음을 입증합니다.
원저자:Junkai Chen, Huihui Huang, Yunbo Lyu, Junwen An, Jieke Shi, Chengran Yang, Ting Zhang, Haoye Tian, Yikun Li, Zhenhao Li, Xin Zhou, Xing Hu, David Lo
요즘 AI(코딩 에이전트) 가 소프트웨어 개발을 도와주는 시대가 왔습니다. 마치 유능한 건축 도우미가 와서 "이건 좀 고쳐줘"라고 하면 금방 벽돌을 쌓아주는 것처럼요.
하지만 문제는, 이 도우미가 건물을 빨리 짓는 건 잘해도, '안전'을 무시할 수 있다는 점입니다.
예: 벽을 너무 빨리 쌓다가 기초를 약하게 하거나, 전선 배치를 잘못해서 화재 위험을 만드는 식이죠.
기존 연구들은 "AI 가 코드를 잘 짜는지"는 알았지만, **"실제 인간이 실수했던 상황과 똑같은 환경에서 AI 가 다시 실수하는지"**는 제대로 확인하지 못했습니다.
🎯 2. 새로운 시험지: 'SECUREVIBEBENCH' (시큐어바이브벤치)
저자들은 이 문제를 해결하기 위해 전례 없는 새로운 시험지를 만들었습니다. 이름은 **'SECUREVIBEBENCH'**입니다.
이 시험지가 기존 시험지와 다른 점은 세 가지입니다:
① 현실적인 상황 (실제 공사 현장)
기존 시험지: "이 벽돌 하나만 쌓아줘"라고 했을 때, 벽돌 하나만 쌓는 연습을 시켰습니다. (함수 단위)
새로운 시험지: "이 큰 건물의 1 층부터 3 층까지, 여러 개의 방을 연결해서 수리해 줘"라고 합니다. 여러 파일 (방) 을 동시에 건드리고, 전체 구조를 이해해야 하는 진짜 공사 현장과 똑같은 환경입니다.
② 정확한 과거 기록 (실수한 순간의 재현)
기존 시험지: "여기서 실수할 수 있는 상황을 만들어보자"라고 가상의 상황을 만들었습니다.
새로운 시험지:실제로 과거에 인간 개발자가 실수를 저지르고, 그로 인해 해킹당했던 사건을 찾아냅니다.
"어, 이 프로젝트에서 3 년 전에 인간이 이 코드를 수정하다가 버그를 만들었구나."
그 **정확한 시점 (코드 버전)**으로 시간을 거슬러 올라가서, AI 에게 "너도 인간이 그때 실수했던 그 자리에서 똑같이 고쳐봐"라고 시켰습니다.
비유: "너도 그날 그 사람이 실수했던 그 자리에서 똑같이 벽을 쌓아봐. 혹시 그 사람이 그랬던 실수를 너도 반복할까?"를 확인하는 것입니다.
③ 철저한 안전 검사 (이중 감시)
AI 가 만든 코드가 기능은 잘 작동하는지 (건물이 무너지지 않는지) 확인하고, 동시에 보안상 위험한 구멍이 있는지 (도둑이 들어올 수 있는지) 확인합니다.
단순히 "버그가 있나?"만 보는 게 아니라, AI 가 새로운 종류의 위험을 만들어내진 않았나까지 꼼꼼히 살핍니다.
📉 3. 시험 결과: AI 는 아직 '안전'이 부족하다
이 시험지를 5 개의 유명한 AI 프로그래머 (Claude, GPT 등) 에게 풀어보게 했더니 결과는 충격적이었습니다.
성공률: 가장 잘한 AI 가 **23.8%**만 '기능도 맞고, 안전도 완벽하게' 통과했습니다.
현실: 나머지 76% 는 기능은 잘 작동하는데 보안 구멍이 있거나, 아예 아무것도 못 만들거나 실패했습니다.
결론: "AI 는 코드를 짜는 건 잘하지만, 보안까지 고려한 안전한 코드를 짜는 건 아직 서툴다"는 뜻입니다.
🔍 4. 흥미로운 발견들
AI 의 실수 패턴: 인간 개발자가 만든 실수 (예: 메모리 누수) 를 AI 가 그대로 따라 하기도 하지만, 인간이 안 했던 새로운 종류의 실수도 저지릅니다.
CLI 도구 (명령어 기반 AI): "클라우드 코드" 같은 최신 도구들은 기능 구현은 잘하지만, 보안에는 더 무관심한 경향이 있었습니다.
비용과 시간: 더 똑똑한 AI 를 쓸수록 비용과 시간이 많이 들지만, 그렇다고 해서 보안 점수가 비례해서 높아지지는 않았습니다.
💡 5. 결론 및 시사점
이 논문의 핵심 메시지는 다음과 같습니다:
"AI 가 코드를 작성할 때, 우리는 '기능'만 보지 말고 '안전'을 반드시 검증해야 합니다. 특히 AI 가 인간이 실수했던 실제 상황에서 어떻게 대응하는지 시험해 보는 것이 중요합니다."
지금처럼 AI 가 코드를 짜는 속도가 빨라지면, 보안 구멍이 난 건물이 무수히 지어질 위험이 있습니다. 따라서 개발자들은 AI 가 만든 코드를 그대로 믿지 말고, SECUREVIBEBENCH 같은 철저한 안전 점검을 거쳐야 합니다.
한 줄 요약:
"AI 프로그래머는 빨리 코드를 짜지만, '안전'이라는 기초 공사는 아직 인간보다 훨씬 부족합니다. 실제 인간이 실수했던 현장과 똑같은 환경에서 시험해 보니, AI 가 만든 안전한 코드는 10 개 중 2 개도 채 안 나왔습니다."
SECUREVIBEBENCH: 현실적 취약성 시나리오를 통한 코드 에이전트의 보안 코딩 능력 평가
이 논문은 대규모 언어 모델 (LLM) 기반 코드 에이전트가 생성한 코드의 보안 위험을 평가하기 위해 SECUREVIBEBENCH라는 새로운 벤치마크를 제안합니다. 기존 벤치마크의 한계를 극복하고, 인간 개발자가 실제로 취약점을 도입했던 현실적인 컨텍스트에서 에이전트의 능력을 검증하는 것을 목표로 합니다.
1. 연구 배경 및 문제 정의
코드 에이전트의 부상: SWE-agent 등 LLM 기반 코드 에이전트가 소프트웨어 공학 분야에서 빠르게 확산되고 있으나, 이들이 생성한 코드의 보안 취약점이 심각한 문제로 대두되었습니다. (예: GitHub Copilot 생성 코드의 약 40% 가 취약함)
기존 벤치마크의 한계:
작업 형식 (Task Form) 의 비현실성: 대부분의 기존 벤치마크는 단일 파일 내 함수 완성 (Function-level completion) 에 집중합니다. 그러나 실제 소프트웨어 유지보수는 리포지토리 전체에 걸쳐 여러 파일을 수정하는 다중 파일 편집 (Multi-file editing) 이 필요합니다.
컨텍스트 정렬 (Context Alignment) 부재: 기존 연구는 취약점 카탈로그 (CWE 등) 를 기반으로 인위적인 시나리오를 생성하거나, 취약점 수정 (Fix) 직전의 커밋을 기반으로 작업을 설정합니다. 이는 인간 개발자가 실제로 취약점을 처음 도입했던 시점의 코드 버전과 요구사항을 반영하지 못해, 에이전트가 인간이 저지른 실수를 반복하는지 여부를 정확히 평가할 수 없습니다.
평가의 불완전성: 기능적 정확성 (Functionality) 을 고려하지 않거나, 에이전트가 기존 취약점 외에 새로운 보안 위험을 도입할 가능성을 탐지하는 메커니즘이 부족합니다.
2. 방법론 (Methodology)
2.1 SECUREVIBEBENCH 구축
데이터 소스: OSS-Fuzz 와 ARVO(Open Source Reproducible Vulnerabilities) 프로젝트에서 수집된 4,993 개의 C/C++ 취약점 인스턴스를 기반으로 합니다.
작업 형식: 자연어 요구사항을 입력받아 리포지토리 내 여러 파일을 편집하여 패치를 생성하는 리포지토리 레벨 (Repository-level) 태스크로 구성됩니다. 평균 2,845 개의 파일과 55 만 줄의 코드 (LOC) 를 가진 복잡한 프로젝트 환경에서 수행됩니다.
취약점 도입 시점 복원 (Key Innovation):
인간이 취약점을 도입한 정확한 커밋 (VIC, Vulnerability-Introducing Commit) 과 그 이전의 코드 버전 (PVIC) 을 찾기 위해 **정적 분석 (Static Analysis, B-SZZ 알고리즘)**과 **동적 분석 (Dynamic Analysis, PoV 실행)**을 연계 (Cascade) 하는 방식을 도입했습니다.
이를 통해 인간이 취약점을 처음 작성했을 당시의 요구사항과 코드 상태를 정확히 재현하여 에이전트에게 동일한 과제를 부여합니다.
평가 오라클 (Evaluation Oracles):
기능성: 리포지토리의 테스트 스위트와 차등 테스트 (Differential Testing) 를 통해 생성된 패치가 기존 동작과 일치하는지 확인.
보안성:
PoV (Proof-of-Vulnerability): 특정 취약점이 다시 도입되었는지 확인.
SAST (정적 애플리케이션 보안 테스트, Semgrep): 에이전트가 새로운 보안 위험을 도입했는지 탐지 (위험한 경우 'Suspicious'로 분류).
2.2 실험 설정
평가 대상: 5 가지 코드 에이전트 (SWE-agent, OpenHands, Aider, Claude Code, Codex) 와 5 가지 LLM (Claude Sonnet 4.5, GPT-5, GPT-4.1, Claude 3.7, DeepSeek-V3.1) 의 다양한 조합.
데이터셋: 엄격한 필터링과 품질 검증을 거쳐 최종 105 개의 태스크로 구성됨.
3. 주요 결과 (Results)
전반적 성능 저하: 현재 최첨단 (SOTA) 코드 에이전트조차도 정확하고 안전한 코드를 동시에 생성하는 데 심각한 어려움을 겪습니다.
최고 성능: SWE-agent 와 Claude Sonnet 4.5 조합이 **23.8%**의 '정확하고 안전한 (C-SEC)' 코드를 생성하여 가장 높은 점수를 기록했습니다.
실패 유형: 대부분의 에이전트는 기능적으로 정확한 코드를 생성하더라도 (Correct) 보안 취약점 (Vulnerable) 이나 새로운 위험 (Suspicious) 을 포함하는 경우가 50% 이상을 차지했습니다.
모델 및 에이전트별 차이:
LLM: Claude Sonnet 4.5 가 다른 모델에 비해 보안 코딩 능력에서 뚜렷한 우위를 보였습니다.
에이전트: SWE-agent 와 OpenHands 는 Aider 보다 성능이 우수했습니다. Aider 는 컨텍스트 윈도우 제한으로 인해 많은 파일을 한 번에 로드하려다 실패 (No Output) 하는 경우가 많았습니다.
새로운 위험 도입: 에이전트들은 기존 벤치마크에 없던 다양한 유형의 보안 위험 (특히 메모리 안전성 관련 CWE-415, 416, 120 등) 을 도입하는 것으로 확인되었습니다.
4. 주요 기여 (Contributions)
SECUREVIBEBENCH 제안: 리포지토리 레벨, 다중 파일 편집을 지원하는 최초의 현실적인 C/C++ 보안 코딩 벤치마크를 구축했습니다.
새로운 평가 관점: 취약점이 실제로 도입되었던 원본 컨텍스트를 기반으로 태스크를 설정하여, 에이전트가 인간 개발자의 실수를 반복하는지 여부를 정밀하게 평가할 수 있는 방법을 제시했습니다. (정적/동적 분석 연계 기법)
종합적 평가 체계: 기능적 정확성과 기존/새로운 보안 위험을 모두 포괄하는 다각도의 평가 오라클 (PoV, SAST, 테스트 스위트) 을 도입했습니다.
실증적 발견: 현재 LLM 기반 에이전트들이 복잡한 보안 코딩 태스크에서 여전히 취약하며, 기능적 정확성과 보안성은 항상 비례하지 않음을 입증했습니다.
5. 의의 및 결론
이 연구는 AI 가 생성한 코드의 보안 위험을 평가하는 데 있어 **현실성 (Realism)**과 정밀한 컨텍스트 정렬의 중요성을 강조합니다. SECUREVIBEBENCH 는 코드 에이전트가 실제 소프트웨어 유지보수 환경에서 얼마나 안전한 코드를 생성할 수 있는지에 대한 엄격한 기준을 제시하며, 향후 에이전트의 보안 강화 및 평가 프레임워크 개발에 중요한 기초를 제공합니다. 연구 결과에 따르면, 현재 기술 수준에서는 에이전트를 무비판적으로 신뢰하기보다는 지속적인 보안 검증과 인간 개발자의 감독이 필수적임을 시사합니다.