9.6.1 AI가 생성한 가짜 패키지명 및 버전(Package Hallucination) 탐지 기법
LLM의 텍스트 생성 매커니즘은 본질적으로 그럴싸한(Plausible) 단어의 조합을 예측하는 과정이다. 개발자가 “PDF 문서를 읽어서 암호화된 그래프로 렌더링하라“고 지시했을 때, LLM은 PyPDF2와 matplotlib 같이 실제로 존재하는 패키지를 섞어 쓸 수도 있지만, 머릿속에서 pdf-secure-grapher라는 세상에 존재하지 않는 완벽한 인터페이스의 가짜 패키지를 창조해 내기도 한다.
이 이른바 **‘패키지 할루시네이션(Package Hallucination)’**은 단순히 코드가 돌아가지 않는 ImportError 수준의 버그로 끝나지 않는다. 누군가 이 패턴을 분석하여 npm이나 PyPI에 pdf-secure-grapher라는 이름의 악성 코드를 업로드해 둔다면, 이 AI 개발 파이프라인은 스스로 악성 코드를 다운받아 엔터프라이즈망 한가운데에서 실행시키는 치명적인 백도어 타겟이 된다. 이는 “AI 패키지 환각을 이용한 공급망 공격(Supply Chain Attack via AI Package Hallucination)“이라는 실제 논문들(예: Vulcan Cyber의 보고서 참조)에서도 경고하는 현대 컴포저빌리티 환경의 가장 큰 위협이다.
1. 정적 종속성 추출(Static Dependency Extraction)
환각 패키지를 차단하는 첫 번째 단계는 AI가 뱉어낸 코드가 실행(Execution) 환경에 닿기 전에, 코드 레벨에서 선언된 모든 외부 종속성을 정적으로 발라내는 것이다.
- 파이썬의 경우
ast모듈을 사용하여 텍스트 코드 내의 모든import X와from Y import Z구문을 순회하며 루트 패키지명을 배열로 추출한다. - Node.js의 경우 정규표현식이나 Babel 파서를 사용하여
require('...')와import ... from '...'구문을 뽑아낸다. - 특히 LLM이
requirements.txt나package.json자체를 생성하도록 지시받았을 경우, 이 설정 파일의dependencies블록을 JSON/텍스트 파서로 가로채어 목록화해야 한다.
2. 권위 있는 레지스트리(Authoritative Registry) 기반의 화이트리스트 검증
오라클은 추출된 패키지 리스트를 들고 즉각적인 진위 판별에 돌입한다. 여기서 ’오라클(절대적 진실)’의 역할은 글로벌 패키지 레지스트리나 사내 프라이빗(Private) 레지스트리가 대신한다.
오라클 파이프라인 내부의 스크립트는 패키지 추출 직후 다음과 같은 검증을 거친다.
- 사내 화이트리스트(Whitelist) 대조: 금융권이나 보안이 중요한 엔터프라이즈 환경에서는 외부 통신을 통한 레지스트리 확인을 생략하고, 사내 아티팩토리에 이미 승인되어 캐싱된
approved_packages.json파일과 대조하여 통과 여부를 즉시 결정한다. - 퍼블릭 레지스트리 API 폴링(Polling): 화이트리스트가 없는 일반적인 환경이라면, 추출된 패키지명(예:
fake-ai-lib)을 PyPI(https://pypi.org/pypi/fake-ai-lib/json)나 npm 레지스트리 API에 곧바로 GET 요청으로 던진다. - 만약 HTTP 404 (Not Found)가 반환된다면, 이는 LLM이 환각을 일으켜 가짜 패키지를 창조했음을 의미한다. 오라클은 즉각 에러를 발생시키고 해당 코드의 폐기를 명령한다.
3. 환각된 버전(Version Hallucination)의 논리적 모순 적발
LLM은 종종 패키지명은 맞추면서 버전(Version) 번호를 상상해 내기도 한다. 예를 들어 실제로 최신 버전이 v2.1.0인 라이브러리에 대해 lib_name == "4.0.0"을 요구하는 식이다.
- 이는 버전 체계의 의미론적 버전 관리(Semantic Versioning) 원칙을 확률적으로 조합해버린 결과다.
- 오라클 파이프라인은 레지스트리 API의 응답 페이로드에서
releases배열을 파싱한 후, LLM이 명시한 버전이 실존하는지 매칭한다. - 가짜 패키지 환각이나 가짜 버전을 탐지해 낸 오라클은 LLM에게 *“당신이 참조한
pdf-secure-grapher패키지는 PyPI에 존재하지 않습니다. 기능이 유사하고 널리 사용되는 공식 라이브러리(예:PyMuPDF)를 사용하여 로직을 다시 구현하십시오”*라는 명확한 대체 권고사항을 포함한 피드백을 전달하여 궤도를 수정하게 만든다.
코드 생성 AI에게 외부 라이브러리 선택의 자유를 무한정 허용하는 것은 파멸로 가는 지름길이다. 종속성 검증 오라클은 LLM이 우물 밖으로 내미는 모든 참조의 손길을 실존 데이터베이스(Ground Truth)라는 철퇴로 두들겨 확인한 뒤에야, 비로소 빌드 서버로 가는 톨게이트를 열어주어야 한다.