پنهان کردن با ایمنسازی یکی نیست
اخیراً یکی از مدیران اجرایی غیرمهندس، یک SaaS در حوزه B2B را در عرض دو روز ساخت. آنها از هوش مصنوعی برای نوشتن همه چیز استفاده کردند. محصول کار میکند. مشتریان از آن استفاده میکنند. ویژگیها با سرعت بالا عرضه میشوند.
سپس زیرساخت به من سپرده شد. وظیفه من یافتن ریسکها در کدی است که در حال حاضر در محیط عملیاتی (production) در حال اجراست.
من یک نقص امنیتی بزرگ پیدا کردم. کلید API مستقیماً در کد منبع (source code) به صورت ثابت (hardcoded) نوشته شده بود.
به مدیر گفتم که این کار خطرناک است. آنها بلافاصله آن را اصلاح کردند.
کلید از کد حذف شد، اما حالا در فایل README به عنوان یک مرحله از تنظیمات قرار داشت. رمز از کد به مستندات منتقل شده بود. هنوز داخل مخزن (repository) بود. در واقع، حالا پیدا کردنش حتی آسانتر شده بود.
دوباره مشکل را توضیح دادم. این بار، آنها کلید را به پایگاه داده منتقل کردند.
این کار شبیه به پیشرفت به نظر میرسید. کلید از مخزن خارج شده بود. اما وقتی پایگاه داده را بررسی کردم، کلید به صورت متن ساده (plaintext) آنجا بود. هیچ رمزنگاریای وجود نداشت. هر کسی که به پایگاه داده دسترسی داشت، میتوانست آن را بخواند.
کلید سه بار جابهجا شد:
- از کد منبع
- به README
- به پایگاه داده
مکان تغییر کرد، اما امنیت بهبود نیافت. آنها داشتند رمز را پنهان میکردند، نه اینکه آن را مخفی (conceal) کنند.
پنهان کردن (Hiding) یعنی چیزی را از دید خارج کنید. مخفیسازی (Concealing) یعنی آن را برای مهاجم بیفایده کنید.
در نرمافزار، باید این قوانین را رعایت کنید:
- هرگز رمزها را در مخزن خود قرار ندهید. این شامل کد، فایلهای README یا فایلهای تنظیمات (config) میشود.
- مقادیر را از خارج از زمان اجرا (runtime) و با استفاده از متغیرهای محیطی (environment variables) یا یک مدیریتکننده رمز (secret manager) تزریق کنید.
- اگر از پایگاه داده استفاده میکنید، مقدار را رمزنگاری کنید. متن ساده (plaintext) یک ریسک محسوب میشود.
- هر کلیدی را که زمانی به صورت متن ساده در معرض دید قرار گرفته، تعویض (Rotate) کنید.
این اتفاق حتی با وجود اینکه مدیر از پیشرفتهترین مدلهای هوش مصنوعی موجود استفاده میکرد، رخ داد.
هوش مصنوعی برای ارائه کدی که اجرا شود ساخته شده است. اگر به آن دستور دیگری ندهید، با کمال میل کدی مینویسد که حاوی یک رمز به صورت متن ساده باشد. هوش مصنوعی قابلیت (capability) ایجاد میکند، اما به طور خودکار ایمنی (safety) را فراهم نمیکند.
هوش تنها زمانی به ایمنی تبدیل میشود که بدانید از چه چیزی باید محافظت کنید.
اگر فکر میکنید فقط با جابهجا کردن یک حفره امنیتی آن را برطرف کردهاید، متوقف شوید. از خود بپرسید:
- آیا هنوز در مخزن است؟
- آیا دسترسی فقط به افرادی محدود شده که به آن نیاز دارند؟
- آیا دادهها رمزنگاری شدهاند؟
یک رمز متعلق به جای درست است، نه فقط یک جای نامرئی.
Source: https://dev.to/jun_uen0/playing-hide-and-seek-with-an-api-key-our-cfos-claude-code-kept-hiding-job
Optional learning community: https://t.me/GyaanSetuAi