
skill-scanner v2.0.14
एजेंट स्किल्स के लिए सुरक्षा स्कैनर
स्किल स्कैनर
AI एजेंट स्किल्स के लिए एक बेस्ट-एफर्ट सुरक्षा स्कैनर जो प्रॉम्प्ट इंजेक्शन, डेटा एक्सफिल्ट्रेशन और दुर्भावनापूर्ण कोड पैटर्न का पता लगाता है। संभावित खतरों की पहचान कवरेज को अधिकतम करने और गलत सकारात्मक परिणामों को कम करने के लिए पैटर्न-आधारित डिटेक्शन (YAML + YARA), LLM-एज़-ए-जज, और व्यवहारिक डेटाफ्लो विश्लेषण को जोड़ता है।
महत्वपूर्ण: यह स्कैनर बेस्ट-एफर्ट डिटेक्शन प्रदान करता है, व्यापक या पूर्ण कवरेज नहीं। एक स्कैन जो कोई निष्कर्ष नहीं लौटाता है, यह गारंटी नहीं देता कि कोई स्किल सभी खतरों से मुक्त है। नीचे दायरा और सीमाएँ देखें।
OpenAI Codex Skills और Cursor Agent Skills प्रारूपों का समर्थन करता है, जो Agent Skills विनिर्देशन का पालन करते हैं। --lenient के साथ, यह गैर-मानक प्रारूपों जैसे Claude Code .claude/commands/*.md और फ्लैट मार्कडाउन स्किल रिपॉजिटरी को भी स्कैन करता है।
मुख्य विशेषताएँ
- मल्टी-इंजन डिटेक्शन - स्थैतिक विश्लेषण, व्यवहारिक डेटाफ्लो, LLM सिमेंटिक विश्लेषण, और क्लाउड-आधारित स्कैनिंग परतदार, बेस्ट-एफर्ट कवरेज के लिए
- गलत सकारात्मक फ़िल्टरिंग - मेटा-विश्लेषक डिटेक्शन क्षमता को बनाए रखते हुए शोर को काफी कम करता है
- CI/CD के लिए तैयार - GitHub कोड स्कैनिंग के लिए SARIF आउटपुट, पुन: प्रयोज्य GitHub Actions वर्कफ़्लो, बिल्ड विफलताओं के लिए एग्ज़िट कोड
- प्री-कमिट हुक - प्रत्येक कमिट से पहले स्किल्स को स्कैन करने के लिए मानक pre-commit फ्रेमवर्क एकीकरण
- विस्तार योग्य - कस्टम विश्लेषकों के लिए प्लगइन आर्किटेक्चर
Cisco AI Discord में शामिल हों चर्चा करने, फीडबैक साझा करने या टीम से जुड़ने के लिए।
दायरा और सीमाएँ
स्किल स्कैनर एक डिटेक्शन टूल है। यह ज्ञात और संभावित जोखिम पैटर्न की पहचान करता है, लेकिन यह सुरक्षा प्रमाणित नहीं करता।
मुख्य सीमाएँ:
- कोई निष्कर्ष ≠ कोई जोखिम नहीं। एक स्कैन जो "कोई निष्कर्ष नहीं" लौटाता है, यह दर्शाता है कि कोई ज्ञात खतरा पैटर्न नहीं मिला। यह गारंटी नहीं देता कि कोई स्किल सुरक्षित, हानिरहित या कमजोरियों से मुक्त है।
- कवरेज स्वाभाविक रूप से अधूरी है। स्कैनर हस्ताक्षर-आधारित डिटेक्शन, LLM-आधारित सिमेंटिक विश्लेषण, व्यवहारिक डेटाफ्लो विश्लेषण, वैकल्पिक क्लाउड सेवाओं और कॉन्फ़िगर करने योग्य नियम पैक को जोड़ता है। हालांकि यह दृष्टिकोण कवरेज में सुधार करता है, कोई स्वचालित उपकरण हर तकनीक का पता नहीं लगा सकता, विशेष रूप से नए या ज़ीरो-डे हमलों का।
- गलत सकारात्मक और गलत नकारात्मक हो सकते हैं। सर्वसम्मति मोड और मेटा-विश्लेषण शोर को कम करते हैं, लेकिन कोई कॉन्फ़िगरेशन सभी गलत वर्गीकरणों को समाप्त नहीं करता। अपने जोखिम सहनशीलता के अनुसार स्कैन पॉलिसी को ट्यून करें।
- मानव समीक्षा आवश्यक बनी रहती है। स्वचालित स्कैनिंग रक्षा-इन-डेप्थ रणनीति का एक घटक है। उच्च-जोखिम या उत्पादन परिनियोजन को स्कैनर परिणामों को मैन्युअल कोड समीक्षा और/या खतरा मॉडलिंग के साथ जोड़ना चाहिए।
दस्तावेज़ीकरण
| गाइड | विवरण |
|---|---|
| त्वरित प्रारंभ | 5 मिनट में शुरू करें |
| आर्किटेक्चर | सिस्टम डिज़ाइन और घटक |
| खतरा वर्गीकरण | उदाहरणों के साथ पूर्ण AITech खतरा वर्गीकरण |
| LLM विश्लेषक | LLM कॉन्फ़िगरेशन और उपयोग |
| मेटा-विश्लेषक | गलत सकारात्मक फ़िल्टरिंग और प्राथमिकता निर्धारण |
| व्यवहारिक विश्लेषक | डेटाफ्लो विश्लेषण विवरण |
| स्कैन पॉलिसी | कस्टम पॉलिसी, प्रीसेट और ट्यूनिंग गाइड |
| पॉलिसी त्वरित संदर्भ | पॉलिसी अनुभागों और नॉब्स के लिए संक्षिप्त संदर्भ |
| नियम लेखन | सिग्नेचर, YARA और Python नियम कैसे जोड़ें |
| GitHub Actions | CI/CD एकीकरण के लिए पुन: प्रयोज्य वर्कफ़्लो |
| API संदर्भ | REST API दस्तावेज़ीकरण |
| विकास गाइड | योगदान और विकास सेटअप |
स्थापना
पूर्वापेक्षाएँ: Python 3.10+ और uv (अनुशंसित) या pip
# uv का उपयोग करके (अनुशंसित)
uv pip install cisco-ai-skill-scanner
# pip का उपयोग करके
pip install cisco-ai-skill-scanner
क्लाउड प्रदाता एक्सट्रा
# AWS Bedrock समर्थन
pip install cisco-ai-skill-scanner[bedrock]
# Google AI Studio / Gemini समर्थन
pip install cisco-ai-skill-scanner[google]
# Google Vertex AI समर्थन
pip install cisco-ai-skill-scanner[vertex]
# Azure OpenAI समर्थन
pip install cisco-ai-skill-scanner[azure]
# सभी क्लाउड प्रदाता
pip install cisco-ai-skill-scanner[all]
त्वरित प्रारंभ
पर्यावरण सेटअप (वैकल्पिक)
# LLM विश्लेषक और मेटा-विश्लेषक के लिए
export SKILL_SCANNER_LLM_API_KEY="your_api_key"
export SKILL_SCANNER_LLM_MODEL="claude-3-5-sonnet-20241022"
# वैकल्पिक: disabled, minimal, low, medium, high, xhigh, या max
export SKILL_SCANNER_LLM_REASONING_EFFORT="low"
# VirusTotal बाइनरी स्कैनिंग के लिए
export VIRUSTOTAL_API_KEY="your_virustotal_api_key"
# Cisco AI Defense के लिए
export AI_DEFENSE_API_KEY="your_aidefense_api_key"
इंटरैक्टिव विज़ार्ड
कौन से फ्लैग उपयोग करने हैं, यह सुनिश्चित नहीं है? इंटरैक्टिव विज़ार्ड लॉन्च करने के लिए बिना किसी तर्क के skill-scanner चलाएँ:
skill-scanner
विज़ार्ड आपको स्कैन लक्ष्य, विश्लेषक, पॉलिसी और आउटपुट प्रारूप चुनने में मार्गदर्शन करता है, फिर चलाने से पहले इकट्ठा किया गया कमांड दिखाता है। CLI सीखने के लिए बढ़िया है।
CLI उपयोग
# एकल स्किल स्कैन करें (कोर विश्लेषक: static + bytecode + pipeline)
skill-scanner scan /path/to/skill
# व्यवहारिक विश्लेषक के साथ स्कैन करें (डेटाफ्लो विश्लेषण)
skill-scanner scan /path/to/skill --use-behavioral
# सभी इंजनों के साथ स्कैन करें
skill-scanner scan /path/to/skill --use-behavioral --use-llm --use-aidefense
# गलत सकारात्मक फ़िल्टरिंग के लिए मेटा-विश्लेषक के साथ स्कैन करें
skill-scanner scan /path/to/skill --use-llm --enable-meta
# अस्पष्ट विवरण जाँच के लिए ट्रिगर विश्लेषक के साथ स्कैन करें
skill-scanner scan /path/to/skill --use-trigger
# LLM विश्लेषक को कई बार चलाएँ और बहुमत-सहमत निष्कर्ष रखें
skill-scanner scan /path/to/skill --use-llm --llm-consensus-runs 3
# कई स्किल्स को पुनरावर्ती रूप से स्कैन करें
skill-scanner scan-all /path/to/skills --recursive --use-behavioral
# क्रॉस-स्किल ओवरलैप डिटेक्शन के साथ कई स्किल्स स्कैन करें
skill-scanner scan-all /path/to/skills --recursive --check-overlap
# GitHub रिपॉजिटरी स्कैन करें (owner/repo शॉर्टहैंड या पूर्ण URL)
skill-scanner scan-repo owner/repo
skill-scanner scan-repo https://github.com/owner/repo --use-llm
# लेनिएंट मोड: विफल होने के बजाय मैलफॉर्म्ड स्किल्स को सहन करें
skill-scanner scan /path/to/skill --lenient
skill-scanner scan-all /path/to/skills --recursive --lenient
# गैर-मानक स्किल प्रारूपों के साथ लेनिएंट मोड (SKILL.md आवश्यक नहीं)
skill-scanner scan .claude/commands/deploy --lenient
skill-scanner scan-all .claude/commands --recursive --lenient
# SKILL.md के बजाय कस्टम मेटाडेटा फ़ाइलनाम का उपयोग करें
skill-scanner scan /path/to/skill --skill-file README.md
# CI/CD: खतरे मिलने पर बिल्ड विफल करें
skill-scanner scan-all ./skills --fail-on-severity high --format sarif --output results.sarif
# अटैक सहसंबंध समूहों के साथ इंटरैक्टिव HTML रिपोर्ट उत्पन्न करें
skill-scanner scan /path/to/skill --use-llm --enable-meta --format html --output report.html
# कस्टम YARA नियमों का उपयोग करें
skill-scanner scan /path/to/skill --custom-rules /path/to/my-rules/
# कस्टम वर्गीकरण + खतरा मैपिंग प्रोफाइल का उपयोग करें (JSON/YAML)
skill-scanner scan /path/to/skill --taxonomy /path/to/taxonomy.json --threat-mapping /path/to/threat_mapping.json
# वैकल्पिक अज्ञात-फ़ाइल अपलोड के साथ VirusTotal हैश स्कैन
skill-scanner scan /path/to/skill --use-virustotal --vt-upload-files
# स्कैन पॉलिसी प्रीसेट का उपयोग करें (strict, balanced, permissive)
skill-scanner scan /path/to/skill --policy strict
# कस्टम संगठन पॉलिसी फ़ाइल का उपयोग करें
skill-scanner scan /path/to/skill --policy my_org_policy.yaml
# अनुकूलित करने के लिए पॉलिसी फ़ाइल उत्पन्न करें
skill-scanner generate-policy -o my_org_policy.yaml
# इंटरैक्टिव पॉलिसी कॉन्फ़िगरेटर (TUI)
skill-scanner configure-policy
सर्वसम्मति मोड एक निष्कर्ष को तभी रखता है जब वह कॉन्फ़िगर किए गए रनों के आधे से अधिक में दिखाई देता है। जब वे वोट गंभीरता पर असहमत होते हैं, तो उच्चतम देखी गई गंभीरता जीतती है, प्रतिक्रिया क्रम से स्वतंत्र। विफल रन और सफल रन जो निष्कर्ष को छोड़ देते हैं, कोई वोट नहीं डालते लेकिन हर में बने रहते हैं। यह बहुमत-सहमत निष्कर्षों के लिए गंभीरता चयन को स्थिर बनाता है। यह व्यक्तिगत LLM नमूने को नियतात्मक नहीं बनाता, और समान-गंभीरता वोटों, एकल-रन आउटपुट और गैर-बहुमत निष्कर्षों से वर्णनात्मक फ़ील्ड अभी भी स्कैन के बीच भिन्न हो सकते हैं।
LLM प्रदाता नोट: --llm-provider वर्तमान में anthropic या openai स्वीकार करता है। Bedrock, Vertex, Azure, Gemini और अन्य LiteLLM बैकएंड के लिए, प्रदाता-विशिष्ट मॉडल स्ट्रिंग्स और पर्यावरण चर सेट करें (LLM विश्लेषक दस्तावेज़ देखें)।
Python SDK
from skill_scanner import SkillScanner
from skill_scanner.core.analyzers import BehavioralAnalyzer
# विश्लेषकों के साथ स्कैनर बनाएँ
scanner = SkillScanner(analyzers=[
BehavioralAnalyzer(),
])
# एक स्किल स्कैन करें
result = scanner.scan_skill("/path/to/skill")
print(f"निष्कर्ष: {len(result.findings)}")
print(f"अधिकतम गंभीरता: {result.max_severity}")
# नोट: is_safe इंगित करता है कि कोई HIGH/CRITICAL निष्कर्ष नहीं मिला।
# यह गारंटी नहीं देता कि स्किल सभी जोखिमों से मुक्त है।
if not result.is_safe:
print("समस्याएँ मिलीं -- परिनियोजन से पहले निष्कर्षों की समीक्षा करें")
सुरक्षा विश्लेषक
| विश्लेषक | डिटेक्शन विधि | दायरा | आवश्यकताएँ |
|---|---|---|---|
| Static | YAML + YARA पैटर्न | सभी फ़ाइलें | कोई नहीं |
| Bytecode | .pyc अखंडता सत्यापन | Python बाइटकोड | कोई नहीं |
| Pipeline | कमांड टेंट विश्लेषण | शेल पाइपलाइन | कोई नहीं |
| Behavioral | AST डेटाफ्लो विश्लेषण | Python फ़ाइलें | कोई नहीं |
| LLM | सिमेंटिक विश्लेषण | SKILL.md + स्क्रिप्ट | API कुंजी |
| Meta | गलत सकारात्मक फ़िल्टरिंग | सभी निष्कर्ष | API कुंजी |
| VirusTotal | हैश-आधारित मैलवेयर | बाइनरी फ़ाइलें | API कुंजी |
| AI Defense | क्लाउड-आधारित AI | टेक्स्ट सामग्री | API कुंजी |
CLI विकल्प
| विकल्प | विवरण |
|---|---|
--policy | स्कैन पॉलिसी: प्रीसेट नाम (strict, balanced, permissive) या कस्टम YAML का पथ |
--use-behavioral | व्यवहारिक विश्लेषक सक्षम करें (डेटाफ्लो विश्लेषण) |
--use-llm | LLM विश्लेषक सक्षम करें (API कुंजी आवश्यक) |
--llm-provider | CLI रूटिंग के लिए LLM प्रदाता: anthropic या openai |
--llm-consensus-runs N | LLM विश्लेषण को N बार चलाएँ, बहुमत-सहमत निष्कर्ष रखें, और उनकी उच्चतम देखी गई गंभीरता बनाए रखें |
--llm-max-tokens N | LLM प्रतिक्रियाओं के लिए अधिकतम आउटपुट टोकन (डिफ़ॉल्ट: 8192) |
--llm-reasoning-effort LEVEL | वैकल्पिक तर्क गहराई (disabled, minimal, low, medium, high, xhigh, या max); अनसेट प्रदाता डिफ़ॉल्ट को संरक्षित करता है |
--use-virustotal | VirusTotal बाइनरी स्कैनर सक्षम करें |
--vt-api-key KEY | VirusTotal API कुंजी सीधे प्रदान करें (वैकल्पिक) |
--vt-upload-files | अज्ञात बाइनरी को VirusTotal पर अपलोड करें (वैकल्पिक) |
--use-aidefense | Cisco AI Defense विश्लेषक सक्षम करें |
--aidefense-api-url URL | AI Defense API URL ओवरराइड करें (वैकल्पिक) |
--use-trigger | ट्रिगर विशिष्टता विश्लेषक सक्षम करें |
--enable-meta | गलत सकारात्मक फ़िल्टरिंग के लिए मेटा-विश्लेषक सक्षम करें |
--verbose | प्रति-निष्कर्ष पॉलिसी फ़िंगरप्रिंट, सह-घटना मेटाडेटा शामिल करें, और मेटा-विश्लेषक गलत सकारात्मक रखें |
--format | आउटपुट: summary, json, markdown, table, sarif, html। html प्रारूप संक्षिप्त इंटरैक्टिव रिपोर्ट उत्पन्न करता है जिसमें संक्षिप्त करने योग्य सहसंबंध समूह, विस्तार योग्य कोड स्निपेट और पाइपलाइन टेंट फ्लो आरेख शामिल हैं |
--detailed | Markdown आउटपुट में विस्तृत निष्कर्ष शामिल करें |
--compact | संक्षिप्त JSON आउटपुट |
--output PATH | डिफ़ॉल्ट आउटपुट फ़ाइल पथ (--output-<fmt> द्वारा ओवरराइड) |
--fail-on-findings | HIGH/CRITICAL मिलने पर त्रुटि के साथ बाहर निकलें (--fail-on-severity high का शॉर्टहैंड) |
--fail-on-severity LEVEL | LEVEL या उससे ऊपर के निष्कर्ष मौजूद होने पर त्रुटि के साथ बाहर निकलें (critical, high, medium, low, info) |
--custom-rules PATH | निर्देशिका से कस्टम YARA नियमों का उपयोग करें |
--taxonomy PATH | इस रन के लिए कस्टम वर्गीकरण प्रोफाइल लोड करें (JSON/YAML) |
--threat-mapping PATH | इस रन के लिए कस्टम स्कैनर खतरा मैपिंग प्रोफाइल लोड करें (JSON) |
--lenient | विफल होने के बजाय मैलफॉर्म्ड स्किल्स को सहन करें (खराब फ़ील्ड को बाध्य करें, डिफ़ॉल्ट भरें)। जब SKILL.md अनुपस्थित हो, तो निर्देशिका में .md फ़ाइलों को स्कैन करने पर वापस आ जाता है |
--skill-file FILENAME | SKILL.md के बजाय उपयोग करने के लिए कस्टम मेटाडेटा फ़ाइलनाम (जैसे README.md) |
--check-overlap | (scan-all) क्रॉस-स्किल विवरण ओवरलैप जाँच सक्षम करें |
| कमांड | विवरण |
|---|---|
| (कोई कमांड नहीं) | इंटरैक्टिव स्कैन विज़ार्ड लॉन्च करें (टर्मिनल में चलाने पर) |
interactive | इंटरैक्टिव स्कैन विज़ार्ड लॉन्च करें (स्पष्ट) |
scan | एकल स्किल निर्देशिका स्कैन करें |
scan-all | कई स्किल्स स्कैन करें (--recursive, --check-overlap के साथ) |
generate-policy | अनुकूलन के लिए स्कैन पॉलिसी YAML उत्पन्न करें |
configure-policy | कस्टम स्कैन पॉलिसी बनाने/संपादित करने के लिए इंटरैक्टिव TUI (--input समर्थित) |
list-analyzers | उपलब्ध विश्लेषक दिखाएँ |
validate-rules | नियम हस्ताक्षर सत्यापित करें (--rules-file समर्थित) |
उदाहरण आउटपुट
$ skill-scanner scan ./my-skill --use-behavioral
============================================================
स्किल: my-skill
============================================================
स्थिति: [OK] कोई निष्कर्ष नहीं
अधिकतम गंभीरता: NONE
कुल निष्कर्ष: 0
स्कैन अवधि: 0.15s
नोट: "कोई निष्कर्ष नहीं" का अर्थ है कि स्कैनर ने कोई ज्ञात खतरा पैटर्न नहीं पाया -- यह गारंटी नहीं है कि स्किल सभी जोखिमों से मुक्त है। दायरा और सीमाएँ देखें।
GitHub Actions
पुन: प्रयोज्य वर्कफ़्लो का उपयोग करके प्रत्येक पुश या PR पर स्किल्स को स्वचालित रूप से स्कैन करें:
# .github/workflows/scan-skills.yml
name: Scan Skills
on:
pull_request:
paths: [".cursor/skills/**"]
jobs:
scan:
uses: cisco-ai-defense/skill-scanner/.github/workflows/scan-skills.yml@main
with:
skill_path: .cursor/skills
permissions:
security-events: write
contents: read
परिणाम GitHub कोड स्कैनिंग के माध्यम से PR में इनलाइन एनोटेशन के रूप में दिखाई देते हैं। LLM एकीकरण, गुप्त कॉन्फ़िगरेशन और शाखा सुरक्षा सेटअप के लिए पूर्ण गाइड देखें।
प्री-कमिट हुक
pre-commit फ्रेमवर्क का उपयोग करके प्रत्येक कमिट से पहले स्किल्स को स्कैन करें:
# .pre-commit-config.yaml
repos:
- repo: https://github.com/cisco-ai-defense/skill-scanner
rev: v1.0.0 # नवीनतम रिलीज़ टैग का उपयोग करें
hooks:
- id: skill-scanner
या अंतर्निहित हुक को सीधे स्थापित करें:
skill-scanner-pre-commit --install
हुक बदली गई फ़ाइलों को उनके निकटतम SKILL.md से मैप करता है और प्रत्येक प्रभावित स्किल को एक बार स्कैन करता है। सामान्य कमिट के दौरान, यह स्टेज किया गया डिफ़ देखता है। CI में, दो रिवीज़न की तुलना करें ताकि कोई स्टेज इंडेक्स आवश्यक न हो:
pre-commit run skill-scanner --from-ref "$BASE_SHA" --to-ref "$HEAD_SHA"
दोनों रिवीज़न चेकआउट में मौजूद होने चाहिए। प्रत्येक कॉन्फ़िगर की गई स्किल को स्कैन करने के लिए, हुक को सीधे लागू करें:
skill-scanner-pre-commit --scan-all
वैकल्पिक रूप से, .pre-commit-config.yaml में हुक के लिए args: [--scan-all] कॉन्फ़िगर करें।
योगदान
हम योगदान का स्वागत करते हैं! दिशानिर्देशों के लिए कृपया CONTRIBUTING.md देखें।
लाइसेंस
Apache 2.0 - विवरण के लिए LICENSE देखें।
कॉपीराइट 2026 Cisco Systems, Inc. और इसके सहयोगी