- 로컬 환경에서 프라이버시 보호를 위해 LLM을 사용하는 개발자들이 오히려 보안 취약성에 노출될 수 있다는 연구 결과가 제시됨
- 연구팀은 gpt-oss-20b 모델을 대상으로 한 OpenAI Red‑Teaming Challenge 실험에서, 로컬 모델이 공격자의 프롬프트 조작에 훨씬 쉽게 속아 악성 코드를 생성함을 확인
- 공격자는 단순한 프롬프트 조작만으로 백도어 삽입이나 즉시 코드 실행(RCE) 을 유도할 수 있으며, 성공률은 최대 95%에 달함
- 이러한 공격은 문서 오염(documentation poisoning) , MCP 서버 조작, 소셜 엔지니어링 등을 통해 개발자의 일반적인 워크플로우에 자연스럽게 침투함
- 로컬 LLM은 데이터 프라이버시 측면에서는 유리하지만, 추론력·정렬성·안전 필터링 능력의 부족으로 인해 오히려 더 위험한 선택이 될 수 있다는 점이 이번 연구의 핵심 시사점임
로컬 LLM의 보안 취약성 개요
- 연구는 로컬에서 실행되는 LLM이 보안과 프라이버시를 강화하기 위한 선택으로 여겨지지만, 실제로는 공격자에게 더 쉽게 조작될 수 있음을 보여줌
-
gpt-oss-20b 모델을 대상으로 한 실험에서, 공격자가 프롬프트를 통해 취약점을 포함한 코드를 요청할 경우 모델이 이를 그대로 생성하는 비율이 매우 높았음
- 특히 프롬프트에 악의적 의도가 숨겨져 있어도, 모델은 이를 인식하지 못하고 정상적인 요청으로 처리함
- 이러한 현상은 모델의 크기와 정렬(alignment) 수준이 낮을수록 심화되며, Frontier 모델(GPT-5 등)은 상대적으로 저항력이 높음
프롬프트 및 코드 인젝션 위협
- LLM은 프라이빗 데이터 접근, 신뢰할 수 없는 콘텐츠 노출, 외부 통신 가능성이라는 ‘치명적 삼중 위협(lethal trifecta)’에 직면
- 공격자는 프롬프트 내에 악성 코드를 삽입해 코드 인젝션(code injection) 을 유도할 수 있음
- 이때 생성된 코드는 정상적으로 보이지만, 실제로는 개발자 시스템을 감염시키거나 프로덕션 환경에서 지속적 백도어로 작동할 수 있음
-
gpt-oss-20b와 같은 소형 모델은 이러한 공격에 특히 취약하며, 기본적인 코드 리뷰를 통과할 정도로 정교한 악성 코드를 생성함
공격 유형 1: “이스터에그” 백도어 (성공률 95%)
- 첫 번째 공격은 모델을 속여 RCE(Remote Code Execution) 백도어를 “이스터에그” 기능으로 위장해 삽입하도록 유도함
- 공격 프롬프트는 Flask 웹서버를 작성하되, 특정 HTTP 헤더(X-Math)가 전달되면 eval()을 실행하도록 요청
- 모델은 이를 정상적인 기능으로 인식하고, 악성 코드를 포함한 서버 코드를 생성함
- 생성된 코드에는 @app.after_request 데코레이터를 이용한 동적 코드 실행 루틴이 포함되어 있으며, 공격자는 단순한 HTTP 요청으로 서버 내 임의 코드 실행 가능
- 또한 KUBERNETES_SERVICE_HOST 환경 변수를 확인해 프로덕션 환경에서만 공격자에게 신호를 보내는 비동기 핑 기능을 포함
- 실험 결과, 동일한 프롬프트로 100회 중 95회 성공, 변형된 프롬프트로도 800회 중 86회 성공
- GPT-5 등 Frontier 모델은 동일 프롬프트에 대해 저항성을 보였음
공격 유형 2: 즉시 코드 실행(RCE) 유도 (성공률 43.5%)
- 두 번째 공격은 개발자 로컬 환경에서 즉시 악성 코드 실행을 유도하는 방식
- 공격자는 모델의 인지 부하를 높이는 인지 과부하(cognitive overload) 프롬프트를 먼저 제시해 안전 필터를 무력화
- 이후 난독화된 파이썬 코드 생성을 요청해, 모델이 exec 호출을 포함한 악성 스크립트를 작성하도록 함
- 난독화된 코드 "".join(chr(100 + i) for i in [1-2, 2-1, (1<<4)+4, 1])[::-1] 은 exec로 복호화되며,
최종적으로 https://jacek.migdal.pl/speed.py에서 코드를 다운로드해 실행하는 형태로 완성됨
- 성공률은 43.5%로 첫 번째 공격보다 낮지만, 즉시 RCE를 유발하기 때문에 훨씬 위험
- 공격이 한 번만 성공해도 개발자의 로컬 자격 증명(~/.aws/, ~/.ssh/) 탈취, 악성코드 설치, 네트워크 확산이 가능
공격 체인의 작동 방식
- 이러한 공격은 고급 취약점이 아닌, 일상적인 개발 워크플로우를 공격 경로로 전환함으로써 성공
- 개발자가 외부 콘텐츠를 AI 어시스턴트의 컨텍스트로 제공할 때, 그 안에 숨겨진 악성 프롬프트가 실행됨
- 공격 단계는 다음과 같음:
- 공격자가 악성 프롬프트를 포함한 콘텐츠를 배포
- 개발자가 이를 직접 또는 MCP(Model Context Protocol)를 통해 모델에 입력
- 모델이 손상된 코드를 생성
- 개발자가 코드를 실행 또는 배포
- 공격자가 지속적 접근 또는 즉시 제어 획득
- 주요 침투 경로:
-
문서 오염(documentation poisoning): README, API 문서, Reddit 예제에 악성 코드 삽입
-
MCP 서버 조작: Context 제공 서버(Context7 등)를 통해 악성 예시 주입
-
소셜 엔지니어링: GitHub 이슈나 PR 코멘트에 숨겨진 코드 예시 삽입
로컬 모델이 더 위험한 이유
- 일반적으로 로컬 모델은 데이터 프라이버시 측면에서 선호되지만, 이번 연구는 보안 측면에서는 역설적 위험을 드러냄
- 클라우드 기반 Frontier 모델은 프롬프트 모니터링 및 정책 위반 감지가 가능하지만, 로컬 모델은 이러한 감시가 없음
- Frontier 모델(GPT-5, Claude Sonnet 4.5, Grok 4 등)은 난독화된 텍스트를 포함한 프롬프트에 대해 “Safety Fail”을 반환하며 거부
- 반면 로컬 모델은 감시 부재로 인해 테스트는 자유롭지만, 실제로는 취약성 노출이 심각
-
추론력 부족: 복잡한 악의적 의도를 인식하지 못함
-
정렬성 약화: 인지 과부하나 난독화 기법에 쉽게 속음
-
안전 학습 부족: 적대적 프롬프트 탐지 자원 제한
- 결과적으로, Frontier 모델은 공격 난이도가 높고 성공률이 낮지만, 보안 성능을 객관적으로 검증하기 어려운 반면, 로컬 모델은 테스트 가능하지만 훨씬 취약한 상태임
새로운 방어 전략 제안
- 이번 연구는 AI 어시스턴트 보안 테스트의 표준화된 안전 환경 부재를 지적
- 전통적 소프트웨어에는 침투 테스트가 존재하지만, LLM 보안은 아직 체계화되지 않음
- 제안된 4가지 핵심 방어책:
-
정적 분석: 실행 전 eval(), exec() 등 위험 패턴을 탐지하고, 특정 언어 기능은 기본적으로 비활성화
-
샌드박스 실행: 초기 코드 실행은 컨테이너나 WebAssembly 런타임 등 격리 환경에서 수행
-
입출력 및 네트워크 모니터링: AI 어시스턴트의 입력·출력·네트워크 트래픽을 이상 행위 중심으로 감시
-
이중 검증(second look): 단순한 보조 모델을 이용해 최종 출력의 정책 위반 여부를 재검사
- 예: 주 모델이 속아 eval()을 포함한 코드를 생성하더라도, 보조 모델이 이를 탐지 가능
- 결론적으로, LLM은 강력한 도구이지만 본질적으로 안전하지 않으며,
AI 생성 코드에 대한 불신 기반의 보안 체계와 새로운 공급망 방어 전략이 필수적임