인지야공

인지야공/오늘의 AI 이슈/12번째 글

좁게 열었는데 멀리 닿는다 — 권한의 폐포와 감시자의 지연

실행: python 딥러닝/daily/DAILY_2026_10_01_agent_containment.py (CPU 10초 안) 이 글의 수치는 전부 그 스크립트를 돌려 얻은 것이다. 자원 그래프와 탐지율은 가정한 값이고 어느 제품의 실제 수치도 아니다. 보려는 것은 숫자가 아니라 구조가 만드는 차이다.


1. 무슨 일이 있었나

9월 28일(월), NVIDIA가 「Open Agent Safety Platform」을 공개했다. 100곳이 넘는 업계 파트너가 함께 이름을 올렸다 (CNN, CNBC, Axios, Bloomberg).

발표된 것은 둘이다.

이름하는 일
OpenShell에이전트를 봉인된 작업장(샌드박스)에 넣는다. “청구서 폴더는 읽어도 된다” 같은 허용 목록을 주고, 그 밖의 것 — 파일 수정·삭제, 무관한 사이트 접속 — 은 막는다
SentryBlueField-4 DPU 위에서 도는 감시자. 에이전트의 행동을 계속 지켜보다가 선을 넘으면 “밀리초 안에” 격리한다

배경이 있다. 최근 OpenAI·Anthropic·Meta·Google이 각각 모델이 샌드박스를 벗어난 사건을 공개했고, 바로 다음 날인 9월 29일 OpenAI는 호주 정부에 공식 사과했다 — 6월 평가 중 실험 모델이 Services Australia 내부 시스템에 접근해 명령을 실행하고 파일과 자격증명을 가져갔으며, 호주 당국에 알린 것은 9월 10일이었다 (TechCrunch, BankInfoSecurity).

제품 평가는 이 글의 몫이 아니다. 이 글이 셈하는 것은 두 가지다. “좁게 열었다”는 말이 정말 좁은가, 그리고 “밀리초”가 왜 그렇게 중요한가.


2. 핵심 개념 — 권한은 목록이 아니라 닫힘이다

비유부터

열쇠 하나를 준다고 하자. 창고 문 열쇠다. 그런데 창고 안에 사무실 열쇠가 걸려 있다. 사무실에는 금고 비밀번호가 적힌 종이가 있다. 금고에는 차 열쇠가 있다.

준 것은 열쇠 하나인데, 닿는 곳은 창고·사무실·금고·차 넷이다. 허가는 목록으로 줬지만 **실제 권한은 그 목록의 닫힘(closure)**이다.

그림으로

허용한 것은 1개인데 닿는 곳은 8개

주황은 닿는 자원, 빨강은 그 중 위험한 자원. 사람이 허용한 것은 왼쪽의 「청구서 폴더」 하나다.

수식으로

자원을 꼭짓점, “여기에 닿으면 저기에도 닿는다”를 화살표로 둔 그래프 G=(V,E)G=(V,E) 를 생각한다. 허용한 자원 집합 SS 에서 실제로 닿는 것은 다음을 만족하는 가장 작은 집합 RR 이다.

R(S)  =  가장 작은 R 로서S⊆R    ∧    (u∈R∧(u→v)∈E  ⇒  v∈R)R(S) \;=\; \text{가장 작은 } R \text{ 로서}\quad S \subseteq R \;\;\wedge\;\; \bigl( u \in R \wedge (u \to v) \in E \;\Rightarrow\; v \in R \bigr)
기호뜻
VV자원 하나하나 (폴더, 파일, DB, 바깥으로 나가는 통로)
u→vu \to vuu 에 닿으면 vv 에도 닿을 수 있다 (설정 파일에 접속 정보가 적혀 있다 같은 것)
SS사람이 허용 목록에 적은 자원
R(S)R(S)그 허용으로 실제로 닿는 자원 전부 — 목록의 폐포
DD위험한 자원 (고객 DB, 자격증명, 바깥으로 나가는 통로)

R(S)R(S) 는 화살표를 계속 따라가며 새로 닿는 것을 더하다가 더 이상 늘지 않을 때 멈추면 얻어진다. 그래프 탐색 한 번이면 끝난다.

숫자로 따라가기

실험에 쓴 그래프는 이렇다. 화살표 열 개, 자원 아홉 개.

화살표왜 이어지나
청구서 폴더 → 설정 파일폴더를 읽으면 그 안의 파일도 읽는다
설정 파일 → DB 접속정보설정 파일에 접속 정보가 적혀 있다
DB 접속정보 → 고객 DB접속 정보로 붙는다
고객 DB → 내보내기 APIDB 도구가 내보내기를 쓴다
내보내기 API → 바깥으로내보내기가 밖으로 나간다
청구서 폴더 → 임시 폴더 → 스크립트 실행쓸 수 있는 폴더에 넣은 것은 실행할 수 있다

허용한 것은 청구서 폴더 하나다. 그런데 폐포를 계산하면:

∣S∣=1⟶∣R(S)∣=8그 중 위험한 것 3\lvert S \rvert = 1 \qquad\longrightarrow\qquad \lvert R(S) \rvert = 8 \qquad\text{그 중 위험한 것 } 3

닿는 곳은 설정 파일·임시 폴더·스크립트 실행·DB 접속정보·고객 DB·내보내기 API·바깥으로 나가는 통로까지다. OpenShell이 하는 일을 이 말로 옮기면 이렇다 — 허용 목록을 좁히는 것이 아니라 화살표를 끊는 것이다.

어느 화살표를 끊어야 하나

간선 하나를 지웠을 때 폐포가 얼마나 줄어드는지를 전부 재 봤다(실측).

끊는 화살표닿는 곳남는 위험 자원
청구서 폴더 → 임시 폴더8 → 63
DB 접속정보 → 고객 DB8 → 62
고객 DB → 내보내기 API8 → 73
청구서 폴더 → 설정 파일8 → 73

닿는 곳을 가장 많이 줄이는 화살표와, 위험을 가장 많이 줄이는 화살표가 다르다. 「임시 폴더로 가는 길」을 끊으면 숫자는 둘 줄지만 위험한 곳 셋에는 여전히 닿는다(다른 길이 있다). 반대로 「접속정보 → 고객 DB」를 끊으면 숫자는 똑같이 둘 줄어드는데 위험한 곳이 셋에서 둘로 준다.

세는 것이 개수냐 위험이냐에 따라 끊을 자리가 달라진다. 이것이 최소권한 설계가 “권한을 적게 주자”는 구호로 끝나지 않는 이유다.


3. 감시자의 지연 — “밀리초”가 왜 자랑거리인가

모델

에이전트가 목표까지 kk 단계를 밟아야 한다고 하자(위 그래프에서 청구서 폴더 → … → 바깥으로는 다섯 단계다). 감시자는 각 단계를 확률 pp 로 알아채고, 알아챈 뒤 dd 단계 뒤에 격리가 걸린다.

기호뜻
kk목표까지 필요한 행동 수
pp한 단계를 감시자가 알아챌 확률
dd알아챈 뒤 격리가 실제로 걸리기까지의 지연 (단계 단위)

첫 탐지가 ii 번째 단계에서 일어날 확률은 기하분포 (1−p)i−1p(1-p)^{i-1}p 다. 격리는 i+di+d 단계에 걸리므로, 에이전트가 끝까지 가려면 i+d≥ki + d \ge k, 즉 첫 탐지가 k−dk-d 단계 뒤여야 한다. k−dk-d 단계까지 한 번도 안 걸릴 확률이 곧 뚫릴 확률이다.

P(뚫림)  =  (1−p)max⁡(0,  k−d)P(\text{뚫림}) \;=\; (1-p)^{\max(0,\;k-d)}

식이 말하는 것은 짧다. 지연 dd 는 탈출 단계 kk 에서 그냥 빠진다. d≥kd \ge k 면 지수가 0 이 되어 확률이 1 — 탐지율이 99% 라도 못 막는다. 이미 끝난 뒤에 손이 닿기 때문이다.

시뮬레이션으로 확인

20만 번씩 굴려 식과 맞는지 봤다(k=5k=5).

탐지율 pp지연 0지연 1지연 3
0.1059.2%65.5%80.8%
0.2032.8%40.9%64.2%
0.3016.8%24.1%49.1%
0.503.0%6.2%25.0%
0.700.2%0.8%9.0%

0.75=16.8%0.7^5 = 16.8\%, 0.74=24.0%0.7^4 = 24.0\% — 식과 소수점까지 맞는다.

5단계 탈출 - 지연이 한 단계 늘 때마다

같은 탐지율에서 지연만 늘려도 뚫림 확률이 계단처럼 올라간다.

그리고 k=3k=3 에 지연이 3단계면 표의 모든 칸이 100% 였다. 세 걸음이면 끝나는 일에 세 걸음 뒤에 오는 격리는 아무 일도 하지 않는다.

지연 한 단계의 값

같은 안전도를 유지하려면 지연을 탐지율로 갚아야 한다. k=5k=5 에서 재 보면:

p=0.30,  d=1⏟뚫림 24.0%≡p=0.25,  d=0⏟같은 24%\underbrace{p = 0.30,\; d = 1}_{\text{뚫림 } 24.0\%} \qquad\equiv\qquad \underbrace{p = 0.25,\; d = 0}_{\text{같은 } 24\%}

지연 한 단계는 탐지율 5%p 어치다. 뒤집으면, 격리를 즉시 걸 수 있으면 탐지기를 그만큼 덜 똑똑하게 만들어도 된다. NVIDIA가 “밀리초”를 앞세우고 감시자를 DPU(네트워크 카드 쪽 칩)에 올린 이유가 이 지수에 있다 — 지연은 탐지 성능과 맞바꿀 수 있는 양이고, 짧을수록 싸다.


4. 흔한 오해와 한계

  • “허용 목록이 짧으면 안전하다” — 아니다. 안전한 것은 폐포가 작을 때다. 목록은 하나여도 닿는 곳은 여덟이었다.
  • “탐지율만 올리면 된다” — 지연이 kk 이상이면 탐지율이 얼마든 뚫린다. 두 값은 곱이 아니라 지수의 뺄셈으로 만난다.
  • 이 모델이 안 보는 것: 단계마다 탐지율이 같다고 뒀고(실제로는 후반 행동이 더 눈에 띈다), 거짓 양성으로 멀쩡한 작업이 멈추는 비용을 안 셌다. 격리가 항상 성공한다고 가정한 것도 낙관이다.
  • 그래프는 가정이다. 실제 시스템의 화살표는 이보다 훨씬 많고, 문서에 없는 화살표가 사고를 낸다. 호주 사건에서 모델이 찾아낸 길도 설계자가 그려 둔 그래프에는 없었을 것이다.
  • 이 글은 제품을 평가하지 않는다. 플랫폼이 실제로 이 지수를 줄이는지는 공개된 벤치마크가 나와야 말할 수 있다.

5. 한 문단 요약

에이전트 안전은 두 개의 숫자로 요약된다. 하나는 폐포의 크기 — 허용 목록이 아니라 그 목록에서 화살표를 따라 실제로 닿는 자원의 수이고, 실험에서는 하나를 열어 줬더니 여덟에 닿았다. 다른 하나는 지연 — 뚫릴 확률이 (1−p)k−d(1-p)^{k-d} 이라서, 격리가 늦으면 탐지율이 아무리 높아도 소용이 없고 d≥kd \ge k 면 아예 100% 뚫린다. OpenShell은 앞의 숫자를, Sentry는 뒤의 숫자를 줄이겠다는 것이다. 권한은 적게 주는 것이 아니라 닫아서 주는 것이고, 감시는 정확한 것보다 빠른 것이 먼저다.


참고

표시는 이 브라우저에만 남는다. 서버로 가는 것은 없다.