پنهان کردن با ایمن‌سازی یکی نیست

اخیراً یکی از مدیران اجرایی غیرمهندس، یک SaaS در حوزه B2B را در عرض دو روز ساخت. آن‌ها از هوش مصنوعی برای نوشتن همه چیز استفاده کردند. محصول کار می‌کند. مشتریان از آن استفاده می‌کنند. ویژگی‌ها با سرعت بالا عرضه می‌شوند.

سپس زیرساخت به من سپرده شد. وظیفه من یافتن ریسک‌ها در کدی است که در حال حاضر در محیط عملیاتی (production) در حال اجراست.

من یک نقص امنیتی بزرگ پیدا کردم. کلید API مستقیماً در کد منبع (source code) به صورت ثابت (hardcoded) نوشته شده بود.

به مدیر گفتم که این کار خطرناک است. آن‌ها بلافاصله آن را اصلاح کردند.

کلید از کد حذف شد، اما حالا در فایل README به عنوان یک مرحله از تنظیمات قرار داشت. رمز از کد به مستندات منتقل شده بود. هنوز داخل مخزن (repository) بود. در واقع، حالا پیدا کردنش حتی آسان‌تر شده بود.

دوباره مشکل را توضیح دادم. این بار، آن‌ها کلید را به پایگاه داده منتقل کردند.

این کار شبیه به پیشرفت به نظر می‌رسید. کلید از مخزن خارج شده بود. اما وقتی پایگاه داده را بررسی کردم، کلید به صورت متن ساده (plaintext) آنجا بود. هیچ رمزنگاری‌ای وجود نداشت. هر کسی که به پایگاه داده دسترسی داشت، می‌توانست آن را بخواند.

کلید سه بار جابه‌جا شد:

مکان تغییر کرد، اما امنیت بهبود نیافت. آن‌ها داشتند رمز را پنهان می‌کردند، نه اینکه آن را مخفی (conceal) کنند.

پنهان کردن (Hiding) یعنی چیزی را از دید خارج کنید. مخفی‌سازی (Concealing) یعنی آن را برای مهاجم بی‌فایده کنید.

در نرم‌افزار، باید این قوانین را رعایت کنید:

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

هوش مصنوعی برای ارائه کدی که اجرا شود ساخته شده است. اگر به آن دستور دیگری ندهید، با کمال میل کدی می‌نویسد که حاوی یک رمز به صورت متن ساده باشد. هوش مصنوعی قابلیت (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