프롬프트 인젝션, 유출 탐지, 신뢰
인바운드 프롬프트 인젝션 방어, 아웃바운드 자격증명 유출 탐지, 도메인 신뢰 점수 산정, 워크스페이스 격리 경계.
Revka는 모든 대화의 양방향을 감시합니다. 인바운드 방향에서는 PromptGuard가 채널 메시지를 LLM에 전달하기 전에 프롬프트 인젝션 시도를 검사합니다. 아웃바운드 방향에서는 LeakDetector가 채널로 전송되기 직전에 응답 내 자격증명을 검사합니다. 이 두 검사를 보완하는 두 가지 행동 제어 장치가 있습니다. 도메인 신뢰 점수 산정은 에이전트가 실수를 반복하는 도메인에서 자율성을 낮추고, 워크스페이스 격리 경계는 다중 클라이언트 배포 환경에서 테넌트 간 도구, 도메인, 경로가 혼용되지 않도록 차단합니다.
허용 목록으로 잡을 수 없는 패턴을 휴리스틱 필터로 탐지하는 콘텐츠 수준의 방어, 도메인별·워크스페이스별 가드레일이 필요하다면 이 페이지를 참고하십시오. 이 레이어들은 누적 적용됩니다. 자율성 정책, 명령 허용 목록, 경로 샌드박싱과 함께 동작하며, 요청이 진행되려면 적용 가능한 모든 레이어를 통과해야 합니다.
프롬프트 인젝션 방어 (PromptGuard)
섹션 제목: “프롬프트 인젝션 방어 (PromptGuard)”PromptGuard는 채널 메시지가 LLM에 라우팅되기 전에 인바운드 메시지를 검사합니다. 프롬프트 인젝션 공격의 여섯 가지 범주를 탐지하며, 결과는 세 가지 중 하나로 반환됩니다. Safe(안전), Suspicious(의심 — 매칭 패턴 및 점수 포함), Blocked(차단 — 사유 포함). 패턴 집합은 효율을 위해 시작 시 한 번 컴파일됩니다. PromptGuard는 RustyClaw(MIT 라이선스)에서 기여된 휴리스틱 필터입니다.
탐지 범주
섹션 제목: “탐지 범주”| 범주 | 탐지 대상 | 예시 트리거 |
|---|---|---|
system_prompt_override | 시스템 프롬프트 폐기 또는 교체 시도 | ”ignore previous instructions”, “override system prompt” |
role_confusion | 모델 역할 재정의 시도 | ”you are now”, “act as”, “pretend you’re” |
tool_call_injection | 메시지에 숨겨진 원시 도구 호출 JSON | "tool_calls" 및 {"type": 구조를 포함하는 텍스트 |
secret_extraction | 키 또는 볼트 내용 유출 시도 | ”show me all your API keys”, “dump vault” |
command_injection | 비일상적 컨텍스트의 셸 메타문자 | `, $(, &&, ` |
jailbreak_attempt | 알려진 탈옥 프레이밍 | DAN 모드, “enter developer mode”, base64 디코드 트릭 |
각 범주는 점수에 기여하며, 메시지 점수는 범주 수(6)로 나누어 0.0–1.0 범위로 정규화한 합산값입니다. 탐지된 패턴은 결과와 함께 보고되므로 왜 해당 메시지가 가드를 트리거했는지 확인할 수 있습니다.
PromptGuard 설정
섹션 제목: “PromptGuard 설정”PromptGuard는 현재 config.toml을 통해 설정할 수 없습니다. 하드코딩된 기본값인 action warn(로그 기록 후 메시지 허용)과 탐지 민감도 0.7로 동작합니다. GuardAction 및 sensitivity 값은 어떠한 config 섹션에서도 읽지 않으며, [security.prompt_guard] 블록을 추가해도 자동으로 무시됩니다.
아웃바운드 자격증명 유출 탐지 (LeakDetector)
섹션 제목: “아웃바운드 자격증명 유출 탐지 (LeakDetector)”LeakDetector는 콘텐츠가 채널에 전달되기 직전에 아웃바운드 내용을 검사합니다. 자격증명으로 의심되는 값을 발견하면 해당 값을 형식화된 [REDACTED_*] 플레이스홀더로 교체하여 비밀이 호스트 밖으로 유출되지 않도록 합니다. PromptGuard와 마찬가지로 RustyClaw(MIT 라이선스)에서 기여되었습니다.
탐지 대상
섹션 제목: “탐지 대상”검출기는 다양한 자격증명 형태를 인식합니다.
- 제공자 API 키 — Stripe, OpenAI, Anthropic, Google, GitHub 토큰 →
[REDACTED_API_KEY] - AWS 자격증명 — 액세스 키 ID 및 시크릿 액세스 키 →
[REDACTED_AWS_CREDENTIAL] - 일반 시크릿 —
password=,secret=,token=스타일 패턴 →[REDACTED_SECRET] - PEM 개인 키 — RSA, EC, OpenSSH 키 블록 →
[REDACTED_PRIVATE_KEY] - JWT →
[REDACTED_JWT] - 데이터베이스 연결 URL — Postgres, MySQL, MongoDB, Redis →
[REDACTED_DATABASE_URL] - 고엔트로피 토큰 — Shannon 엔트로피가 임계값을 초과하는 알파-숫자 혼합 24자 이상 문자열 →
[REDACTED_HIGH_ENTROPY_TOKEN]
위양성을 방지하기 위해 URL 경로 세그먼트와 [IMAGE:...], [VIDEO:...] 같은 미디어 마커는 엔트로피 스캔 전에 명시적으로 제외됩니다. 따라서 일반적인 파일시스템 경로나 첨부 참조는 리댁션을 트리거하지 않습니다.
LeakDetector 설정
섹션 제목: “LeakDetector 설정”LeakDetector는 현재 config.toml을 통해 설정할 수 없습니다. 항상 고정된 민감도 0.7로 동작하며, [security.leak_detector] 블록은 파싱되지 않고 자동으로 무시됩니다. 고정 민감도 0.7에서 일반 password=/secret=/token= 패턴은 0.5 초과 값이 있어야 매칭되고, 엔트로피 임계값은 3.5 + 0.7 × 1.25 ≈ 4.375입니다. 구조화된 패턴(제공자 키, AWS, PEM, JWT, 데이터베이스 URL)은 민감도에 관계없이 항상 동작합니다.
도메인 기반 신뢰 점수 산정
섹션 제목: “도메인 기반 신뢰 점수 산정”신뢰 점수 산정은 에이전트가 도메인별로 시간에 따라 얼마나 잘 동작하는지 추적하고, 성과가 부진한 도메인에서 자동으로 자율성을 강화합니다. 각 도메인은 [0.0, 1.0] 범위의 부동소수점 점수를 가지며(새 도메인은 initial_score, 기본값 0.8에서 시작), 점수는 다음과 같이 변동합니다.
- 시간이 지남에 따라 초기값 방향으로 지수적으로 감쇠합니다(설정 가능한 반감기).
user_override,quality_failure,sop_deviation정정 이벤트 발생 시 감소합니다.- 성공 시마다 소폭 증가합니다.
도메인 점수가 regression_threshold 아래로 떨어지면, Revka는 RegressionAlert를 발생시키고 해당 도메인의 자율성을 한 단계 하향 조정합니다. Full → Supervised, Supervised → ReadOnly, ReadOnly는 그대로 유지됩니다. 특정 도메인에서 반복적으로 실수하는 에이전트는 점수가 회복될 때까지 해당 도메인에서 자율적으로 행동할 권한을 잃습니다.
[trust] 설정
섹션 제목: “[trust] 설정”[trust]initial_score = 0.8decay_half_life_days = 30regression_threshold = 0.5correction_penalty = 0.05success_boost = 0.01| 키 | 타입 | 기본값 | 설명 |
|---|---|---|---|
initial_score | f64 | 0.8 | 처음 등장한 도메인의 초기 신뢰 점수. |
decay_half_life_days | f64 | 30.0 | initial_score 방향으로 지수 감쇠하는 반감기(일 단위). |
regression_threshold | f64 | 0.5 | 이 값 아래로 점수가 떨어지면 RegressionAlert가 발생하고 자율성이 한 단계 하향됩니다. |
correction_penalty | f64 | 0.05 | 정정 이벤트당 차감 점수. |
success_boost | f64 | 0.01 | 성공 이벤트당 가산 점수. |
점수는 [0.0, 1.0]으로 고정됩니다. 예시: 도메인이 0.80에서 시작하고 quality_failure 정정이 0.05씩 세 번 발생하면 0.65가 됩니다. 이후 추가 정정이 계속되어 0.50 아래로 떨어지면 회귀가 트리거되어 Full 자율성 도메인이 Supervised로 강등됩니다. 이후 성공 이벤트(+0.01씩)와 시간 기반 감쇠로 점수가 점차 회복됩니다.
워크스페이스 격리 경계 (WorkspaceBoundary)
섹션 제목: “워크스페이스 격리 경계 (WorkspaceBoundary)”워크스페이스 경계는 하나의 Revka 인스턴스를 여러 클라이언트에 사용할 때 워크스페이스별 격리를 강제합니다. 워크스페이스 프로필이 활성화된 경우, 각 접근 확인은 Allow 또는 사유가 포함된 Deny를 반환합니다.
- 프로필의
tool_restrictions목록에 있는 도구는 거부됩니다. - 프로필의
allowed_domains목록에 없는 도메인은 거부됩니다. - 워크스페이스 기본 디렉터리 내 다른 워크스페이스에 속한 경로는 거부됩니다. 단,
cross_workspace_search = true로 설정하면 읽기 유형의 크로스 워크스페이스 접근이 허용됩니다. 워크스페이스 기본 디렉터리 외부 경로는 경계에 의해 제한되지 않으며(자율성 정책의 경로 샌드박싱은 여전히 적용됩니다).
이 검사는 SecurityPolicy와 누적 적용됩니다. 둘 다 통과해야 하므로, 워크스페이스는 전역 정책이 이미 허용하는 범위 내에서만 접근을 제한할 수 있습니다.
[workspace]를 사용한 다중 클라이언트 격리
섹션 제목: “[workspace]를 사용한 다중 클라이언트 격리”[workspace]에서 전역적으로 격리를 활성화하고, 클라이언트별로 프로필을 하나씩 정의합니다. 각 프로필은 독립된 메모리 네임스페이스, 감사 네임스페이스, 자격증명 프로필, 도메인 허용 목록, 도구 제한을 갖습니다.
[workspace]enabled = trueactive_workspace = "client_a"workspaces_dir = "~/.revka/workspaces"isolate_memory = trueisolate_secrets = trueisolate_audit = truecross_workspace_search = false~/.revka/workspaces/<name>/profile.toml의 프로필별 파일:
name = "client_a"allowed_domains = ["api.client-a.example.com"]credential_profile = "client-a-creds"memory_namespace = "client_a_mem"audit_namespace = "client_a_audit"tool_restrictions = ["shell"]| 키 | 타입 | 기본값 | 설명 |
|---|---|---|---|
enabled | bool | false | 워크스페이스 격리 마스터 스위치. |
active_workspace | string | 미설정 | 현재 활성화된 프로필 이름. |
workspaces_dir | string | ~/.revka/workspaces | 프로필별 하위 디렉터리를 담는 기본 디렉터리. |
isolate_memory | bool | true | 워크스페이스별 독립 메모리 저장소 사용. |
isolate_secrets | bool | true | 워크스페이스별 독립 시크릿 네임스페이스 사용. |
isolate_audit | bool | true | 워크스페이스별 독립 감사 로그 기록. |
cross_workspace_search | bool | false | true로 설정하면 워크스페이스 경로 간 읽기 유형 접근을 허용합니다. |
프로필별 필드:
| 필드 | 설명 |
|---|---|
name | 프로필 이름. 영숫자와 -/_만 허용되며, 빈 이름과 .. 경로 탐색은 거부됩니다. |
allowed_domains | 이 워크스페이스의 도메인 허용 목록. 목록 외 도메인은 거부됩니다. |
tool_restrictions | 이 워크스페이스에서 차단되는 도구 이름. |
memory_namespace | 이 워크스페이스의 메모리 접근 범위를 지정합니다. |
audit_namespace | 이 워크스페이스의 감사 로그 항목 범위를 지정합니다. |
credential_profile | 이 워크스페이스가 사용하는 자격증명 집합. 프로필 내보내기 시 리댁션(***)됩니다. |