العودة إلى التحديثات
New releaseSep 4, 2026

skill-scanner v2.0.14

ماسح أمني لمهارات الوكيل

مشاركة

Skill Scanner

License Python 3.10+ PyPI version CI Discord Cisco AI Defense AI Security Framework Ask DeepWiki

ماسح أمان بأفضل جهد ممكن لمهارات وكلاء الذكاء الاصطناعي (AI Agent Skills) يكتشف حقن الأوامر (prompt injection)، وسرقة البيانات، وأنماط التعليمات البرمجية الخبيثة. يجمع بين الاكتشاف القائم على الأنماط (YAML + YARA)، وLLM-as-a-judge، وتحليل تدفق البيانات السلوكي لتعظيم تغطية اكتشاف التهديدات المحتملة مع تقليل النتائج الإيجابية الخاطئة.

مهم: يوفر هذا الماسح اكتشافًا بأفضل جهد ممكن، وليس تغطية شاملة أو كاملة. الفحص الذي لا يُرجع أي نتائج لا يضمن أن المهارة خالية من جميع التهديدات. راجع النطاق والقيود أدناه.

يدعم تنسيقات OpenAI Codex Skills وCursor Agent Skills وفقًا لمواصفات Agent Skills. مع خيار --lenient، يقوم أيضًا بفحص التنسيقات غير القياسية مثل .claude/commands/*.md الخاصة بـ Claude Code ومستودعات المهارات المسطحة بتنسيق markdown.


أبرز المزايا

  • اكتشاف متعدد المحركات - تحليل ثابت، وتدفق بيانات سلوكي، وتحليل دلالي عبر LLM، وفحص قائم على السحابة لتغطية طبقية بأفضل جهد ممكن
  • تصفية النتائج الإيجابية الخاطئة - المحلل الوصفي (Meta-analyzer) يقلل الضوضاء بشكل كبير مع الحفاظ على قدرة الاكتشاف
  • جاهز لـ CI/CD - مخرجات SARIF لـ GitHub Code Scanning، وسير عمل GitHub Actions قابل لإعادة الاستخدام، ورموز خروج لفشل البناء
  • خطاف Pre-commit - تكامل مع إطار عمل pre-commit القياسي لفحص المهارات قبل كل commit
  • قابل للتوسعة - بنية إضافات (plugins) لمحللات مخصصة

انضم إلى Discord الخاص بـ Cisco AI للمناقشة أو مشاركة الملاحظات أو التواصل مع الفريق.


النطاق والقيود

Skill Scanner هو أداة اكتشاف. يحدد أنماط المخاطر المعروفة والمحتملة، لكنه لا يصدّق على الأمان.

القيود الرئيسية:

  • عدم وجود نتائج ≠ عدم وجود خطر. الفحص الذي يُرجع "لا توجد نتائج" يشير إلى عدم اكتشاف أنماط تهديد معروفة. لا يضمن أن المهارة آمنة أو غير ضارة أو خالية من الثغرات.
  • التغطية غير مكتملة بطبيعتها. يجمع الماسح بين الاكتشاف القائم على التوقيعات، والتحليل الدلالي عبر 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"Findings: {len(result.findings)}")
print(f"Max severity: {result.max_severity}")

# ملاحظة: is_safe يشير إلى عدم اكتشاف نتائج HIGH/CRITICAL.
# لا يضمن أن المهارة خالية من جميع المخاطر.
if not result.is_safe:
    print("Issues detected -- review findings before deployment")

محللات الأمان

المحللطريقة الاكتشافالنطاقالمتطلبات
Staticأنماط YAML + YARAجميع الملفاتلا شيء
Bytecodeالتحقق من سلامة .pycPython bytecodeلا شيء
Pipelineتحليل تلوث الأوامرخطوط أنابيب Shellلا شيء
Behavioralتحليل تدفق بيانات ASTملفات Pythonلا شيء
LLMتحليل دلاليSKILL.md + السكربتاتمفتاح API
Metaتصفية النتائج الإيجابية الخاطئةجميع النتائجمفتاح API
VirusTotalبرمجيات خبيثة قائمة على التجزئةالملفات الثنائيةمفتاح API
AI Defenseذكاء اصطناعي قائم على السحابةمحتوى نصيمفتاح API

خيارات CLI

الخيارالوصف
--policyسياسة الفحص: اسم إعداد مسبق (strict, balanced, permissive) أو مسار إلى YAML مخصص
--use-behavioralتفعيل المحلل السلوكي (تحليل تدفق البيانات)
--use-llmتفعيل محلل LLM (يتطلب مفتاح API)
--llm-providerمزود LLM لتوجيه CLI: 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توفير مفتاح API الخاص بـ VirusTotal مباشرة (اختياري)
--vt-upload-filesرفع الملفات الثنائية غير المعروفة إلى VirusTotal (اختياري)
--use-aidefenseتفعيل محلل Cisco AI Defense
--aidefense-api-url URLتجاوز عنوان URL الخاص بواجهة برمجة تطبيقات AI Defense (اختياري)
--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-policyTUI تفاعلي لبناء/تعديل سياسة فحص مخصصة (يدعم --input)
list-analyzersعرض المحللين المتاحين
validate-rulesالتحقق من توقيعات القواعد (يدعم --rules-file)

مثال على الإخراج

$ skill-scanner scan ./my-skill --use-behavioral

============================================================
Skill: my-skill
============================================================
Status: [OK] No findings
Max Severity: NONE
Total Findings: 0
Scan Duration: 0.15s

ملاحظة: "لا توجد نتائج" تعني أن الماسح لم يكتشف أي أنماط تهديد معروفة -- وهذا ليس ضمانًا بأن المهارة خالية من جميع المخاطر. راجع النطاق والقيود.


GitHub Actions

افحص المهارات تلقائيًا عند كل push أو 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

تظهر النتائج كتعليقات توضيحية مضمّنة في PRs عبر GitHub Code Scanning. راجع الدليل الكامل لتكامل LLM وتكوين الأسرار وإعداد حماية الفروع.


خطاف Pre-commit

افحص المهارات قبل كل commit باستخدام إطار عمل 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 ويفحص كل مهارة متأثرة مرة واحدة. أثناء commit عادي، يقرأ الفرق المُجهز (staged diff). في CI، قارن بين مراجعتين بحيث لا تكون هناك حاجة لفهرس مُجهز:

pre-commit run skill-scanner --from-ref "$BASE_SHA" --to-ref "$HEAD_SHA"

يجب أن توجد كلتا المراجعتين في النسخة المحلية (checkout). لفحص كل مهارة مُهيأة، استدعِ الخطاف مباشرة:

skill-scanner-pre-commit --scan-all

بدلاً من ذلك، قم بتكوين args: [--scan-all] للخطاف في .pre-commit-config.yaml.


المساهمة

نرحب بالمساهمات! يرجى الاطلاع على CONTRIBUTING.md للإرشادات.

الترخيص

Apache 2.0 - راجع LICENSE للتفاصيل.

حقوق النشر 2026 Cisco Systems, Inc. والشركات التابعة لها


GitHubDiscordPyPI

الفئات