Skip to main content

an-isolation-flag-covers-a-mechanism-not-its-goal

격리 플래그는 목표가 아니라 **메커니즘 하나**를 끈다 — `--setting-sources ""` 는 설정 파일을 끄지만 cwd 로 키잉된 auto-memory 는 못 끈다. 그래서 "호스트로부터 격리됨" 주석은 절반만 참인 채로 몇 달을 산다. 검증은 플래그를 세는 게 아니라 **보면 안 되는 것을 그대로 인용해 보라고 시키는 것**이다. 트리거 - 서브프로세스/샌드박스/에이전트 격리 주장, "--no-X 를 줬으니 안 들어온다", 벤더 CLI 를 엔진으로 감싸기, 멀티테넌트에서 남의 데이터가 섞였나 확인, 주석이 "no host harness" 라고 단언할 때.

الانتقال إلى التثبيت

معلومات المصدر

المستودع
blas1n/claude-skills
آخر نشاط في المصدر
١٦ سبتمبر ٢٠٢٦ في ٠٨:٢٦
لغة SKILL.md المكتشفة
الكورية
النجوم
٢
التفرعات
٠

خيارات التثبيت

يُحدَّد Prompt الذي يراجع المصدر أولًا بشكل افتراضي. يمكنك التبديل إلى أمر مباشر أو تنزيل نسخة محلية.

مراجعة ملفات المصدر

اقرأ SKILL.md وأي ملفات مرافقة يعرضها SkillsMP قبل أن تقرر التثبيت.

عرض SKILL.md

SKILL.md
تعليمات المصدر · معاينة للقراءة فقط
name
an-isolation-flag-covers-a-mechanism-not-its-goal
description
격리 플래그는 목표가 아니라 **메커니즘 하나**를 끈다 — `--setting-sources ""` 는 설정 파일을 끄지만 cwd 로 키잉된 auto-memory 는 못 끈다. 그래서 "호스트로부터 격리됨" 주석은 절반만 참인 채로 몇 달을 산다. 검증은 플래그를 세는 게 아니라 **보면 안 되는 것을 그대로 인용해 보라고 시키는 것**이다. 트리거 - 서브프로세스/샌드박스/에이전트 격리 주장, "--no-X 를 줬으니 안 들어온다", 벤더 CLI 를 엔진으로 감싸기, 멀티테넌트에서 남의 데이터가 섞였나 확인, 주석이 "no host harness" 라고 단언할 때.
# 격리 플래그는 메커니즘 하나를 끈다 — 목표가 아니라 ## Problem 플래그 이름은 **목표**처럼 읽히는데(`--setting-sources ""` = "호스트 설정 안 읽음"), 실제로는 **구현 메커니즘 하나**만 덮는다. 같은 데이터가 **다른 키로** 들어오는 경로가 있으면 플래그는 그 경로를 모른다. 실측 사례(Claude Code CLI 2.1.268, 2026-09-16): | 채널 | 무엇으로 키잉되나 | `--setting-sources ""` 가 막나 | |---|---|---| | CLAUDE.md · 사용자 스킬 | **설정 소스** | ✅ 막는다 (호스트 스킬 184개 → 0개) | | auto-memory 저장소 | **cwd 경로** | ❌ 못 막는다 — 그대로 주입된다 | 그래서 워커의 chat 턴이 *"순수 completion, 호스트 하네스 없음"* 이라고 주석에 적힌 채로, 운영자의 개인 메모(prod SHA · 보안 게이트 상태 · 인프라)를 **그대로 인용**했다. ### 왜 안 보이는가 * **초록이 두 개 다 초록이다.** 스킬 0개 로딩은 진짜였다 — 격리의 *절반*이 정말 작동해서 주석이 반증되지 않는다. 틀린 주석은 "완전히 틀린 주석"보다 오래 산다 * **"로딩 0개" 를 격리의 증거로 읽는다.** `plugins: []` 는 *로딩*을 말하지 *접근*을 말하지 않는다. 같은 시스템에서 CLI 는 그 플러그인 설정을 **쓰지 않고 경로만 해석**했는데, 그게 응답 없는 autofs 마운트라 **프로덕션 전체가 하루 멈췄다** * 보조 플래그는 안심만 준다: `--safe-mode`·`--restricted` 는 이 노출면을 **하나도** 못 닫았다(디버그 출력이 줄 단위로 동일). 세게 닫는 `--bare` 는 **인증을 깬다** ## Solution ### 1. 행동 프로브 — 보면 안 되는 것을 인용해 보라고 시켜라 플래그를 세지 마라. 피험자에게 **직접 물어라**. 한 번에 끝난다. ``` "네 컨텍스트에 <그것>에 대한 노트가 있나? 있으면 그대로 인용해라. 없으면 정확히 NONE 이라고 답해라." ``` `NONE` 이 아니면 격리는 없는 것이다. 모델이 지어낼 수 없는 **고유한 문자열** (사내 용어·SHA·비영어 문장)을 겨눠라 — 사전지식으로 답할 수 있는 걸 물으면 측정이 안 된다. ### 2. 네 칸으로 잘라라 — 경로 × 처방 ``` 처방 없음 처방 있음 chat 경로 누출(인용) → NONE agentic 경로 누출(인용) → NONE ``` 그리고 **절단 대조군**: 배포되는 argv 에서 그 플래그만 빼서 누출이 **되돌아오는지** 확인해라. 안 되돌아오면 고친 건 다른 것이다. 상관이 아니라 제거 실험만이 인과다. ### 3. 계측은 OS 추적보다 피험자 자신의 디버그 채널을 먼저 `fs_usage`/`dtrace` 는 **sudo** 가 필요하고, **완료된 호출만** 찍혀서 블록된 호출은 로그에 없다. 반면 `--debug-file` 같은 자체 로그는: * 권한 없이, **인증된 실제 경로**에서 돌아간다 * 줄 단위로 **diff 가능** → A/B 가 곧바로 표가 된다 이 실측으로 "격리된" chat 턴이 여전히 `~/.claude.json` 을 **다시 쓰고**, 플러그인 캐시를 스캔하고, 설정 파일에 **fs 워처**를 건다는 게 드러났다. ### 4. 못 끄면 주장을 낮춰라 인증을 지키면서 닫을 수 없는 게 남으면, **못 끈다는 사실 자체를 주석에 적어라.** "내용 격리는 성립하고 파일시스템 도달은 아니다" 처럼 **축을 쪼개서** 쓴다. 틀린 주석은 다음 사람을 같은 함정에 정확히 밀어 넣는다. ## Key Insights - **플래그 이름은 목표를, 구현은 메커니즘을 말한다.** 격리를 주장하기 전에 *데이터가 들어올 수 있는 채널*을 세라 — 내가 준 플래그 말고 - **절반만 참인 격리가 가장 오래 산다.** 반증이 절반은 계속 실패하기 때문이다 - **"로딩 0개" ≠ "접근 0회".** 장애는 설정을 *쓰는* 데서가 아니라 **경로를 해석하는** 데서 났다. 같은 이유로 `plugins: []` 를 안전의 근거로 쓰지 마라 - 격리를 세게 하는 레버(`--bare` · HOME 치환 · `CLAUDE_CONFIG_DIR`)는 대개 **인증과 같은 상자**에 들어 있다. 격리 강화 전에 **인증 경로를 먼저 독립**시켜라 — 순서가 있다 - 관련: [[the-layer-below-can-answer-for-the-layer-you-guarded]] · [[collapsing-per-item-dirs-merges-state-keyed-on-the-path]] · [[same-second-correlation-is-not-cause-remove-the-condition]]
عرض على GitHub