Community라이팅 & 에디팅github.com

jpoindexter/security-skills

보안 스캔을 실행하는 에이전트 스킬 — 시크릿 스캐닝(gitleaks), 종속성 CVE 감사(npm/cargo/osv), SAST(semgrep), 조합된 사전-릴리스 게이트를 포함합니다. Vanta / Claude Code / 모든 스킬 인식 에이전트를 위한 명확한 SKILL.md 실행 설명서를 제공합니다. MIT 라이선스.

security-skills란 무엇인가요?

이 스킬은 AI 에이전트(Claude Code, Vanta 등)가 보안 취약점을 정적으로 분석할 수 있도록 설계된 실행 가능한 지침을 제공합니다. SAST 스캔, 종속성 감사, 시크릿 스캐닝 등 다양한 보안 도구를 통합하여 개발 워크플로우에 쉽게 통합할 수 있습니다. 특히 코드 리뷰나 릴리스 전 단계에서 실행 가능한 SAST(semgrep) 명령어를 제공하며, 발견된 취약점에 대한 체계적인 분류 방법(소스→싱크 추적)을 설명합니다. CLI 명령어를 그대로 사용할 수 있어 에이전트가 자동으로 보안 검사를 수행하고 결과를 분석할 수 있습니다. 또한 각 보안 스캔 도구의 한계(예: SAST는 런타임 구성을 볼 수 없음)를 명확히 설명하여 사용자가 적절한 보안 전략을 수립하도록 돕습니다.

지원 대상✓Claude Code~Codex CLI~Cursor
npx skills add jpoindexter/security-skills

Installed? Explore more 라이팅 & 에디팅 skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

SAST 스캔

종속성 감사는 가져온 코드를 검사하는 반면, SAST는 직접 작성한 코드를 검사합니다. 패턴 매칭(그리고 테인트 모드를 통한 데이터 흐름 추적)을 통해 명령어/SQL 인젝션, 경로 탐색, 안전하지 않은 역직렬화, 신뢰할 수 없는 입력에 대한 eval/동적 실행, 하드코딩된 암호화, 누락된 인증 검사 등 전형적인 결함을 찾아냅니다. 높은 오탐률은 본질적인 특성이며, 중요한 것은 무시하는 것이 아니라 도달 가능성에 따라 분류하는 것입니다.

실행 시점

  • 릴리스 전, diff 또는 전체 트리를 대상으로.
  • 신뢰할 수 없는 입력을 처리하는 코드(새로운 도구, 엔드포인트, 파서, 쉘 호출)를 추가할 때.
  • PR에 대한 CI에서(diff 범위로 제한되어 빠르며 새로운 문제만 찾아냅니다).

실행 방법

# semgrep — 보안 규칙 세트. `auto`는 감지된 언어에 따라 규칙을 선택합니다.
semgrep scan --config auto --error .

# 집중된, 더 높은 신호 규칙 세트(auto보다 노이즈가 적습니다):
semgrep scan --config p/security-audit --config p/secrets --config p/command-injection .

# Diff만(PR의 CI — 빠르고, 새로운 발견만):
semgrep scan --config auto --baseline-commit origin/main .

더 깊은 데이터 흐름(신뢰할 수 없는 입력이 실제로 싱크에 도달하는가?)을 위해서는 CodeQL이 더 강력하지만 무겁습니다:

codeql database create db --language=javascript    # 또는 rust, python, …
codeql database analyze db --format=sarif-latest --output=results.sarif \
  codeql/javascript-queries:codeql-suites/javascript-security-extended.qls

분류 — 무시하지 말고 추적하세요

각 발견에 대해 소스 → 싱크 경로를 추적하십시오:

  1. 입력이 공격자에 의해 제어됩니까? 하드코딩된 상수에 대한 child_process.exec는 괜찮습니다. 요청 매개변수에 대한 것은 명령 인젝션 버그입니다. semgrep은 싱크를 표시합니다. 여러분이 소스를 확인하세요.
  2. 그 사이에 살균 장치가 있습니까? 값이 싱크에 도달하기 전에 검증/이스케이프되었다면(zod 스키마, 허용 목록, 매개변수화된 쿼리) 오탐입니다. # nosemgrep: <규칙-id>로 표시하되 이유를 한 줄로 작성하고, 단순히 무시하지 마세요.
  3. 실제 문제인가요? 소스(입력 검증/이스케이프) 또는 싱크(매개변수화, 안전한 API 사용)에서 수정하고, 경고를 억제하지 마세요.

문제를 없애기 위해 규칙을 일괄 비활성화하지 마십시오. 그러면 노이즈 속에 있는 실제 문제 하나까지 억제하게 됩니다. 줄 단위로, 이유와 함께 억제하세요.

실제로 수정할 사항(가치가 높은 순서)

  • 인젝션(명령어/SQL/템플릿) — 사용자 도달 가능한 경로에서 가장 심각하고 가장 많이 악용되는 부류입니다.
  • 경로 탐색 — 검증되지 않은 경로가 파일 읽기/쓰기에 도달하는 경우(파일을 쓰는 에이전트는 정확히 이 위험이 있습니다. 범위 검사를 게이트로 사용하세요).
  • 동적 문자열의 안전하지 않은 exec/eval.
  • 보안 컨텍스트에서의 하드코딩된 암호화 / 취약한 난수성.

경계

SAST는 한 저장소의 소스를 정적으로만 봅니다. 런타임 구성, 환경 변수에 따른 코드 경로, 서비스 경계를 넘어서만 나타나는 결함을 볼 수 없습니다. 이는 실제 위협 모델 및 [[dependency-audit]]을 보완할 뿐 대체하지 않습니다. 에이전트/도구 런타임의 경우 가장 강력한 제어는 종종 코드 한 줄보다는 아키텍처(모든 동작을 게이트하는 커널)에 있습니다. SAST는 그 경계 주변의 코드를 검증합니다. [[security-preflight]]에 통합하세요.

관련 스킬