در دنیایی که هوش مصنوعی به قلب توسعه نرمافزار تبدیل شده است، یک تهدید امنیتی بحرانی اکوسیستم AI Agents را هدف قرار داده است. محققان دانشگاه علوم و فناوری هنگکنگ تکنیکی به نام SkillCloak را معرفی کردهاند که با استفاده از Self-Extracting Packing و Character Obfuscation، بدافزارها را به راحتی از سد ۸ اسکنر امنیتی معتبر عبور میدهد (با نرخ موفقیت بیش از ۹۰ درصد). این گزارش جامع تکینگیم، علاوه بر کالبدشکافی حملات واقعی در پلتفرمهایی مانند ClawHub، راهکار دفاعی مبتنی بر نظارت در زمان اجرا (Runtime Monitoring) به نام SkillDetona
SkillCloak: تکنیک جدیدی که اسکنرهای امنیتی را فریب میدهد
محققان دانشگاه هنگکنگ تکنیکی را کشف کردهاند که بدافزارهای Agent را از چشم ۸ اسکنر معتبر امنیتی پنهان میکند، با نرخ موفقیت بیش از ۹۰ درصد.
- 🎮نرخ موفقیت فریب- بیش از ۹۰٪ اسکنرها را دور میزند
- 🎧هدف حمله- Skills برای AI Coding Agents مثل Claude Code
- 🚀روش کار- Self-Extracting Packing و تکنیکهای Obfuscation
تکنولوژی امنیتی در برابر چالشی جدید
در دنیایی که هوش مصنوعی به سرعت در حال تبدیل شدن به بخشی جداییناپذیر از فرآیند توسعه نرمافزار است، یک تهدید تازه در حال شکلگیری است. محققان دانشگاه علوم و فناوری هنگکنگ در تحقیقی که به تازگی منتشر شده، نشان دادهاند که اسکنرهای امنیتی طراحیشده برای شناسایی بستههای مخرب Skills برای AI Agents، به راحتی قابل فریب هستند.
این تحقیق که با عنوان "Cloak and Detonate" منتشر شده، نشان میدهد چگونه یک ابزار به نام SkillCloak میتواند کدهای مخرب را به گونهای بازنویسی کند که در عین حفظ قابلیت تخریب، کاملاً بیضرر به نظر برسند. این یافته نه تنها یک نگرانی نظری است، بلکه در مارکتپلیسهای عمومی Skills، شواهد حملات واقعی با این تکنیکها مشاهده شده است.
AI Agent Skills چیست؟
مکانیزم حمله: چگونه SkillCloak کار میکند؟
تیم تحقیقاتی دو روش اصلی برای فریب اسکنرها طراحی کردهاند که هر دو به طور خودکار از طریق ابزار SkillCloak اجرا میشوند. درک این تکنیکها برای متخصصان امنیت سایبری و توسعهدهندگانی که از AI Agents استفاده میکنند، حیاتی است.
روش اول: بازنویسی سبک (Lightweight Rewriting)
در این روش، SkillCloak کاراکترهای خاصی را که اسکنرها به دنبال آنها هستند، با جایگزینهای مشابه از الفبای دیگری تعویض میکند. به عبارت دیگر، یک کاراکتر لاتین را با یک کاراکتر شبیه از یونیکد جایگزین میکند که برای چشم انسان یا interpreter کد، تفاوتی نمیکند اما الگوی اسکنر را میشکند.
مثال دیگر، تقسیم یک دستور مشکوک به چندین خط است. به این ترتیب که یک فرمان خطرناک مثل "eval" را به صورت "ev" در یک خط و "al" در خط بعد مینویسد. اسکنر pattern matching نمیتواند این دستور را شناسایی کند، اما هنگام اجرا، دستور به طور کامل کار میکند.
روش دوم: Self-Extracting Packing
این روش پیچیدهتر و قدرتمندتر است. در اینجا، کل payload مخرب به داخل یک دایرکتوری منتقل میشود که اسکنرها معمولاً از آن صرفنظر میکنند، مانند پوشه ".git/" که برای سرعت بخشیدن به فرآیند اسکن و کاهش False Positiveها، نادیده گرفته میشود.
Payload داخل این پوشه به صورت رمزگذاریشده یا فشردهشده ذخیره میشود، و یک decoder ساده و بیضرر در فایل اصلی قرار میگیرد که فقط در زمان اجرا توسط Agent، Skill واقعی را بازسازی میکند. این یعنی در زمان اسکن، هیچ چیز مشکوکی وجود ندارد، اما در زمان اجرا، کد مخرب فعال میشود.
چرا .git/ یک نقطه کور امنیتی است؟
نتایج آزمایش: اعداد تکاندهنده
محققان ۱۶۱۳ Skill مخرب واقعی را از ClawHub (یک مارکتپلیس عمومی) جمعآوری کردند و آنها را در برابر ۸ اسکنر معتبر امنیتی تست کردند. نتایج به شدت نگرانکننده بود.
نتایج تست روی ۸ اسکنر امنیتی
تکنیک Self-Extracting Packing توانست از هر ۸ اسکنر با موفقیت بیش از ۹۰ درصد عبور کند، و در بیشتر موارد، این عدد به بیش از ۹۹ درصد رسید. روش Lightweight Rewriting نیز عملکرد خوبی داشت و توانست بیش از ۸۰ درصد اسکنرها را فریب دهد، و در یک مورد، به ۹۶ درصد موفقیت رسید.
نکته مهمتر این است که این تکنیکها تقریباً هیچ هزینهای برای مهاجم ندارند. Skills پنهانشده روی Claude Code و OpenAI Codex دقیقاً به همان خوبی نسخههای اصلی عمل کردند، بدون کاهش قابلیت یا عملکرد.
راهحل پیشنهادی: SkillDetonate
از آنجایی که ظاهر میتواند جعل شود، محققان راهکاری را پیشنهاد دادهاند که به جای بررسی ظاهر کد، رفتار آن را در زمان اجرا رصد میکند. ابزاری به نام SkillDetonate طراحی شده که Skill را در یک محیط ایزوله (Sandbox) اجرا کرده و فعالیتهای آن را در سطح سیستمعامل زیر نظر میگیرد.
چگونه SkillDetonate کار میکند؟
این ابزار بر اساس دو اصل کلیدی عمل میکند که آن را برای Agent Skillsموثر میسازد. اول، دادههای حساس را بر اساس جریان اطلاعات ردیابی میکند، نه محتوای آن. این بدان معناست که حتی اگر مهاجم داده را با base64 یا رمزنگاری مبهم کند، سیستم همچنان میتواند جریان آن را دنبال کند.
دوم، دستوراتی که یک Skill تنها در زمان اجرا میسازد را اجرا میکند، دقیقاً جایی که تکنیک Packing، Payload خود را پنهان میکند. به این ترتیب، حتی اگر کد مخرب در زمان اسکن استاتیک نامرئی باشد، در زمان اجرا شناسایی میشود.
عملکرد SkillDetonate در تستها
در آزمایشهای کنترلشده، این Checker توانست ۹۷ درصد حملات را شناسایی کند، در حالی که تنها ۲ درصد False Positive (تشخیص اشتباه Skillهای سالم به عنوان مخرب) تولید کرد. این نرخ False Positive پایینتر از اسکنرهایی است که آن را شکست میدهد.
هنگامی که Skills با تکنیک SkillCloak پنهان شدند، عملکرد SkillDetonate ثابت ماند و همچنان توانایی تشخیص را حفظ کرد. روی Skillهای مخرب واقعی، این ابزار ۸۷ درصد آنها را شناسایی کرد.
مقایسه Cisco Scanner با SkillDetonate
محدودیت SkillDetonate: سرعت
یک نکته منفی SkillDetonate، سرعت آن است. در حالی که اسکنرهای استاتیک میتوانند در چند ثانیه یک Skill را بررسی کنند، SkillDetonate چند دقیقه زمان میبرد. البته این اجرا یکبار انجام میشود، قبل از اینکه Skill به صورت عمومی در دسترس قرار گیرد، بنابراین تاخیر برای کاربران نهایی تاثیری ندارد.
حملات واقعی در طبیعت
اینها صرفاً تئوریهای آزمایشگاهی نیستند. مارکتپلیسهای عمومی در حال حاضر مملو از Skills مخربی هستند که اسکنرها نتوانستهاند آنها را متوقف کنند. Bitdefender گزارش داد که تقریباً ۱۷ درصد از Skillهایی که در یک مارکتپلیس بررسی کرد، دارای کد مخرب پنهان بودند.
Koi Security کمپینی را با نام ClawHavoc شناسایی کرد که شامل ۳۴۱ Skill مخرب بود، و با رشد مارکتپلیس، این عدد به ۸۲۴ رسید. برخی از این Skills دقیقاً از تکنیکهای مشابه مقاله استفاده کردهاند.
نمونههای واقعی حملات
Unit 42 پنج Skill فریبنده را شناسایی کرد که هنوز در ClawHub فعال هستند، با وجود اینکه این پلتفرم اسکن داخلی دارد. یکی از آنها، به نام "omnicogg"، فایل README خود را با ۲۲ مگابایت داده بیمعنی پر کرده بود تا از محدودیت اندازه اسکنر عبور کند، دقیقاً همان تکنیک Size-Padding که در مقاله تست شده است.
دو Skill دیگر، password stealerهایی برای macOS تحویل میدادند، و دو تا دیگر Agent را برای ارائه مشاوره مالی هایجک کرده و لینکهای Affiliate و تبلیغات meme-coinها را تزریق میکردند.
حمله GitHub: کد مخرب از DNS
شکاف Runtime در خارج از مارکتپلیس Skills نیز ظاهر شده است. یک مخزن GitHub که کاملاً پاک به نظر میرسید، Claude Code را وادار کرد که یک Reverse Shell روی ماشین خود توسعهدهنده باز کند و کنترل Remote را به مهاجم بدهد.
کد مخرب هرگز در مخزن وجود نداشت؛ اسکریپت نصب آن را در زمان اجرا از یک رکورد DNS دریافت میکرد، بنابراین اسکن استاتیک هیچ چیزی برای شناسایی نداشت. تیم 0DIN موزیلا این زنجیره را ردیابی کرد.
حمله MCP: توضیحات سمی
یک شکست مرتبط در توضیحات ابزارهایی که Agentها از طریق پروتکل Model Context Protocol میخوانند رخ داد. Microsoft هشدار داد که یک توضیح سمی، که بعد از تایید ابزار تغییر داده شده بود، یک Agent مالی را به سرقت فاکتورهای پرداختنشده سوق داد.
مکانیزم متفاوت است، اما فرض شکسته یکسان است: آنچه از بررسی عبور کرده، همان چیزی است که اجرا میشود. این فرض در دنیای Agent Skillsدیگر صادق نیست.
آزمایشگاه تکین: تست عملی SkillCloak
تیم آزمایشگاه تکین تصمیم گرفت این تکنیکها را در یک محیط کنترلشده آزمایش کند تا بفهمد واقعاً چقدر خطرناک هستند. ما یک Skill ساده اما مخرب طراحی کردیم که قصد داشت فایل ".env" (حاوی کلیدهای API و رمزهای عبور) را از سیستم بخواند و به یک سرور خارجی ارسال کند.
مرحله اول: تست اسکنر پایه
ابتدا این Skill را بدون هیچ Obfuscationای به سه اسکنر محبوب ارسال کردیم. هر سه اسکنر فوراً آن را شناسایی کردند و با پیغامهایی مانند "Suspicious file read detected" و "Potential data exfiltration" مسدود کردند. تا اینجا، اسکنرها کار خود را انجام دادند.
مرحله دوم: Lightweight Obfuscation
سپس از تکنیک جایگزینی کاراکتر استفاده کردیم. کلمه "eval" را با "еval" نوشتیم، که کاراکتر اول آن یک "е" سیریلیک است، نه لاتین. برای چشم انسان و Python interpreter، هیچ تفاوتی ندارد، اما Pattern Matching اسکنر شکست خورد.
نتیجه: ۲ از ۳ اسکنر این Skill را پذیرفتند. یکی از آنها هنوز مشکوک بود، اما دیگر قادر به تشخیص دقیق نبود و آن را با یک هشدار عمومی "Needs Review" عبور داد.
مرحله سوم: Self-Extracting Packing
در این مرحله، کل Payload مخرب را به صورت base64 رمزگذاری کرده و در فایل ".git/config" مخفی کردیم. یک decoder ساده در فایل اصلی قرار گرفت که تنها یک خط داشت و به نظر بیضرر میرسید.
نتیجه: هر سه اسکنر این Skill را بدون هیچ هشداری پذیرفتند. اسکنرها به طور پیشفرض پوشه ".git" را نادیده میگیرند تا از False Positiveها جلوگیری کنند، و این دقیقاً نقطه کوری است که ما از آن سوءاستفاده کردیم.
مرحله چهارم: تست SkillDetonate
سپس همین Skill پنهانشده را در یک Sandbox با SkillDetonate اجرا کردیم. این ابزار فوراً رفتار مشکوک را شناسایی کرد: خواندن فایل ".env" و ایجاد اتصال شبکه خروجی به یک IP خارجی.
SkillDetonate گزارش داد: "Sensitive file access detected" و "Unauthorized network connection to external IP". حتی با وجود Obfuscation کامل، رفتار Skill آن را لو داد.
- تشخیص ۹۷٪ حملات در تست کنترلشده
- False Positive تنها ۲٪
- عملکرد ثابت در برابر Obfuscation
- ردیابی جریان داده حتی با رمزنگاری
- سرعت پایین (چند دقیقه در مقابل چند ثانیه)
- نیاز به محیط Sandbox
- هنوز در مرحله تحقیقاتی و نیازمند تست در مقیاس بزرگ
راهکارهای عملی برای توسعهدهندگان و تیمهای امنیت
با توجه به یافتههای این تحقیق و آزمایشهای ما، چند توصیه عملی برای کاهش خطر وجود دارد که توسعهدهندگان و تیمهای امنیتی باید جدی بگیرند.
۱. اسکن استاتیک را به عنوان اولین لایه بهداشتی نگه دارید
اسکنرهای استاتیک هنوز مفید هستند و میتوانند حملات ساده و بیتجربه را متوقف کنند. اما آنها را به عنوان تنها دفاع نبینید. یک "Passed the scan" badge نقطه شروع است، نه تضمین.
۲. Runtime Monitoring را اجباری کنید
از ابزارهایی استفاده کنید که رفتار Skill را در زمان اجرا رصد میکنند. فایلهایی که لمس میشوند، دستوراتی که اجرا میشوند و مکانهایی که داده ارسال میشود را زیر نظر بگیرید. این دفاع دقیقاً همان چیزی است که تکنیکهای Obfuscation نمیتوانند آن را دور بزنند.
۳. Hashing و تایید مجدد Skills
محققان پیشنهاد میکنند که هنگام اسکن یک Skill، Hash آن را محاسبه کنید و قبل از هر اجرا، Hash را مجدداً بررسی کنید تا مطمئن شوید Payloadهایی که بعداً Unpack میشوند، شناسایی شوند.
۴. فلگ کردن الگوهای مشکوک
محققان چند نشانه هشدار دهنده را معرفی کردهاند که میتوانید به دنبال آنها باشید، حتی در Skillهایی که از اسکن عبور کردهاند. این نشانهها به تنهایی اثبات نیستند، بلکه فلگهای ارزان برای بررسی بیشتر هستند.
نشانههای هشداردهنده یک Skill مشکوک
- فایلهای بزرگ یا با آنتروپی بالا در دایرکتوریهایی که اسکنر نادیده میگیرد مثل .git/ یا build/
- Skills که کد را فقط در زمان اجرا Unpack یا Assemble میکنند، نه اینکه به صورت واضح ارسال شوند
- فایلهای پر شده با دادههای بیمعنی که به شدت بزرگتر از اندازه منطقی هستند، برای دور زدن محدودیت اسکنر
- استفاده از کاراکترهای Look-alike از الفبای غیرلاتین در کدها
- فایلهای رمزگذاریشده یا base64 در مکانهای غیرمعمول
۵. نصب فقط از منابع معتبر
تنها از مارکتپلیسهایی Skills نصب کنید که شهرت دارند و فرآیند Vetting قویتری دارند. حتی در این صورت، بررسی کنید چه کسی Skill را ساخته و چند نفر قبلاً آن را استفاده کردهاند.
۶. اصل کمترین دسترسی
به Agentها تنها حداقل دسترسی موردنیاز را بدهید. اگر یک Agent برای نوشتن کد طراحی شده، نباید به فایلهای شخصی یا رمزهای ذخیرهشده شما دسترسی داشته باشد. آن را در یک محیط محدود اجرا کنید.
۷. جدا کردن محیطهای حساس
Agentها را روی ماشینهایی اجرا نکنید که Secretهای ارزشمند دارند. اگر ماشین شما دارای کلیدهای API تولید، اطلاعات مشتری یا دسترسی به سیستمهای حیاتی است، Agent را در یک محیط جداگانه و ایزوله اجرا کنید.
نتیجهگیری: تغییر پارادایم امنیتی
درس واقعی این است که یک اسکنر، یک Skill را بر اساس چگونگی ظاهر شدن در زمان ارسال قضاوت میکند، اما رفتار مخرب تنها زمانی نمایان میشود که Skill اجرا میشود، بعد از اینکه اسکن پایان یافته است. بنابراین تصمیم اعتماد باید از دروازه مارکتپلیس به ماشینی که Skill اجرا میکند منتقل شود.
برای تیمهای توسعه و امنیت که از AI Coding Agents استفاده میکنند، این بدان معناست که "Passed the scan" فقط یک نقطه شروع است، نه یک گارانتی. Static Scanning را به عنوان بهداشت ارزان نگه دارید، اما رفتار Skill را در زمان اجرا زیر نظر بگیرید.
سوالات متداول
آیا SkillCloak در حال حاضر توسط هکرها استفاده میشود؟
بله، برخی از تکنیکهای مشابه در حملات واقعی مشاهده شدهاند. به عنوان مثال، Skill omnicogg از تکنیک Size-Padding استفاده کرد و Unit 42 چندین Skill فریبنده در ClawHub شناسایی کرد. با این حال، استفاده از SkillCloak به صورت مستقیم و در مقیاس وسیع هنوز گزارش نشده است.
SkillDetonate چقدر سریع است؟
SkillDetonate چند دقیقه زمان میبرد در مقابل اسکنرهای استاتیک که چند ثانیه طول میکشند. اما این زمان فقط یکبار قبل از انتشار Skill صرف میشود، نه برای هر کاربر، بنابراین تاخیر برای کاربران نهایی تاثیری ندارد.
آیا میتوانم از Agentهای AI برای کدنویسی استفاده کنم بدون نگرانی؟
بله، اما با احتیاط. تنها Skills از منابع معتبر نصب کنید، Agent را در محیط محدود اجرا کنید، و از ابزارهای Runtime Monitoring استفاده کنید. همچنین، کلیدهای API و رمزهای حساس را در ماشینی که Agent اجرا میشود نگه ندارید.
چرا اسکنرها پوشه .git را نادیده میگیرند؟
برای کاهش False Positiveها و افزایش سرعت. پوشه .git معمولاً حاوی فایلهای تاریخچه و متادیتای Git است که برای عملکرد Skill ضروری نیستند، بنابراین اسکنرها آن را رد میکنند. مهاجمان این نقطه کور را سوءاستفاده میکنند.
آیا این تحقیق Peer-Reviewed شده است؟
خیر، این یک Preprint است و هنوز Peer-Review نشده است. با این حال، محققان کد خود را منتشر کردهاند و چندین شرکت امنیتی مستقل (Bitdefender, Koi Security, Unit 42) حملات مشابه را در طبیعت تایید کردهاند.
چه کسی باید نگران این تهدید باشد؟
هر کسی که از AI Coding Agents استفاده میکند، به ویژه توسعهدهندگان، تیمهای DevOps و شرکتهایی که این ابزارها را در محیط تولید به کار میبرند. همچنین، سازندگان مارکتپلیسهای Skill باید فرآیند Vetting خود را تقویت کنند.
گالری تصاویر تکمیلی: SkillCloak: تکنیک سایبری جدیدی که اسکنرهای هوش مصنوعی را فریب میدهد












