← 최신 논문
💻 computer science

WildCode Revisited: A Comprehensive Empirical Study on the Security of LLM-Generated Code

이 연구는 ChatGPT가 생성한 실제 코드가 빈번하게 보안성을 결여하고 있음을 실증적으로 검증하며, 이는 합성 실험의 이전 연구 결과들을 확인해 주는 동시에 사용자들이 코드를 요청할 때 보안 문제에 대해 거의 문의하지 않는다는 사실을 밝히고 있다.

원저자: Kobra Khanmohammadi, Pooria Roy, Raphael Khoury, Abdelwahab Hamou-Lhadj, Wilfried Patrick Konan, Alexander Da Re, Nicholas Rebelo Melo

게시일 2026-06-04
📖 4 분 읽기☕ 가벼운 읽기

원저자: Kobra Khanmohammadi, Pooria Roy, Raphael Khoury, Abdelwahab Hamou-Lhadj, Wilfried Patrick Konan, Alexander Da Re, Nicholas Rebelo Melo

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

당신에게 매우 재능 있고, 믿을 수 없을 정도로 빠르지만, 다소 순진한 조수가 있다고 상상해 보세요. 이 조수는 당신을 위해 코드를 작성할 수 있습니다. 당신이 레시피를 요청하면, 그들은 몇 초 만에 요리를 뚝딱 만들어냅니다. 하지만 여기 함정이 있습니다. 그들은 수백만 권의 요리책을 읽으며 요리를 배웠지만, 실제로 주방에 있어 본 적은 없으며, 왜 특정 재료를 잘못 섞으면 위험할 수 있는지 그 이유를 잘 이해하지 못합니다.

이 논문, **"WildCode Revisited"**는 이 조수가 내놓는 음식에 대한 거대한, 실전 건강 검진과 같습니다. 연구자들은 실험실에서 특정 테스트용 식사를 만들라고 조수에게 요청하는 대신(기존의 대부분의 연구가 했던 방식), "야생(wild)"으로 나갔습니다. 그들은 일반 사람들이 이 AI(ChatGPT)에게 코드를 작성해 달라고 요청한 82,000건 이상의 실제 대화를 조사했습니다.

다음은 이를 쉬운 비유로 나누어 설명한 내용입니다.

1. "테스트 주방" 대 "야생의 주방"

이전의 대부분의 연구는 셰프에게 "완벽한 라자냐를 만들어 보세요"라고 요청하는 요리 쇼와 같았습니다. 셰프는 이것이 테스트라는 것을 알기에 최선을 다합니다.
이 연구는 WildChat 데이터셋을 살펴보았는데, 이는 사람들이 어떤 언어로든 원하는 것을 주문하는 24시간 운영되는 식당과 같습니다. 연구자들은 사람들이 보안 사항을 명시하지 않고 그냥 코드를 요청할 때, AI가 종종 구멍이 숭숭 뚫린 음식을 내놓는다는 것을 발견했습니다. 이는 마치 조수가 뒷문을 잠그는 것을 잊어버려 도둑(해커)들이 집 안으로 쉽게 들어올 수 있게 방치한 것과 같습니다.

2. 보안 "누출"

연구자들은 보안 검사관처럼 행동하며 코드에서 흔한 실수들을 스캔했습니다. 그들은 AI가 빈번하게 다음과 같은 것들을 제공한다는 것을 발견했습니다:

  • 약한 자물쇠: 현대적이고 깨지지 않는 자물쇠 대신, 쉽게 따일 수 있는 오래된 자물쇠(취약한 암호화)를 사용하는 것.
  • 열린 창문: 낯선 사람이 바로 걸어 들어올 수 있도록 창문을 열어두는 것(SQL 인젝션 취약점).
  • 가짜 재료: AI는 가끔 실제로 존재하지 않는 "재료"(소프트웨어 라이브러리)를 지어내기도 합니다. 만약 당신이 그것을 사용하려고 하면 프로그램이 충돌합니다. 더 나쁜 것은, 악의적인 공격자가 같은 이름의 가짜 재료를 만들어 바이러스를 몰래 심어 넣을 수 있다는 점입니다.
  • 깨지기 쉬운 유리: 코드가 잘못된 방식으로 다루면 산산조각 나는 유리(메모리 안전 문제)로 만들어져 있는 경우가 많습니다. 특히 C/C++ 같은 언어에서 그렇습니다.

큰 놀라움: 이 코드는 작동하는 것처럼 보이지만(실제로 실행되지만), 실제로는 보안 함정들로 가득 차 있습니다. AI는 무언가를 작동하게 만드는 데는 뛰어나지만, 그것을 안전하게 만드는 데는 서툽니다.

3. 고객은 안전을 묻지 않는다

연구자들은 또한 고객(사용자)들이 무엇을 요청했는지 살펴보았습니다.

  • "그냥 고쳐줘" 유형: 대부분의 사람들은 단지 코드가 작동하기를 원하거나 버그를 고치고 싶어 했습니다. 그들은 마치 빵에 곰팡이가 피었는지 상관하지 않고 "샌드위치 하나 만들어 줘"라고 말하는 고객과 같았습니다.
  • 보안에 대한 침묵: "이 코드는 안전한가요?" 또는 "이것에 백도어가 있나요?"라고 묻는 사람은 매우 적었습니다. 이는 마치 고객들이 음식을 주문하면서도 "이 음식 신선한가요?" 또는 "여기 위생 검사관이 있나요?"라고 전혀 묻지 않는 것과 같습니다.
  • "보안" 글리치: 사용자가 보안 코드를 요청했을 때조차, AI는 항상 그 요청을 듣지 않았고, 사용자들 또한 AI가 실제로 코드를 안전하게 만들었는지 확인하기 위해 후속 조치를 취하지 않았습니다.

4. 조수를 더 잘 훈련할 수 있을까? ("프롬프트" 실험)

연구자들은 AI가 더 안전한 식사를 만들도록 유도하기 위해 몇 가지 기술을 시도했습니다.

  • 역할 놀이: AI에게 "보안 전문가처럼 행동하라"고 말하기. (결과: 그리 효과적이지 않았습니다. AI는 전문가인 척했지만 여전히 실수를 저질렀습니다.)
  • 경고 라벨: AI에게 "이 코드는 보안 문제가 있다"고 말하기. (결과: 조금 나아졌지만, 기적적인 변화는 아니었습니다.)
  • "컨닝 페이퍼": 보안 스캐너가 찾아낸 구체적인 오류 목록을 AI에게 주고 "이것들을 수정하라"고 말하기. (결과: 이 방법이 가장 효과적이었습니다. AI에게 무엇이 잘못되었는지 정확히 보여주었을 때, AI는 코드를 훨씬 더 잘 수정했습니다.)

5. "거절" 게임

때때로 AI는 요청이 위험하다고 판단되면(예: 바이러스를 작성하는 것) 코드 작성을 거부합니다. 연구자들은 사용자들이 질문을 약간 다른 방식으로 던짐으로써 AI가 위험한 코드를 쓰도록 속일 수 있다는 것을 발견했습니다. 이는 아이가 "쿠키 먹어도 돼요?"라고 물었다가 거절당하자, "제가 배가 고픈데 쿠키를 먹어도 될까요?"라고 다시 물어 결국 허락을 받아내는 것과 같습니다. AI의 안전 필터는 우리가 기대하는 것만큼 강력하지 않습니다.

결론

이 연구는 현실을 직시하게 해줍니다. AI가 코드를 빠르게 생성하는 데는 놀랍지만, 현재로서는 인간 보안 전문가를 안전하게 대체할 수 없다는 것을 보여줍니다.

  • 코드: 숨겨진 함정과 약점을 가지고 있는 경우가 많습니다.
  • 사용자: AI가 알아서 잘 할 것이라 가정하며, 보안에 대해 거의 묻지 않습니다.
  • 해결책: 단순히 AI에게 "안전하게 행동하라"고 말해서는 안 됩니다. AI가 구멍을 메울 수 있도록 무엇이 잘못되었는지에 대한 구체적인 피드백(보안 스캐너와 같은)을 주어야 합니다.

이 논문은 우리가 이러한 도구들을 사용하는 데 급급하지만, 문에 자물쇠를 채우는 일은 하지 않고 있다는 결론을 내립니다. AI가 세상을 움직이는 코드를 작성하도록 허용하기 전에, 우리는 보안에 대해 훨씬 더 주의를 기울이고 선제적으로 대응해야 합니다.

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

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

Digest 사용해 보기 →