에이전트 스킬이 설치 때 부여하는 권한을 두 단계로 측정한다
Beyond Maliciousness: Static and Runtime Attack-Surface Profiling of Agent Skills
무엇인가
에이전트 스킬은 SKILL.md라는 마크다운 문서와 함께 딸려 오는 스크립트·데이터 디렉터리다. 에이전트가 스킬을 로드하면 문서 내용이 지시문이 되고 스크립트는 실행 프로그램이 되며, 설치란 그 디렉터리를 에이전트가 찾는 위치에 복사하는 일에 지나지 않는다. 그 순간부터 스킬은 에이전트가 이미 들고 있던 셸, 파일시스템, 네트워크, 자격증명 권한 안에서 돈다. 기존 연구는 "이 스킬이 해를 끼치려 하는가"라는 질문에 답해 왔지만, 이 논문은 대부분의 사용자에게 더 중요할 수 있는 두 번째 질문, 즉 "설치가 어떤 권한을 부여하는가"를 측정 대상으로 삼는다.
어떻게 동작하나
방법은 두 단계다. 정적 단계에서는 모델 분석가가 프론트매터·스크립트·번들 리소스를 포함한 번들 전체를 보안 루브릭에 비추어 읽고 발견 사항을 내놓으며, 여기에 하드코딩된 시크릿, 파이프 설치자, 보이지 않는 유니코드, 난독화 바이너리를 잡는 결정론적 휴리스틱 네 개가 붙는다. 같은 단계에서 의존성 프로비넌스도 확인한다. 참조된 의존성·저장소·게시 계정이 실제로 해석되는지, 버전이 고정됐는지, 탈취에 취약한 호스트인지를 본다. 동적 단계에서는 거의 모든 리스팅을 격리 샌드박스에서 디토네이션하고, 정적 분석가와는 다른 judge 모델이 남은 트레이스를 평가한다. 측정 항목은 세 가지로 분리된다. 악성 의도는 0.70 이상이면 malicious, 0.50 이상이면 suspicious로 자르는 임계 점수이고, 노출 위험은 0~10 스케일의 agentic exposure score를 low·medium·high·critical로 밴딩한 것이며, 공격 표면은 70개 모델 라벨을 11개 그룹으로 접은 서술적 능력 목록이다. 능력 프로파일은 악성 점수에 기여하지 않도록 설계 단계에서부터 분리돼 있다.
무엇과 다른가
대상은 두 마켓플레이스의 6,309개 리스팅(skillsmp 3,947, ClawHub 2,362)이고 게시자는 2,392명이다. 중요한 점은 실행 대상 리스팅을 고를 때 사전 위협·위험 신호를 전혀 쓰지 않았다는 것이다. 인기 구간으로 층화해 표집했을 뿐이다. 결과는 이렇다. 절반이 셸 실행 능력의 증거를 갖고 있고, 파일시스템 읽기 35%, 파일시스템 쓰기 31%, 네트워크 이그레스 31%, 자격증명 접근 13%이며, 10개 중 7개(4,431개)가 최소 하나의 상승된 능력을 지닌다. 반면 비악성 판정은 338개로 5.4%(malicious 206, suspicious 132)에 그친다. 위협 판정을 받은 리스팅은 전부 medium 이상 노출에 놓여 위협이 위험을 함의하지만, 역은 성립하지 않는다. high·critical 노출에 있으면서 악성 판정이 없는 리스팅이 1,306개로, 같은 구간의 플래그된 315개보다 네 배 많다. 이 무해 라벨이 단순 미탐은 아니라는 근거로, 무해 모집단에서 무작위로 뽑은 140개를 모든 파일까지 손으로 읽었고 놓친 위협은 없었으며 이는 무해 오탐률에 약 2.1%의 단측 95% 상한을 준다.
어떻게 쓰나
권한 모델은 사실상 작동하지 않는다. 프론트매터가 파싱되는 6,061개 중 무엇이든 선언한 리스팅은 770개뿐이고, 그중 457개(선언 리스팅의 59%)가 번들이 실제로 할 수 있는 일을 축소해 적었다. 어휘 자체에 자격증명 접근이나 환경 접근을 표현할 수단이 없고, 선언된 내용을 번들과 대조하는 검사도 없다. 흥미로운 반전은 마켓플레이스 간 차이다. ClawHub는 skillsmp보다 선언을 두 배쯤 자주 하지만, 선언한 것 중 88%가 축소 선언인 반면 skillsmp는 31%다. 선언율이 정확도를 예측하지 않는다는 뜻이고, 그래서 마켓플레이스 경계의 심사는 선언문이 아니라 번들이 무엇을 할 수 있는지에 기대야 한다.
전제와 한계
두 단계는 서로 다른 것을 본다. 위협 축에서 어느 한 단계라도 플래그한 리스팅은 336개인데 둘 다 잡은 것은 11개뿐이다(정적 303, 디토네이션 44). 위험 축에서는 둘 다 978개, 정적 단독 1,653개, 디토네이션 단독 708개로, 어느 한쪽이 플래그한 3,339개 중 2,361개가 한 단계에서만 보인다. 패턴별로도 방향이 갈린다. 디토네이션은 컴포넌트를 넘어 번지는 침해를 730개에서 보고한 반면 정적 분석은 526개였고, 반대로 과제를 넘어 확장되는 에이전트 권한은 정적이 776개, 디토네이션이 182개였으며 검증되지 않은 서드파티 컴포넌트는 703개 대 1개였다. 한 번의 세션은 번들 코드 경로의 일부만 지나가므로 런타임 관찰은 하한이고, 정적 추론은 텍스트를 읽어 실행 없이도 보이는 것을 잡는다.
실무적으로 이 논문이 주는 메시지는 두 가지다. 첫째, 스킬의 allowed-tools 선언은 제한이 아니라 확인 프롬프트를 없애는 사전 승인이며, 그 승인은 스킬을 설치하는 모든 저장소로 따라간다. 둘째, 심사는 선언이 아니라 번들에서 유도한 능력 프로파일 위에서 이뤄져야 한다. 저자들은 자격증명 접근과 네트워크 이그레스를 동시에 가진 397개, 소위 lethal trifecta를 만족하는 628개처럼 작고 구체적인 조합을 게시 경계에서 게이팅하자고 제안한다. 정적 단계는 실행 없이 제출 시점에 돌릴 수 있으므로 이 프로파일은 배포 전에 만들 수 있다.
한계는 저자들이 상당히 명시적으로 밝힌다. 코퍼스는 완전 전수조사도 확률 표본도 아닌 인기 구간 표본이라 마켓플레이스 전체 기저율로 읽으면 안 되고, 게시자 집중도가 높아(한 게시자가 266개, 평균 2.6개) 리스팅이 독립 추출이 아니다. 판정은 사실 확정이 아니라 임계가 걸린 모델 점수이며, 89회 재스캔에서 재현율 84%, 무해 라벨 자기일관성 약 98%였다. 대부분의 리스팅은 대조군 없이 한 번만 실행돼 런타임 관찰이 리스팅에 귀속되지 않고 코호트 전체 유병률로만 보정된다. 능력·증폭 라벨은 모델이 뱉은 자유 텍스트를 사후 정규화한 것이라 희귀 라벨 수치는 참고용이다. 인간 검토 코호트는 410개로 한 마켓플레이스에만 걸쳐 있고 집필 시점에 진행 중이라 정밀도 수치는 보고되지 않는다. 프로비넌스 검사는 존재만 확인할 뿐 의도를 확인하지 않으며 타이포스쿼팅 탐지는 하지 않는다. 마지막으로 스캐너는 저자 소속 기관이 만들고 운영하며 외부 검증이나 정답 데이터가 없었고, 원 스캔 보고서와 번들은 공개되지 않는다.