최근 발표된 연구에 따르면, AI가 생성한 컴퓨터 코드 에는 존재하지 않는 타사 라이브러리에 대한 참조가 넘쳐나는데, 이는 합법적인 프로그램을 악성 패키지로 오염시켜 데이터를 훔치고 백도어를 심고 기타 사악한 행위를 수행하는 공급망 공격에 황금 같은 기회를 제공한다고 합니다.
가장 널리 사용되는 대규모 언어 모델 16개를 사용하여 57만 6천 개의 코드 샘플을 생성한 이 연구에서, 포함된 패키지 종속성 중 44만 개가 존재하지 않는 "환상적"인 것으로 나타났습니다. 오픈소스 모델이 가장 환각적이었고, 종속성의 21%가 존재하지 않는 라이브러리에 연결되어 있었습니다. 종속성은 별도의 코드가 제대로 작동하는 데 필요한 필수적인 코드 구성 요소입니다. 종속성은 개발자가 코드를 다시 작성하는 번거로움을 덜어주며 현대 소프트웨어 공급망의 필수적인 부분입니다.
이러한 존재하지 않는 종속성은 소위 종속성 혼동 공격을 악화시켜 소프트웨어 공급망에 위협이 됩니다. 이러한 공격은 소프트웨어 패키지가 잘못된 구성 요소 종속성에 접근하도록 유도하는 방식으로 작동합니다. 예를 들어, 악성 패키지를 게시하고 정상 패키지와 동일한 이름이지만 최신 버전 스탬프를 부여하는 것입니다. 해당 패키지에 의존하는 소프트웨어는 경우에 따라 정상 패키지가 더 최신 버전처럼 보이기 때문에 악성 버전을 선택합니다.
패키지 혼동(Package Confusion)으로도 알려진 이 공격 유형은 2021년, 애플, 마이크로소프트, 테슬라를 포함한 세계 최대 기업들의 네트워크에 위조 코드를 실행한 개념 증명(PoC) 공격에서 처음 시연 되었습니다. 이는 소프트웨어 공급망 공격에 사용되는 기법 중 하나로, 소프트웨어의 근원지에서 악성코드를 감염시켜 하위 시스템 전체 사용자를 감염시키는 것을 목표로 합니다.
"공격자가 악성 코드가 포함된 환각적인 이름으로 패키지를 게시하면, 의심하지 않는 사용자에게 해당 이름을 제안하는 모델에 의존하게 됩니다."라고 샌안토니오 텍사스 대학교 박사과정생이자 수석 연구원인 조셉 스프랙클렌은 Ars에 이메일을 통해 밝혔습니다. "사용자가 LLM의 출력을 신뢰하고 신중하게 검증하지 않고 패키지를 설치하면, 악성 패키지에 숨겨진 공격자의 페이로드가 사용자 시스템에서 실행될 수 있습니다."
AI에서 환각은 LLM이 사실과 다르거나, 터무니없거나, 할당된 작업과 전혀 관련이 없는 출력을 생성할 때 발생합니다. 환각은 LLM의 유용성과 신뢰성을 떨어뜨리고 예측 및 해결이 매우 어렵다는 이유로 오랫동안 LLM을 괴롭혀 왔습니다. 2025년 USENIX 보안 심포지엄에서 발표될 예정인 논문 에서 연구팀은 이 현상을 "패키지 환각"이라고 명명했습니다.
이 연구를 위해 연구진은 파이썬 프로그래밍 언어 16개와 자바스크립트 14개, 총 30개의 테스트를 실행하여 각 테스트당 19,200개의 코드 샘플을 생성했습니다. 총 576,000개의 코드 샘플이 생성되었습니다. 이 샘플에 포함된 223만 개의 패키지 참조 중 440,445개(19.7%)는 존재하지 않는 패키지를 가리켰습니다. 이 440,445개의 패키지 환각 중 205,474개는 고유한 패키지 이름을 가지고 있었습니다.
공급망 공격에서 패키지 환각이 잠재적으로 유용한 이유 중 하나는 패키지 환각의 43%가 10번의 쿼리에 걸쳐 반복되었다는 점입니다. 연구진은 "또한, 환각된 패키지가 10번의 반복에서 58%의 확률로 두 번 이상 반복되었는데, 이는 대부분의 환각이 단순한 무작위 오류가 아니라 여러 번의 반복에 걸쳐 지속되는 반복 가능한 현상임을 보여줍니다. 지속적인 환각은 이 취약점을 악용하려는 악의적인 공격자에게 더욱 중요하며, 환각 공격 벡터를 더욱 실행 가능한 위협으로 만들기 때문에 이는 매우 중요합니다."라고 밝혔습니다.
다시 말해, 많은 패키지 환각은 무작위적인 일회성 오류가 아닙니다. 오히려 존재하지 않는 패키지의 특정 이름이 반복적으로 반복되는 것입니다. 공격자는 반복적으로 환각되는 존재하지 않는 패키지를 식별하여 이러한 패턴을 이용할 수 있습니다. 그런 다음 공격자는 해당 이름을 사용하여 악성코드를 게시하고 많은 개발자가 접근하기를 기다립니다.
이 연구는 패키지 환각을 가장 많이 유발하는 LLM과 프로그래밍 언어 간의 차이를 발견했습니다. CodeLlama와 DeepSeek와 같은 오픈소스 LLM에서 발생한 패키지 환각의 평균 비율은 약 22%였으며, 이는 상용 모델의 5%를 약간 넘는 수치입니다. Python으로 작성된 코드는 JavaScript 코드보다 환각 발생률이 낮았으며, 평균 약 16%인 반면 JavaScript는 21%를 약간 넘었습니다. 이러한 차이의 원인에 대해 Spracklen은 다음과 같이 답했습니다.
대규모 언어 모델은 매우 복잡한 시스템이기 때문에 인과 관계를 직접 추적하기 어렵기 때문에 이는 어려운 질문입니다. 그럼에도 불구하고, 상용 모델(예: ChatGPT 시리즈)과 오픈소스 모델 간에 상당한 차이가 관찰되었는데, 이는 상용 모델의 매개변수 수가 훨씬 더 많기 때문일 가능성이 높습니다. 대부분의 추정치에 따르면 ChatGPT 모델은 테스트한 오픈소스 모델보다 최소 10배 더 많은 매개변수를 가지고 있지만, 정확한 아키텍처와 학습 세부 사항은 여전히 독점적입니다. 흥미롭게도, 오픈소스 모델에서는 모델 크기와 환각률 사이에 명확한 링크(Chainlink) 발견하지 못했는데, 이는 모두 상대적으로 더 작은 매개변수 범위에서 작동하기 때문일 가능성이 높습니다.
모델 크기 외에도, 훈련 데이터, 미세 조정, 지시 훈련, 그리고 안전 조정의 차이가 모두 패키지 환각 발생률에 영향을 미칠 가능성이 높습니다. 이러한 과정들은 모델 사용성을 개선하고 특정 유형의 오류를 줄이기 위한 것이지만, 패키지 환각과 같은 현상에 예상치 못한 영향을 미칠 수 있습니다.
마찬가지로, 파이썬에 비해 자바스크립트 패키지의 환각 발생률이 높은 이유 또한 명확하게 설명하기 어렵습니다. 이는 자바스크립트가 파이썬보다 약 10배 더 많은 패키지를 생태계에 보유하고 있고, 네임스페이스도 더 복잡하기 때문이라고 추측합니다. 패키지 환경이 훨씬 더 크고 복잡해짐에 따라 모델이 특정 패키지 이름을 정확하게 기억하기가 더 어려워지고, 이는 내부 예측의 불확실성을 증가시켜 궁극적으로 환각 패키지 발생률을 높이는 결과를 초래합니다.
이번 연구 결과는 LLM 결과물의 본질적인 신뢰성 부족을 보여주는 최신 연구 결과입니다. 마이크로소프트 CTO 케빈 스콧은 5년 안에 코드의 95%가 AI로 생성될 것이라고 예측하고 있는데 , 개발자들이 이 메시지에 귀 기울이기를 바랍니다.
이 기사는 원래 Ars Technica 에 게재되었습니다.



