신원 위조 패턴: 에이전트 자격 증명은 범위(scope)뿐만 아니라 만료일도 필요합니다
요약
에이전트 자격 증명을 설계할 때, 단순히 API 범위(Scope)만 제한하는 것은 충분하지 않습니다. 신원 위조를 막기 위해서는 '유효 기간'과 '실행 컨텍스트 바인딩'을 핵심적으로 고려해야 합니다. 모든 자격 증명은 세션 기반으로 발행하고 짧게 만료시키며, 실행 완료 시 즉시 취소하는 것이 중요합니다.
핵심 포인트
- 자격 증명은 범위(Scope) 외에 만료일과 컨텍스트 바인딩이 필수입니다.
- 자격 증명을 세션별로 발행하고 예상 작업 시간보다 짧게 만료시키세요.
- 모든 자격 증명에는 특정 실행 ID(run_id)를 바인딩하여 위조 시도를 감지해야 합니다.
- 장기 실행 에이전트의 경우, 만료 기간 연장 대신 주기적인 자격 증명 순환(rotation)을 사용하세요.
§ 01 · 문제점
대부분의 팀들은 에이전트의 자격 증명을 신중하게 범위를 설정합니다. 여기서는 읽기 전용, 저기에서는 쓰기 접근 등 특정 API는 허용하지만 다른 것은 금지하는 식입니다. 범위(Scope)는 '이 에이전트가 무엇을 할 수 있는가'에 답할 뿐입니다. 이 자격 증명이 '얼마 동안 유효한가' 또는 '내가 이 에이전트를 복사본과 구별할 수 있는가'에는 답하지 못합니다. 바로 이 두 가지 간극 때문에 신원 위조(identity forgery)가 발생합니다. 즉, 자격 증명이 재사용되거나, 두 번째 프로세스로 복제되거나, 발행된 작업을 마친 지 오래 지나서도 계속 사용되는 것입니다.
── 지속적인 키(standing key) ──
§ 02 · 범위만으로는 충분하지 않은 이유
만료일이 없는 엄격하게 범위가 설정된 자격 증명이라 할지라도 여전히 '지속적인 키'입니다. 만약 이 키가 로그, 프롬프트, 도구 출력, 포크된 프로세스 등으로 유출된다면, 누군가 알아차리고 수동으로 취소하기 전까지는 계속 유효합니다. 실제로는 아무도 며칠 동안 이를 인지하지 못합니다. 범위(Scope)는 단일 호출의 피해 반경을 제한할 뿐입니다. 시간의 피해 반경을 제한하는 데는 전혀 도움이 되지 않습니다.
── 패턴 ──
§ 03 · 패턴
모든 에이전트 자격 증명을 범위가 지정된 정적 비밀(static secret)로 취급하기보다, 기본적으로 단기적인 것으로 취급해야 합니다.
-
에이전트별이 아닌 세션별로 발행합니다. 자격 증명은 실행이 시작될 때 생성되고 종료될 때 사라져야 하며, 에이전트가 모든 실행에서 재사용하는 장기간의 키가 되어서는 안 됩니다.
-
예상되는 가장 긴 작업 시간보다 짧게 만료일을 설정합니다. 에이전트의 일반적인 최대 실행 시간이 20분이라면, 자격 증명은 30분에 만료되도록 합니다. 아무도 감시하지 않아도 고착되거나 탈취된 프로세스는 그 시간을 넘겨서 계속 작동할 수 없습니다.
-
자격 증명을 run_id에 바인딩합니다. 모든 자격 증명에는 이를 발행한 특정 실행의 식별자가 포함되어야 합니다. 만약 두 개의 다른 프로세스 컨텍스트에서 동일한 자격 증명을 사용하여 두 요청이 도착한다면, 그것은 스케일링 이벤트가 아니라 위조 신호(forgery signal)이며, '실패 오픈(fail open)'이 아닌 명확하게 실패해야 합니다.
-
모든 자격 증명 발행과 사용을 별도로 기록합니다. 발행 정보는 무엇이 행동할 수 있어야 하는지 알려줍니다. 사용 정보는 실제로 무엇이 행동했는지 알려줍니다. 이 두 로그 사이의 간극이야말로 위조가 숨어있는 곳입니다.
-
스케줄에 따라가 아닌, 완료 시 취소(Revoke on completion)해야 합니다. 만료된 자격 증명을 정리하기 위해 cron job을 기다리지 말고, 실행이 완료되거나 실패하거나 중단되는 즉시 취소하세요.
── 이것이 포착하는 것 ──
§ 04 · 범위(scope)로는 포착할 수 없는 것
범위가 잘 지정되었지만 오래 지속되는 자격 증명은 여전히 공격자가 이를 훔쳤을 때 무기한으로, 범위 내에서, 합법적인 에이전트와 구별할 수 없게 행동하도록 허용합니다. 실행에 바인딩된(run-bound) 짧은 기간의 자격 증명은 '도난당하고 재사용되는' 상황을 '시간이 지나면 쓸모없어지는 도난품'으로 바꾸고, '두 번째 프로세스로 복제되는' 상황을 조용한 사본 대신 즉각적이고 큰 신호로 바꿉니다.
── 어려운 경우 ──
§ 05 · 어려워지는 지점
오랫동안 실행되는 에이전트(hours or days 동안 합법적으로 작동하는)는 단순한 '세션 길이 만료' 규칙을 깨뜨립니다. 이런 경우, 만료 기간을 연장하지 말고 대신 실행 도중에 고정된 간격으로 자격 증명을 순환(rotate)시키세요. 이는 장기간 지속되는 TLS 세션이 연결을 끊지 않으면서 키를 순환시키는 방식과 같습니다. 규칙은 변함없습니다: 어떤 자격 증명도 정상적인 작업의 몇 배 이상 오래 지속되어서는 안 됩니다.
── 체크리스트 ──
§ 06 · 체크리스트
[ ] 모든 에이전트 자격 증명은 범위와 무관하게 만료됩니까?
[ ] 만료 기간은 가장 긴 가능한 작업이 아니라, 가장 긴 정상 작업보다 짧습니까?
[ ] 모든 자격 증명은 특정 run_id에 바인딩되어 있습니까?
[ ] 발급(issuance)과 사용(usage)을 서로 비교할 수 있는 두 개의 별도 이벤트로 기록합니까?
[ ] 오랫동안 실행되는 에이전트의 경우, 전체 기간 동안 지속되는 자격 증명을 발급하는 대신 실행 도중에 순환시키나요?
── 패턴 끝 ──
◆ 만약 답 중 하나라도 '아니오'라면, 공격자는 에이전트의 로직을 깨뜨릴 필요가 없습니다. 그들은 단지 아무도 만료될 것이라고 생각하지 못한 자격 증명만 찾으면 됩니다.
ORBIRESEARCH
원래 OrbiResearch Lab에 게시되었습니다. 저희는 orbiresearch.com에서 프로덕션 AI 에이전트를 구축합니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기