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

خطر اصلی همیشه یک خطای واضح مانند تزریق SQL نیست. استفاده از کتابخانهٔ قدیمی، بررسی ناقص سطح دسترسی، ذخیره‌کردن کلید API در کد، اعتبارسنجی ناکافی ورودی و تنظیمات ناامن سرور، از خطاهایی هستند که ممکن است در خروجی مدل پنهان بمانند. هوش مصنوعی دستیار توسعه است، نه جایگزین بازبینی امنیتی.

چرا باید آسیب‌پذیری کدهای تولیدشده با هوش مصنوعی را جدی گرفت؟

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

مشکل دیگری که کمتر دیده می‌شود، اعتماد کاذب به توضیح مدل است. ممکن است مدل ادعا کند یک قطعه‌کد ورودی را ایمن‌سازی می‌کند، در حالی که فقط برخی حالت‌های ساده را پوشش داده است. بنابراین توضیح تولیدشده دربارهٔ امنیت کد، مدرک امنیت آن نیست.

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

برای بررسی سریع، ابتدا سراغ قسمت‌هایی بروید که ورودی کاربر را می‌گیرند، تصمیم دسترسی می‌گیرند یا با منابع خارجی ارتباط دارند. این نقاط بیشترین اثر را بر امنیت برنامه دارند:

  • احراز هویت و مجوزها: آیا برنامه فقط ورود کاربر را بررسی می‌کند یا برای هر عملیات، سطح دسترسی مناسب را هم می‌سنجد؟ شناسهٔ یک کاربر نباید به‌تنهایی مجوز مشاهده یا تغییر اطلاعات او باشد.
  • ورودی و خروجی: داده‌های فرم، URL، فایل و پارامترهای API باید اعتبارسنجی شوند. خروجی نیز، به‌خصوص هنگام نمایش در صفحهٔ وب، به پاک‌سازی و کدگذاری مناسب نیاز دارد.
  • پایگاه داده: ساختن مستقیم عبارت SQL با اتصال رشته‌ها، الگوی پرخطری است. استفاده از query پارامتری یا لایهٔ دسترسی امن، خطر تزریق را کاهش می‌دهد.
  • فایل و مسیرها: نام فایلی که کاربر ارسال می‌کند نباید بدون کنترل در مسیر سیستم قرار بگیرد. مسیرهای نسبی دست‌کاری‌شده می‌توانند به خواندن یا نوشتن فایل‌های خارج از پوشهٔ مجاز منجر شوند.
  • ارتباطات شبکه: درخواست‌هایی که برنامه به URL دریافت‌شده از کاربر می‌فرستد، می‌توانند زمینهٔ حملهٔ SSRF را ایجاد کنند. محدودکردن مقصدها و جلوگیری از دسترسی به نشانی‌های داخلی اهمیت دارد.
  • اسرار و اطلاعات شخصی: رمز عبور، کلید API و نشانهٔ دسترسی نباید در کد، پیام خطا یا گزارش‌های برنامه قرار بگیرند.

چک‌لیست عملی برای شناسایی آسیب‌پذیری کدهای تولیدشده با هوش مصنوعی

  1. کارکرد کد را دقیق مشخص کنید. قبل از بررسی، بنویسید چه کسی می‌تواند هر عملیات را انجام دهد، چه داده‌ای وارد می‌شود و برنامه به کدام منابع دسترسی دارد. بدون این زمینه، تشخیص «دسترسی بیش از حد» دشوار است.
  2. ورودی‌ها را تا مرز استفاده دنبال کنید. هر دادهٔ خارجی را از نقطهٔ ورود تا پایگاه داده، سیستم‌عامل، مرورگر یا سرویس دیگر ردیابی کنید. وجود یک بررسی سطحی در ابتدای تابع به‌تنهایی کافی نیست.
  3. کنترل دسترسی را جداگانه آزمایش کنید. درخواست یک کاربر عادی را با شناسه یا نشانی منبع کاربر دیگر امتحان کنید. اگر برنامه فقط به مخفی‌کردن دکمه‌ها در رابط کاربری تکیه کرده باشد، کنترل واقعی انجام نمی‌شود.
  4. وابستگی‌ها و نسخه‌ها را بررسی کنید. نام کتابخانه را از پاسخ مدل نپذیرید؛ نسخهٔ استفاده‌شده، وضعیت نگهداری و آسیب‌پذیری‌های شناخته‌شدهٔ آن را در مخزن رسمی یا ابزار مدیریت وابستگی بررسی کنید.
  5. خطاها و گزارش‌ها را بخوانید. پیام خطا نباید مسیر فایل، نشانی داخلی، query، توکن یا جزئیات غیرضروری زیرساخت را به کاربر نشان دهد. در عین حال گزارش داخلی باید برای پیگیری رخداد اطلاعات کافی داشته باشد.
  6. آزمون منفی بنویسید. فقط حالت موفق را تست نکنید. ورودی خالی، طولانی، نامعتبر، تکراری و دست‌کاری‌شده را نیز بررسی کنید و ببینید برنامه با شکست چه رفتاری دارد.

ابزارهای خودکار چه کمکی می‌کنند و چه چیزی را نمی‌بینند؟

تحلیل ایستای امنیتی می‌تواند الگوهایی مانند استفادهٔ ناامن از توابع، تزریق و برخی مشکلات مدیریت داده را پیش از اجرا پیدا کند. اسکن وابستگی‌ها نیز برای شناسایی نسخه‌های آسیب‌پذیر مفید است. برای برنامه‌های وب، آزمون پویا در محیط آزمایشی می‌تواند رفتار واقعی endpointها، کوکی‌ها، خطاها و کنترل دسترسی را آشکار کند.

با این حال هیچ اسکنری جای فهم منطق برنامه را نمی‌گیرد. ابزاری ممکن است وجود یک فیلتر را گزارش کند، اما نتواند تشخیص دهد فیلتر برای نقش اشتباه اعمال شده است. همچنین ممکن است هشدارهای زیادی تولید کند که همهٔ آن‌ها خطر واقعی نیستند؛ هر هشدار باید بازبینی و اولویت‌بندی شود.

چطور فرایند بازبینی را برای پروژه‌های کوچک امن‌تر کنیم؟

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

در درخواست‌های خود به مدل نیز اطلاعات حساس را وارد نکنید. به‌جای ارسال کل پروژه، یک نمونهٔ کوچک و ناشناس‌شده ارائه دهید و از مدل بخواهید فرض‌های امنیتی، مسیرهای خطا و مواردی را که نیاز به بررسی انسانی دارند، صریح بیان کند. این کار جای آزمون را نمی‌گیرد، اما نقاط مبهم را زودتر آشکار می‌کند.

جمع‌بندی: خروجی مدل را مانند کد شخص ثالث بررسی کنید

شناسایی آسیب‌پذیری کدهای تولیدشده با هوش مصنوعی با خواندن چند خط کد تمام نمی‌شود. ورودی‌ها، مجوزها، وابستگی‌ها، اسرار، ارتباطات شبکه و رفتار برنامه در شرایط خطا باید جداگانه بررسی و آزمایش شوند.

قاعدهٔ ساده این است: هر کدی که مدل تولید کرده، پیش از انتشار باید مانند کدی از یک توسعه‌دهندهٔ ناشناس بازبینی، تست و محدودسازی شود. این رویکرد هم برای پروژه‌های حرفه‌ای و هم برای برنامه‌های کوچکِ متصل به اطلاعات شخصی کاربرد دارد.