보편화된 AI 생성 코딩, “‘패키지 환각’ 심각”
SW 속여 라이브러리 저장하는 ‘패키지 종속성’ 조작, ‘환각’ 유발 잘못된 구성요소의 ‘존재하지 않는 종속성’으로 악성패키지 유도 정상 패키지로 위장한 악성코드로 개발자 유인, “파이썬보다 자바Sc 환각많아”
[애플경제 전윤미 기자] 새로운 연구에 따르면 개발자가 아닌, AI가 생성한 코드는 ‘패키지 환각’ 등을 초래할 위험이 크다는 지적이 나와 주목을 끈다. 즉, AI 생성 코드는 소프트웨어를 속여 라이브러리를 저장하는 ‘패키지 종속성’에 조작된 정보를 삽입, 악성 코드와 상호작용한 ‘환각’을 불러일으킬 수 있다는 것이다.
AI가 생성한 컴퓨터 코드는 많은 경우 타사 라이브러리를 참조한 경우가 많다. 그렇다보니 데이터를 훔치고 백도어를 설치하며 기타 악의적인 행위를 하는 악성 패키지를 불러들이는 역할을 한다. 결국 프로그램을 악성 코드로 감염, 큰 피해를 안기는 것이다.
오픈소스 모델, ‘존재않는 종속성’ 연결 ‘환각’ 많아
실제로 미국 텍사스주립대 연구진에 의하면, 세계적으로 널리 사용되는 LLM 16개로부터 576,000개의 코드 샘플을 생성한 결과, 그런 코드가 포함된 패키지 ‘종속성’ 중 무려 44만개가 ‘환각’ 현상을 보였다. 그 중엔 특히 오픈소스 기반의 모델이 가장 많이 환각을 보였으며, 그들 중 다수는 ‘존재하지 않는 종속성’에 연결되었다.
‘종속성’은 별도의 코드가 제대로 작동하는 데 필요한 라이브러리를 저장하는, 필수적인 코드 구성 요소다. 그러나 ‘존재하지 않는 종속성’에 연결된다는 것은 쉽게 말해 엉뚱한 라이브러리에 연결된다는 뜻이다. 개발자가 코드를 다시 작성하는 번거로움을 덜어주며, 현대 소프트웨어 공급망의 필수적인 부분이기도 하다.
이처럼 ‘존재하지 않는 종속성’은 ‘종속성’이 혼동되게 하는 공격을 심화시켜 소프트웨어 공급망에 위협이 된다. 이는 소프트웨어 패키지가 잘못된 구성 요소의 ‘종속성’에 접근하도록 유도하는 방식으로 작동한다. 즉, 악성 패키지를 게시해놓곤, 정상 패키지와 동일한 이름의 최신 버전 스탬프를 부여하는 식이다. 소프트웨어는 패키지에 의존하다보니, 이런 경우 최신 버전의 정상 패키지로 위장한 악성 버전을 선택하기 쉽다.
“사용자들, LLM 출력에 대한 무조건 신뢰 위험”
‘패키지 혼동’이라고도 하는 이 공격 유형은 지난 2021년 이미 애플, 마이크로소프트, 테슬라 등 글로벌 기업들의 네트워크에서 위조 코드를 실행하는 ‘개념 증명(PoC)’ 익스플로잇으로 처음 출현한 바 있다. 그 후 소프트웨어 공급망 공격에 자주 사용되고 있다. 소프트웨어의 근원을 감염시켜 모든 하위 사용자를 감염시키는 것을 목표로 한다.
텍사스 대학교 연구진은 “공격자가 ‘환각’에 빠진 이름으로 악성 코드가 포함된 패키지를 게시해도, 웬만한 사용자들은 이를 신뢰할 수 밖에 없는 AI모델을 악용한다”고 기술매체 ‘아즈 테크니카’(Ars Technica)에 술회했다. 그래서 “사용자가 LLM의 출력을 전혀 의심치 않고 신중하게 확인하지 않은채 패키지를 설치하면, 악성 패키지에 숨겨진 공격자의 페이로드가 사용자 시스템에서 실행되고 만다”고 경고했다.
본래 AI에서 ‘환각’은 LLM이 사실과 다르거나, 무의미하거나, 할당된 작업과 전혀 관련이 없는 출력을 생성할 때 발생한다. 사실 환각은 LLM의 유용성과 신뢰성을 저하시키지만, 예측이나 해결이 매우 어렵다는 이유로 그 동안 LLM을 괴롭혀 왔다. ‘2025 USENIX 보안 심포지엄’에서 발표할 논문에서, 해당 연구진은 이 현상을 ‘패키지 환각(package hallucination)’이라고 명명했다.
연구진은 “이를 규명하기 위해 파이썬 프로그래밍 언어에서 16개, 자바스크립트에서 14개 등 30개의 테스트를 실행하고, 각 테스트당 19,200개의 코드 샘플을 생성해, 모두 576,000개의 코드 샘플을 생성했다”고 연구 과정을 소개했다. 그 결과 샘플에 포함된 223만 개의 패키지 참조 중 440,445개(19.7%)는 ‘존재하지 않는 패키지’를 가리켰다. ‘패키지 환각’ 현상을 일으킨 것이다. 그 중 절반에 가까운 205,474개는 (정상 패키지로 속기쉬운) ‘고유한 패키지’ 이름을 갖고 있었다.
‘패키지 환각’ 10번 이상 쿼리 반복 등 ‘고의, 작위적’
이런 ‘패키지 환각’은 보통 10차례 이상의 쿼리에 걸쳐 집요하게 반복된다는게 더 큰 문제다. 예를 들어 10번의 반복 쿼리를 할 경우 그 중 과반수는 2번 이상 ‘패키지 환각’을 불러 일으킨다. “이는 대부분의 환각이 단순한 무작위 오류가 아니라, 여러 차례의 반복 작업에 걸쳐 지속되는 반복 가능한 현상임을 보여준다”는 것이다. 이런 ‘지속적인 환각’은 취약점을 악용하려는 사이버 공격자들로선 매우 유용하며, 사용자들에게 큰 피해를 안기는 무기가 될 수 있다.
‘패키지 환각’은 이처럼 결코 무작위적이거나, 일회성 오류가 아니다. ‘존재하지 않는 패키지’의 특정 이름이 반복되는 가운데, 공격자는 ‘존재하지 않는 패키지’를 식별해 이러한 패턴을 포착할 수 있다. 그래서 해커들은 (정상 패키지로 위장, 명칭을 붙인) 이름을 사용해 악성코드를 미끼로 내걸고, 많은 개발자들을 유인하고 있다.
특히 텍사스대학 연구진은 ‘패키지 환각’을 가장 많이 유발하는 LLM과, 프로그래밍 언어 간의 차이를 발견했다. 즉, 코드라마(CodeLlama)나 딥시크(DeepSeek) 같은 오픈소스 LLM에서 발생하는 패키지 환각의 평균 비율은 무려 22%에 달했다. 이는 상용 모델의 평균 5%를 크게 웃도는 수치였다.
또한 파이썬으로 작성된 코드는 자바스크립트보다 환각이 적었다. 즉, 파이썬은 평균 약 16%인 반면, 자바스크립트는 21%를 약간 넘었다. 이러한 차이의 원인을 묻는 질문에 스프랙렌은 다음과 같이 답했습니다.
패키지 생태계 많은 자바스크립트, ‘패키지 환각’ 많아
이같은 차이에 대한 확실한 원인은 아직 파악되지 않고 있다. 단지 오픈소스 모델에 비해, 챗GPT 모델처럼 독점적인 아키텍처에 기반한 모델은 최소 10배 이상 많은 매개변수를 갖고 있다. 이에 추정하기론 상대적으로 작은 매개변수(오픈소스)인 모델에서 환각이 많을 수도 있다는 얘기다.
또한 모델 크기 외에도 학습 데이터, 미세 조정, 명령어 학습, 안전 조정의 차이가 모두 ‘패키지 환각률’에 영향을 끼칠 가능성이 높다. 애초 이런 개발 프로세스는 모델의 효용을 높이고, 특정 유형의 오류를 줄이기 위한 것이지만, 결과적으로 ‘패키지 환각’과 같은 현상에도 예상치 못한 영향을 끼치는 셈이다.
파이썬에 비해 자바스크립트 패키지의 환각 발생률이 높은 것도 그 원인을 명확하게 규명하기는 어렵다. 단지 자바스크립트가 파이썬보다 약 10배 더 많은 패키지를 생태계에 보유하고 있고, 네임스페이스도 더 복잡하기 때문이란 추측은 가능하다. 즉, 패키지 환경이 훨씬 더 크고 복잡할수록, 모델이 특정 패키지 이름을 정확하게 기억하기 어려워진다. 결국 내부 예측의 불확실성을 증가시켜, 궁극적으로 환각 패키지 발생률을 높일 것으로 추측된다.
이런 연구결과에서 특히 중요한 사실은 LLM 출력에 대한 본질적인 신뢰성 부족이다. 앞서 마이크로소프트 CTO 케빈 스콧은 ‘테크크런치’를 통해 “5년 이내에 코드의 95%가 AI가 생성할 것”이라고 예측하면서 “개발자들은 AI 생성 코드의 ‘패키지 환각’에 특히 유의해야 한다는 조언에 귀기울여야 한다”고 공개적으로 경고하기도 했다.