← 최신 논문
💻 computer science

On Fixing Insecure AI-Generated Code through Model Fine-Tuning and Prompting Strategies

본 논문은 AI 생성 코드를 공통 취약점 목록 (CWE) 취약점으로부터 보호하기 위해 파인튜닝 및 프롬프팅 전략의 효과를 체계적으로 조사하여, 이러한 방법들이 특정 취약점을 완화할 수는 있지만 종종 새로운 취약점을 도입하며 다양한 모델과 시나리오에 걸쳐 보편적으로 효과적인 해결책을 제공하지 못함을 밝혀냈다.

원저자: Ali Soltanian Fard Jahromi, Amjed Tahir, Peng Liang, Foutse Khomh

게시일 2026-05-08
📖 4 분 읽기☕ 가벼운 읽기

원저자: Ali Soltanian Fard Jahromi, Amjed Tahir, Peng Liang, Foutse Khomh

원본 논문은 CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/) 라이선스로 제공됩니다. 이것은 아래 논문에 대한 AI 생성 설명입니다. 저자가 작성하거나 승인한 것이 아닙니다. 기술적 정확성을 위해서는 원본 논문을 참조하세요. 전체 면책 조항 읽기

당신의 소프트웨어를 위해 매우 재능 있고 빠르지만 약간 부주의한 견습생을 고용했다고 상상해 보세요. 이 견습생은 수백만 권의 책 (코드 저장소) 을 읽었고, 문장 (코드) 을 놀라울 정도로 빠르게 작성할 수 있습니다. 그러나 때때로 실수가 포함된 책들로부터 배웠기 때문에, 그들이 건설한 집 (프로그램) 에서 실수로 '백도어'를 만들거나, 창문을 열어두거나, 약한 자물쇠를 사용하는 경우가 많습니다.

이 논문은 이러한 위험한 실수를 멈추도록 이 견습생을 어떻게 훈련시킬지 테스트하는 실험 보고서와 같습니다. 연구자들은 다음과 같은 질문을 던졌습니다: 우리가 이 견습생에게 더 안전한 집을 짓는 법을 가르칠 수 있을까요? 그리고 만약 그렇다면, 첫 번째 문제를 해결하는 과정에서 실수로 다른 무언가를 망치지는 않을까요?

다음은 그들의 발견 사항을 간단한 비유로 정리한 것입니다:

1. 문제: 견습생은 빠르지만 결함이 있습니다

연구자들은 GPT-4, Gemini 등 다섯 가지 다른 '견습생' (AI 모델) 을 네 가지 다른 '언어' (Python, Java, JavaScript, Go) 로 테스트했습니다. 그들은 자물쇠를 잠그거나 키를 처리하는 것과 같이 까다로운 것으로 알려진 10 가지 구체적인 작업을 제시했습니다.

  • 결과: 어떤 견습생도 완벽하게 안전한 집을 짓지 못했습니다. 사실, 그들이 지은 거의 모든 집에는 적어도 하나의 결함이 있었습니다.
  • 비유: 요리사에게 식사를 만들어달라고 요청하는 것과 같습니다. 그들은 맛있게 만들 수 있지만 (기능적인 코드), 손을 씻는 것을 잊거나 (보안 취약점) 칼을 조리대 위에 남겨둘 수 있습니다.
  • 언어가 중요합니다: 견습생은 JavaScriptJava로 작성할 때 (복잡한 고층 빌딩을 짓는 것과 같음) 가장 많은 실수를 했고, PythonGo (단순한 오두막을 짓는 것과 같음) 로 작성할 때 가장 적은 실수를 했습니다.

2. 해결책: 실수를 수정하는 방법

연구자들은 견습생이 더 잘하도록 '코칭'하는 네 가지 다른 방법을 시도했습니다. 이것들을 서로 다른 교수법으로 생각하세요:

  • 방법 A: "그렇게 하지 마!" (부정적 예시 프롬프팅)

    • 접근 방식: 견습생에게 부서진 문 사진을 보여주고 "이렇게 짓지 마"라고 말합니다.
    • 결과: 이것이 가장 효과가 적은 방법이었습니다. 때로는 부서진 문을 보여준 것이 견습생을 혼란스럽게 하여, 결국 똑같이 부서진 문이나 심지어 더 나쁜 문을 짓게 만들었습니다. 누군가 넘어지는 것을 보여줌으로써 넘어지지 않도록 가르치려는 것과 같습니다. 그들은 넘어지는 것을 그대로 따라 할 수 있습니다.
  • 방법 B: "단계별로 생각하라" (Chain-of-Thought 프롬프팅)

    • 접근 방식: 코드를 작성하기 전에 논리를 설명하며 잠시 멈추라고 요청합니다. "먼저 자물쇠를 확인하세요. 그다음 경첩을 확인하세요. 그다음 코드를 작성하세요."
    • 결과: 이는 어느 정도 도움이 되었습니다. SQL 인젝션 (단순한 자물쇠 따기) 과 같은 쉬운 문제들은 해결했지만, 사용자 입력 검증과 같은 복잡한 문제들은 해결하는 데 어려움을 겪었습니다.
  • 방법 C: "보안 전문가가 되라" (메타 프롬프팅)

    • 접근 방식: 견습생에게 먼저 보안 전문가가 되는 방법에 대한 규칙 세트를 작성한 다음, 그 규칙을 사용하여 코드를 작성하도록 요청합니다.
    • 결과: 이는 '말하기' 방법 중 가장 좋은 것이었습니다. 추가 훈련 없이 실수를 크게 줄였습니다. 견습생에게 "시작하기 전에 안전 규칙 체크리스트를 작성한 다음 그것을 따르라"고 말하는 것과 같습니다.
  • 방법 D: "학교에 가라" (파인튜닝)

    • 접근 방식: 단순히 지시를 내리는 대신, 견습생을 완벽한 안전한 코드 예제만 공부하는 특수 학교로 데려갑니다. 모델의 가중치 (뇌) 를 안전한 패턴을 선호하도록 재훈련시킵니다.
    • 결과: 이것이 압도적으로 가장 효과적인 방법이었습니다. 보안 결함을 약 80% 줄였습니다. 견습생이 엄격한 보안 아카데미에 다녀와서 완전히 새로운 사고방식을 가지고 돌아온 것과 같습니다. 그러나 이는 비용이 많이 들고 많은 시간 (컴퓨팅 파워) 이 소요되는 반면, 다른 방법들은 빠른 코칭 세션과 같습니다.

3. 함정: 한 가지를 고치면 다른 것이 망가집니다

연구자들은 또한 부작용을 살펴보았습니다: 하나의 구멍을 막는 것이 새로운 구멍을 만들었을까요?

  • 발견: 네, 때로는 그랬습니다. 견습생이 '약한 자물쇠' (보안 결함) 를 고치려 할 때, 실수로 '정문'을 활짝 열어두거나 다른 곳에 '비밀 통로'를 설치하기도 했습니다.
  • 비유: 배에 구멍을 메우려다 실수로 배 바닥에 구멍을 뚫는 것과 같습니다.
  • 미묘한 차이: 새로운 구멍들은 일반적으로 원래 것보다 작고 덜 위험했습니다. 또한, '학교' 방법 (파인튜닝) 은 '코칭' 방법보다 새로운 구멍을 만들 가능성이 훨씬 낮았습니다.

4. 주요 교훈

  • 만병통치약은 없다: AI 코드를 100% 안전하게 만드는 단일 '마법 지팡이'는 없습니다. 가장 좋은 방법 (파인튜닝) 조차도 모든 것을 고치지 못했습니다.
  • 맹신하지 마세요: AI 가 생성한 코드가 작동한다고 해서 안전하다고 가정할 수 없습니다. 초보자가 지은 집을 검사 없이 신뢰하지 않는 것처럼, 이것도 점검해야 합니다.
  • 최고의 전략: 예산과 시간이 있다면, **모델을 재훈련하는 것 (파인튜닝)**이 안전한 코드를 얻는 가장 좋은 방법입니다. 빠르고 저렴한 해결책이 필요하다면, 메타 프롬프팅 (AI 에게 상세한 보안 체크리스트 제공) 이 그다음으로 좋은 방법입니다.
  • 맥락이 중요합니다: 사용하는 프로그래밍 언어의 종류에 따라 이러한 수정 방법의 효과가 달라집니다.

요약하자면, AI 는 소프트웨어를 구축하는 강력한 도구이지만, 현재는 디지털 왕국의 열쇠를 맡기기 전에 지속적인 감독, 구체적인 훈련, 그리고 최종 보안 검사가 필요한 '주니어 개발자'입니다.

연구 분야의 논문에 파묻히고 계신가요?

연구 키워드에 맞는 최신 논문의 일일 다이제스트를 받아보세요 — 기술 요약 포함, 당신의 언어로.

Digest 사용해 보기 →