AI 에이전트를 믿지 마라

발행: (2026년 2월 28일 오후 09:39 GMT+9)
13 분 소요

Source: Hacker News

번역을 진행하려면 번역이 필요한 원본 텍스트를 제공해 주시겠어요? 텍스트를 알려주시면 요청하신 대로 한국어로 번역해 드리겠습니다.

Source:

AI 에이전트와 함께 빌드하기: 신뢰하지 말 것

AI 에이전트를 사용해 개발할 때는 신뢰할 수 없고 잠재적으로 악의적인 존재로 취급해야 합니다. 다음과 같은 상황이 걱정된다면:

  • 프롬프트 인젝션
  • 모델이 샌드박스를 탈출하려는 시도
  • 혹은 아직 생각해보지 못한 무언가

…위협 모델에 관계없이 에이전트를 신뢰해서는 안 됩니다.

올바른 접근 방식

해결책은 다음과 같은 것이 아닙니다:

  • 더 나은 권한 검사
  • 더 스마트한 허용 목록

대신 에이전트가 오작동할 것을 전제로 설계하고, 오작동 시 피해를 제한하는 아키텍처**를 구축해야 합니다.

이 원칙을 바탕으로 NanoClaw 를 만들었습니다.

프로세스를 신뢰하지 마세요

OpenClaw는 기본적으로 호스트 머신에서 직접 실행됩니다. 옵트인 Docker 샌드박스 모드를 제공하지만, 이 모드는 기본적으로 비활성화되어 있으며, 대부분의 사용자는 이를 활성화하지 않습니다. 따라서 보안은 전적으로 다음과 같은 애플리케이션 수준 검증에 의존합니다:

  • 허용 목록
  • 확인 프롬프트
  • 미리 정의된 “안전한” 명령 세트

이러한 검증은 에이전트가 악의적으로 행동하지 않을 것이라는 묵시적 신뢰를 전제로 합니다. 에이전트가 적대적일 수 있다는 사고방식을 채택하면, 애플리케이션 수준 차단이 충분하지 않다는 것이 명확해집니다—이는 완전한 보안을 제공하지 못합니다. 결단력 있는 혹은 손상된 에이전트는 이를 우회할 방법을 찾을 수 있습니다.

NanoClaw 접근 방식: 컨테이너 격리

NanoClaw에서는 컨테이너 격리가 핵심 아키텍처 원칙입니다:

기능설명
에이전트당 컨테이너각 에이전트는 자체 Docker(또는 macOS의 Apple Container) 인스턴스에서 실행됩니다.
일시적인 수명주기컨테이너는 각 호출마다 새로 생성되고 이후 파괴됩니다.
비특권 실행에이전트는 컨테이너 내부에서 비루트 사용자로 실행됩니다.
명시적 마운트만컨테이너는 명시적으로 마운트된 디렉터리만 볼 수 있습니다.
OS 강제 경계컨테이너 경계는 운영 체제에 의해 강제되며, 강력한 격리를 제공합니다.

이러한 컨테이너 보장을 활용함으로써 NanoClaw는 악의적이거나 손상된 에이전트라도 샌드박스를 탈출하거나 호스트 시스템에 영향을 미치지 못하도록 보장합니다.

다른 에이전트를 신뢰하지 마세요

Even when OpenClaw’s sandbox is enabled, all agents share the same container. You might have a personal‑assistant agent, a work agent, a family‑group agent, etc., each operating in different WhatsApp groups or Telegram channels. Because they run in the same environment, information can leak between agents that are supposed to access different data.

에이전트별 격리가 중요한 이유

  • its own container
  • a dedicated filesystem (/data/)
  • an independent Claude session history

Thus, your personal assistant cannot see the work agent’s data, and vice‑versa.

비교: Shared vs. Per‑Agent Containers

기능Shared ContainerPer‑Agent Containers
FilesystemSingle shared FSSeparate /data/ directories
CredentialsAll credentials accessibleEach agent sees only its own data
Session historiesAll visibleEach agent has its own session
Mounted dataAll data sharedMounts are scoped per agent
IsolationNone – agents see everythingAgents are isolated from each other
예시 레이아웃
Personal Assistant/data/personal (ro)/data/personal (ro)
Work Agent/data/work (rw)/data/work (rw)
Family Group Agent/data/family (ro)/data/family (ro)

컨테이너 경계는 강력한 보안 레이어이며, 에이전트는 구성에 관계없이 이를 벗어날 수 없습니다.

방어‑심화: 마운트 허용 목록

마운트 허용 목록은

~/.config/nanoclaw/mount-allowlist.json

에 위치합니다.

  • 목적: 사용자가 실수로 민감한 경로를 마운트하는 것을 방지하기 위한 것이며, 에이전트가 탈출하는 것을 막기 위한 것이 아닙니다.
  • 기본값: .ssh, .gnupg, .aws, .env, private_key, credentials와 같은 민감한 디렉터리/파일이 차단됩니다.
  • 위치: 허용 목록은 프로젝트 디렉터리 외부에 존재하므로, 침해된 에이전트가 자신의 권한을 수정할 수 없습니다.
  • 호스트 코드: 호스트 애플리케이션 코드는 읽기 전용으로 마운트되어, 에이전트가 수행한 어떤 작업도 컨테이너가 파괴된 후 지속되지 않도록 보장합니다.

그룹 채팅에 대한 신뢰 모델

  • 비주류 그룹기본적으로 신뢰되지 않음.
  • 다른 그룹의 구성원은 다음을 할 수 없습니다:
    • 자신이 속하지 않은 채팅에 메시지를 보내는 것
    • 다른 그룹을 위한 작업을 예약하는 것
    • 다른 그룹에 속한 데이터를 보는 것

그룹 내 누구든 프롬프트 인젝션 공격을 시도할 수 있기 때문에, 보안 모델은 최악의 상황을 가정하고 그룹을 격리합니다.

읽을 수 없는 것을 믿지 마라

OpenClaw는 거의 50만 줄에 달하는 코드, 53개의 설정 파일, 그리고 70개가 넘는 의존성을 포함하고 있습니다. 이러한 규모는 오픈소스 보안의 기본 전제를 깨뜨립니다.

  • Chromium은 3500만 줄이 넘지만 우리는 Google의 검토 프로세스를 신뢰합니다.
  • 대부분의 오픈소스 프로젝트는 충분히 작아 여러 사람이 실제로 검토할 수 있습니다.

아무도 OpenClaw의 40만 줄 코드를 검토하지 않았습니다. 이 코드는 몇 주 안에 적절한 검토 과정 없이 작성되었습니다. 복잡성은 취약점이 숨어 있는 곳이며, Microsoft의 분석이 이를 확인합니다: OpenClaw의 위험은 정상적인 API 호출을 통해 나타날 수 있는데, 이는 한 사람이 전체 그림을 볼 수 없기 때문입니다.

NanoClaw: 작고, 감사 가능하며, 확장 가능

코드 라인 비교: OpenClaw (~400,000 라인) vs NanoClaw (~3,000 라인)

  • 크기 – 하나의 프로세스와 몇 개의 파일(~3 k 라인)만 존재합니다.
  • 의존성 – 세션 관리, 메모리 압축 등을 위해 Anthropic의 Agent SDK(Claude Code를 감싸는 래퍼)에 크게 의존하며, 휠을 다시 만들지는 않습니다.
  • 검토 가능성 – 유능한 개발자는 전체 코드베이스를 오후에 감审할 수 있습니다. 이는 제한이 아니라 의도적인 제약입니다(철학).

우리의 기여 가이드라인에서는 다음만 허용합니다:

  • 버그 수정
  • 보안 수정
  • 단순화

스킬 기반 확장성

새로운 기능은 스킬 형태로 제공됩니다: 완전하고 동작하는 레퍼런스 구현을 포함한 지시문으로, 코딩 에이전트가 이를 여러분의 코드베이스에 병합합니다.

  • 추가될 코드배포 전에 정확히 검토합니다.
  • 실제로 필요한 통합만 추가됩니다.
  • 모든 설치는 소유자의 정확한 요구에 맞춰 몇 천 줄의 코드로 구성됩니다.

400 k 라인 규모의 단일 코드베이스에서는 두 개의 통합만 활성화하더라도 나머지 코드는 여전히 로드되어 공격 표면의 일부가 되고, 프롬프트 인젝션이나 악성 에이전트에 의해 접근될 수 있습니다. 무엇이 활성화되고 무엇이 휴면 상태인지 구분할 수 없으며, “당신의 코드” 경계가 정의되지 않아 감审도 불가능합니다.

스킬을 사용하면 경계가 명확합니다: 여러분이 선택해 추가한 몇 천 줄의 코드만 존재하고, 모두 읽을 수 있습니다. 핵심은 실제로 시간이 지남에 따라 작아지고 있습니다—예를 들어, WhatsApp 지원 기능은 추출되어 스킬로 패키징되고 있습니다.

Source:

불신을 위한 설계

환각이나 오작동하는 에이전트가 보안 문제를 일으킬 수 있다면, 보안 모델이 깨진 것입니다. 보안은 에이전트 표면 밖에서 강제되어야 하며, 에이전트가 올바르게 동작한다는 전제에 의존할 수 없습니다.

  • Containers, mount restrictions, 그리고 filesystem isolation 은 에이전트가 예상치 못한 행동을 하더라도 피해 범위가 제한되도록 존재합니다.

핵심 요점

  1. 위험은 여전히 존재 – 데이터에 접근할 수 있는 AI 에이전트는 본질적으로 고위험입니다.
  2. 신뢰 표면을 좁히기 – 에이전트의 권한을 가능한 한 제한하고 검증 가능하도록 만드세요.
  3. 에이전트를 신뢰하지 말 것 – 에이전트 주변에 방벽을 구축하세요.

추가 읽을거리

0 조회
Back to Blog

관련 글

더 보기 »