스킬은 코드다, 그리고 코드에는 체크포인트가 필요하다

스킬은 코드다, 그리고 코드에는 체크포인트가 필요하다
NVIDIA가 이번 주 SkillSpector라는 도구를 오픈소스로 공개했다. 그 역할은 좁고, 오히려 늦은 감이 있다. 에이전트가 스킬을 로드하기 전에 보안 문제를 스캔하는 것이다. 이 프로젝트에는 64가지 취약점 패턴에 대한 탐지가 포함되어 있는데, 이 숫자는 잠시 짚고 넘어갈 만하다. 누군가 자리에 앉아 스킬이 잘못될 수 있는 방식들을 하나하나 나열했다는 뜻이기 때문이다.
같은 시기 Cloudflare는 코드베이스에 다단계 감사를 수행하고 기계가 읽을 수 있는 결과를 내놓는 보안 감사 스킬을 공개했고, GitHub는 문맥을 인식하는 시크릿 탐지 분류기를 상세히 소개했다. 이는 실제 탐지 결과의 가중 채택률을 11.5% 높이면서 스캔 시간 중앙값을 86% 줄였다. 서로 다른 세 팀, 서로 다른 세 관점, 결론은 같다. 에이전트가 지시를 받는 이 계층은 인프라가 되었고, 인프라는 감사받는다.
스킬이란 실제로 무엇인가
"스킬"이라는 단어는 전체를 실제보다 부드럽게 들리게 만든다. 스킬은 설정 항목이 아니다. 그것은 지시의 묶음이며, 흔히 스크립트, 템플릿, 도구 정의까지 포함한다. 에이전트는 그것들을 읽고 자신에게 부여된 권한으로 그대로 따른다.
마지막 문장이 보안 모델을 한 문장으로 요약한 것이다. 스킬에는 익스플로잇이 필요 없다. 침입하는 것이 아니기 때문이다. 초대받고, 열쇠를 건네받고, 도움을 요청받는다. 그 지시가 악의적이거나 그저 허술하게 작성되었다면, 에이전트는 그것을 당신 자신의 의도인 양 실행한다. 에이전트가 보기에 실제로 그렇기 때문이다.
이것은 패키지 관리자들이 수십 년 전에 마주한 것과 같은 문제이며, 같은 방식으로 해결되었다. 공급망은 적대적이라고 가정하고, 그 안에 체크포인트를 넣는 것이다. 에이전트 생태계는 그 과정에서 아직 초기 단계에 있고, 그래서 SkillSpector 같은 프로젝트는 star 수가 시사하는 것보다 훨씬 중요하다.

64가지 패턴이 흥미로운 숫자인 이유
64가지 취약점 패턴의 목록은 분류 체계이며, 분류 체계는 분야가 성숙하는 방식이다. 그것이 없기 전에는 모든 사고가 뜻밖의 일이다. 그것이 생긴 뒤에는 사고가 알려진 부류의 한 사례가 되어, 테스트하고 추적하고 결국 설계로 제거할 수 있다.
그중 일부 부류는 일반 소프트웨어에서 익숙하다. 안전하지 않은 셸 명령, 검증되지 않은 입력, 절대 담아서는 안 될 파일에 기록된 자격 증명 같은 것들이다. 다른 것들은 이 새로운 계층에 특유하다. 말하지 않고 에이전트의 범위를 넓히는 지시. 신뢰할 수 없는 콘텐츠를 끌어와 명령으로 취급하는 프롬프트. 도구의 동작을 거짓으로 설명해 에이전트가 잘못된 이유로 그것을 호출하게 만드는 서술. 다른 스킬들을 이어 붙여 아무도 의도하지 않은 경로를 만드는 스킬.
마지막 범주에 어려움이 있다. 스킬이 위험한 정도는 정확히 그것이 닿을 수 있는 범위에 비례하며, 현대의 에이전트는 많은 것에 닿는다. 파일 시스템, 네트워크, 다른 에이전트, 다른 스킬이 등록한 도구까지. 나쁜 스킬의 폭발 반경은 그 스킬이 아니다. 에이전트가 건드릴 수 있는 모든 것이며, 이는 어떤 다른 스킬이 먼저 로드되었는지에 달린 움직이는 표적이다.
오염된 문맥 문제
에이전트 보안에서 불편한 부분은 데이터와 지시 사이의 경계가 어떤 것으로도 강제되지 않는다는 점이다. 모델은 텍스트를 읽는다. 어떤 문장이 고려할 사실이고 어떤 문장이 따를 명령인지 본질적으로 알지 못한다.
그래서 웹 페이지를 가져오거나, 이슈 트래커를 읽거나, 이메일을 요약하는 스킬은 에이전트를 지시를 담고 있을 수 있는 텍스트에 노출시킨다. 모델이 그것을 따르더라도 전통적인 의미의 익스플로잇은 없다. 다만 신뢰해서는 안 될 무언가가 시키는 대로 한 시스템이 있을 뿐이다.
그래서 스캔은 사고 시점이 아니라 로드 시점에 이루어져야 한다. 스킬이 넓은 권한을 가진 에이전트 안에서 이미 실행되고 있다면, 핵심 질문은 이미 나쁘게 답해진 상태다. 체크포인트는 먼저 와야 하고 자동이어야 한다. 레지스트리에 있는 모든 스킬을 사람이 검토하는 것은 확장되지 않으며 앞으로도 결코 그럴 것이다.
감사가 제품이 되고 있다
Cloudflare의 발표는 두 번째 흐름을 가리킨다. 그 감사 스킬은 누군가 읽어야 하는 목록이 아니라 기계가 읽을 수 있는 결과를 만든다. 이 표현은 실제로 일을 한다. 사람이 읽어야 하는 결과는 사람이 훑어보게 되는 결과다. 파이프라인이 소비할 수 있는 결과는 누군가 챙겨 보는 것을 기억하지 않아도 티켓이 되고, 병합이 차단되고, 배포가 거부될 수 있다.
GitHub의 시크릿 탐지 작업도 같은 패턴에 맞는다. 시크릿 유출은 코드 생산량에 비례해 늘어나고, 코드 생산량은 급증했다. 대응은 "리뷰어를 더 뽑자"가 아니었다. 노이즈를 줄이는 문맥 인식 분류기였고, 사람들이 실제로 보는 경보가 진짜일 가능성을 높였다. 보안 도구에서 정밀도는 석 달 뒤에도 누군가 경보를 읽는지를 결정한다.
둘 다 서로 다른 계층에서 취한 같은 수다. 사람에게 더 경계하라고 요구하는 대신, 자동 점검을 충분히 좋게 만들어 사람의 주의를 정말로 중요한 곳에만 쓰게 하는 것. 그것이 물량과 맞닥뜨려도 살아남는 유일한 전략이다.
그 아래에 있는 거버넌스 질문
여기에는 대부분의 팀이 깨닫는 것보다 빠르게 움직이는 정책 계층이 있다. 버전 관리 시스템은 이력(출처) 메타데이터를 싣기 시작했다. 패키지 레지스트리는 증명을 추가하고 있다. 표준 기구는 합성 콘텐츠에 어떻게 라벨을 붙이고 에이전트를 어떻게 식별할지를 연구하고 있다. 나아가는 방향은 산출물의 출처와 무결성이 가정이 아니라 증명 가능해야 하는 세계다.
스킬은 그 세계에서 어색하게 자리한다. 같은 스킬이 문맥에 따라 유용할 수도 위험할 수도 있기 때문이다. 파일을 수정할 수 있는 스킬은 코딩 에이전트에는 필수지만, 신뢰할 수 없는 이메일도 읽는 에이전트에는 재앙이다. 신뢰 결정은 스킬 하나의 속성이 아니다. 스킬에 환경을 더하고, 다시 닿을 수 있는 다른 스킬을 더한 것의 속성이다.
이는 스캐너가 결국 패턴 매칭 이상을 해야 한다는 뜻이다. 이 도구의 진정으로 어려운 버전은 제안된 스킬 조합이 아무도 요청하지 않은 능력을 부여하는지 검사하고, 출시 후가 아니라 출시 전에 경고한다.
팀이 지금 해야 할 일, 과잉 반응 없이
공황은 올바른 반응이 아니고, 이것을 남의 문제로 취급하는 것도 틀렸다.
실제 행동은 화려하지 않다. 서드파티 스킬을 신뢰할 수 없는 의존성으로 취급하라, 정말 그것이기 때문이다. 버전을 고정하고 변경될 때 diff를 검토하라. 폭발 반경이 제한된 환경에서 에이전트를 실행해, 편리하다는 이유만으로 나쁜 스킬이 네트워크나 프로덕션 데이터베이스에 닿지 못하게 하라. 어떤 스킬이 로드되고 무엇을 했는지 로그로 남겨라, 사고 후 첫 번째 어려운 질문은 무엇의 실행이 허용되었는가이기 때문이다.
업계는 이 길을 전에 걸어봤다. 패키지 생태계는 안전하지 않았고, 이후 공격하기 번거롭게 만들어졌으며, 그 번거로움이 핵심이다. 에이전트 스킬도 같은 평형으로 향하고 있고, 이번 주에 나온 프로젝트들은 체크포인트를 세우려는 첫 진지한 시도다. 사고 전에 도달하는 것이 사고 후보다 저렴하며, 일찍 도달하기 위해 필요한 것은 지루함을 감수하려는 의지뿐이다.
관련 글
아카데미가 그은 선, 그 초점은 도구가 아니다
아카데미는 AI 생성 연기와 AI 각본을 오스카에서 배제하면서도 시각효과와 복원에서의 AI 활용은 허용한다. 경계는 기술이 아니라 작가성에 그어졌고, 노조와 법정, 영화제가 나란히 자기 선을 긋고 있다.
GitHub에서 가장 인기 있는 새 기술은 말을 줄이는 것
GitHub에서 가장 빠르게 성장하는 저장소는 원시인처럼 말해 token 사용량을 약 65% 줄이는 caveman이라는 Go 프로젝트다. Headroom과 Xerj는 같은 컨텍스트 비용 문제를 다른 각도에서 공략한다.
30년 된 추측, 중국 모델, 그리고 기계 검증된 증명
Shanghai AI Laboratory는 30년간 미해결이던 Ghys 추측의 3차원 경우를 증명했다고 발표했다. 작업에는 Intern-S2가 활용되었고 Lean에서 형식 검증되었다.
Anthropic이 자체 Git 대안을 만든 이유: 코드 양이 인간 리뷰를 앞지를 때
Anthropic이 Git을 교체한 이유는 버그나 보안 사고가 아니라, 변경량이 인간의 속도를 전제한 버전 관리가 감당할 범위를 넘어섰기 때문이다. 가장 먼저 무너지는 것은 리뷰, 정체성, 그리고 브랜치 자체다.