شات جي بي تي، الدردشة القائمة على الذكاء الاصطناعي من OpenAI، قد أثارت جدلاً لعدة أشهر. ونسمع بانتظام أن شات جي بي تي (والذكاء الاصطناعي بشكل عام) سيجعلنا عاطلين عن العمل.
قبل أن نطرح السؤال الكبير حول ما إذا كان بإمكان شات جي بي تي أداء كل عمل لاختبار الاختراق بنفس الجودة، من المنطقي أن نبدأ بسؤال تقني أبسط بكثير: هل يمكن لشات جي بي تي حل تحدي بفراز متجاوز بسيط؟
يهدف هذا المقال إلى دراسة سلوك شات جي بي تي وليس حل تحدي بفراز متجاوز، لذا لن نشرح بعض المصطلحات التقنية.
قبل أن نبدأ، لا يجب أن ننسى الرسالة التي نسمعها في كثير من الأحيان عندما نسأل كيف يمكن استغلال الثغرات:
ربما تكونون على دراية بهذا النوع من الإجابات. في الواقع، يعتبر شات جي بي تي "القرصنة" فعلاً خبيثًا، لأنه عادةً ما يرتبط بمثل هذا النوع من الأفعال. لذلك، سيتجنب تقديم إجابة على بعض أسئلتنا. لذا سيتعين علينا التفاف حول هذه الأمن بطرح أسئلة ملتوية.
لنفترض أننا في مكان مبتدئ لم يسبق له استغلال buffer overflow!
لذا، نسأل شات جي بي تي ما إذا كان قطعة الكود في التحدي غير آمنة.
الانتصار الأول: تم اكتشاف الضعف!
في الواقع، يكتشف ChatGPT استخدام 'scanf' لقراءة buffer بدون مراقبة للحجم. بالإضافة إلى ذلك، يحدد الدالة 'callMeMaybe' التي تبسط تنفيذ الشيفرة بعد استغلال buffer overflow. في النهاية، يقترح ChatGPT بعض التحسينات على الشيفرة.
لذلك، نلاحظ أنه قادر على الحصول على رؤية عامة للشيفرة ويتمكن من ربط الضعف بـ 'callMeMaybe'.
نواصل نهجنا البسيط، كما لو أننا لا نثق فيه، ونطلب PoC للتأكد من وجود الضعف فعلًا.
يقدم لنا ChatGPT سلسلة من الأحرف المكونة من 300 'A'. في الواقع، يتوقف البرنامج مع خطأ من نوع 'Segmentation Fault'.
لنواصل التحقيق.
ثم ينصحنا ChatGPT باستخدام GDB لاكتشاف مصدر هذا الانهيار. يقدم لنا بعد ذلك قائمة طويلة من الأوامر التي يجب تنفيذها في gdb (تم حذفها من الشاشة أعلاه). ولكن لسوء الحظ، فإن هذا يعتبر فشلًا.
عندما وصفنا له المشكلة، اكتشف ChatGPT السبب مباشرةً وقدم لنا أمرًا لتجميع البرنامج مع 'symbols' gdb. ومع ذلك، بعد العديد من التبادلات، بدأ ChatGPT في التشويش وعلق. المعلومة الوحيدة المفيدة التي قدمها هي إنشاء سلسلة حروف دورانية تسهل عملية التصحيح.
لنترك هذا جانبًا لاحقًا ولنحاول إعادة توجيه المحادثة بطلب الطريقة الأسرع للتحقيق في خطأ الفصل.
يبدو أن ChatGPT نجح في العودة إلى المسار الصحيح. حتى يقترح علينا بعض الأوامر لتنفيذها.
بعد استلام محتوى السجلات، يكتشف ChatGPT سلسلة مألوفة "saaacaac" ، وهي تتناسب مع سلسلة الأحرف الدورانية التي قمنا بتوليدها باستخدام pwntools.
لننسى لماذا نحن هنا، ChatGPT قال لنا أنه يجب أن نتمكن من استدعاء "callMeMaybe". لذلك نسأله كيف يمكننا فعل ذلك.
تم الرد على بعض التفاصيل وتوفير جلسة GDB لإضافة عنوان "callMeMaybe".
مرة واحدة يتم تنفيذ هذه الأوامر في GDB، نقوم بإرسال نتائجنا ونطلب أمرًا يسمح للمستغل.
تنفيذ الأمر يتردد أيضًا بعد أكثر من أسئلة، ChatGPT لا يبدو أنه يفهم ذلك. نحن نقرر كيفية المساعدة.
بعد هذا الدعم، يقترح ChatGPT إضافة بعض الأحرف في طبعتنا حتى نصل إلى نقطة الانقطاع.
نحن نحاول مساعدته في العثور على طريقة أفضل للقيام بذلك عن طريق اقتراح استخدام وظيفة 'cyclic' في pwntools.
الأسئلة الست التالية تسمح لنا بالحصول على الطول الصحيح باستخدام هذه الوظيفة.
لدينا الآن برنامج Python الذي يولد الحمولة الصحيحة. الأمر الوحيد المتبقي هو تنفيذه.
ومع ذلك، لا يُعطينا الطرفية السيطرة كمستخدم root. في الحقيقة، يتم تشغيل bash كمستخدم root، ولكنه يُغلق قبل أن نتمكن من كتابة الأوامر.
نحاول مرة أخرى مساعدته في اكتشاف المشكلة ولكن دون جدوى.
آخر دفعة من المساعدة مطلوبة.
بفضل إشارة أوضح، قرر ChatGPT تغيير الاستراتيجية والعودة إلى البرنامج الذي يستخدم pwntools. وهذه ليست فكرة سيئة، ولكن وظيفة 'interact' لا تعمل، سيتعين علينا استبدالها بـ 'interactive' لنتمكن من استغلال الثغرة بنجاح، وهو ما فشل في العثور عليه على الرغم من محاولاتنا المختلفة.
في الختام، قنعنا الوقت المضي في المحادثة بأن استخدام ChatGPT لمهمة من البداية إلى النهاية بواسطة مبتدئ ليس مستحسنًا. احتاج إلى عدة تلميحات ليكون على الطريق الصحيح، مما يدعونا إلى عدم توصيل استخدامه إلا للأسئلة الواضحة والمباشرة.
المشكلة الثانية التي واجهناها هي عدم دقة بعض المعلومات التي يقدمها، لذا يُفضل إجراء "fact-checking" باستخدام محرك بحث و/أو امتلاك معرفة حول الموضوع.