BrassCoders اكتشفت أسراراً مدمجة برمجياً في اثنين من أصل خمسة عشر سكربت Python تم إنشاؤها بواسطة الذكاء الاصطناعي خضعت للفحص، مما يكشف عن خطر ملموس للمطورين الذين يقومون بنسخ ولصق الكود مباشرة من مخرجات النماذج اللغوية الكبيرة. وتظهر النتائج أن مفتاحاً واحداً أو كلمة مرور واحدة وُضعت في غير مكانها يمكن أن تحول مقتطفاً برمجياً مفيداً إلى تسريب لبيانات الاعتماد عبر أنظمة التحكم في الإصدارات وبيئات الإنتاج.

ماذا كشف الاختبار

السكربت الأول، token_check.py، تم إنتاجه بناءً على أمر (prompt) طلب وظيفة لتوقيع رموز الجلسات (session tokens) وتضمين "مثال قابل للاستخدام". ولجعل الكود قابلاً للتشغيل، قام النموذج بإدراج مفتاح توقيع HMAC فعلي مباشرة في ملف المصدر.

  • المشكلة: يوجد المفتاح السري داخل قاعدة الكود.
  • المخاطر: يمكن لأي شخص لديه صلاحية القراءة للمستودع (repository) رؤية المفتاح، وأي عملية نشر تسحب الملف سترث هذا السر.
  • العواقب: يمكن للمهاجم الذي يحصل على المفتاح تزوير رموز جلسات صالحة، مما يؤدي إلى تجاوز فحوصات المصادقة.

السكربت الثاني، email_sender.py، أجاب على طلب لوظيفة ترسل بريداً إلكترونياً عبر SMTP. وقام النموذج مرة أخرى بتوفير كلمة مرور فعلية ليعمل المثال مباشرة.

  • المشكلة: تظهر كلمة المرور كسلسلة نصية واضحة (plain-text) في استدعاء الوظيفة.
  • المخاطر: يتطلب تغيير كلمة المرور تعديلاً في الكود وعملية نشر جديدة، كما تنتشر بيانات الاعتماد في كل بيئة تستخدم الملف.
  • العواقب: يمكن استخراج كلمة المرور من نظام التحكم في المصدر، أو السجلات (logs)، أو الحزم المجمعة، مما يمنح الخصم وصولاً غير مصرح به إلى خادم البريد.

لماذا يخرج الذكاء الاصطناعي أسراراً

تولد النماذج اللغوية الكبيرة النصوص عن طريق إكمال الأمر (prompt). عندما يطلب المستخدم "مثالاً قابلاً للاستخدام"، يفسر النموذج ذلك على أنه "كود يعمل دون إعدادات إضافية". وبناءً على ذلك، يقوم بملء القيم المفقودة — مثل مفاتيح API، وكلمات المرور، والرموز (tokens) — ببدائل تبدو منطقية. لا يمتلك النموذج أي وعي بأفضل ممارسات إدارة الأسرار ما لم يذكر الأمر ذلك صراحةً.

وجد تحليل حديث أجرته Veracode للأكواد المُنشأة بواسطة الذكاء الاصطناعي أن 45% من المقتطفات تحتوي على ثغرة واحدة على الأقل مدرجة في قائمة OWASP Top 10، حيث تمثل كشف بيانات الاعتماد حصة كبيرة. وتؤكد هذه الإحصائية أن المشكلة ليست معزولة في حالات استثنائية قليلة، بل هي نتاج نظامي لكيفية تدريب هذه النماذج وتوجيه الأوامر لها.

خطوات التخفيف التي يمكن للمطورين اتخاذها الآن

أبسط وسيلة دفاع هي إبقاء أي سر بعيداً عن ملف الكود نفسه. وتعد متغيرات البيئة (Environment variables) الطريقة الأكثر شيوعاً والمستقلة عن لغة البرمجة:

# token_check.py – secure version
import os
import hmac
import hashlib

SECRET_KEY = os.environ["HMAC_SECRET_KEY"]

def sign_token(data: bytes) -> str:
    return hmac.new(SECRET_KEY.encode(), data, hashlib.sha256).hexdigest()
# email_sender.py – secure version
import os
import smtplib

smtp_password = os.environ["SMTP_PASSWORD"]
server = smtplib.SMTP("smtp.example.com", 587)
server.starttls()
server.login("noreply@example.com", smtp_password)

يؤدي استخدام os.environ إلى سحب القيمة من بيئة التشغيل، مما يبقيها بعيدة عن نظام التحكم في الإصدارات ويسمح بتدويرها (rotation) دون المساس بملفات المصدر. وينطبق النمط نفسه مع ملفات التكوين التي يتم استبعادها من عمليات الإرسال (commits)، أو خدمات إدارة الأسرار، أو الأسرار المُدارة عبر الحاويات (container-orchestrated secrets).

ضمانات إضافية

  • مراجعة الكود (Code reviews) التي تضع علامة على السلاسل النصية التي تطابق أنماط الأسرار الشائعة (مثل التسلسلات الأبجدية الرقمية الطويلة).
  • أدوات التحليل الساكن (Static analysis tools) المضبوطة لاكتشاف بيانات الاعتماد المدمجة في الملفات المضافة حديثاً.
  • هندسة الأوامر (Prompt engineering): اطلب من النموذج صراحةً "استخدام متغيرات البيئة لجميع الأسرار" أو "تجاهل بيانات الاعتماد الحقيقية".
  • فحص الكود (linting) بعد الإنشاء: تشغيل سكربت سريع يبحث عن القيم النصية المشبوهة قبل نسخ الكود إلى المشروع.

وجهة نظر مغايرة: هل يعني هذا أن كود الذكاء الاصطناعي غير آمن؟

إن وجود أسرار مدمجة برمجياً لا يعني أن الكود المُنشأ بواسطة الذكاء الاصطناعي غير آمن بشكل عام. في كثير من الحالات، ينتج النموذج منطقاً نظيفاً ومنظماً جيداً يمكن أن يسرع عملية التطوير. تظهر المخاطر عندما يعامل المطورون المخرجات على أنها جاهزة للإنتاج دون إجراء تدقيق أمني. تعامل مع الذكاء الاصطناعي كمساعد في الصياغة، وليس كبديل للممارسات الأمنية الراسخة.

ما يجب مراقبته لاحقاً

  • تحديثات الأدوات: بدأت منصات الذكاء الاصطناعي في دمج فلاتر أمان تستبدل الأسرار ببدائل (placeholders). ومراقبة هذه التغييرات يمكن أن تقلل من التعرض للمخاطر.
  • التحولات في السياسات: قد تضع المؤسسات مبادئ توجيهية رسمية للبرمجة بمساعدة الذكاء الاصطناعي، مما يفرض فحوصات إدارة الأسرار كجزء من مسار CI.
  • أنماط المجتمع: مع مشاركة المطورين لمزيد من "الأوامر الآمنة"، قد تصبح قوالب أفضل الممارسات هي المخرجات الافتراضية للمهام الشائعة مثل توقيع الرموز أو إرسال البريد الإلكتروني.

الخلاصة: يمكن للذكاء الاصطناعي إنتاج كود برمجي وظيفي في ثوانٍ معدودة، ولكن ما لم يلتزم المطورون بضوابط إدارة الأسرار، فإن هذه السهولة تأتي بتكلفة خفية — وهي بيانات اعتماد مكشوفة يمكن أن تعرض نظامًا بأكمله للخطر. تعامل مع كل مقتطف برمجي كمسودة، وقم بإزالة أي أسرار نصية صريحة، وقم بحقنها عبر متغيرات البيئة أو مخزن آمن مخصص قبل عملية الالتزام.