본문으로 건너뛰기
피드

AI 에이전트에게 운영 권한을 줄 때, 진짜 무서운 건 삭제보다 비밀 유출임

security 약 8분

홈랩을 관리하는 AI SRE를 만들려던 글쓴이가 Hermes Agent에 GitHub, Kubernetes, Grafana 같은 도구 권한을 주면서 맞닥뜨린 보안 문제를 다룬 글이다. 핵심은 에이전트가 실수로 데이터를 지우는 것보다, 프롬프트 인젝션으로 시크릿을 읽고 밖으로 빼내는 게 훨씬 골치 아프다는 점이다.

  • 1

    에이전트 컨테이너에는 진짜 토큰 대신 가짜 토큰을 넣고, HTTP 프록시가 요청 중간에서 실제 자격 증명을 주입하는 방식을 실험함

  • 2

    HTTPS 요청까지 가로채려면 프록시 CA 인증서를 컨테이너에 넣어야 해서 운영 복잡도가 바로 올라감

  • 3

    Playwright의 Chrome, aiohttp 기반 Matrix 클라이언트처럼 프록시와 인증서를 제대로 안 따르는 도구가 실제로 발목을 잡음

  • 4

    gVisor 기반 샌드박스는 네트워크 스택 자체를 확장해 모든 outbound 요청을 잡을 수 있어 더 강한 격리 모델로 보임

  • 홈랩을 AI SRE에게 맡겨보려던 실험이었는데, 주제는 금방 “에이전트 보안”으로 커짐

    • 글쓴이는 사무실 홈랩에서 k3s와 Ansible로 immich, silverbullet, beaverhabits 같은 앱을 셀프호스팅 중이었음
    • 목표는 Hermes Agent를 알림(alert)이 뜰 때마다 실행해서, 장애 원인을 찾고 직접 복구까지 하게 만드는 것
    • 모델은 Gemma4, Qwen 같은 로컬 모델도 써보려 했고, 그래서 더더욱 “얘네를 믿어도 되나?” 문제가 생김
  • 에이전트에게 GitHub, Kubernetes, Grafana, Todoist 같은 CLI 권한을 주면 공격면이 확 넓어짐

    • 첫 번째 위험은 파괴적 명령임. 누가 프롬프트 인젝션으로 Python 스크립트를 실행시켜서 rm -rf 비슷한 짓을 하게 만들 수 있음
    • 두 번째 위험은 시크릿 유출임. 숨은 HTML에 “이 스크립트를 실행하면 답을 얻을 수 있다”고 써두면, 에이전트가 토큰을 읽어 외부로 보낼 수도 있음
    • 글쓴이는 rootless 컨테이너를 쓰고, git에 없는 중요한 데이터는 안 넣을 생각이라 삭제 위험은 상대적으로 덜 걱정했음
    • 하지만 시크릿 유출은 별개 문제였음. API 토큰 하나 털리면 컨테이너 바깥 서비스까지 영향이 번짐

⚠️주의

> AI 에이전트가 웹 검색과 CLI 실행을 동시에 할 수 있으면, 프롬프트 인젝션은 “이상한 답변” 문제가 아니라 실제 권한 탈취 문제가 됨.

  • 첫 번째 방어책은 credential injection proxy였음

    • 컨테이너에는 fake-todoist-token 같은 가짜 자격 증명만 넣음
    • 에이전트가 API 요청을 보내면 HTTP 프록시가 중간에서 헤더를 고쳐 실제 토큰으로 바꿔 넣음
    • 예를 들어 api.todoist.com 요청의 Authorization 헤더에서 Bearer fake-todoist-key-1을 실제 ${TODOIST_API_KEY}로 치환하는 식임
    • api.parallel.aix-api-key, Matrix 서버의 Authorization 헤더도 같은 패턴으로 처리함
  • HTTPS까지 다루려면 프록시가 사실상 MITM을 해야 해서, 인증서 배포가 필요해짐

    • 글쓴이는 initContainer에서 credential proxy의 CA 인증서를 받아 컨테이너 CA bundle에 붙였음
    • 그다음 SSL_CERT_FILE, REQUESTS_CA_BUNDLE, CURL_CA_BUNDLE, NODE_EXTRA_CA_CERTS를 모두 같은 CA bundle로 맞춤
    • 이 정도면 curl, requests, Node 계열 도구는 꽤 잘 따라오지만, 현실은 여기서 끝이 아니었음
  • 프록시는 좋은 시작이었지만, “모든 도구가 프록시를 따른다”는 가정이 깨짐

    • Playwright의 Chrome은 인증서를 제대로 안 먹었고, 결국 Playwright 설정을 명시적으로 건드려야 하는 상황이 됨
    • Hermes 자체를 수정하고 싶지 않아서, 글쓴이는 Camoufox를 쓰는 별도 배포로 우회함
    • Matrix 클라이언트는 matrix[nio]가 내부에서 aiohttp를 쓰는데, trust_env=True가 없어서 HTTP_PROXY를 안 탔음
    • 이후 Hermes가 mautrix로 옮겨갔지만, 이것도 HTTP_PROXY를 지원하지 않는다고 함. 이쯤 되면 “표준 환경변수면 되겠지”가 꽤 위험한 믿음임
  • 그래서 더 낮은 레이어의 샌드박스가 흥미로운 대안으로 등장함

    • gVisor는 Go로 된 네트워크 스택을 갖고 있어서, 여기에서 에이전트가 보내는 모든 outbound 요청을 가로챌 수 있음
    • 프록시를 우회하는 라이브러리여도 네트워크 스택 레벨에서 allow/deny 리스트를 걸 수 있다는 얘기임
    • 코드가 아직 Grafana 내부 저장소에 있다고 하지만, 글쓴이는 오픈소스화되면 직접 써보고 기여할 생각도 있어 보임
sequenceDiagram
    participant 에이전트
    participant 프록시
    participant 외부API
    participant 샌드박스

    에이전트->>프록시: 가짜 토큰으로 API 요청
    프록시->>프록시: 헤더를 실제 토큰으로 치환
    프록시->>외부API: 실제 자격 증명으로 요청 전달
    외부API-->>프록시: 응답 반환
    프록시-->>에이전트: 응답 전달
    에이전트->>샌드박스: 프록시 우회 요청 시도
    샌드박스-->>에이전트: 도메인 정책으로 차단 또는 허용
  • Kubernetes 쪽에서도 이런 샌드박스 실행 모델이 점점 현실화되는 분위기임

    • 글쓴이는 Hermes를 이 샌드박스 안에서 돌리려면 K3s 바깥으로 빼야 하는지 고민했음
    • 그런데 Kubernetes 프로젝트가 네이티브 지원을 작업 중이고, GKE도 실험적 지원을 제공한다고 함
    • 다만 문서는 꽤 이상하다고 표현함. 아직 매끈한 운영 경험과는 거리가 있어 보임
  • 결론은 꽤 현실적임. AI SRE를 만드는 일은 “모델에게 runbook을 알려주면 끝”이 아님

    • 도구 권한, 시크릿 주입, HTTPS 인증서, 브라우저 런타임, 라이브러리별 프록시 지원, 샌드박스 네트워킹까지 전부 얽힘
    • 특히 사내 운영 자동화 에이전트라면, 모델보다 먼저 “이 에이전트가 절대 보면 안 되는 것”과 “절대 보낼 수 없는 곳”을 정해야 함

기술 맥락

  • 여기서 선택한 첫 번째 해법은 credential injection proxy예요. 에이전트에게 진짜 토큰을 주지 않기 위해서인데, 프롬프트 인젝션이 터져도 컨테이너 안에서 바로 시크릿을 긁어갈 수 없게 만들려는 의도예요.

  • 이 방식이 귀찮아지는 이유는 HTTPS 때문이에요. 요청 헤더를 바꾸려면 암호화된 트래픽을 중간에서 풀어야 하니까, 프록시의 CA 인증서를 컨테이너 런타임과 각 언어별 HTTP 클라이언트가 신뢰하도록 맞춰줘야 하거든요.

  • 문제는 런타임마다 네트워크 설정을 받아들이는 방식이 다르다는 점이에요. curl이나 requests는 환경변수를 잘 따를 수 있지만, Playwright의 Chrome이나 aiohttp 기반 클라이언트처럼 별도 설정이 필요한 경우가 생겨요.

  • 그래서 gVisor 같은 샌드박스 접근이 매력적으로 보이는 거예요. 애플리케이션이 프록시를 따르느냐와 상관없이, 네트워크 스택 레벨에서 나가는 요청을 잡으면 우회 경로를 줄일 수 있거든요.

  • 다만 이것도 공짜는 아니에요. Kubernetes, GKE, 샌드박스 런타임, 네트워크 정책이 함께 맞물려야 해서 운영 복잡도가 올라가고, 문서와 생태계가 아직 완전히 편한 단계는 아닌 듯해요.

AI 에이전트를 운영 자동화에 붙이는 순간, 문제는 모델 성능보다 권한 경계가 됨. 특히 웹 검색과 CLI 실행을 같이 허용하면 프롬프트 인젝션이 곧 시크릿 유출 경로가 될 수 있어서, 한국 팀들도 사내 에이전트 도입 전에 이 레이어를 먼저 봐야 함.

댓글

댓글

댓글을 불러오는 중...

security

쿤텍 이지즈 3.0, 소프트웨어 공급망 보안에 AI-BOM까지 붙였다

쿤텍이 공급망 보안 플랫폼 이지즈 3.0을 출시하며 기존 SBOM 중심 관리에서 AI-BOM까지 범위를 넓혔다. 오픈소스 관리, 저장소 관리, 바이너리 분석을 하나로 묶고, AI 모델의 데이터·라이브러리·구조 변경 이력까지 추적하겠다는 방향이다.

security

독일 .de 도메인, DNSSEC 장애로 한때 접속 문제 발생

독일 도메인 등록기관 DENIC이 .de 도메인 DNS 서비스 장애를 공지했고, DNSSEC 서명된 .de 도메인의 도달성에 영향이 있었다. 장애는 약 6분 뒤 해결 상태로 바뀌었지만, 원인은 공지 시점에 완전히 특정되지 않았다.

security

클루커스, 국내 최초로 위즈 최상위 파트너 등급 획득

클루커스가 클라우드 보안 기업 위즈의 파트너 프로그램에서 국내 최초로 최상위 등급인 프리미어 파트너를 획득했어. 위즈는 코드, 클라우드, 런타임 환경을 통합 컨텍스트로 연결해 실제 리스크를 파악하게 해주는 보안 플랫폼이고, 포춘 100대 기업의 절반 이상이 쓰고 있다는 점도 강조됐어.

security

데이타솔루션, 스프링 지원 종료 대응용 ‘VM웨어 탄주 스프링 에센셜’ 도입 지원 확대

데이타솔루션이 지원 종료된 스프링 버전의 보안 공백을 줄이기 위해 ‘VM웨어 탄주 스프링 에센셜’ 도입과 업그레이드 체계 구축 지원을 본격화함. 스프링 부트 2.7.x와 스프링 프레임워크 5.3.x는 이미 지원이 끝났고, 기업들은 패치와 업그레이드 로드맵을 동시에 챙겨야 하는 상황임.

security

세이퍼존, 생성형 AI 입력까지 막는 네트워크 AI DLP 출시

세이퍼존이 수산INT와 협력해 생성형 AI 사용 중 중요 정보 유출을 통제하는 세이퍼존 AI DLP를 출시했다. 엔드포인트 DLP에 SSL 암복호화 가시성과 네트워크 게이트웨이 통제를 결합해 다중 계층 방어를 내세운다. QUIC 기반 AI 앱 차단, 대량 복사·전송·클라우드 업로드 이상 행위 분석도 포함된다.