
أداة فيوزر مقيَّسة لتطبيقات التحكم الصناعي (ICS) القائمة على PLC، تستهدف بيئة تشغيل Codesys على وحدات تحكم Wago للكشف عن تلف الذاكرة والمدخلات المسببة للانهيار.
ICSFuzz هي أداة فيزينغ تعمل على جانب وحدة التحكم المنطقية القابلة للبرمجة (PLC) لاكتشاف الثغرات الأمنية في تطبيقات التحكم في الأنظمة الصناعية (ICS)
بقلم Dimitris Tychalas \@ditihala_
.. _\@ditihala: https://www.twitter.com/ditihala
تتطلب الأداة وجود مترجم متقاطع (cross compiler) مُثبَّت مسبقًا على جهازك. وبما أن أداة الفيزينغ تعمل بشكل أصلي على وحدة التحكم PLC، فإنها تحتاج إلى أن تُجمَّع باستخدام سلسلة أدوات متقاطعة (cross-toolchain) مبنية على ARM، مثل OSELAS. لتثبيت مثل هذه السلسلة، يرجى اتباع التعليمات الواردة في الرابط التالي وتعديل ملف Makefile بحيث يتضمن موقع المترجم المتقاطع لديك.
سلسلة أدوات OSELAS <https://pengutronix.de/en/software/toolchain.html>__أداة ICSFuzz هي أداة متخصصة لتقييم أمان تطبيقات التحكم في الأنظمة الصناعية (ICS). في مرحلتها الحالية، تدعم فقط التطبيقات المبنية على منصة Codesys التي تم تعديلها وتكييفها لتعمل على وحدة التحكم المنطقية Wago PLC. وبما أن هذه الأداة ما زالت قيد التطوير المستمر من جهتنا، فإن أي اقتراحات للترقيات وتعزيز التوافق ستكون محل ترحيب كبير :) فقط أرسل لي بريدًا إلكترونيًا على [email protected]
تم بناء هذه الأداة كتطبيق بسيط سيتم تشغيله على وحدة التحكم Wago PLC الخاصة بك. فقط قم بتشغيل ملف Makefile، وانسخ الملف الثنائي fuzzer الناتج إلى وحدة التحكم لديك ونفّذه! نظرًا لأن الأداة تصل إلى ذاكرة العمليات وتعدّلها دون قيود، فإنها تتطلب صلاحيات المسؤول (admin). يرجى التأكد من تشغيلها كمستخدم sudo أو root.
تتوافق الأداة حاليًا مع Codesys 3.5 والإصدار التصحيحي 02.06.20(08) والإصدارات الأقدم؛ يرجى ترقية أو خفض إصدار البرامج الثابتة (firmware) لوحدة التحكم PLC لديك حتى تتمكن من استضافة ICSFuzz بشكل صحيح. للحصول على تغذية راجعة مرئية حول عملية الفيزينغ، يمكنك استخدام منصة e!cockpit المتاحة كأداة تطوير/واجهة بشرية-آلية (HMI) لوحدات التحكم Wago PLC. من خلالها يمكنك تتبع مدخلات الفيزينغ المرسلة إلى التطبيق، كما سيتم إعلامك بأي تعطل محتمل؛ فعندما يتوقف التطبيق عن التنفيذ، سيعلق مؤشر "run" (التشغيل) باللون الأحمر. وبما أن التطبيق سيتوقف، فإن المدخلات الحالية (العالقة) هي التي تسببت في التعطل. يمكنك إعادة تشغيل التطبيق عبر e!cockpit ثم إعادة تشغيل أداة الفيزينغ مرة أخرى.
تحتوي أداة الفيزينغ على قيمة بداية أولية مثبتة في الكود البرمجي (يُشار إليها باسم seed_input في الكود المصدري) ويمكنك تعديلها بحرية أثناء تجربتك مع الأداة.
إذا وجدت عملنا مثيرًا للاهتمام واستخدمته في أبحاثك (أكاديمية كانت أم لا)، فيرجى الاستشهاد بورقتنا البحثية المقدمة في مؤتمر Usenix Security 2021 والتي تصف ICSFuzz:
Tychalas, Dimitrios, Hadjer Benkraouda, and Michail Maniatakos. "ICSFuzz: Manipulating I/Os and Repurposing Binary Code to Enable Instrumented Fuzzing in {ICS} Control Applications." 30th {USENIX} Security Symposium ({USENIX} Security 21). 2021.
يستند ICSFuzz، مثل كل الأشياء الجيدة في الحياة، إلى أكتاف العمالقة. يعتمد هذا الإطار على الأداة القوية AFL التي طورها Michal Zalewski لإنتاج التحويرات اللازمة لمدخلات الاختبار التي يتم تسليمها إلى تطبيق ICS.
AFL <https://lcamtuf.coredump.cx/afl/>__