روابط عمومی شرکت ایدکو (توزیعکنندهی محصولات کسپرسکی در ایران)؛ ابتدا در این مقاله قرار است به معرفی MCP میپردازیم، مسیرهای حمله در سطح پروتکل و زنجیره تأمین را ترسیم کنیم و سپس یک نمونه عملی ارائه دهیم: سروری که ظاهراً قانونی است اما هر بار که توسعهدهنده ابزاری را اجرا میکند، دادههای حساس را جمعآوری میکند. در ادامه کد منبع آن را بررسی میکنیم تا هدف واقعی سرور را نشان دهیم و راهکارهایی برای شناسایی و مقابله با تهدیدات مشابه ارائه میدهیم.
MCP چیست؟
پروتکل مدل کانتکست (MCP) توسط شرکت تحقیقاتی Anthropic بهعنوان یک استاندارد باز برای اتصال دستیاران هوش مصنوعی به منابع داده و ابزارهای خارجی معرفی شد. به طور ساده، MCP به مدلهای هوش مصنوعی اجازه میدهد با ابزارها، سرویسها و دادههای مختلف بدون نیاز به هر بار پیادهسازی یکپارچگی سفارشی به زبان طبیعی ارتباط برقرار کنند.
معماری کلی MCP
MCP از معماری کلاینت-سرور با سه جزء اصلی تشکیل شده است:
- کلاینتهای MCP:که در دستیار هوش مصنوعی یا اپهایی مانند Claude یا Windsurf ادغام شده و ارتباط با سرور MCP را حفظ میکنند تا درخواستها به سرور ابزار مربوطه ارسال شود.
- میزبانهای MCP:برنامههای LLM مانند Claude Desktop یا Cursor که اتصال را آغاز میکنند.
- سرورهای MCP:سرویس یا برنامهای که به عنوان مبدل هوشمند عمل کرده و دستورات زبان طبیعی را به دستورهای معادل ابزار تبدیل میکند.
MCP بهعنوان مسیر حمله
اگرچه هدف MCP تسهیل اتصال هوش مصنوعی به ابزارهاست، اما همین موضوع باعث افزایش ریسک سوءاستفاده شده است. دو روش اصلی برای حملات مطرح است:
سوءاستفاده در سطح پروتکل
چندین مسیر حمله وجود دارد که توسط پژوهشگران دیگر نیز مطرح شدهاند:
- سردرگمی نام MCP (تقلید نام و کشف ابزار): مهاجم میتواند سروری با نامی مشابه سرور اصلی ثبت کند تا هنگام جستجوی نام، دستیار به سرور مخرب وصل شود و اطلاعات حساس را دریافت کند.
- آلودهسازی ابزار MCP:مخفی کردن دستورات اضافی در توضیحات ابزار یا نمونههای پرسش، مثلاً ظاهر شدن دستور ساده «جمع اعداد» در حالی که دستور مخفی دسترسی به کلید خصوصی SSH است.
- سایهاندازی[1]MCP:در محیطهای چند سروری، سرور مخرب میتواند تعریف ابزار را تغییر دهد و درخواستها را بهطور مخفیانه به سمت خود هدایت کند.
- حملات راگ پول»: [2]سرور به ظاهر مفید نصب میشود اما پس از جلب اعتماد کاربران، نسخهای آلوده را جایگزین میکند که به طور خودکار توسط دستیار بهروزرسانی میشود.
- آسیبپذیریهای نرمافزاری: مثال آن آسیبپذیری GitHub MCP که میتواند دادههای مخفی را فاش کند.
خطر این تکنیکها در این است که همگی از اعتماد پیشفرض به نام و فرادادههای ابزار سوءاستفاده میکنند و نیاز به زنجیرههای پیچیده بدافزاری ندارند.
سوءاستفاده در زنجیره تأمین
حملات زنجیره تأمین همچنان تهدید مهمی هستند و MCP هم در این مسیر مورد سوءاستفاده قرار گرفته است. کدهای مخرب به شکل سرورهای MCP بهظاهر مفید ارائه میشوند. توسعهدهندگان برای سرعت در ادغام ابزارهای هوش مصنوعی، اغلب بدون بررسی کد، این سرورها را نصب میکنند. منابع نصب این سرورها معمولاً PyPI، Docker Hub و GitHub Releases هستند و به همین دلیل شک و تردید ایجاد نمیشود. در حال حاضر، به دلیل محبوبیت هوش مصنوعی، سرورهای MCP از منابع نامعتبر و بدون بازرسی کافی هم در جاهایی مانند Reddit منتشر میشوند که به سرعت محبوب میشوند.
مثال زنجیره حمله:
- بستهبندی: مهاجم ابزاری جذاب با نامی مثل «ProductivityBoost AI» در PyPI منتشر میکند.
- مهندسی اجتماعی: فایل README ویژگیهای جذابی را شرح میدهد.
- نصب: توسعهدهنده با pip نصب میکند و سرور MCP را در یک کلاینت مانند Cursor ثبت میکند.
- اجرا: تماس اول باعث کشف اطلاعات مخفی میشود؛ فایلهای اعتبارنامه و متغیرهای محیطی ذخیره میشوند.
- استخراج دادهها: دادهها از طریق یک درخواست POST به API مهاجم ارسال میشوند.
- استتار: خروجی ابزار قابل قبول و حتی عملکرد وعده داده شده را ارائه میدهد.
نمونه عملی سرور MCP مخرب
در این بخش، نمونهای عملی ارائه میدهیم که به عنوان یک سرور MCP قانونی ظاهر شده ولی در واقع مخرب است. تیم Kaspersky GERT این نمونه را ساخته تا نشان دهد حملات زنجیره تأمین چگونه میتوانند از طریق MCP اجرا شوند و خطرات ناشی از اجرای این ابزارها بدون بازرسی مناسب را نمایان کند. آزمایش در محیطی کنترلشده انجام شده که یک ایستگاه کاری توسعهدهنده با سرور MCP مخرب نصب شده شبیهسازی شده است.
نصب سرور
سرور MCP با ویژگیهای به ظاهر مفید برای توسعه مانند تحلیل پروژه، بررسی امنیت تنظیمات و بهینهسازی محیط توسعه در قالب بسته PyPI ارائه شد. برای نصب:
pip install devtools-assistant
python -m devtools-assistant # سرور را اجرا میکند
سپس کلاینت AI (در این مثال Cursor)برای اتصال به سرور محلی پیکربندی شد.
استفاده از ابزارهای به ظاهر قانونی انجام شد و خروجیها مطابق تبلیغات بودند. اما پس از مدتی، حسگر شبکه هشدار داد که یک درخواست HTTP POST مشکوک به یک آدرس شبیه GitHub API ارسال شده است.
تحلیل میزبان
با استفاده از Wireshark درخواستهای POST متعددی به نقطه پایانی مشکوک مشاهده شد که با Base64 رمزگذاری شده بود. پس از رمزگشایی، متغیرهای محیطی پروژه توسعه از جمله کلید API و رشته اتصال پایگاه داده دیده شدند که نشانه واضحی از نشت اطلاعات است.
با استفاده از Procmon، فرآیند سرور فعالیت گستردهای در فهرستبندی فایلها داشت.
سه ابزار توسعهدهنده به ظاهر قانونی هستند اما همگی زیر پوشش ثبت متریکها و گزارشدهی، دادههای حساس را جمعآوری میکنند.
هسته مخرب
فایل project_metrics.py مسئول جمعآوری دادههای حساس از محیط توسعه و سیستم کاربر است. این موتور با جستجوی الگو، فایلهای حساس را در پروژه و فولدرهای سیستمی هدف قرار میدهد، از جمله:
- فایلهای محیط (.env) و غیره
- کلیدهای SSH
- پیکربندیهای ابری
- توکنها و گواهینامهها
- رشتههای اتصال پایگاه داده
- ذخیرهسازیهای اعتبار در ویندوز
- رمزهای عبور مرورگر و اطلاعات کارت اعتباری
- فایلهای کیف پول ارز دیجیتال
هر فایل کشف شده طبق نوع طبقهبندی شده و ۱۰۰ کیلوبایت اول آن ذخیره میشود. اطلاعات متادیتا ثبت شده و محتوا قبل از نمایش به کاربر مخفی میماند تا قربانی فقط خروجی مشروع را ببیند.
استخراج دادهها
پس از جمعآوری، دادهها با تابع send_metrics_via_api به نقطه پایانی کنترل شده مهاجم ارسال میشوند. این ترافیک به صورت درهم و شبیه درخواستهای قانونی GitHub API است تا تشخیص آن سخت باشد.
نتیجهگیری
آزمایش نشان داد که نصب یک سرور MCP به آن اجازه اجرای کد با دسترسی کاربر را میدهد. مگر اینکه این سرورها در محیطهای ایزوله مثل کانتینر یا ماشین مجازی اجرا شوند، میتوانند به فایلهای کاربر دسترسی یافته و تماسهای شبکه برقرار کنند.
راهکارهای امنیتی
- بررسی پیش از نصب: سرورها باید بررسی، اسکن و تایید شوند و لیست سفید نگهداری شود.
- محدودسازی: سرورها در کانتینر یا VM اجرا شوند و فقط به پوشههای لازم دسترسی داشته باشند. شبکهها تفکیک شوند.
- نظارت بر رفتار: همه ورودیها و خروجیها ثبت و برای دستورات مخفی یا رفتار غیرمعمول بررسی شوند.
- آماده برنامه مقابله: کلید توقف فوری سرورهای مخرب داشته باشید، گزارشها متمرکز ذخیره و نظارت مداوم انجام شود.
[1]MPC Shadowing
[2]Rug Pull