paint-brush
هل الكود الذي تم إنشاؤه بواسطة الذكاء الاصطناعي الخاص بك آمن حقًا؟بواسطة@danielcrouch
تاريخ جديد

هل الكود الذي تم إنشاؤه بواسطة الذكاء الاصطناعي الخاص بك آمن حقًا؟

بواسطة Daniel7m2025/03/19
Read on Terminal Reader

طويل جدا؛ ليقرأ

تُعدّ الشيفرات البرمجية المُولّدة بالذكاء الاصطناعي السبب الرئيسي وراء أكبر عشر ثغرات أمنية، ويحتوي ما يقرب من 40% منها على ثغرات أمنية. تُدرّب نماذج الذكاء الاصطناعي على كل معلومة متاحة على الإنترنت. قد تختلف جودة الشيفرات البرمجية وموثوقيتها وأمانها وغيرها عن تلك التي يُولّدها المطورون البشريون.
featured image - هل الكود الذي تم إنشاؤه بواسطة الذكاء الاصطناعي الخاص بك آمن حقًا؟
Daniel HackerNoon profile picture
0-item

كان تطوير البرمجيات والبرمجة يُعتبران في السابق مساعٍ تتطلب خبرةً عميقة، لكنهما أصبحا متاحين لأي شخص باستخدام اللغة الطبيعية. فالميزة التي كانت تستغرق أيامًا أو أشهرًا لتطويرها، أصبحت الآن تُطوّر في دقائق أو ساعات بفضل شيفرة من نموذج ذكاء اصطناعي. على سبيل المثال، يتم تدريب OpenAI Codex وGoogle BERT على برمجة مدونات الويب، وأسئلة Stack Overflow، وغيرها.


تُنشئ هذه النماذج الذكية برمجياتها باستخدام الاحتمالات الرياضية، بينما يُعرف عنها أيضًا أنها تُوهم وتُقدم معلومات خاطئة. يُشير بحثٌ أجرته جهات أكاديمية إلى أن توليد الشفرات البرمجية بالذكاء الاصطناعي هو السبب الرئيسي لأبرز عشر ثغرات أمنية، وأن ما يقرب من 40% من الشفرات البرمجية تحتوي على ثغرات أمنية . ويستفيد العديد من اللاعبين الرئيسيين، إلى جانب مُزودي خدمات البرمجيات كخدمة (SaaS) الجدد، من الذكاء الاصطناعي لجعل عروضهم أكثر ذكاءً. ويجب على مُبرمجي خدمات البرمجيات كخدمة (SaaS) أيضًا أن يكونوا أكثر درايةً بأدوات SaaS القائمة على الذكاء الاصطناعي.

ما الذي يجعل الكود الذي تم إنشاؤه بواسطة الذكاء الاصطناعي غير آمن؟

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

5 مؤشرات تشير إلى أن الكود يحتوي على نقاط ضعف أمنية

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

1. لا يتم فرض استنتاج النوع والتحقق من صحة الإدخال

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


 def reciprocal(user_input): # Insecure implementation with no type inference or validation result = 100 / user_input return result

2. مشاركة الحالة والسياق غير القياسية بين الفئات/الكائنات

تتشارك البرامج الكائنات بطرق عامة/خاصة/محمية. ترث الدوال والفئات ذات الترتيب الأعلى حالة الكائن من خلال الوصول مباشرةً إلى المتغيرات العامة/المحمية لإجراء العمليات الحسابية. في حال حدوث خطأ في التنفيذ، قد تحدث اختناقات أمنية أو أداء بسهولة. يجب على مطوري البرمجيات كخدمة (SaaS) تطبيق منطق إدارة الحالة والسياق الخاص بهم بشكل صحيح ومراجعته لضمان الاستخدام الصحيح والآمن.


 class InsecureClass: def __init__(self, owner, balance, password): self.owner = owner # Public attribute self._balance = balance # Protected attribute self.__password = password # Private attribute # Public def def get_balance(self): return self._balance # Protected def def _update_balance(self, amount): self._balance += amount # Private def def __validate_password(self, input_password): return self.__password == input_password # Insecure def exposing private data def insecure_password_exposure(self): return self.__password

3. ضعف تنفيذ تقنيات التعامل مع البيانات ومشاركتها

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


 #Insecure Data Sharing @app.route("/user/<int:user_id>", methods=["GET"]) def get_user(user_id): user = users.get(user_id) if user: return jsonify(user) # All user data exposed, including secrets # Insecure Data Handling @app.route("/update_email", methods=["POST"]) def update_email(): data = request.json() user_id = data.get("user_id") new_email = data.get("new_email") if user_id in users: users[user_id]["email"] = new_email # No validation of new_email return jsonify({"message": "Email updated successfully"})

4. عدم كفاية الأسرار ومعالجة التفويض

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


 # Insecure authentication @app.route("/login", methods=["POST"]) def login(): data = request.json() email = data.get("email") password = data.get("password") for user_id, user in users.items(): if user["email"] == email and user["password"] == password: return jsonify({"message": "Login successful", "user_id": user_id})

5. التبعيات القديمة مع استخدام وظائف قديمة

تُدار برمجة الذكاء الاصطناعي من قِبل المكتبات والأطر التي أنشأها المجتمع، وهي مفتوحة المصدر. يدعم الناس التقنيات الجديدة باستخدام هذه الأدوات الواعدة وإنشاء أخرى جديدة. البيانات التي دُربت عليها هذه النماذج غير مُحدثة، وقدرات النموذج مُجمدة، وكذلك معرفتهم. مع تطور التكنولوجيا، ستصبح العديد من الميزات قديمة، ولن تُلبي بعض المكتبات الاحتياجات الحالية. يُكلَّف مطور البرمجيات كخدمة (SaaS) بمراجعة التبعيات الصالحة واستخدامها لضمان الأداء والأمان.


 import md5 # Outdated library def insecure_hash_password(password): # Insecure password hashing done using the deprecated MD5 algorithm. return md5.new(password).hexdigest()

نصائح لجعل الكود المُولّد بواسطة الذكاء الاصطناعي آمنًا للاستخدام

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


  1. يجب أن تكون مراجعة الكود مع فرق الأمان والهندسة المعمارية جزءًا قياسيًا من دورة حياتك.
  2. دمج خطوات الاختبار الأمني والتحقق الآلية في أدوات التحكم في الإصدار.
  3. قم بتضمين عمليات التحقق من التبعية والامتثال في مؤشرات الأداء الرئيسية للاختبار.
  4. اعتماد بنية الثقة الصفرية مع أدوات اختبار الأمان الثابتة والديناميكية.
  5. استفد من ممارسات DevSecOps والذكاء الاصطناعي الظلي.

التعامل مع الكود غير الآمن الذي تم إنشاؤه بواسطة الذكاء الاصطناعي من خلال إجراء بسيط على Github

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


 name: Simple Security Checks for AI generated Code on: push: branches: - main pull_request: branches: - main jobs: security-and-quality-check: runs-on: ubuntu-latest Steps: - name: Repository checkout uses: actions/checkout@v3 - name: Python setup uses: actions/setup-python@v4 with: python-version: ">=3.9" - name: Dependency installation run: | python -m pip install --upgrade pip pip install bandit pytest - name: Identifying insecure libraries and patterns run: | echo "Checking for insecure patterns..." if grep -r "md5.new(" .; then echo "ERROR: Insecure MD5 hashing detected. Use hashlib.sha256 or bcrypt instead." exit 1 fi echo "No insecure patterns detected." - name: Scanning for security vulnerabilities run: | echo "Running Bandit security scanner..." bandit -r . - name: Running unit tests run: | echo "Running unit tests..." pytest test/unit --cmodopt=local - name: Notifying on failure if: failure() run: | send_slack_notification(“Unsafe code merge detected, fix immediately”)

خاتمة

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