chore: 문서를 작성할 때 한국어의 표현 작성 스킬 추가 및 1인칭 관점의 글 작성 검증 테스트 추가
This commit is contained in:
+46
-87
@@ -1,110 +1,69 @@
|
||||
# Security and trust model
|
||||
# Security and trust boundaries
|
||||
|
||||
## 보호 대상
|
||||
## 1. 주요 자산
|
||||
|
||||
- provider 인증 정보와 로컬 계정
|
||||
- 실행 호스트의 파일·명령·네트워크 권한
|
||||
- 비공개 brief, source pack, draft
|
||||
- 출처 진실성과 최종 문서 정확성
|
||||
- 품질 게이트의 무결성
|
||||
- provider credential과 local authentication state
|
||||
- private repository의 source text와 경로
|
||||
- draft와 내부 decision record
|
||||
- provider raw response와 event log
|
||||
- 최종 독자용 문서
|
||||
|
||||
## 위협과 완화
|
||||
## 2. Prompt injection 경계
|
||||
|
||||
### 1. Source/brief prompt injection
|
||||
Brief, source chunk, title, URL, note, draft는 모두 untrusted data다. 모든 stage prompt는 source 내부 지시를 따르지 말고 내용으로만 취급하도록 명시한다.
|
||||
|
||||
위협: title, fact, note, URL, draft 안에 “이전 지시를 무시하라” 같은 문장이 들어간다.
|
||||
완전한 prompt-injection 제거를 보장하지 않는다. 민감한 저장소에서는 다음을 권장한다.
|
||||
|
||||
완화:
|
||||
- provider가 읽어도 되는 corpus root만 지정
|
||||
- `--source-include`로 최소 directory만 허용
|
||||
- secret, credential, production dump를 corpus에 포함하지 않음
|
||||
- provider CLI의 sandbox와 조직 정책 사용
|
||||
- 최종 provenance artifact의 접근 권한 제한
|
||||
|
||||
- 모든 prompt에서 입력 블록을 명시적으로 untrusted data로 선언
|
||||
- 출력 스키마와 stage 역할을 입력 블록 밖에 정의
|
||||
- planner의 구조 변경을 코드로 검증
|
||||
- reviewer 결과도 JSON 파싱과 severity 계약으로 제한
|
||||
- 최종 출력에 결정적 린트와 독립 리뷰 적용
|
||||
## 3. Reader-facing data minimization
|
||||
|
||||
잔여 위험: 언어 모델이 경계를 무시할 수 있다. 고위험 입력은 별도 sanitization, 제공자 정책, 인간 검토가 필요하다.
|
||||
`citation_style=hidden`의 목적은 내부 근거를 없애는 것이 아니라 노출 표면을 줄이는 것이다.
|
||||
|
||||
### 2. Command injection
|
||||
독자용 문서에서 금지:
|
||||
|
||||
위협: provider command가 외부 입력으로 조작된다.
|
||||
- source ID와 claim/decision ID
|
||||
- absolute/local repository path
|
||||
- access date
|
||||
- frontmatter와 status field
|
||||
- prompt tag
|
||||
- evidence-processing narration
|
||||
|
||||
완화:
|
||||
내부 audit artifact에는 이 metadata가 남으므로, run directory 자체는 private data로 취급해야 한다.
|
||||
|
||||
- subprocess는 shell 없이 argument list로 실행
|
||||
- brief/source 값을 command에 삽입하지 않고 stdin으로 전달
|
||||
- `options.command`는 로컬 운영자가 승인한 config만 허용한다고 문서화
|
||||
- 인증 비밀을 command line에 넣지 않음
|
||||
## 4. Command execution
|
||||
|
||||
잔여 위험: 악의적인 pipeline config 자체는 임의의 로컬 executable을 실행할 수 있다. config를 코드와 같은 신뢰 수준으로 관리해야 한다.
|
||||
- Codex 기본 설정은 read-only sandbox다.
|
||||
- writer/reviewer prompt는 shell 실행이나 file mutation을 요구하지 않는다.
|
||||
- `options.command`, provider binary path, extra args는 신뢰된 local config로만 설정한다.
|
||||
- 사용자 또는 source text에서 command option을 동적으로 만들지 않는다.
|
||||
|
||||
### 3. 모델의 파일/명령 부작용
|
||||
## 5. Destructive content
|
||||
|
||||
위협: 에이전트 도구가 파일을 수정하거나 command를 실행한다.
|
||||
문서 안에 `rm -rf`, `DROP DATABASE`, `kubectl delete`, `terraform destroy` 등 파괴적 command가 있으면 주변에 다음이 모두 필요하다.
|
||||
|
||||
완화:
|
||||
- 영향 경고
|
||||
- backup/checkpoint/recovery
|
||||
- expected effect
|
||||
- read-only verification
|
||||
|
||||
- Codex 기본 sandbox `read-only`
|
||||
- 작성 prompt는 파일 수정이나 shell 사용을 요구하지 않음
|
||||
- Claude는 print mode 텍스트 출력을 사용
|
||||
- Antigravity에는 문서 생성 prompt만 전달
|
||||
이 검사는 command가 실제 환경에서 안전하다는 보증이 아니다.
|
||||
|
||||
잔여 위험: provider 자체 설정이나 조직 wrapper가 더 넓은 권한을 부여할 수 있다. 최소 권한과 격리 환경을 별도로 적용한다.
|
||||
## 6. Provenance integrity
|
||||
|
||||
### 4. 근거 세탁과 허위 인용
|
||||
`manifest.json`은 run artifact의 byte size와 SHA-256을 기록한다. manifest 생성 이후 파일이 바뀌면 재검산에서 드러난다. 전자서명이나 원격 attestation은 제공하지 않는다.
|
||||
|
||||
위협: 모델이 관련만 있는 출처를 주장 근거처럼 붙이거나 source ID를 지어낸다.
|
||||
## 7. Provider credentials
|
||||
|
||||
완화:
|
||||
Credential을 repository, brief, source pack, event log에 저장하지 않는다. Codex/Claude CLI와 Antigravity SDK의 표준 인증 방식을 사용한다. `doctor`는 설치 가능성만 확인하며 로그인, 권한, quota를 증명하지 않는다.
|
||||
|
||||
- source pack에 출처가 지지하는 `facts`를 명시
|
||||
- 존재하지 않는 source ID를 error로 처리
|
||||
- evidence reviewer가 claim-marker fit를 검사
|
||||
- 원문 model response와 source pack을 보존
|
||||
## 8. Known limits
|
||||
|
||||
잔여 위험: 하네스는 URL의 실제 내용이 `facts`와 일치하는지 자동 검증하지 않는다. source pack 작성자의 검증이 필요하다.
|
||||
|
||||
### 5. 위험한 절차
|
||||
|
||||
위협: 문서가 `rm -rf`, `DROP TABLE`, `kubectl delete`, `terraform destroy` 같은 명령을 안전장치 없이 제공한다.
|
||||
|
||||
완화:
|
||||
|
||||
- 대표 파괴 패턴을 blocker로 검사
|
||||
- 주변에 경고, 백업/복구, 롤백 문맥 요구
|
||||
- operations reviewer로 절차 상태 전이 검사
|
||||
|
||||
잔여 위험: 패턴 목록은 완전하지 않으며 도메인별 위험 명령을 모두 알 수 없다. 조직별 lint rule 확장이 필요하다.
|
||||
|
||||
### 6. 점수 조작
|
||||
|
||||
위협: 모델 reviewer가 근거 없이 높은 점수를 주거나 초안 내부 지시를 따른다.
|
||||
|
||||
완화:
|
||||
|
||||
- 결정적 lint 점수와 모델 평균을 혼합
|
||||
- blocker/error 개수를 별도 gate
|
||||
- 여러 provider와 역할을 분리 가능
|
||||
- raw review를 보존
|
||||
|
||||
잔여 위험: 여러 reviewer가 같은 모델 계열·학습 편향을 공유할 수 있다. 고위험 문서는 인간 reviewer와 실행 가능한 검증을 추가한다.
|
||||
|
||||
### 7. 민감 정보 유출
|
||||
|
||||
위협: brief/source/draft가 외부 모델 제공자에 전송된다.
|
||||
|
||||
완화:
|
||||
|
||||
- 하네스가 실제로 전송하는 prompt를 raw artifact로 확인 가능
|
||||
- provider별 조직 정책과 계정을 사용
|
||||
- Mock으로 로컬 배선 테스트 가능
|
||||
|
||||
잔여 위험: live provider를 사용하면 해당 제공자의 처리 경계로 데이터가 이동한다. 비밀·개인정보·규제 데이터를 넣기 전에 조직 정책을 확인하고 필요한 경우 로컬 모델 adapter를 추가한다.
|
||||
|
||||
## 운영 권고
|
||||
|
||||
- pipeline config는 코드 리뷰와 버전 관리를 적용한다.
|
||||
- provider model ID와 CLI/SDK 버전을 배포 메타데이터에 고정한다.
|
||||
- run directory 접근 권한과 보존 기간을 정의한다.
|
||||
- 고위험 문서는 source pack 작성자와 최종 승인자를 분리한다.
|
||||
- 실제 명령과 코드는 sandbox/CI에서 실행해 결과를 source pack 또는 별도 evidence artifact로 연결한다.
|
||||
- PASS 문서를 자동 게시하지 말고, 위험도에 맞는 승인 단계를 둔다.
|
||||
- lexical retrieval이 민감한 문서를 선택할 수 있으므로 corpus scope를 운영자가 통제해야 한다.
|
||||
- model이 source text를 재구성하면서 민감 정보를 노출할 수 있다.
|
||||
- hidden citation lint는 알려진 path와 marker pattern을 검사하지만 모든 비밀 문자열을 탐지하지 않는다.
|
||||
- private source에서 공개 가능한 결론을 만드는 책임은 프로젝트 소유자에게 있다.
|
||||
|
||||
Reference in New Issue
Block a user