도구가 위험하다면 높은 점수는 아무런 의미가 없습니다 — 그래서 보안 게이트(Security Gate)를 추가했습니다
요약
AI 기술 스택 추천 엔진인 SKILLmama가 라이브러리와 에이전트 기술(Agent skills)의 차별화된 보안 위협을 해결하기 위해 보안 게이트를 도입했습니다. 단순 점수 산출을 넘어 악성 지침이나 위험한 동작을 사전에 차단하는 검증 프로세스를 강화했습니다.
핵심 포인트
- 라이브러리와 에이전트 기술은 서로 다른 위협 모델을 가짐
- 에이전트 기술은 지침(instructions)을 통해 에이전트의 행동을 조작할 수 있음
- 보안 게이트를 통해 악성 라이브러리와 위험한 에이전트 기술을 사전 차단
- 안전 검사 우회, 데이터 외부 전송, 파괴적 파일 작업 등을 차단 기준으로 설정
저의 첫 번째 기사에서, 저는 SKILLmama를 구축했습니다. 이는 여러분의 정확한 스택에 가장 적합한 라이브러리를 찾아내고, 점수를 매기며, 순위를 정하는 AI 기술(skill)입니다. 탭을 여러 개 띄워놓거나 오래된 블로그 포스트를 뒤질 필요 없이, 감사 가능한 점수 산출 수학(scoring math)이 적용된 순위별 선택지를 제공합니다.
점수 산출 공식(scoring formula)은 v1.0의 핵심이었습니다:
Score = (Compatibility × 0.40) +
(Popularity × 0.30) +
(Maintenance × 0.15) +
...
x
출시 일주일 후, 저는 미처 생각하지 못했던 문제에 직면했습니다: 도구가 위험하다면 높은 점수는 아무런 의미가 없다는 사실입니다.
이것이 제가 v1.1과 v1.2에 추가한 내용이며, 이는 제가 AI 도구(tooling)를 추천하는 방식에 대한 생각을 완전히 바꾸어 놓았습니다.
문제점: 점수 산출만으로는 충분하지 않다
기존의 SKILLmama는 라이브러리의 점수를 매기고 결과를 노출했습니다. 잘 알려진 npm 패키지의 경우에는 문제가 없습니다. 하지만 검색 범위가 확장되었습니다. SKILLmama는 npm과 PyPI뿐만 아니라 GitHub, MCP 생태계, 그리고 AI 워크플로우를 위한 설치 가능한 에이전트 기술(agent skills) 디렉토리인 skills.sh까지 검색합니다.
이 파이프라인을 통해 여러분의 워크플로우에 도달할 수 있는 도구는 두 가지 유형이 있습니다:
- 라이브러리 (Libraries) — 여러분이 호출하는 코드를 전달합니다. 악성 라이브러리는 자격 증명(credentials)을 훔칠 수 있지만, 이를 실행하기 위해서는 여러분의 코드가 호출해야 합니다.
- 에이전트 기술 (Agent skills) — _지침(instructions)_을 전달합니다. 에이전트는 이를 해석하고 행동합니다. 악성 기술은 에이전트에게 다음에 무엇을 할지, 무엇을 무시할지, 사용자에게 무엇을 숨길지를 지시할 수 있습니다. 이는 호출되기를 기다리지 않습니다.
이들은 서로 다른 위협 모델(threat models)입니다. v1.1 이전의 SKILLmama는 이들을 동일하게 취급했습니다. 그것은 잘못된 방식이었습니다.
보안 게이트(Security Gate)가 실제로 하는 일
이제 모든 후보는 점수 산출 단계에 도달하기 전에 두 가지 단계를 거칩니다. (Phase 3.6 — Companion Skills Search —는 그 사이에 실행되며 아래에서 다룹니다.)
Phase 3.5 — 라이브러리 게이트 (Library Gate)
엄격한 규칙입니다. 라이브러리가 다음과 같은 경우 차단(BLOCKED) 됩니다 (점수 산출 전에 폐기되며, 절대 표시되지 않음):
- 안전 검사(safety checks)를 우회하거나 사전 검증된 상태라고 주장하는 지침을 포함하는 경우
- 공개 없이 사용자 데이터를 외부 엔드포인트(external endpoints)로 전송하는 경우
- 사용자 경고 없이 셸 명령(shell commands)을 실행하거나 파괴적인 파일 작업을 수행하는 경우
- 종속성(dependency)에 알려진 CVE가 있는 경우
보다 완화된 규칙은 후보를 폐기하지 않고 결과 카드에 표시되는 품질 플래그(quality flags) ( NVIDIA/SkillSpector에서 영감을 받은 SQP 규칙)를 생성합니다:
| 플래그 | 의미 |
|---|---|
| SQP-1 | 과도하게 광범위한 트리거 문구 — 의도치 않게 활성화될 수 있음 |
| ... |
SQP-2는 가장 자주 발생하는 플래그입니다. 많은 합법적인 도구들이 조용히 네트워크 호출을 수행합니다. 당신이 코드를 직접 작성했고 그 동작을 알고 있다면 괜찮습니다. 하지만 AI 에이전트가 아무런 말도 없이 당신을 대신해 그것을 설치했다면 이야기는 달라집니다.
단계 3.7 — 스킬 게이트 (Skills Gate) (더 엄격함)
스킬은 단계 3.6(Companion Skills Search) 이후 자체적인 게이트를 갖게 됩니다. 규칙은 라이브러리 게이트와 중복되지만, 경고(WARN) 단계는 없습니다. 스킬은 깨끗하게 통과하거나, SQP 플래그와 함께 표시되거나, 아니면 차단(BLOCKED) 됩니다. 그 이유는 다음과 같습니다:
설명 없이 자격 증명(credentials)을 읽는 라이브러리는 의심스럽습니다. 에이전트 스킬이 동일한 동작을 수행하는 것은 에이전트에게 당신의 자격 증명을 읽고 잠재적으로 그것을 이용해 무언가를 하라고 직접 지시하는 것과 같습니다. 의도가 지침 세트(instruction set)에 내장되어 있는 것입니다. 이는 더 엄격한 기준이 적용되어야 하는 부분입니다.
구체적인 예시
SKILLmama가 Node.js 프로젝트를 위한 작업 큐(job queue)를 찾고 있다고 가정해 봅시다. 단계 3(MCP Ecosystem) 및 단계 3.6(Companion Skills Search) 동안, queue-manager-skill이라는 가상의 스킬이 나타납니다.
게이트가 플래그를 지정할 수 있는 내용은 다음과 같습니다:
단계 3.7 — 평가 중: queue-manager-skill
트리거 문구: "작업을 관리해야 할 때마다"
...
이 스킬은 차단되지 않습니다. 합법적일 수도 있고, 분석 엔드포인트(analytics endpoint)가 괜찮다고 판단할 수도 있습니다. 하지만 당신은 무엇인가를 설치하기 전에 이를 확인하게 됩니다. 그것이 핵심입니다.
라이브러리 결과와 비교해 보겠습니다:
1 — BullMQ · 점수: 9.10/10
Redis 기반 작업 큐, 공식 Node.js SDK, GitHub 스타 15k.
- 호환성: 10/10 — 네이티브 Node/TypeScript, 전체 Express 통합
...
PASS는 모든 하드 게이트를 통과했고 SQP 플래그가 없다는 의미입니다. 세부 사항을 읽지 않고도 설치할 수 있습니다.
출력이 이 점에 대해 크게 알리지 않는 이유
의도적인 결정이 하나 있습니다: Phase 3.5와 3.7은 출력에서 섹션으로 나타나지 않습니다. '보안 보고서(Security Report)' 블록은 없습니다. 보안 관련 발견 사항은 오직 _각 후보 카드 내에 인라인으로_만 나타납니다.
그 이유는 다음과 같습니다: 만약 보안이 별도의 섹션이라면, 개발자들은 그것을 건너뛰게 됩니다. 카드의 일부라면, 그것은 결정의 일부가 됩니다—점수와 보안 라인을 함께 보게 됩니다. PASS는 카드에 자연스럽게 녹아듭니다. 반면, ⚠️ SQP-2는 중요한 곳에서 눈에 띕니다.
차단된 후보들은 조용히 폐기됩니다—결과에는 절대 나타나지 않고, '추가 고려 사항(Also Considered)'에도 나타나지 않습니다. 만약 무언가가 정말 위험하다면, 그것이 실패했다는 것을 알 필요가 없습니다. 그냥 보이지 않으면 됩니다.
동반 스킬: 이것이 왜 필수적이었는지
v1.2에서 SKILLmama는 Phase 3.6을 추가했습니다: 라이브러리 후보를 찾은 후, 상위 선택 항목과 쌍을 이루는 설치 가능한 에이전트 스킬을 skills.sh와 GitHub에서도 검색합니다.
첫 번째 기사의 벡터 데이터베이스 예시의 경우 다음과 같습니다:
Companion Skills:
- qdrant-memory-skill (skills.sh) — 보안: PASS
AI 에이전트용 영구 메모리로 Qdrant를 추가합니다; qdrant-client와 함께 설치하세요.
이것은 스킬에 대한 더 엄격한 게이트가 이론적인 수준을 넘어섰던 지점입니다. SKILLmama가 라이브러리와 함께 실제로 스킬을 노출하기 시작하자, 그것들은 단순히 skills.sh에 나열되어 있다는 이유만으로 안전하다고 가정할 수 없었기 때문에 실제로 평가해야 했습니다. 생태계는 그 가정이 유지되기에는 너무 새롭습니다.
제가 정한 기준점은 다음과 같습니다: 에이전트가 지침으로 해석할 수 있는 모든 것은 사용자가 직접 호출하는 코드보다 더 까다로운 게이트를 받습니다. 코드는 감사(audit)할 수 있습니다. 지침은 한눈에 추론하기가 더 어렵기 때문에—이 비대칭성이 바로 게이트가 더 엄격한 이유입니다.
실제 적용 사례는 다음과 같습니다
/skillmama find me a job queue for my Node.js + Redis project에 대한 전체 출력 결과:
Node.js / Redis / Express 기준 모든 후보자 점수 산정:
#1 — BullMQ · 점수: 9.10/10
...
설치 (Install)
모든 에이전트 (skills CLI를 통해):
npx skills add Magithar/SKILLmama
Claude Code:
cp .claude/commands/skillmama.md /your-project/.claude/commands/skillmama.md
그 후 모든 Claude Code 세션에서 /skillmama를 입력하세요.
Claude.ai: 리포지토리에서 미리 빌드된 skillmama.zip을 다운로드하여 Customize → Skills에 업로드하세요.
OpenAI Codex: codex/AGENTS.md 파일을 리포지토리 루트(root)에 배치하세요.
Antigravity: antigravity/PROMPT.md를 시스템 프롬프트 (system prompt)로 로드하세요.
리포지토리 (The Repo)
Apache 2.0 라이선스입니다. 보안 게이트 (security gate)는 네 가지 어댑터(adapter) 모두에 적용되어 있습니다. v1.0을 사용 중이었다면 최신 버전을 가져오세요(pull). 사용자가 확인할 수 있는 유일한 변경 사항은 각 결과 카드에 추가된 Security: 라인과, 에이전트 스킬(agent skills)이 발견되었을 때 나타나는 Companion Skills 섹션입니다.
실제 사용 중 발견된 보안 이슈가 있나요? issues에 남겨주세요. SQP 규칙 세트 (ruleset)는 계속 확장될 예정입니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기