
node9-proxy v1.63.0
에이전틱 시대를 위한 실행 보안 계층입니다. 자율 AI 에이전트에 대해 결정론적 "Sudo" 거버넌스와 감사 로그를 제공합니다.
🛡️ Node9
당신의 AI 에이전트가 실제로 무엇을 했는지 알아보세요.
Node9는 AI 에이전트와 에이전트가 사용할 수 있는 도구 사이에 위치합니다 — 에이전트가 이미 수행한 작업을 발견하고, 위험한 작업을 실시간으로 보호하며, 특정 기간 동안 발생한 일을 검토할 수 있습니다.
Claude Code · Codex CLI · Antigravity (agy) · GitHub Copilot CLI · Gemini CLI · Cursor · Windsurf · VSCode · Claude Desktop · Opencode · Pi · Hermes Agent · 모든 MCP 서버와 호환됩니다.
Node9이 하는 일
- 🔍 발견 — 과거 모든 AI 세션을 스캔하여 자격 증명 유출, 에이전트 루프, 차단된 작업, 그리고 에이전트가 지금 바로 접근할 수 있는 디스크의 모든 비밀을 찾아냅니다
- 🛡 보호 — 실행 전에 위험한 명령을 검토하거나 차단합니다 —
rm -rf,git push --force,DROP TABLE, 자격 증명 읽기,curl | bash, AWS/GitHub/Stripe 키 유출 - 📊 검토 — 기간별 보고서 (오늘 / 주간 / 월간 / 90일) — 에이전트별 비용, 상위 도구, 발동된 실드, 피해 범위
회고적 스캔
이것은 제 개인 머신입니다 — Node9을 개발하는 동안의 90일입니다. 점수 25/100, AI 에이전트가 지금 바로 접근할 수 있는 자격 증명 파일 5개.```bash npx node9-ai scan # before installation, runs in ~10s, nothing uploads node9 scan # after installation, same output
<p align="center">
Node9 scan scorecard
</p>
## 보안 태세 스코어카드
`node9 posture`는 이 머신이 손상된 에이전트에 얼마나 노출되어 있는지(격리, 이그레스, 디스크의 비밀, 공급망, 권한)를 등급으로 평가하고, 각 발견 사항을 수정하기 위한 정확한 명령을 제공합니다.```bash
node9 posture # scorecard with the #1 risk and a fix for every finding
node9 posture --ship # send a redacted snapshot to your node9 dashboard (fleet view)
발견 사항은 누가 수정할 수 있는지에 따라 그룹화됩니다: 🔒 node9이 줄여주는 항목(명령어만 실행하면 됨)과 🧱 사용자만 수정할 수 있는 항목입니다. 각 항목에는 평이한 언어로 된 무엇(what) / 왜(why) / 누구(who)와 실제 해결 방법이 포함됩니다. 예를 들어 "에이전트가 호스트에서 샌드박스 없이 실행됨" 발견 사항은 바로 node9 sandbox run(아래)을 가리킵니다.```text
🛡️ Node9 Posture — agent on this host Score: 100/100 (Good)
2 advisories below don't affect the score — OS-level exposure, yours to weigh.
🟢 node9 is already protecting you ✅ Secrets node9 DLP is blocking this ✅ Egress node9 egress is approval-gating this ✅ Approval gate node9 is blocking this ✅ Privilege node9 is approval-gating this
🔒 node9 reduces these — run the command, the rest is yours ⚠️ Isolation Running directly on the host — no container The agent runs loose on your whole machine, not in a sandbox. → node9 sandbox run — jail it: kernel egress + scoped mounts + node9 inside → node9 shield enable project-jail — or shrink the blast radius, keep host access ⚠️ Network exposure 4 services on 0.0.0.0 (node :3000/:4000, PostgreSQL :5432, Redis :6379) Reachable from your whole network, not just this laptop. → node9 shield enable postgres|redis — node9 blocks DROP TABLE / FLUSHALL → bind to 127.0.0.1 / firewall the port (your part)
✅ Supply chain no issues found ✅ Coverage no issues found
Track this across your fleet & keep it green → node9.ai
## 저장소 스캔 — agent-CI 보안
`node9 scan-repo`는 GitHub Actions에 연결된 AI 에이전트가 **외부인에 의해 하이재킹**될 수 있는 방법(주입 가능한 워크플로우, 에이전트가 접근 가능한 비밀, 고정되지 않은 MCP 서버, 과도하게 광범위한 에이전트 구성, 오염된 지시 파일)이 있는지 모든 저장소(또는 로컬 폴더)를 검사합니다. 정적 및 구문 전용 방식으로, 커밋된 구성만 읽고 저장소 코드를 실행하지 않습니다. 공개 저장소의 경우 설치나 토큰이 필요 없습니다.```bash
npx node9-ai scan-repo <owner/repo> # any public repo, no install
node9 scan-repo . # a local checkout — no network
node9 scan-repo <owner/repo> --json # machine-readable
I need the actual content of chunk 9 to translate it. Please provide the Markdown text you want translated from English to Korean.```text 🛡️ node9 scan-repo · node9-ai/agent-security-demo · ⚠️ agent-security risk found inspected 2 config file(s), 2 finding(s)
🔴 CRITICAL Injectable agent workflow — untrusted input reaches a tool-using agent with secrets .github/workflows/vulnerable-example.yml · CI-2 • runs with base-repo secrets (pull_request_target) • checks out the untrusted PR head into the workspace root • allowed_non_write_users: "*" — any user can trigger the agent • no effective actor gate
🔴 CRITICAL Exfiltratable secrets reachable by an injectable agent .github/workflows/vulnerable-example.yml · CI-4 • agent has arbitrary shell (bare Bash) → can read env and exfiltrate
검사 항목:
| 검사 항목 | 플래그 대상 |
| -------- | ---------------------------------------------------------------------------- |
| **CI-1** | 광범위한 도구를 사전 승인하거나 원격 훅을 실행하는 커밋된 에이전트 구성 |
| **CI-2** | 주입 가능한 에이전트 워크플로 — 외부인이 에이전트를 트리거하여 하이재킹할 수 있음 |
| **CI-3** | 고정되지 않은 / `@latest` MCP 서버 또는 인라인 자격 증명(공급망) |
| **CI-4** | 주입된 에이전트가 유출할 수 있는 비밀 |
| **CI-6** | `CLAUDE.md` / `AGENTS.md` / 스킬에 포함된 악성 또는 위험한 지침 |
**모든 PR을 게이트 처리** — GitHub Action과 동일한 엔진을 사용하므로 하이재킹 가능한 구성이 병합될 수 없습니다:```yaml
# .github/workflows/agent-security.yml
- uses: node9-ai/node9-proxy@v2
with:
fail-on: high # or 'never' to just comment
Marketplace: node9 Agent Security
실행 중이신가요? README에 **scanned by node9 배지**를 추가하세요.
실시간 모니터링
Node9 모니터 대시보드
node9 monitor는 두 가지 보기가 있는 대화형 터미널 대시보드를 엽니다:
[1]실시간 — 실시간 활동, 승인, 보안 경고, 현재 위험 점수[2]보고서 — 기간 창 요약: 비용, 주요 도구, 발사된 실드, 폭발 반경
보고서
모니터에서 [2]를 눌러 기간 창 요약을 확인하세요. [T]oday · [W]eek · [M]onth · [N]inety로 창을 전환할 수 있습니다 — 위의 스캔과 동일한 패널로, 설치 후 감사 로그를 기반으로 표시됩니다.
Node9 모니터 [2] 보고서
```bash node9 monitor # press [2] for Report view node9 report --period 7d # CLI form, no TUI ``` ## 설치```bash # macOS / Linux brew tap node9-ai/node9 && brew install node9or via npm (any platform)
npm install -g node9-ai
I need the actual content of chunk 17 to translate it. Please provide the Markdown text you'd like translated from English to Korean.```bash
node9 init # auto-wires all detected agents + MCP servers
node9 login # connect this machine to your workspace (approve it in the browser)
node9 doctor # verify everything is wired and reporting
Node.js 18+가 필요합니다.
init만 실행하면 전체 로컬 적용이 완료됩니다. 규칙, 실드, DLP 및 승인은 모두 이 머신에서 오프라인으로 작동합니다.
login은 머신을 대시보드에 연결하는 역할을 합니다. 코드를 출력하고 브라우저를 연 다음, 해당 머신을 승인하면 됩니다. 아직 계정이 없다면, 가입 절차를 마친 후 동일한 코드로 승인 화면으로 돌아갑니다. 이 명령을 실행하기 전까지는 모든 것이 로컬에서 적용되지만 Mission Control에는 아무것도 도달하지 않으므로 대시보드는 비어 있습니다.
node9 logout은 머신 연결을 다시 해제합니다. 해당 머신의 키를 폐기하며, 로컬 적용은 계속 실행됩니다.
실드 — 선별된 규칙 팩
각 실드는 서비스 또는 도메인에 대한 선별된 규칙 세트입니다. 필요한 것만 활성화하세요.
| 실드 | 감지 대상 | 활성화 명령 |
|---|---|---|
project-jail | Bash 및 Read 도구를 통한 ~/.ssh, ~/.aws, .env, 자격 증명 읽기 차단 | node9 shield enable project-jail |
bash-safe | curl | bash, rm -rf /, 디스크 덮어쓰기, 원격 eval | node9 shield enable bash-safe |
postgres | DROP TABLE, TRUNCATE, DROP COLUMN, WHERE 없는 DELETE | node9 shield enable postgres |
mongodb | dropDatabase, drop(), deleteMany({}), 인덱스 삭제 | node9 shield enable mongodb |
redis | 라이브 서버에서의 FLUSHALL, FLUSHDB, CONFIG SET | node9 shield enable redis |
aws | S3 삭제, EC2 종료, IAM 변경, RDS 파괴 | node9 shield enable aws |
k8s | 네임스페이스 삭제, helm uninstall, 클러스터 역할 삭제 | node9 shield enable k8s |
docker | system prune, volume prune, rm -f 컨테이너 | node9 shield enable docker |
github | gh repo delete, 원격 브랜치 삭제, 설정 변경 | node9 shield enable github |
filesystem | chmod 777, /etc/, /boot/, /usr/ 아래 쓰기 | node9 shield enable filesystem |
mcp-tool-gating | 승인되지 않은 MCP 도구가 새 기능을 조용히 활성화하는 것 | node9 shield enable mcp-tool-gating |
| node9 shield list # show all shields + status |
## 항상 켜짐 — 설정 불필요
- **Git** — `git push --force`, `git reset --hard`, `git clean -fd` 감지
- **SQL** — `WHERE` 없는 `DELETE` / `UPDATE`, `DROP TABLE`, `TRUNCATE` 감지
- **Shell** — `curl | bash`, 승인되지 않은 `sudo` 감지
- **DLP** — 모든 도구 인수, 파일 내용 또는 셸 설정(`~/.zshrc`, `~/.bashrc`)에서 AWS 키, GitHub 토큰, Stripe 키, PEM 개인 키 플래그 지정
- **응답 DLP** — 백그라운드 스캐너가 Claude의 대화 기록을 읽고 Claude가 응답 텍스트에 비밀을 _작성_한 경우 경고
- **스킬 고정** — 세션 간 설치된 Claude 스킬/플러그인의 SHA-256 검증
## 검토 프롬프트 — 에이전트에서 인라인으로 승인
node9가 작업을 **검토** 대상으로 플래그 지정하면(예: `git push --force`, `DROP TABLE`), 승인/거부 프롬프트가 **에이전트 대화에 인라인으로** 렌더링됩니다 — 세션 동결 없음, 별도 터미널 없음, 훅 타임아웃 경쟁 없음. node9는 여전히 전체 평가기를 실행하고 결정을 내립니다. 프롬프트 _표면_만 에이전트로 이동할 뿐입니다.
- **Claude Code** 및 **GitHub Copilot CLI**에서 **기본적으로 켜짐** — 훅 계약이 기본 `ask`를 지원하는 에이전트입니다. 다른 모든 에이전트(Codex, Gemini, Antigravity, Hermes, Cursor, OpenCode, Pi)는 node9 자체 승인기를 사용합니다.
- **제어 방법** — `~/.node9/config.json`의 `reviewChannel`(또는 훅의 `--no-ask`):```jsonc
{
"settings": {
"reviewChannel": "ask", // "ask" = inline agent prompt (default) | "approver" = node9's own approver
},
}
- 팀 설정: 클라우드/팀 승인자가 구성된 경우(
approvers.cloud: true), 리뷰는 해당 승인자에게 라우팅됩니다. node9는 인라인 자체 승인이 라우팅/2차 승인을 우회하는 것을 허용하지 않습니다.
샌드박스 — 감옥에서 에이전트 실행
감시만으로 부족할 때, node9 sandbox 는 에이전트를 커널 수준의 이그레스 허용 목록과 범위가 제한된 마운트를 갖춘 일회용 컨테이너 내부에서 실행합니다. node9의 후크는 박스 내부 의 모든 도구 호출을 제어하고 감사합니다. 보호의 강력한 버전: 에이전트는 마운트한 폴더에만 접근하고 허용한 호스트에만 도달할 수 있으며, 그 외의 모든 것은 커널에서 차단됩니다.```bash
cd ~/my-project
node9 sandbox new # write node9.sandbox.yaml — what to mount + which hosts to allow
node9 sandbox run # build + boot the jailed agent (your project at /workspace)
node9 sandbox tail # watch the agent's actions live, from the host
- **Disposable** — 컨테이너는 종료 시 삭제됩니다. 프로젝트 편집 내용은 실제 디스크에 저장되며, 그 외에는 아무것도 남지 않습니다.
- **동일한 정책** — 기존의 shields / egress 규칙 / 승인 프로세스가 박스 내부에도 적용되며, 동일한 감사 로그와 대시보드로 스트리밍됩니다.
- **포스처 루프를 닫음** — 실행하면 Isolation / Egress 발견 항목이 녹색으로 전환됩니다.
정직한 범위(Phase 1): 단일 컨테이너, **Claude 우선**(Codex는 다음 단계). 에이전트는 여전히 박스 내부에서 _자체_ 자격 증명을 보유합니다(egress 벽이 이를 허용된 호스트로 제한). _"에이전트가 비밀을 보유하지 않음"_은 로드맵의 자격 증명 브로커 단계입니다. Docker 필요.
## MCP 게이트웨이
모든 MCP 서버를 투명하게 래핑합니다. 에이전트는 동일한 서버를 보게 되며, Node9가 모든 도구 호출을 가로챕니다.```json
{
"mcpServers": {
"postgres": {
"command": "node9",
"args": ["mcp", "--upstream", "npx -y @modelcontextprotocol/server-postgres postgresql://..."]
}
}
}
아니면 그냥 node9 init을 실행하세요 — 기존 MCP 서버를 자동으로 감싸줍니다.
🔐 MCP 도구 고정 — 러그풀 방어
MCP 서버는 세션 간에 도구 정의를 변경할 수 있습니다. 손상되었거나 악의적인 서버는 처음 신뢰한 후 조용히 도구를 추가, 제거 또는 수정할 수 있습니다 — 이를 러그 풀 공격이라고 합니다.
Node9는 첫 사용 시 도구 정의를 고정합니다:
- 첫 연결 — 게이트웨이가 모든 도구의 이름, 설명, 스키마에 대한 SHA-256 해시를 기록합니다
- 이후 연결 — 해시를 비교합니다. 도구가 변경된 경우 세션은 격리되며, 사람이 검토하고 변경을 승인할 때까지 모든 도구 호출이 차단됩니다
- 손상된 고정 상태 — 안전하게 차단됩니다(차단), 절대 조용히 재신뢰하지 않습니다```bash node9 mcp pin list # show all pinned servers and hashes node9 mcp pin update # remove pin, re-pin on next connection node9 mcp pin reset # clear all pins
</details>
## 기타 명령어
위의 세 가지 흐름 명령어(`scan` / `monitor` / `report`) 외에:
| 명령어 | 표시 내용 | 사용 시점 |
| ---------------- | --------------------------------------------------------- | --------------------------------------- |
| `node9 blast` | AI 에이전트가 지금 접근할 수 있는 것 — 파일, 자격 증명, 환경 변수 | 모든 머신에서 가장 먼저 실행 |
| `node9 tail` | 모든 도구 호출의 실시간 스트림(텍스트 전용, TUI 없음) | 다른 도구로 파이프, CI, 로그에 사용 |
| `node9 sessions` | 프롬프트, 도구 추적, 비용이 포함된 세션 기록 | 핸드오프 또는 과거 작업 검토 시 |
| `node9 dlp` | Claude 응답 텍스트에서 자격 증명 유출 발견 결과 | DLP 데스크톱 알림이 발생할 때마다 |
| `node9 mask` | 로컬 세션 기록 파일에서 일반 텍스트 비밀번호를 삭제 | DLP 발견 후 — 로컬 디스크 정리 |
또한 Claude Code 상태 표시줄에 **실시간 HUD**가 있습니다:```
🛡 node9 | standard | [bash-safe] | ✅ 12 allowed 🛑 2 blocked 🚨 0 dlp | ~$0.43
📊 claude-opus-4-7 | ctx [████████░░░] 54% | 5h [██░░░░░░░░] 12% | 7d [█░░░░░░░] 7%
🗂 2 CLAUDE.md | 8 rules | 3 MCPs | 4 hooks
데이터 읽기 — 숫자가 의미하는 바
Node9는 신호를 표면화합니다. 알아둘 가치가 있는 패턴은 다음과 같습니다:
| 신호 | 의미 |
|---|---|
한 주에 Would have blocked ≥ 5회 | 에이전트가 고영향 작업을 시도 중입니다. 방어막 검토가 필요합니다 |
단일 review-git-push 규칙이 발견 항목의 50% 초과 | 자체 규칙이 의도대로 작동 중입니다. 위험이 아니라 감독일 뿐입니다 |
user-prompt 도구의 DLP 발견 항목 | 프롬프트에 비밀을 붙여넣었습니다. 키를 교체하세요 |
| 같은 파일에서 Agent Loop ×50+ | 에이전트가 편집/테스트/수정 주기에 갇혔습니다. 컨텍스트를 확인하거나 속도를 늦추세요 |
| MCP 도구 핀 불일치 | 서버가 도구를 변경했습니다. 다시 신뢰하기 전에 검토하세요 |
| 대용량 MCP 응답 경고 | 해당 서버가 이후 모든 턴에서 컨텍스트 창을 부풀리고 있습니다 |
Response DLP 경고 | Claude가 응답 텍스트에 비밀을 작성했습니다. 차단되지 않았으므로 즉시 교체하세요 |
tool-result의 DLP 발견 항목 | Claude가 비밀이 포함된 파일(.env, 자격 증명)을 읽었습니다. 키를 교체하고 node9 mask를 실행하세요 |
[Shell]의 DLP 발견 항목 | ~/.zshrc 또는 ~/.bashrc에 평문 비밀이 있습니다. 모든 AI 세션이 이를 볼 수 있습니다 |
일회성 신호는 정상입니다. 지속적인 패턴이 조치를 취해야 할 대상입니다.
Python SDK — 모든 Python 에이전트 관리```python
from node9 import configure, protect
configure(agent_name="my-agent", policy="require_approval")
@protect("bash") def run_command(cmd: str) -> str: ...
**[Python SDK →](https://github.com/node9-ai/node9-python)** · **[CI 코드 리뷰 에이전트 예제 →](https://github.com/node9-ai/node9-pr-agent)**
## 내부 동작 방식
- **Scan**은 `~/.claude/projects/`, `~/.gemini/tmp/`, `~/.gemini/antigravity-*/brain/`, `~/.copilot/session-state/`, `~/.codex/sessions/`에서 원시 에이전트 기록을 읽습니다 — API 호출 없이 완전히 오프라인으로 동작
- **Runtime**은 사전 실행 훅(Claude Code, Codex, Antigravity, GitHub Copilot CLI, Gemini CLI, Opencode, Pi) 또는 MCP 게이트웨이(Cursor, Windsurf, VSCode, Claude Desktop)를 통해 도구 호출을 가로챕니다. 모든 결정은 `~/.node9/audit.log`에 원자적으로 기록됩니다.
- **MCP 게이트웨이**는 stdio 프록시로, `tools/list` + `tools/call` JSON-RPC를 가로채고 나머지는 그대로 전달합니다
- **정책 엔진**은 bash AST 분석에 [mvdan-sh](https://github.com/mvdan/sh)를 사용합니다 — 백슬래시 이스케이프, 변수 치환, 원격 다운로드의 eval을 통한 난독화를 무력화합니다
- **샌드박스**는 기본 거부(deny-by-default) 방식의 `ipset`/`iptables` 이그레스(egress) 방화벽을 구축하는 Dockerfile + entrypoint를 생성한 다음, node9의 데몬과 훅이 내부에서 실행되는 비루트(non-root) 에이전트로 전환합니다. 에이전트의 자격 증명 파일만 마운트되며, 사용자의 전체 `~/.claude`는 절대 마운트되지 않습니다
## 전체 문서
구성 참조, 스마트 규칙, 상태 기반 규칙, 신뢰 호스트, 승인 모드, CLI 참조 — **[node9.ai/docs](https://node9.ai/docs)**에서 확인하세요.
## 관련 프로젝트
- **[node9-python](https://github.com/node9-ai/node9-python)** — Python SDK
- **[node9-pr-agent](https://github.com/node9-ai/node9-pr-agent)** — Node9를 통해 PR을 검토하는 GitHub Action
## 엔터프라이즈
**Node9 Pro**는 거버넌스 잠금, SAML/SSO, 중앙 감사 내보내기, VPC 배포를 추가합니다. [node9.ai](https://node9.ai)를 참조하세요.
## 라이선스
Apache-2.0
<p align="center">
<sub>☕와 건강한 편집증으로 만들어졌습니다.</sub>
</p>