پرش به محتوای اصلی
پرش به محتوای مقاله

گزارش امنیتی: افشای کلیدهای API در تاریخچه چت‌های دستیاران کدنویسی

·۲۷ شهریور ۱۴۰۵۱۰ دقیقه مطالعه
کلید API خود را بدون اطلاع با هوش مصنوعی به اشتراک گذاشتید.
کلید API خود را بدون اطلاع با هوش مصنوعی به اشتراک گذاشتید.
اشتراک‌گذاری
واقعاً چه چیز جدید است؟

پیاده‌سازی یک مدیریت اسرار محلی که از طریق پروتکل MCP با عامل‌های هوش مصنوعی تعامل می‌کند، به‌طوری که مقدار واقعی کلیدها هرگز وارد پنجره متنی مدل نمی‌شود.

تصور کنید یک فایل .env ساده دارید که تمام کلیدهای خصوصی API شما در آن قرار دارد و حالا یک دستیار هوش مصنوعی، این کلیدها را به‌طور تصادفی در تاریخچه چت‌ها پخش می‌کند. برای حل این بحران، توسعه‌دهنده‌ای به نام fxerkan ابزار concealer را منتشر کرد؛ یک مدیریت اسرار محلی و متن‌باز که به‌طور خاص برای جلوگیری از دیدن مقادیر حساس توسط عامل‌های هوش مصنوعی (AI Agents) طراحی شده است.

برای یک دهه، فایل‌های .env یک مصالحه امن بودند چون روی دستگاه شما می‌ماندند، در گیت نادیده گرفته می‌شدند و فقط توسط انسان خوانده می‌شدند. اما اکنون، دستیارهای کدنویسی برای مفید بودن باید کل مخزن کد را اسکن کنند؛ این اساساً تمام شغل آن‌هاست. آن‌ها مخزن را اسکن می‌کنند، اصلاحات پیشنهاد می‌دهند، دستورات را اجرا می‌کنند و خروجی‌ها را به مدل می‌فرستند. به همین دلیل، کلیدهای حساسی مثل OPENAI_API_KEY=sk-live-... یا AWS_SECRET_ACCESS_KEY=wJalr... یا DATABASE_URL=postgres://user:hunter2@db:5432/prod تنها با یک دستور cat .env وارد پنجره زمینه (Context Window) — مثل میز کاری که جا برای چند ورق دارد، نه برای کل کتابخانه — می‌شوند.

طبق گزارش توسعه‌دهنده این ابزار، این کلیدها اغلب در گزارش‌های خطا، لاگ‌ها یا به‌طور تصادفی هنگام ثبت فایل‌ها در کنترل نسخه (Version Control) توسط عامل‌ها افشا می‌شوند؛ زمانی که یک عامل برای «کمک کردن»، تمام فایل‌ها را استیج (Stage) می‌کند. در واقع مدل تهدید تغییر کرده، اما ابزارها همان نسخه‌های قدیمی مانده‌اند.

همان‌طور که در تحلیل‌های قبلی ما درباره‌ی امنیت مدل‌های بازمتن اشاره کردیم، اعتماد مطلق به ابزارهای خودکار بدون لایه‌ی حفاظتی، ریسک‌های سیستمی ایجاد می‌کند. برای درک بهتر، تصور کنید دستیاری برای خانه استخدام کرده‌اید که خانه را مرتب می‌کند اما رمزهای عبور شما را که روی کاغذ چسبانده‌اید، می‌خواند. دستیار بدخواه نیست، اما اطلاعات افشا شده‌اند چون کاغذ بخشی از محیط خانه است. concealer مانند یک کشوی قفل‌شده عمل می‌کند؛ دستیار می‌تواند بپرسد «آیا کلید حساب برق موجود است؟» و دستور پرداخت را صادر کند، اما شماره کارت هرگز از کشو خارج نمی‌شود و هر بار باز شدن کشو در یک دفتر ثبت می‌شود.

چرا راهکارهای سنتی شکست می‌خورند؟

بر اساس مستندات پروژه، نویسنده پیش از ساخت Concealer، گزینه‌های موجود را بررسی کرد و آن‌ها را برای عصر کدنویسی با هوش مصنوعی ناکافی یافت:

  • گاوصندوق‌های ابری (Cloud Vaults): ابزارهایی مثل HashiCorp Vault، Doppler یا cloud KMS نیاز به ایجاد حساب کاربری، رفت‌وبرگشت‌های شبکه و سرویسی دارند که باید همیشه آنلاین باشد. این‌ها برای توسعه‌دهندگان تک‌نفره یا پروژه‌های لپ‌تاپی بیش از حد سنگین هستند و اسرار را به سرور شخص دیگری منتقل می‌کنند.
  • مدیریت‌کننده‌های رمز عبور (Password Managers): ابزارهایی مثل 1Password برای انسان‌ها عالی هستند اما برای اسکریپت‌ها و عامل‌ها دست‌وپاگیرند و به یک حساب متمرکز وابسته هستند.
  • کلیدواژه‌های سیستم‌عامل (OS Keychains): این‌ها به یک دستگاه خاص وابسته هستند. اگر لپ‌تاپ خود را پاک کنید یا سخت‌افزار را عوض کنید، گاوصندوق همراه شما نمی‌آید.
  • فایل‌های .env: متنی و ساده هستند، که دقیقاً همان نقطه ضعفی است که Concealer می‌خواهد آن را حل کند.

معماری امنیت محلی

concealer به‌گونه‌ای طراحی شده که کاملاً محلی، قابل حمل و آگاه از عامل‌ها باشد. این ابزار تنها یک اسکریپت پایتون ۳ است که از کتابخانه‌های استاندارد استفاده می‌کند و هیچ وابستگی خارجی (pip dependency) ندارد. این سیستم دو ابزار رمزنگاری تاییدشده را در بر می‌گیرد:

  • SOPS: ابزاری متولد موزیلا که فایل‌های YAML/JSON را بدون تخریب ساختارشان رمزنگاری می‌کند.

کلید API خود را با هوش مصنوعی به اشتراک گذاشتید، حتی متوجه نشدید.

  • age: یک ابزار رمزنگاری مدرن و دقیق که توسط فیلیپ والسوردا ساخته شده است.

این سیستم تضمین می‌کند که نه گاوصندوق رمزنگاری‌شده و نه کلیدها، هرگز دستگاه کاربر را ترک نکنند. تنها رمزنگاری سفارشی در Concealer، تایید رمز عبور از طریق scrypt و زنجیره‌سازی لاگ‌های حسابرسی با HMAC است. در دنیای امنیت، این رویکرد «ساده و خسته‌کننده» یک تعریف مثبت است. کل سیستم در یک صفحه گنجانده شده و پنج رابط کاربری به یک هسته تک‌فایلی متصل می‌شوند که دستورات را به SOPS و age می‌فرستد.

تزریق امن اسرار برای عامل‌ها

نوآوری اصلی این ابزار، ادغام با پروتکل زمینه مدل (MCP) است؛ استانداردی که عامل‌ها برای صحبت با ابزارها از آن استفاده می‌کنند. این کار اجازه می‌دهد عامل‌های هوش مصنوعی از طریق یک پروکسی سخت‌گیرانه با اسرار تعامل کنند:

  • لیست نام-محور: عامل‌ها می‌توانند بپرسند «چه اعتبارنامه‌های پایگاه داده‌ای برای این پروژه وجود دارد؟» و فقط نام‌ها را دریافت کنند، نه مقادیر را.
  • اجرای سانسورشده: وقتی عامل نیاز به اجرای دستوری دارد، concealer مقدار را رمزگشایی کرده، آن را به محیط پردازش فرزند تزریق می‌کند و پیش از آنکه عامل حتی یک خط را بخواند، مقدار را از خروجی پاک می‌کند. متن ساده هرگز در مسیر ورود یا خروج وارد زمینه (Context) عامل نمی‌شود.

کلید API خود را با هوش مصنوعی به اشتراک گذاشتید، حتی متوجه نشدید.

برای جلوگیری از سرقت انبوه داده‌ها و استخراج غیرمجاز، چندین حفاظ (Guardrails) تعریف شده است:

  • ثبت اجباری: فقط توکن‌های ثبت‌شده‌ی عامل‌ها می‌توانند ابزارهای MCP را فراخوانی کنند. توکن‌های انسانی/CLI یا درخواست‌های بدون توکن، دسترسی‌شان رد می‌شود. این کار اصل «حداقل امتیاز» را از طریق قرارداد تضمین می‌کند.
  • حداقل دسترسی: عامل‌ها باید نام دقیق اسرار مورد نیاز برای هر دستور را یکی‌یکی ذکر کنند؛ هیچ دستوری برای «همه را به من بده» وجود ندارد.
  • محدودیت نرخ (Rate Limits): سیستم دو سقف برای هر عامل اعمال می‌کند: تعداد ردیف‌هایی که یک فراخوانی می‌تواند برگرداند و تعداد نام‌های اسرار متمایزی که یک عامل می‌تواند در یک بازه زمانی متحرک فاش کند. در حالی که نام‌های قبلاً دیده شده می‌توانند آزادانه لیست شوند، نام‌های جدید از سهمیه کسر می‌شوند. شمارش انبوه (Bulk enumeration) محدود شده و ثبت می‌شود.

این سازوکار شبیه به «کلید پارک‌بان» است؛ پارک‌بان می‌تواند ماشین را پارک کند اما نمی‌تواند صندوق عقب را باز کند. عامل هرگز کلید را در دست ندارد؛ Concealer قفل را می‌چرخاند و عامل فقط نتیجه را می‌بیند.

پنج رابط برای یک گاوصندوق

کلید API خود را با هوش مصنوعی به اشتراک گذاشتید، حتی متوجه نشدید.

کاربران می‌توانند از پنج نقطه ورود مختلف با گاوصندوق خود تعامل کنند که همگی به همان هسته تک‌فایلی ختم می‌شوند:

  • CLI: مدیریت کامل از ترمینال. کاربران می‌توانند اسرار را بر اساس مستاجر (Tenant)، پروژه، محیط یا مخزن تنظیم، بخوانند و مستقر کنند. برای مثال، دستور cer set --name OPENAI_API_KEY --project web --env prod 'sk-DUMMY-123' یک کلید را ذخیره می‌کند و cer run --project web --env prod npm run deploy دستوری را اجرا می‌کند بدون اینکه مقدار کلید با ترمینال تماس پیدا کند.

کلید API خود را با هوش مصنوعی به اشتراک گذاشتید؛ حتی متوجه نشدید.

  • رابط وب (Web UI): یک کنسول محلی در آدرس http://127.0.0.1:8787 با فرم‌هایی که با نوع اسرار سازگار می‌شوند، فیلترهای قابل جستجو، قالب‌های استقرار برای هر راز و قابلیت کپی در کلیپ‌بورد که خودبه‌خود پاک می‌شود. این رابط از تم‌های تاریک، روشن و «ماتریکسی» پشتیبانی می‌کند و کاملاً دو زبانه (تر/ان) است. نمای اصلی گاوصندوق، اسرار را بر اساس پروژه و محیط فیلتر کرده و مقادیر را تا زمانی که صراحتاً درخواست شود، ماسک می‌کند.

کلید API خود را با هوش مصنوعی به اشتراک گذاشتید؛ حتی متوجه نشدید.

  • اسرار تایپ‌شده: به‌جای رشته‌های ساده کلید-مقدار، رابط کاربری از رکوردهای ساختاریافته برای اعتبارنامه‌های دیتابیس، کلیدهای ابری و ورود به وب پشتیبانی می‌کند. ماسک کردن بر اساس نوع رکورد است؛ مثلاً مقداری که شبیه user:pass@host است، حتی در فیلدهای «ساده» نیز ماسک می‌شود.

کلید API خود را با هوش مصنوعی به اشتراک گذاشتید، حتی متوجه نشدید.

  • TUI: یک مرورگر ترمینالی تمام‌صفحه (concealer tui) که اجازه ناوبری با کلیدهای جهت‌نما، فیلتر فوری و ویرایش آگاه از نوع را بدون نیاز به تب مرورگر می‌دهد.
  • افزونه کروم: ابزاری مبتنی بر نوار ابزار برای چسباندن مقادیر در فرم‌های وب. رکوردهای چندفیلدی برای کپی کردن هر فیلد به‌صورت جداگانه باز می‌شوند و پاپ‌آپ در حالت بیکاری قفل می‌شود.

مدیریت ریسک و حسابرسی

concealer شامل یک داشبورد ریسک در رابط وب است که به کاربران کمک می‌کند آسیب‌پذیری‌ها را پیدا کنند. این داشبورد مقادیر تکراری در اسرار مختلف، محدوده‌های بیش از حد گسترده و حتی تاریخچه شل (Shell History) را برای یافتن کلیدهایی که کاربر ممکن است فراموش کرده باشد، اسکن می‌کند.

هر اقدام در یک نمایشگر حسابرسی ثبت می‌شود که در برابر دستکاری مقاوم است. هر خط به یک لاگ زنجیره‌شده با HMAC-SHA256 همراه با یک شماره توالی یکنواخت و یک لنگر انتهایی (Tail anchor) اضافه می‌شود. این تضمین می‌کند که هرگونه حذف یا تغییر در ترتیب لاگ‌ها به‌وضوح مشخص شود. این لاگ‌ها فقط نام‌ها و اقدامات را ثبت می‌کنند، نه مقادیر اسرار را.

کلید API خود را با هوش مصنوعی به اشتراک گذاشتید، حتی متوجه نشدید.

کلید API خود را با هوش مصنوعی به اشتراک گذاشتید، بدون اینکه متوجه شوید.

مدل امنیتی

امنیت از طریق چند انتخاب شفاف مدیریت می‌شود:

  • رمزنگاری در حالت سکون: کلید خصوصی age هرگز به‌صورت متنی روی دیسک نوشته نمی‌شود. این کلید به‌صورت age-key.txt.age (رمزنگاری شده با رمز عبور اصلی) ذخیره می‌شود، در حافظه رمزگشایی شده و به‌جای فایل موقت، از طریق یک متغیر محیطی به SOPS پاس داده می‌شود.
  • توکن‌های سمت کلاینت: توکن‌های بازگشایی فقط در محیط (CONCEALER_TOKEN) وجود دارند. دیسک فقط هش scrypt و یک کپی از کلید پیچیده شده با توکن را نگه می‌دارد. توکن‌ها می‌توانند لغو شوند یا تاریخ انقضا داشته باشند. انسان‌ها توکن‌های کوتاه‌مدت را از طریق unlock دریافت می‌کنند، در حالی که عامل‌ها توکن‌های بلندمدت اما قابل لغوی را از طریق agent register می‌گیرند.
  • کدهای بازیابی: هنگام init (راه‌اندازی)، سیستم ۸ کد بازیابی یک‌بار مصرف چاپ می‌کند. تغییر رمز عبور اصلی به یکی از این کدها نیاز دارد تا تضمین شود که یک رمز عبور سرقتی به‌تنهایی نمی‌تواند گاوصندوق را تصاحب کند.
  • یکپارچگی حسابرسی: در حالی که لاگ زنجیره‌شده HMAC حذف داده‌ها را قابل تشخیص می‌کند، مستندات صادقانه اشاره می‌کنند که مهاجمی با دسترسی root به سیستم‌فایل و کلید حسابرسی، می‌تواند زنجیره را بازنویسی کند.

قابلیت حمل و متن‌باز بودن

گاوصندوق تنها از چند فایل تشکیل شده است. با کپی کردن پوشه keys/ و فایل secrets.enc.yaml به دستگاهی جدید و وارد کردن رمز عبور اصلی، کاربر می‌تواند کار را ادامه دهد. هیچ وابستگی به TPM، مهاجرت Keychain یا جریان «بازیابی حساب» وجود ندارد چون اسرار متعلق به کاربر و روی سخت‌افزاری است که او کنترل می‌کند.

این پروژه با مجوز MIT و در قالب یک اسکریپت پایتون خوانا منتشر شده است. هیچ جعبه سیاه، حساب کاربری یا تله‌متری در آن وجود ندارد و کاربران می‌توانند آن را پشت یک فایروال اجرا کنند تا مطمئن شوند هیچ داده‌ای به بیرون ارسال نمی‌شود. نویسنده تأکید می‌کند که نیازی نیست به او اعتماد کنید؛ می‌توانید کد را بخوانید و ترافیک شبکه را نظارت کنید.

شروع به کار

توسعه‌دهندگان می‌توانند این ابزار را از طریق Homebrew (brew install fxerkan/tap/concealer)، pipx یا Scoop (برای ویندوز) نصب کنند. گردش کار اصلی به این صورت است:

  1. concealer init: گاوصندوق را می‌سازد و کدهای بازیابی و یک توکن CLI را چاپ می‌کند.
  2. eval "$(cer unlock)": نشست شل را با توکنی که تقریباً ۸ ساعت اعتبار دارد، باز می‌کند.
  3. cer set --name OPENAI_API_KEY --project web --env prod 'sk-DUMMY-123': یک راز را ذخیره می‌کند.
  4. cer run --project web --env prod npm run deploy: راز را به‌صورت امن استفاده می‌کند.

این تغییر در ابزارها ضروری است زیرا ما برای سرعت، کدبیس‌های خود را در اختیار مدل‌ها قرار داده‌ایم، اما نمی‌توانیم اجازه دهیم اسرار به‌صورت متنی در کنار آن کدها باقی بمانند. با جداسازی «استفاده» از یک راز از «دیدن» آن، concealer اجازه می‌دهد عامل‌ها بدون تبدیل شدن به یک ریسک امنیتی، بهره‌ور باقی بمانند. دیگر کلیدها را در پنجره‌های چت نچسبانید؛ concealer این کار را بر عهده می‌گیرد.

گام بعدی شما

  • اگر از دستیارهای کدنویسی مثل Cursor یا GitHub Copilot استفاده می‌کنید، فایل‌های .env خود را بررسی کنید تا مطمئن شوید در تاریخچه چت‌ها نشت نکرده‌اند.
  • ابزار Concealer را از طریق Homebrew یا pipx نصب کنید و اولین گاوصندوق محلی خود را با دستور concealer init بسازید.
  • برای پروژه‌های تیمی، بررسی کنید که آیا پروتکل MCP می‌تواند جایگزین اشتراک‌گذاری ناامن کلیدها در پیام‌رسان‌ها شود.

اما داستان سخت‌افزاری این تحول حتی شگفت‌انگیزتر است — به تحلیل ما درباره‌ی تراشه‌های Blackwell مراجعه کنید.

چرا این موضوع مهم است؟

این ابزار با تکیه بر اعتبار پروتکل MCP، ریسک نشت داده‌های حساس در محیط‌های توسعه را به‌شدت کاهش می‌دهد. در دنیایی که مدل‌ها به کل کدبیس دسترسی دارند، مدیریت اسرار محلی تنها راه جلوگیری از تبدیل شدن دستیارهای هوشمند به جاسوسان ناخواسته است.

تأثیر برای ایران

توسعه‌دهندگان ایرانی که به‌دلیل محدودیت‌های ابری از ابزارهای Self-hosted یا محلی استفاده می‌کنند، می‌توانند با این ابزار متن‌باز، امنیت کلیدهای API خود را بدون نیاز به سرویس‌های خارجی تامین کنند.

·نگاه ما
تحریریه دات‌هوش

جدا کردن «استفاده از راز» از «دیدن راز» یک چرخش ضروری در معماری ابزارهای عامل‌محور است. Concealer نشان می‌دهد که برای افزایش بهره‌وری با هوش مصنوعی، نباید دسترسی‌های انسانی را به مدل‌ها منتقل کرد، بلکه باید لایه‌ای از میانجی‌گری (Proxy) ایجاد کرد که مدل را در وضعیت «ناآگاه اما قادر» نگه دارد. این رویکرد احتمالاً به استاندارد جدیدی برای تعامل مدل‌ها با سیستم‌های حساس تبدیل خواهد شد.

منابع

این گزارش با خط‌لولهٔ خودکار دات‌هوش از منابع معتبر جهانی تدوین و زیر نظر تحریریه منتشر شده است. روش کار ما

گفتگو

پنج‌شنبه‌های هوش‌محور

بسته‌ی هفتگی دات‌هوش

۵ خبر، ۲ ابزار، ۱ پرامپت در هر شماره. به‌زودی راه‌اندازی می‌شود — هر پنج‌شنبه صبح.

خبر کلیدی
ابزار کاربردی
پرامپت حرفه‌ای
تحلیل پژوهش
به‌زودی
زاویه‌ی ایرانی
به‌زودی
تمرین این هفته
به‌زودی

راهنماهای دات‌هوش

راهنماهای کاربردیِ دات‌هوش برای کار با هوش مصنوعی — از همین‌جا شروع کنید:

دات‌هوش

راهنمای فارسی هوش مصنوعی — با نگاه به ایران

اخبار روزانه، معرفی ابزارها و مدل‌ها، و آموزشِ کار با هوش مصنوعی؛ همیشه با این پرسش که از ایران چه چیزی کار می‌کند و چه چیزی نه.