Security Design
근거: 요구사항서 9.1(보안), 14장(보안 경고 규칙), 18장(보안 설계 원칙). AWS Bedrock 도우미는 요구사항서 8.13,
docs/ui-spec.md(Bedrock 화면)와 연계.
1. 보안 설계 원칙 (요구사항서 18장 — 구현 규칙화)
- 데스크톱 앱은 프로젝트 내용을 외부로 전송하지 않으며 텔레메트리를 두지 않는다 (Local First). 개발자용 Claude permission probe는 사용자가 명시적으로 실행하는 별도 스크립트이며, 인증된 Claude CLI의 네트워크/API 사용이 발생할 수 있다.
- 앱은 Secret 값을 별도 수집하거나 DB 필드에 저장하지 않는다. 단 사용자가 편집하는 원본 Claude 설정에 Secret이 있으면 보존 파싱과 저장 전 백업 때문에 백업 파일에도 남을 수 있다. 따라서 앱 데이터 디렉터리 역시 사용자 전용 민감 데이터로 취급한다.
- settings.json 저장 전 자동 백업(backup.rs).
- 저장 전 Diff 표시.
- Project settings에는 공유 가능한 정보만 저장하도록 안내/경고.
- Local settings는 개인 환경 설정용으로 유도 +
.gitignore등록 권장. - 위험한 Allow 규칙은 저장 전 경고.
- Deny 규칙은 UI에서 가장 강하게 표시(빨강/굵게).
- 앱 내부 DB에는 메타데이터만 저장한다.
backups/의 설정 원문 복사본은 이 원칙과 별개다. - 원본 설정 파일의 알 수 없는 필드 보존(D5).
2. Project settings 저장 경고 트리거 (요구사항서 14장)
Project scope에 저장하려는 값에 아래가 포함되면 저장 전 경고(개인·기밀 정보의 저장소 공유 방지):
개인 경로: C:\Users\<username>\ , D:\private\ , 절대 홈 경로
Secret 키워드: AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN,
password, passwd, token, secret, api_key, private_key
- 탐지 방식: 저장 직전 최종 JSON 문자열 + 규칙 경로를 정규식/키워드로 스캔.
- 경고는 차단이 아니라 명시적 확인(사용자가 의도적으로 진행 가능). 단 기본은 "취소" 강조.
3. 위험한 정책 경고 (요구사항서 14장)
아래 Allow 규칙은 저장 전 강조 경고:
Allow 프로젝트 루트 /**
Allow raw/** Allow data/** Allow secrets/**
Allow .env Allow *.pem Allow *.key
경고 문구(요구사항서 예시):
이 설정은 프로젝트 전체를 에이전트에게 허용합니다.
사내 보안 환경에서는 필요한 폴더만 Allow하는 것을 권장합니다.
"루트 전체 Allow"는 리스크 점수 +50과도 연동(risk-scanner.md).
4. Secret 감지 경고 (AWS Bedrock, 요구사항서 8.13)
MVP는 읽기/경고 중심, Secret 저장 기능 없음.
- 감지 대상 환경변수(존재 여부만 표시, 값은 마스킹):
AWS_REGION,AWS_DEFAULT_REGION,AWS_PROFILE,AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY,AWS_SESSION_TOKEN,HTTPS_PROXY,HTTP_PROXY,NO_PROXY,REQUESTS_CA_BUNDLE,SSL_CERT_FILE. AWS_PROFILE사용 권장.AWS_SECRET_ACCESS_KEY를 settings.json에 직접 저장하려 하면 강하게 경고:
AWS_SECRET_ACCESS_KEY를 settings.json에 직접 저장하지 않는 것을 권장합니다.
가능하면 AWS_PROFILE 또는 사내 인증 체계를 사용하세요.
5. .gitignore 권장 (요구사항서 7.3, 9.1)
- Local settings(
.claude/settings.local.json)는 개인 전용 →.gitignore등록 권장. - 프로젝트를 열 때
.gitignore에 해당 항목이 없으면 "추가 추천"을 제안(Should-have).
6. 안정성 보증 (요구사항서 9.4)
- 잘못된 JSON 저장 방지(validate 후에만 쓰기).
- 파일 쓰기 실패 시 원본 보존(임시 파일 → 원자적 rename).
- 백업 실패 시 저장 중단 + 경고.
- 설정 파일 손상 시 백업에서 복구 가능.
7. Claude Code 권한의 보안 경계
allow는 일치한 도구 호출의 사전 승인이다. 미등록 호출을 제거하는 화이트리스트가 아니며, 기본 모드에서는 일치 규칙이 없으면 사용자에게 확인을 요청한다.Read(...)·Edit(...)Deny는 Claude Code 내장 파일 도구에 적용된다. 허용된Bash(...)·PowerShell(...)명령과 그 하위 프로세스의 OS 파일 접근은 차단하지 않는다.- 민감 파일을 프로세스 수준에서도 강제 격리해야 하는 환경은 셸 allow를 최소화하고 Claude Code sandbox 또는 별도의 OS sandbox/ACL을 함께 사용해야 한다.
- 웹 접근 제한 토글은 Claude 웹 도구와 Bash/PowerShell의 대표 HTTP 클라이언트를
차단하는 방어 계층이다. 임의 Python/Node 프로세스나 새 네트워크 도구까지 포괄하는
방화벽으로 표현하지 않으며, 일부 규칙만 존재하면 UI에서
PARTIAL로 표시한다. - Claude가 아직 신뢰하지 않은 저장소에서는 공유
.claude/settings.json의 Allow가 무시될 수 있다. Agent Guard는~/.claude.json에서 해당 프로젝트의 trust boolean만 읽어 경고하며, 신뢰를 대신 승인하거나 다른 Claude 상태를 노출하지 않는다. Deny는 미신뢰 상태에서도 보수적으로 적용된다.
8. 진단·공급망·릴리스 보안
- 앱에는 원격 telemetry/crash upload가 없고 현재 영구 진단 로그도 만들지 않는다.
app.db와 백업에는 프로젝트 경로·규칙·환경 설정이 포함될 수 있으므로 공개 Issue에 원본을 첨부하지 않는다. 정제 절차는 diagnostics-and-privacy.md.- npm/Cargo/GitHub Actions 업데이트는 Dependabot이 주간 확인하고, Cargo.lock은 RustSec advisory database로 PR/push 및 매주 검사한다.
- 서명되지 않은 prerelease와 코드 서명된 production artifact를 구분한다. 인증서·timestamp, 수동 업데이트·롤백의 운영 조건은 release-policy.md에 따른다.
- 보안 취약점은 공개 Issue가 아니라
SECURITY.md의 비공개 채널로 제보한다.