← 목록
보안 2026-04-17 4KB 읽기 5분

크라우니시큐리티 — Phase 1 엔터프라이즈 강화 완료

개요

MVP 납품 수준에서 완전 엔터프라이즈 제품 납품 수준으로 Phase 1 (5항목) 구현 완료.

완료 항목

1. SQLite 영속성 (storage.js)

  • Node 22+ node:sqlite 네이티브 (외부 의존성 0)
  • WAL 모드 + 동시읽기, 64MB 캐시
  • 9개 테이블: events, alerts, iocs, rules, audit_log, subjects, resources, baselines, webhooks
  • 해시체인 감사로그: SHA-256 체인으로 변조 탐지 (verifyAuditChain())
  • 스키마 마이그레이션, 백업 (VACUUM INTO), 보관 정리
  • 준비된 구문(prepared statements)으로 핫패스 최적화

2. AES-256-GCM at-rest 암호화 (crypto-vault.js)

  • AES-256-GCM 인증된 암호화
  • PBKDF2 200K 반복 키 유도 (패스프레이즈 지원)
  • 자기기술형(self-describing) enc1: 접두사 — 외부 메타데이터 불필요
  • 버전화된 암호문 포맷: version(1) + iv(12) + tag(16) + ciphertext
  • 키 회전: 새 키로 전환 후에도 기존 데이터 복호 가능
  • 필드별 암호화: events의 detail/raw/metadata 자동 암호화
  • 키링 파일 0o600 퍼미션
  • API: /api/v1/crypto/status (GET), /api/v1/crypto/rotate (POST)

3. TLS 강제 + 보안 헤더

  • TLSv1.2+ 강제 (GCM + ChaCha20 시퍼만)
  • HTTP→HTTPS 자동 리다이렉트 서버
  • 리버스 프록시 뒤 HTTPS 강제 (X-Forwarded-Proto)
  • 보안 헤더 7종: CSP, X-Frame-Options(DENY), HSTS, X-Content-Type-Options, Referrer-Policy, Permissions-Policy, X-XSS-Protection

4. RBAC (rbac.js)

  • 5개 역할: admin, operator, analyst, viewer, api
  • 36개 라우트→스코프 매핑 (events.read, events.write, iocs.*, crypto.admin 등)
  • 와일드카드 매칭: admin* 스코프는 모든 것 허용
  • JWT 토큰에 role 클레임 포함
  • API: /api/v1/auth/whoami (GET), /api/v1/auth/roles (GET)
  • 미인증 → 401, 권한부족 → 403

5. Kubernetes Helm Chart (helm/crowny-security/)

  • Deployment (Recreate 전략 — SQLite 단일쓰기)
  • Service (HTTP + Syslog UDP/TCP)
  • PVC (10Gi 기본)
  • Ingress (nginx + cert-manager 지원)
  • ServiceMonitor (Prometheus)
  • Secret 참조 (masterKey, apiKeyHash, jwtSecret, license)
  • Pod 보안: non-root(1001), readOnlyRootFilesystem, drop ALL capabilities

테스트 결과

SQLite: WAL 모드, 마이그레이션 v1, 해시체인 감사로그 ✅
암호화: enc/dec 라운드트립, 필드별 암호화, 키 회전 후 복호 ✅
RBAC: admin 쓰기 201, viewer 쓰기 403, viewer 읽기 200, key rotate viewer 403/admin 200 ✅
보안헤더: CSP, X-Frame-Options, HSTS 모두 정상 ✅

파일 위치

  • SQLite: /Users/ef/crowny-security/server/storage.js (~420줄)
  • 암호화: /Users/ef/crowny-security/server/crypto-vault.js (~210줄)
  • RBAC: /Users/ef/crowny-security/server/rbac.js (~150줄)
  • Helm: /Users/ef/crowny-security/helm/crowny-security/ (6개 템플릿)
  • 서버: /Users/ef/crowny-security/server/server.js (~1900줄)

환경변수 (신규)

변수설명기본값
CROWNY_MASTER_KEYAES-256 마스터키 (hex 64자 또는 패스프레이즈)자동생성
CROWNY_MASTER_SALTPBKDF2 salt (패스프레이즈 모드)crowny-default-salt
CROWNY_KEYRING_PATH키링 파일 경로data/.keyring
CROWNY_ENCRYPT_AT_REST암호화 on/offtrue
CROWNY_TLS_CERTTLS 인증서 경로(없으면 HTTP)
CROWNY_TLS_KEYTLS 키 경로(없으면 HTTP)
CROWNY_ENFORCE_HTTPS프록시 뒤 HTTPS 강제false
CROWNY_HTTP_PORTHTTP→HTTPS 리다이렉트 포트9580

Phase 2 남은 항목

  • Multi-tenancy (조직별 격리)
  • SAML/OIDC/LDAP 외부 IdP 연동
  • HA (PostgreSQL + Redis 백엔드)
  • 감사로그 외부 전송 (S3/WORM)
  • 자동화 테스트 스위트 (Jest/Mocha)