← أحدث الأبحاث
💻 computer science

RustGo: Fairly Directed Greybox Fuzzing for Enforcing Rust Memory Safety

يُعد RustGo فازر (fuzzer) جديداً من نوع الـ greybox الموجه الذي يستفيد من التحليل الساكن الخاص بلغة Rust لتحديد أهداف أخطاء الذاكرة المحتملة تلقائياً وتقليم مسارات التنفيذ غير ذات الصلة، مما يحسن كفاءة الفحص بشكل كبير ويكتشف الثغرات الأمنية غير المعروفة في كود Rust غير الآمن (unsafe Rust) مقارنة بالنهج الحالية.

المؤلفون الأصليون: Dongyeon Yu (Korea University), Jiun Min (Korea University), Yewan Na (Ulsan National Institute of Science and Technology), Mijung Kim (Ulsan National Institute of Science and Technology), Taegyu Kim
نُشر 2026-08-07
📖 6 دقيقة قراءة🧠 قراءة متعمّقة

المؤلفون الأصليون: Dongyeon Yu (Korea University), Jiun Min (Korea University), Yewan Na (Ulsan National Institute of Science and Technology), Mijung Kim (Ulsan National Institute of Science and Technology), Taegyu Kim (The Pennsylvania State University), Yuseok Jeon (Korea University)

البحث الأصلي مرخَّص بموجب CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). هذا شرح مولَّده بالذكاء الاصطناعي للبحث أدناه. لم يكتبه المؤلفون ولم يصادقوا عليه. وللتحقق من الدقة التقنية، يرجى الرجوع إلى البحث الأصلي. اقرأ إخلاء المسؤولية الكامل

تخيل أنك محقق يحاول العثด على عيب واحد ضئيل في مدينة ضخمة وصاخبة. في عالم البرمجيات، البرنامج هو هذه المدينة، والعيب هو "خطأ في الذاية" (memory bug)؛ وهو خطأ حيث يحاول البرنامج أخذ أو استخدام أو التخلص من بيانات لا ينبغي له الوصول إليها، مما يتسبب في تعطل البرنامج أو اختراقه. لعقود من الزمن، كانت الطريقة الأكثر شيوعاً للعثور على هذه الأخطاء هي "التحفيز العشوائي" (fuzzing). فكر في "التحفيز العشوائي" كعملية إلقاء ملايين كرات الثلج العشوائية والفوضوية على جدران المدينة لمعرفة ما إذا كانت أي منها سيحطم نافذة. عادةً ما ينجح هذا مع اللغات القديمة، ولكن هناك مشكلة: إنها غير فعالة للغاية. قد تضطر لإلقاء 99 كرة ثلج على الباب الأمامي المتين وغير القابل للكسر لتجد نافذة واحدة ضعيفة في زقاق خلفي.

هنا يأتي دور "رست" (Rust)، وهي لغة برمجة حديثة تعمل مثل حارس أمن صارم للغاية. قواعد "رست" قوية لدرجة أن 9、0% من المدينة التي تبنيها هي عملية حصينة عملياً؛ إذ يضمن الحارس أن معظم "النوافذ" (مناطق الذاكرة) مغلقة بإحكام بشكل افتراضي. ومع ذلك، لبناء أشياء معقدة معينة، تسمح "رست" للمطورين بفتح بوابة صغيرة خاصة تسمى "الكود غير الآمن" (unsafe code). هذا هو المكان الوحيد الذي يتم فيه تخفيف القواعد الصارمة، وهو المكان الوحيد الذي يمكن أن يختبئ فيه خطأ في الذاكرة. المشكلة هي أن أدوات "إلقاء كرات الثلج" الموجودة لا تعرف ذلك؛ فهي تستمر في إلقاء كرات الثلج على الـ 90% الآمن من المدينة، مما يهدر الوقت والطاقة، بينما تفوت الأماكن الخطيرة القليلة الموجودة خلف تلك البوابة الخاصة. تقدم هذه الورقة البحثية أداة تحقيق جديدة تسمى RustGo تغير قواعد اللعبة من خلال معرفة المكان الذي يجب إلقاء كرات الثلج فيه بالضبط.

المحقق الذكي: RustGo

أدرك الباحثون وراء هذه الورقة، وهم فريق من جامعة كوريا ومؤسسات أخرى، أن إلقاء كرات الثلج عشوائياً على برنامج "رست" يشبه محاولة العثور على إبرة في كومة قش عن طريق حرق كومة القش بأكملها. وبما أن "رست" تضمن السلامة لمعظم كودها، فقد تساءلوا: لماذا نختبر الأجزاء الآمنة على الإطلاق؟ لقد بنوا RustGo، وهو "محفز رمادي الصندوق موجه" (directed greybox fuzzer) يعمل كمحقق لديه خريطة وعدسة مكبرة، بدلاً من شخص معصوب العينين يرمي الحجارة.

يعمل RustGo عبر ثلاث خطوات ذكية لصيد الأخطاء بكفاءة:

1. إيجاد الأهداف الصحيحة (الخريطة)
أولاً، يقوم RustGo بمسح الكود للعثور على مناطق "الكود غير الآمن" حيث قد تختبئ الأخطاء. لكنه لا يخمن فحسب؛ بل يستخدم نوعاً خاصاً من التحليل للنظر في كيفية تدفق البيانات عبر البرنامج. تخيل أن المدينة بها العديد من الأزقة، لكن بعضها يؤدي إلى طرق مسدودة أو حلقات لا تحدث أبداً في الواقع. يقوم RustGo بتصفية هذه المسارات. إنه يحدد المواضع المحددة التي يمكن أن يتسبب فيها خطأ الذاكرة، ثم يدمج المواضع المتشابهة معاً. إذا أدت مسارات مختلفة في الكود إلى نفس النتيجة الخطرة تماماً، فإن RustGo يعاملها كهدف واحد، حتى لا يضيع الوقت في فحص الشيء نفسه مرتين. في اختباراتهم، ساعدتهم هذه الخطوة في تقليل عدد الأهداف التي يحتاجون إلى فحصها بنسبة تقارب 84%، مع التركيز فقط على المناطق المثيرة للريبة حقاً.

2. قطع الطرق المسدودة (العدسة المكبرة)
بمجرد أن يعرف RustGo أين ينظر، فإنه يحتاج إلى تجاهل بقية المدينة. في أدوات التحفيز القديمة، غالباً ما تتضمن "خريطة" المدينة المكتب القياسي (الأدوات الجاهزة التي تستخدمها اللغة)، وهو ضخم ومليء بالمسارات التي تبدو قابلة للوصول ولكنها في الواقع ليست كذلك. كان هذا يربك الأدوات، مما يجعلها تستكشف مناطق عديمة الفائدة. قدم RustGo خدعة جديدة تسمى "تقليم المسار المحدد للهدف" (target-specific path pruning). إنها تشبه امتلاك سياج سحري يزيل فوراً أي مسار لا يؤدي إلى الهدف المحدد الذي تحققه حالياً. إذا كان المحقق يبحث عن خطأ في المخبز، فإن السياج يغلق المسارات المؤدية إلى المكتبة أو الحديقة، حتى لو كانت تلك المسارات موجودة تقنياً في المدينة. سمح هذا لـ RustGo بقطع 78.49% من المسارات غير ذات الصلة التي قد تضيع الأدوات الأخرى وقتها في استكشافها.

3. اللعب بإنصاف (استراتيجية التدوير الدوري)
إليك التحول الأخير والحاسم. عندما يكون لدى المحقق عدة مشتبه بهم (أهداف) لفحصهم، غالباً ما تصبح الأدوات القديمة مهووسة بالأسهل وصولاً، وتتجاهل الأصعب. يستخدم RustGo نظام "التبديل العادل الديناميكي" (dynamic fair toggling). تخيل حكماً يبدل انتباه المحقق بين المشتبه بهم في تدوير مثالي. إذا قضى المحقق وقتاً طويلاً جداً في فحص المشتبه به (أ)، فإن الحكم ينقله فوراً إلى المشتبه به (ب)، مما يضمن حصول كل مشتبه به على قدر عادل من الاهتمام. يقوم RustGo بذلك من خلال إعطاء كل هدف "طابور" خاص به من كرات الثلج و"بطاقة تسجيل" خاصة به لتتبع التقدم. وهذا يضمن عدم ترك أي بقعة خطيرة دون اختبار لمجرد أنها أصعب قليلاً في الوصول إليها.

النتائج: أسرع وأذكى

اختبر الفريق RustGo على 13 تطبيقاً واقعياً من تطبيقات "رست"، تتراوح من خوادم الويب إلى أدوات معالجة البيانات. وقارنوه بأفضل الأدوات الموجودة، بما في ذلك AFL++ الشهير والعديد من المحفزات "الموجهة" المتخصصة. كانت النتائج مذهلة.

لأن RustGo توقف عن إضاعة الوقت على الـ 90% الآمنة من الكود وركز فقط على الـ 10% الخطرة، فقد وجد الثغرات بسرعة تتراوح بين 2.09 إلى 5.08 ضعف سرعة الأدوات الأخرى. وفي بعض الحالات، مثل تطبيق gimli ، كان أسرع بأكثر من 10 مرات. ولوضع هذا في المنظور، إذا استغرقت أداة قديمة 10 ساعات للعثيد على خطأ، فإن RustGo يجده في أقل من ساعة.

لكن السرعة ليست الانتصار الوحيد. استخدم الفريق RustGo للبحث عن الأخطاء في الواقع، وليس فقط في مختبر الاختبار الخاص بهم. لقد اكتشفوا 13 خطأً غير معروف سابقاً في الذاكرة في برمجيات واقعية. ومن بين هذه الأخطاء، تم تأكيد 10 منها من قبل مطوري البرامج، وتم إصلاح 8 منها بالفعل. والأكثر إثارة للإعجاب هو أن 6 من هذه الأخطاء حصلت على معرفات أمنية رسمية (RUSTSEC)، وحصل واحد منها على معرف CVE، وهو المعيار العالمي لتتبع الثغرات الأمنية الخطيرة. هذا يثبت أن RustGo ليس مجرد فكرة نظرية؛ بل هو أداة عملية تجعل البرمجيات أكثر أماناً بالفعل.

لماذا يهم هذا؟

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

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

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

غارق في أبحاث مجالك؟

تصلك نشرة يومية بأحدث الأبحاث المطابقة لكلماتك البحثية المفتاحية — مع ملخصات تقنية، بلغتك.

جرّب Digest →