در نوامبر ۲۰۲۳، شرکت Anthropic — سازنده Claude AI — استاندارد جدیدی به نام Model Context Protocol (MCP) را منتشر کرد. این پروتکل برای اتصال برنامههای هوش مصنوعی به ابزارها و منابع داده خارجی طراحی شده است. این پیشنهاد بلافاصله با استقبال روبهرو شد، زیرا اتصال هوش مصنوعی یکی از مسائل اصلی است که هنوز نیاز به حل دارد.
اگرچه رویکرد MCP عالی است، اما با برخی ملاحظات و نگرانیهای امنیتی همراه است. کارشناسان برجسته این حوزه چندین آسیبپذیری احتمالی را شناسایی کردهاند و روشن شده است که سرورهای MCP، با وجود پیشرفت قابلتوجه در اتصال، نیازمند بازنگری در برخی رویکردهای امنیتی اساسی هستند.
در این مقاله، به بررسی عمیقتر پیامدهای امنیتی پارادایم MCP میپردازیم و برخی بهترین شیوههایی که ارائهدهندگان میتوانند اعمال کنند را معرفی میکنیم.
درک پیامدهای امنیتی MCP
برای درک آسیبپذیریهای خاص MCP، ابتدا باید روشن کنیم که MCP چگونه کار میکند. این پروتکل اساساً بین عاملهای هوش مصنوعی، APIها، لایههای اورکستراسیون و سیستمهای داده قرار میگیرد و تعاملات را از طریق رفتارهای تعریفشده با زمینه (context) تسهیل میکند.
برای کسانی که با سیستمهای shim مانند backend-for-frontend آشنا هستند، این موضوع آشناست. در حقیقت، شما سرویسهای زنجیرهای ایجاد میکنید که از طریق یک لایه ترجمه تعریفشده، به نوعی meta API بین مدلها و سرویسهای متصل تعامل میکنند.
مثلاً کاربری را در نظر بگیرید که از مدل هوش مصنوعی مانند Claude از طریق یک IDE متصل به کلاینت MCP استفاده میکند. این کلاینت درخواستهای کاربر را گرفته و از طریق پروتکل MCP به سرورهای MCP ارسال میکند. سرورها بر اساس مسیرهای منطقی و قراردادهای تعریفشده، مشخص میکنند چه چیزی باید به کلاینت متصل شود و چگونه این اتصال برقرار شود. در جهت معکوس، دادهها از منابع داده و سرویسهای راه دور به سرور MCP بازمیگردند و از طریق پروتکل MCP به کلاینت درخواستکننده منتقل میشوند و چرخه کامل میشود.
اگرچه این رویکرد ارتباطات قدرتمندی ایجاد میکند، اما حتی در این مثال ساده، میتوان برخی آسیبپذیریهای بالقوه را مشاهده کرد. MCP اساساً مجموعهای از سیستمهای متصل است و هر مرحله میتواند پیچیدگی، ریسک و مسیرهای حمله را ایجاد کند.
آسیبپذیریهای کلیدی امنیتی در MCP
بیایید نگاهی به چند مسیر حمله محتمل در یک تنظیم MCP عمومی داشته باشیم:
تزریق Context
در سیستمهای LLM، context نقش کلیدی دارد. زمینه، پایهای برای درک درخواستها و جریان دادهها فراهم میکند، اما شامل اطلاعات زیادی درباره نحوه اجرای درخواست نیز هست.
در MCP، تزریق context یک نگرانی بزرگ است. در نظریه، وقتی زمینه از طریق سیستمهای متصل خارجی تأمین میشود، مهاجم میتواند payloadهای مخرب ایجاد کند که رفتارهای ناخواسته را در مدلهای متصل تزریق کنند. این کار میتواند امنیت سیستم را به شدت تضعیف کند، بهویژه با اثر «بازی تلفن» در ارتباطات MCP.
این حملات میتوانند از اضافه کردن دستورالعملهای گمراهکننده تا تغییر پارامترهای پیکربندی یا ایجاد پردازش بیش از حد با خسارت مالی مستقیم متغیر باشند. این ریسک تا حدی با اعتبارسنجی تکراری پرامپتها و قوانین سرور MCP قابل مدیریت است، اما راهحل کامل برای آن هنوز وجود ندارد.
سوءاستفاده از زنجیره اعتماد
سیستمهای MCP بهطور ذاتی بهعنوان زنجیره اعتماد طراحی شدهاند: عاملها به هم زنجیره شدهاند و وابستگیهای بالادستی و پاییندستی با سطح مشخصی از اعتماد (یا حداقل سیستمی برای تعیین صحت) همراه هستند.
اگر این مرزهای اعتماد بهطور صریح اعمال نشوند، عاملهای آسیبدیده ممکن است کد مخرب، context گمراهکننده یا تغییرات زنجیرهای ایجاد کنند. برخی حملات واضح هستند، اما خطر واقعی حملاتی است که آشکار نیستند و ممکن است به تدریج سیستم را تضعیف کنند.
نشت داده حساس
مشکلات امنیتی MCP شباهت زیادی به مشکلات امنیتی عمومی APIها دارند، با این تفاوت که یک لایه ابهام اضافی به دلیل ماهیت سیستمهای عامل محور وجود دارد.
payloadهای context معمولاً شامل متادیتای کاربر، ورودیهای قبلی، پیکربندی سیستم، دادههای پرامپت و غیره هستند. اگر این payloadها بهدرستی فیلتر، امن و رمزگذاری نشوند، ممکن است دادههای حساس به مهاجمین خارجی نشت کند، که اثر تجمعی دارد و با گذر زمان بیشتر میشود.
انحراف زمینهای (Contextual Drift)
وقتی دادههای قدیمی یا ناسازگار استفاده شوند، مانند دادههای حافظه منسوخ، سریالسازیهای ناموفق یا وابستگیهای ناهماهنگ، contextual drift رخ میدهد. این موضوع میتواند باعث کاهش عملکرد مدل، خروجیهای غیرمنتظره یا نقض سیاستهای امنیتی شود.
برای مقابله، باید تمام سیستمها بهروز و هماهنگ باشند. در MCP مشکل از اتصال آسان به سرویسها و سیستمهای خارجی ناشی میشود و نیاز به تلاش بیشتری برای نظارت و مشاهده دارد.
مشکلات مربوط به Buildها
هر Build یا توزیع MCP میتواند مشکلات خاص خود را داشته باشد. هرچند MCP یک پروتکل استاندارد ارائه میدهد، تنظیمات واقعی ممکن است مشابه به نظر برسند اما دارای ساختارهای متفاوتی باشند. بنابراین، هر Build نیازمند بررسی خاص و ملاحظات خود است.
بهترین شیوهها برای ایمنسازی سرورهای MCP
اعتبارسنجی و پاکسازی Payload
هر payload باید بر اساس یک schema سختگیرانه مانند JSON Schema یا Protobuf اعتبارسنجی شود و پاکسازی شود تا تلاشهای تزریق اسکریپت، فیلدهای اضافی و probing حذف شوند.
کنترل دسترسی و محدودسازی Context
همه عاملها نباید به تمام فیلدهای context دسترسی داشته باشند. سیاستهای دسترسی باید بر اساس هویت منبع، نوع وظیفه یا سطح حساسیت اعمال شود.
ثبت لاگ و جلوگیری از Replay
هر انتقال یا تغییر context باید لاگ شود و هر payload شامل timestamp یا ID یکتا باشد. استفاده از HMAC یا امضا برای تایید صحت توصیه میشود.
کمینهسازی Context
از payloadهای حجیم و عمومی پرهیز کنید و فقط اطلاعات ضروری برای عاملها یا مدلها را ارسال کنید. این کار کارایی را افزایش داده و هزینهها را کاهش میدهد.
رمزگذاری و انتقال امن
از TLS یا mTLS برای تمامی انتقالات شبکه استفاده کنید و در صورت امکان، دادهها را در حالت ذخیره و انتقال رمزگذاری کنید. Context باید بهعنوان یک حالت حساس برنامه در نظر گرفته شود.
استفاده از ابزارهای مدرن
ابزارهایی مانند MCPSafetyScanner, MasterMCP, Docker MCP Toolkit راهحلهای امنیتی قابل اطمینان و تستشده ارائه میدهند که امنیت سرورهای MCP را بهبود میبخشند.
ملاحظات عملیاتی در دنیای واقعی
MCP هنوز پارادایم نوظهوری است و بهترین شیوهها ممکن است با گذر زمان تغییر کنند. در محیطهای چندعاملی، خطر اعتماد به همه contextها وجود دارد. توسعهدهندگان باید هر انتقال context را بررسی و پاکسازی کنند، همانطور که در میکروسرویسها آموختیم که نباید به شبکه بهطور کور اعتماد کرد.
نتیجهگیری
MCP قابلیتهای قدرتمندی برای سیستمهای هوش مصنوعی عاملمحور ارائه میدهد، اما سطوح جدیدی از مسیرهای حمله را نیز باز میکند. با مدیریت context بهعنوان زیرساخت حساس، اعمال اعتبارسنجی، محدودسازی، رمزگذاری و اصول zero-trust، تیمها میتوانند امنیت سیستمهای هوش مصنوعی خود را تضمین کرده و از هوش بینپلتفرمی بهره کامل ببرند.
