Sandbox 필수 (260424)

WonTerry·2026년 4월 23일

LLM

목록 보기
51/62

“sandbox 필수”는 단순한 권장사항이 아니라, 서비스를 망가뜨리지 않기 위한 최소한의 안전장치입니다. 특히 run_python 같은 Tool은 잘못 쓰면 바로 사고로 이어집니다.

핵심은 이것입니다:
👉 LLM이 생성한 코드는 신뢰할 수 없기 때문에, 반드시 격리된 환경에서만 실행해야 한다


“sandbox 필수”는 단순한 권장사항이 아니라, 서비스를 망가뜨리지 않기 위한 최소한의 안전장치입니다. 특히 run_python 같은 Tool은 잘못 쓰면 바로 사고로 이어집니다.

핵심은 이것입니다:
👉 LLM이 생성한 코드는 신뢰할 수 없기 때문에, 반드시 격리된 환경에서만 실행해야 한다


🚨 왜 sandbox가 필요한가 (실제 사고 시나리오)

1. 서버 파일 삭제 사고

사용자가 이렇게 요청했다고 가정해봅시다:

“디스크 정리 좀 해줘”

LLM이 다음 코드를 생성할 수 있습니다:

import os
os.system("rm -rf /")

👉 sandbox 없이 실행하면
→ 서버 전체 데이터 삭제
→ 서비스 종료


2. 비밀정보 유출

LLM이 환경변수 접근:

import os
print(os.environ)

👉 결과:

  • DB 비밀번호
  • API Key
  • JWT Secret

즉시 보안 사고


3. 무한 루프 (서버 자원 고갈)

while True:
    pass

👉 결과:

  • CPU 100%
  • 서버 다운
  • 다른 사용자까지 영향

4. 외부 공격 (악성 요청)

import requests
requests.get("http://malicious-site.com/attack")

👉 결과:

  • 당신 서버가 공격 트래픽 발생지로 사용됨

✅ Sandbox란 무엇인가

👉 한 줄 정의:
“코드를 실행하되, 아무것도 못하게 제한하는 감옥”


🔧 실제 구현 방식 (실전 예시)

1. Docker 기반 sandbox (가장 현실적인 방법)

docker run --rm -m 128m --cpus=0.5 python:3.11 python script.py

제한:

  • 메모리: 128MB
  • CPU: 0.5
  • 실행 후 자동 삭제

👉 효과:

  • 서버와 완전히 격리됨
  • 파일 접근 불가
  • 시스템 보호

2. Python 제한 실행 (간단하지만 불완전)

def safe_exec(code: str):
    allowed_builtins = {
        "print": print,
        "len": len,
        "range": range,
    }

    exec(code, {"__builtins__": allowed_builtins}, {})

👉 문제:

  • 우회 가능 (보안 취약)
  • 실서비스에는 부족

3. 타임아웃 강제 종료

import signal

def timeout_handler(signum, frame):
    raise TimeoutError()

signal.signal(signal.SIGALRM, timeout_handler)
signal.alarm(2)  # 2초 제한

exec(code)

👉 효과:

  • 무한루프 방지

4. 네트워크 차단

Docker 실행 시:

docker run --network none ...

👉 효과:

  • 외부 API 호출 불가
  • 공격 트래픽 차단

5. 파일 접근 제한

docker run --read-only ...

👉 효과:

  • 파일 쓰기 불가
  • 시스템 보호

🧠 실전 구조 (추천 아키텍처)

LLM → Tool 호출 → Sandbox → 결과 반환

[User]
   ↓
[LLM Agent]
   ↓
[run_python Tool]
   ↓
[Sandbox Container]
   ↓
[Result]

⚠️ 중요한 오해 하나

“내 서비스는 내부 사용자만 쓰니까 괜찮다”

👉 틀렸습니다.

이유:

  • LLM 자체가 예측 불가능
  • 프롬프트 인젝션 가능
  • 내부 사용자도 실수함

💡 결론

sandbox 없이 코드 실행 Tool을 운영하는 것은:

👉 “운영 서버에 root 권한을 LLM에게 주는 것과 같다”


🔥 한 줄 요약

  • Tool = 행동 가능
  • run_python = 위험 최고
  • sandbox = 필수

  • 추가 예정,
    👉 “LangChain에서 sandbox를 실제로 붙이는 코드”
    👉 “OpenAI function calling + sandbox 구조”
    👉 “Kubernetes 기반 격리 아키텍처”
profile
Hello, I'm Terry! 👋 Enjoy every moment of your life! 🌱 My current interests are Signal processing, Machine learning, Python, Database, LLM & RAG, MCP & ADK, Multi-Agents, Physical AI, ROS2...

0개의 댓글