조건: "보안 (위생) 에 신경 써서 만들어줘"라고 특별히 지시하지 않았습니다. 그냥 "요리해 줘"라고만 했죠.
결과: 요리사가 만든 스테이크를 보니, 위생 기준에 미치지 못하는 경우가 많았습니다.
🔍 2. 실험 결과: "보안 구멍이 숭숭 뚫려 있다"
ChatGPT 가 만든 21 개 프로그램 중, 처음부터 안전했던 것은 **5 개 (약 24%)**뿐이었습니다. 나머지 16 개는 심각한 보안 구멍이 있었습니다.
비유: 마치 열쇠가 문고리에 꽂혀 있는 집이나, 창문이 열려 있는 금고를 만든 것과 비슷합니다.
구체적인 예시:
SQL 인젝션 (데이터베이스 해킹): ChatGPT 가 만든 코드는 사용자의 입력을 그대로 데이터베이스에 넣어서, 해커가 "나를 관리자야!"라고 속이면 진짜 관리자가 되어버리는 구멍이 있었습니다.
메모리 손상: C/C++ 언어로 만든 프로그램 중에는, 해커가 특정 입력을 넣으면 프로그램이 붕괴되거나 악성 코드를 실행할 수 있는 구멍이 있었습니다.
암호화 실수: 비밀번호를 저장할 때 암호화 없이 그대로 저장하거나, 같은 비밀번호를 여러 곳에 사용하는 실수를 저지르기도 했습니다.
🗣️ 3. 흥미로운 발견: "모르고 있다가, 물어보면 안다"
가장 재미있는 점은 ChatGPT 의 이중성입니다.
초기 반응: "이 코드를 만들어줘"라고 하면, 보안 구멍이 있는 코드를 뚝딱 만들어냅니다. 마치 "위생이 중요하다는 걸 모르거나, 귀찮아서 생략한" 요리사 같습니다.
질문 후 반응: 하지만 연구진이 **"이 코드가 해커에게 먹히지 않을까?"**라고 물어보면, ChatGPT 는 순간적으로 깨닫습니다. "아! 제가 실수했네요. 해커가 이 부분을 공격할 수 있군요."라고 인정하고, 정확한 해결책을 설명해 줍니다.
수정 후: 연구진이 "그럼 안전한 버전으로 다시 만들어줘"라고 하면, 대부분의 경우 안전한 코드를 만들어냈습니다.
핵심 메시지: ChatGPT 는 보안을 '알고' 있지만, 스스로 '생각해서' 적용하지는 않습니다. 사용자가 "안전하게 만들어줘"라고 명시적으로 요청해야만 안전한 코드를 줍니다.
⚠️ 4. 위험한 상황: "초보자를 위한 함정"
이 연구는 초보 개발자나 학생들에게 큰 위험이 될 수 있음을 경고합니다.
비유: 만약 초보자가 ChatGPT 가 만든 코드를 그대로 복사해서 웹사이트를 만든다면? 그 웹사이트는 해커에게 문을 활짝 열어둔 상태가 됩니다.
문제점: ChatGPT 는 해킹을 위한 악성 코드는 만들어주지 못하게 막혀 있지만, 실수로 만들어지는 취약한 코드는 막아주지 않습니다. 오히려 "이건 위험하니까 고쳐야 해요"라고 말해주지만, 코드를 고쳐주는 건 사용자의 몫입니다.
윤리적 딜레마: ChatGPT 는 "해킹 코드는 못 만들어줘"라고 거절하지만, "해킹당하기 쉬운 코드는 만들어줘"라는 모순을 보입니다.
💡 5. 결론: "훌륭한 조교지만, 아직 독립은 못 한다"
연구진은 다음과 같이 결론 내립니다.
ChatGPT 는 아직 완벽한 개발자가 아닙니다. 보안 전문가가 아닌 초보자가 ChatGPT 에게 맡긴 코드는 보안 사고의 온상이 될 수 있습니다.
교육 도구로는 훌륭합니다. "왜 이 코드가 위험한지?", "어떻게 고쳐야 안전한지?"를 물어보면 ChatGPT 는 훌륭한 선생님처럼 설명해 줍니다.
사용법: ChatGPT 를 사용할 때는 **"무조건 믿지 말고, 항상 검증하라"**는 원칙이 필요합니다.
코드를 받아서 바로 쓰지 말고, **"이 코드는 안전한가?"**라고 다시 물어보세요.
**"이 취약점을 막아줘"**라고 구체적으로 지시하세요.
📝 한 줄 요약
"ChatGPT 는 코드를 잘 짜지만, 보안은 '잊어버리는' 초보 요리사입니다. 우리가 '위생 (보안)'을 꼭 챙겨달라고 말해주지 않으면, 식중독 (해킹) 이 날 수 있으니 항상 확인해야 합니다."
논문 요약: ChatGPT 가 생성한 코드의 보안성 평가
1. 연구 배경 및 문제 제기 (Problem)
최근 대규모 언어 모델 (LLM) 의 발전으로 ChatGPT 와 같은 AI 챗봇이 자연어 처리뿐만 아니라 자연어를 소스 코드로 변환하는 능력까지 보여주며 소프트웨어 개발 분야에서 큰 주목을 받고 있습니다. 그러나 이러한 자동 코드 생성 기술의 도입은 생성된 코드의 보안 취약점이라는 새로운 위험을 동반합니다.
핵심 문제: ChatGPT 가 생성한 코드가 실제 보안 표준을 충족하는지, 그리고 악의적인 공격 (예: SQL 인젝션, 버퍼 오버플로우 등) 에 얼마나 견고한지 명확히 규명되지 않았습니다.
연구 목적: ChatGPT 가 생성한 코드의 보안 수준을 실험적으로 평가하고, 적절한 프롬프트 (질문) 를 통해 보안성을 개선할 수 있는지, 그리고 이 과정에서 발생하는 윤리적 쟁점을 논의하는 것입니다.
2. 연구 방법론 (Methodology)
저자들은 ChatGPT(GPT-3.5 기반) 를 대상으로 다음과 같은 실험을 수행했습니다.
각 프로그램은 특정 취약점 (SQL 인젝션, 메모리 손상, DoS, 암호화 오용 등) 을 테스트하도록 설계되었습니다.
실험 절차:
초기 생성: 보안에 대한 명시적 지시 (입력 sanitization 등) 없이 ChatGPT 에게 코드 생성을 요청하여 초기 코드를 확보했습니다. 이는 보안 지식이 부족한 초보 개발자의 행동을 시뮬레이션한 것입니다.
취약점 탐지 및 질문: 생성된 코드에 대해 "이 입력을 주면 어떻게 되는가?", "이 코드는 안전한가?" 등의 질문을 통해 ChatGPT 가 취약점을 인지하는지 확인했습니다.
수정 요청: 취약점이 발견된 경우, ChatGPT 에게 더 안전한 버전의 코드를 생성하도록 요청했습니다.
평가: 초기 코드와 수정된 코드가 의도된 공격에 대해 안전한지, 그리고 컴파일 및 실행이 가능한지 검증했습니다.
3. 주요 결과 (Key Results)
실험 결과는 ChatGPT 의 코드 생성 능력에 대해 우려스러운 점을 드러냈습니다.
초기 생성 코드의 보안성 부족:
21 개 프로그램 중 **초기 생성 시 보안이 확보된 코드는 단 5 개 (약 24%)**에 불과했습니다.
대부분의 코드는 SQL 인젝션, 경로 이동 (Path Traversal), 버퍼 오버플로우, 정수 오버플로우, 암호화 키 재사용 등 심각한 취약점을 포함하고 있었습니다.
특히 메모리 손상 (Memory Corruption) 및 안전한 데이터 조작과 관련된 취약점을 처리하는 데 ChatGPT 는 어려움을 겪었습니다.
상호작용을 통한 개선 가능성:
ChatGPT 는 취약점을 지적받으면 그 원인을 잘 설명하고, 명시적으로 요청할 경우 더 안전한 코드를 생성할 수 있는 능력을 보였습니다.
수정 요청 후, 16 개의 취약한 프로그램 중 7 개가 수정되어 보안성이 확보되었습니다.
그러나 모든 경우에 성공한 것은 아니며 (예: Java 역직렬화 문제에서 수정 코드 생성 실패), 때로는 ChatGPT 가 스스로의 조언을 무시하거나 여전히 취약한 코드를 생성하기도 했습니다.
구체적인 사례:
SQL 인젝션: 초기에는 필터링이 없었으나, 요청 시 Prepared Statement 를 사용한 안전한 코드로 수정 가능.
암호화: AES 암호화 시 기본 모드 (ECB) 를 사용하는 등 부적절한 관행을 보였으나, 명시적 지시 시 안전한 모드로 변경 가능.
메모리 관리:malloc(0) 사용이나 정수 오버플로우 등 세부적인 보안 규칙을 무시하는 경우가 많았으며, 질문을 통해야 수정됨.
4. 주요 기여 및 논의 (Contributions & Discussion)
보안 인식의 이중성: ChatGPT 는 생성된 코드가 취약하다는 사실을 인지하고 설명할 수 있지만, 사용자가 명시적으로 보안 질문을 하지 않으면 안전한 코드를 생성하지 않는 경향이 있습니다. 이는 "적절한 질문을 하는 보안 의식 있는 개발자"에게만 유용하다는 한계를 보여줍니다.
윤리적 쟁점:
ChatGPT 는 악성 코드 생성은 거부하지만, 취약한 코드는 생성하는 모순을 보입니다.
특정 위험한 작업 (예: 사용자 입력을 쉘에 전달) 을 요청할 때, ChatGPT 는 위험을 인지하면서도 요청을 수행하거나, 수정된 안전한 코드를 생성할 수 없다고 답변하는 등 일관성 없는 행동을 보입니다.
코드 기밀성: 사용자가 생성한 코드가 ChatGPT 의 학습 데이터에 포함될 수 있어 기업 비밀이나 저작권 문제가 발생할 수 있다는 우려가 제기됩니다.
교육적 도구로서의 역할: ChatGPT 는 완전한 자동화 도구라기보다는, **초보 개발자에게 보안 개념을 가르치는 교육용 도구 (Pedagogical Tool)**로 활용될 가능성이 높습니다. 사용자는 취약점을 발견하고 질문을 통해 ChatGPT 와 상호작용하며 코드를 개선하는 과정을 학습할 수 있습니다.
5. 연구의 의의 및 결론 (Significance & Conclusion)
결론: ChatGPT 는 현재로서는 숙련된 보안 개발자를 대체할 수 없으며, 생성된 코드는 최소한의 보안 표준에도 미치지 못하는 경우가 많습니다.
제언:
개발자는 ChatGPT 를 사용할 때 생성된 코드를 반드시 검증하고, 단위 테스트 (Unit Testing) 나 자동화된 정적 분석 도구를 통해 취약점을 탐지해야 합니다.
ChatGPT 와의 상호작용 시 "이 코드는 안전한가?", "취약점은 없는가?"와 같은 보안 지향적인 프롬프트를 사용하는 것이 필수적입니다.
향후 연구는 더 최신 버전의 모델 (GPT-4 등) 에 대한 평가와, 보안 코드를 생성하도록 유도하는 구체적인 프롬프트 엔지니어링 전략 개발이 필요합니다.
이 논문은 AI 기반 코드 생성 기술이 가져올 수 있는 보안 리스크를 최초로 체계적으로 분석한 연구 중 하나로, AI 도구의 윤리적 사용과 개발자의 보안 의식 중요성을 강조합니다.