
Melkor هي أداة فازر بديهية وسهلة الاستخدام لتنسيق ملفات ELF، تهدف إلى اكتشاف الأخطاء الوظيفية والأمنية في مُحلِّلات ELF.
--------------------------------~
| -- DESCRIPTION -- |
--------------------------------~
Melkor - أداة Fuzzer لتنسيق ملفات ELF
ميلكور (Melkor)، شخصية خيالية من أساطير الأرض الوسطى (Middle-earth) للمؤلف J. R. R. Tolkien، كان أول سيّد ظلام (Dark Lord) وسيّد سورون (Sauron). يُذكر بإيجاز في «سيد الخواتم» (The Lord of the Rings) ويُعرف بالآتي:
"... كان ميلكور قد أسر عددًا من الجان (ELVES) قبل أن يهاجمه الفالار (Valar)، فعذّبهم وأفسدهم، فاستولد منهم أول الأوركس." (http://en.wikipedia.org/wiki/Morgoth)
"... كان ميلكور ماكرًا وأكثر امتلاءً بالحقد من أي وقت مضى. ولمّا رأى نعيم الجان (ELVES) وتذكّر أنه من أجلهم أُطيح به، تمنّى ميلكور فوق كل شيء أن يُفسدهم." (http://lotr.wikia.com/wiki/Melkor)
"الأوركس... كان الأمر كذلك منذ اليوم الذي استُولدوا فيه على يد ميلكور من جان (ELVES) فاسدين ومعذَّبين ومشوَّهين، ربما أُجبروا أيضًا على التزاوج مع كائنات بشعة أخرى غير طبيعية في مملكة قوى الظلام." (http://lotr.wikia.com/wiki/Orcs)
تكريمًا لاسمه، تأخذ هذه الشيفرة البرمجية ملف ELF وتُفسده، وتُنشئ من الأوركس بقدر ما تريد.
Melkor هو أداة Fuzzer هجينة (قائمة على التحوير (mutation) وعلى التوليد (generation)). يقوم بتحوير البيانات الموجودة في عيّنة ELF المعطاة لإنشاء الأوركس (ملفات ELF مشوّهة)، غير أنه لا يغيّر القيم عشوائيًا (Fuzzing أعمى)؛ بل يشوِّش بعض البيانات الوصفية بقيم شبه صالحة من خلال استخدام قواعد الـFuzzing (قاعدة معرفية). مكتوب بلغة C، ويُعدّ Melkor أداة Fuzzer بديهية للغاية وسهلة الاستخدام لاكتشاف الأخطاء الوظيفية (والأمنية) في مُحلِّلات ELF (ELF parsers).
صُمِّمت قواعد الـFuzzing مع مراعاة المدخلات التالية:
ستجد قواعد الـFuzzing بالتفصيل وبعض المخططات الأخرى في مجلد docs/.
--------------------------------~
| -- REQUIREMENTS -- |
--------------------------------~
--------------------------------~
| -- COMPILATION & USAGE -- |
--------------------------------~
عملية الترجمة (البناء) بسيطة جدًا، فقط اكتب: $make
سيُنشئ الملف 'melkor'، وهو أداة الـFuzzer نفسها، وبعض ملفات ELF الأخرى داخل مجلد templates/، بما في ذلك ملفات ELF عادية مثل ملف تنفيذي ELF عادي، وبعض المكتبات المشتركة، وملف ELF ثابت (ملف تنفيذي مستقل) وبعض الملفات الأخرى.
بتشغيل melkor، ستظهر قائمة بالخيارات وستدرك أنه بديهي جدًا وسهل الاستخدام. كل ما عليك تقديمه هو اسم ملف ELF ليُستخدم كقالب (template)، ويمكن أن يكون أيًا من الملفات الموجودة داخل مجلد templates/.
اعتمادًا على نوع البرنامج الذي تريد اختباره، عليك اختيار البيانات الوصفية التي تريد تشويشها. على سبيل المثال، إذا أردت اختبار مُحمِّل نظام تشغيل (OS loader)، فربما قد ترغب في تشويش جدول ترويسات البرنامج (Program Header Table) فقط (-P) و/أو القسم الديناميكي (Dynamic Section) (-D). من ناحية أخرى، ربما قد ترغب في تشويش جدول ترويسات الأقسام (Section Header Table) وترويسة ELF (ELF Header) لاختبار أي محرك مكافحة فيروسات أو مصحح أخطاء (debugger). كما يمكنك تشويش جداول الرموز (Symbol Tables) (-s) و/أو جداول إعادة التوطين (Relocation Tables) (-R) في الملفات القابلة لإعادة التوطين (.o) أو المكتبات المشتركة (.so) لاختبار المترجمات (compilers) و/أو الروابط (linkers). ويمكن أيضًا تشويش جداول السلاسل النصية (String Tables) (-Z). الأمر متروك لك لتقرر إلى أي درجة تريد إفساد ملف ELF }:-)
بمجرد إنشاء الأوركس داخل مجلد orcs_*/، يحين وقت اختبارها بمساعدة test_fuzzed.sh، حيث يمكنك ببساطة تحديد اسم المجلد الذي يحتوي الأوركس المراد تشغيلها (اختبار مُحمِّل نظام التشغيل) أو إضافة معامل إضافي لتحديد البرنامج (ومعاملاته) الذي تريد اختباره ضد كل ملف ELF مشوّه داخل مجلد الأوركس. يتيح هذا السكربت خيار تشويش بعض متغيرات البيئة (المعرّفة أيضًا كقواعد Fuzzing). قد يكون عرض السجلات عبر #dmesg بعد تشغيل السكربت مفيدًا لتحديد البرنامج/المكتبة التي تعطّلت ومكان حدوث ذلك التعطل. بعض الأمثلة معروضة عند تشغيل السكربت دون معاملات.
إذا أردت اختبار ملفات ELF المشوّهة (الأوركس) تلقائيًا في بيئة ويندوز، فهناك سكربت دفعي (win_test_fuzzed.bat) مرفق يتمتع بنفس وظائف السكربت الخاص بأنظمة *NIX تقريبًا.
استمتع بالـ Fuzzing!
--------------------------------~
| -- DIRS -- |
--------------------------------~
docs/ يحتوي على الوثائق ذات الصلة مثل القائمة التفصيلية لقواعد الـFuzzing، بالإضافة إلى قائمة تبعيات البيانات الوصفية لـ ELF.
templates/ يحتوي على بعض ملفات ELF التي تُجمَّع في نفس وقت تجميع melkor ويمكن استخدامها لتغذية melkor: foo.c -> foo.o (كائن ELF)-> foo (ملف ELF تنفيذي) foo.c -> foo_static (ELF تنفيذي ثابت) libfoo.c -> libfoo.so (ELF مكتبة مشتركة) وغيرها. اكتب "$make templ" لترى بالتفصيل قوالب ELF الأخرى التي يتم إنشاؤها.
orcs_*/ سيحتوي على ملفات ELF المشوّهة (المبنية على ملف القالب المعطى) التي يتم إنشاؤها بعد عملية الـFuzzing.
src/ الشيفرة المصدرية لـ Melkor.
--------------------------------~
| -- BUGS -- |
--------------------------------~
يرجى قراءة BUGS.txt
--------------------------------~
| -- CONTACT -- |
--------------------------------~
الاسم: Alejandro Hernandez H. [nitr0us] تويتر: http://twitter.com/nitr0usmx البريد: nitrousenador [at] gmail [dot] com الموقع: http://www.brainoverflow.org المدونة: http://chatsubo-labs.blogspot.com
--------------------------------~
| -- IN MEMORIAL -- |
--------------------------------~
هذا المشروع مهدى إلى ذكرى أحد أعز أصدقائي، آرون ألبا (Aaron Alba).
--------------------------------~
| -- LICENSE -- |
--------------------------------~
Melkor - أداة Fuzzer لتنسيق ملفات ELF حقوق النشر (C) 2014 Alejandro Hernandez H. (nitr0us)
هذا البرنامج برمجيات حرة: يمكنك إعادة توزيعه و/أو تعديله وفقًا لشروط رخصة جنو العمومية العامة (GNU General Public License) كما تنشرها مؤسسة البرمجيات الحرة، سواء الإصدار 3 من الرخصة أو (حسب اختيارك) أي إصدار لاحق.
يُوزَّع هذا البرنامج على أمل أن يكون مفيدًا، ولكن دون أي ضمان؛ حتى بدون الضمان الضمني للتسويق (MERCHANTABILITY) أو الملاءمة لغرض معيّن (FITNESS FOR A PARTICULAR PURPOSE). راجع رخصة جنو العمومية العامة لمزيد من التفاصيل.
يجب أن تكون قد تلقيت نسخة من رخصة جنو العمومية العامة مع هذا البرنامج. إذا لم يكن الأمر كذلك، فانظر http://www.gnu.org/licenses/.