
تحليل ثابت يركز على الأمان لإطار Phoenix Framework
Sobelow هي أداة تحليل ثابتة موجهة نحو الأمان للغة Elixir وإطار العمل Phoenix. بالنسبة لباحثي الأمان، فهي أداة مفيدة للحصول على نظرة سريعة على نقاط الاهتمام. بالنسبة لمشرفي المشاريع، يمكن استخدامها لمنع إدخال عدد من الثغرات الشائعة.
حاليًا، يكتشف Sobelow بعض أنواع مشكلات الأمان التالية:
يتم تمييز الثغرات المحتملة بألوان مختلفة وفقًا لمستوى الثقة في عدم أمانها. الثقة العالية باللون الأحمر، الثقة المتوسطة باللون الأصفر، والثقة المنخفضة باللون الأخضر.
عادةً ما يتم وضع علامة "ثقة منخفضة" على النتيجة إذا بدت وكأن الدالة يمكن استخدامها بشكل غير آمن، لكن لا يمكن تحديد ما إذا كانت الدالة تقبل مدخلات من المستخدم بشكل موثوق. أي، إذا تم تمييز النتيجة باللون الأخضر، فهي قد تكون غير آمنة بشكل حرج، ولكنها ستتطلب تحققًا يدويًا أكبر.
ملاحظة: هذا المشروع في تطور مستمر، وسيتم تمييز ثغرات إضافية بمرور الوقت. إذا واجهت خطأ، أو ترغب في طلب ميزات إضافية أو فحوصات أمان، يرجى فتح مشكلة!
لاستخدام Sobelow، يمكنك إضافته إلى تبعيات تطبيقك.
def deps do
[
{:sobelow, "~> 0.13", only: [:dev, :test], runtime: false}
]
end
يمكنك أيضًا تثبيت Sobelow عالميًا عن طريق تنفيذ الأمر التالي من سطر الأوامر:
$ mix escript.install hex sobelow
لتثبيت من الفرع الرئيسي (master)، بدلاً من الإصدار الأخير، يمكن استخدام الأمر التالي:
$ mix escript.install github nccgroup/sobelow
بعد التثبيت، أبسط طريقة لفحص مشروع Phoenix هي تشغيل الأمر التالي من جذر المشروع:
$ mix sobelow
ملاحظة: يجب أن تكون أي وسائط مسار مسارات مطلقة، أو نسبية بالنسبة لجذر التطبيق.
--root أو -r - تحديد دليل جذر التطبيق. يقبل وسيطة مسار،例如 ../my_project.
--verbose أو -v - طباعة مقتطفات التعليمات البرمجية وتفاصيل إضافية عن النتائج.
--ignore أو -i - تجاهل أنواع نتائج معينة. يقبل قائمة مفصولة بفواصل من أسماء الوحدات،例如 XSS.Raw,Traversal.
--ignore-files - تجاهل الملفات. يقبل قائمة مفصولة بفواصل من أسماء الملفات،例如 config/prod.exs.
--details أو -d - الحصول على تفاصيل نوع النتيجة. يقبل اسم وحدة واحدة،例如 Config.CSRF.
يسمح Sobelow للمستخدمين بحفظ الخيارات المستخدمة بشكل متكرر في ملف تكوين. على سبيل المثال، إذا وجدت نفسك تشغيل باستمرار:
$ mix sobelow -i XSS.Raw,Traversal --verbose --exit Low
يمكنك استخدام العلامة --save-config لإنشاء ملف التكوين .sobelow-conf الخاص بك:
$ mix sobelow -i XSS.Raw,Traversal --verbose --exit Low --save-config
سينشئ هذا الأمر ملف .sobelow-conf في جذر تطبيقك. يمكنك تحرير هذا الملف مباشرة لإجراء تغييرات.
يمكنك أيضًا تشغيل الأمر بدون أي خيارات:
$ mix sobelow --save-config
عند البدء في استخدام هذه الحزمة لأول مرة - سيتم ملء ملف التكوين الذي تم إنشاؤه بالقيم الافتراضية لكل خيار. (يساعد هذا في دمج هذه الحزمة بسرعة في قاعدة بيانات موجودة مسبقًا.)
الآن إذا كنت تريد تشغيل Sobelow مع التكوين المحفوظ، يمكنك تشغيل Sobelow مع العلامة --config.
$ mix sobelow --config
يفضل Sobelow الإبلاغ الزائد عن الإبلاغ الناقص. ونتيجة لذلك، قد تجد عددًا من الإيجابيات الزائفة في الفحص النموذجي. يمكن تجاهل هذه النتائج بشكل فردي عن طريق إضافة تعليق # sobelow_skip، مع قائمة من الوحدات، قبل تعريف الدالة.
# sobelow_skip ["Traversal"]
def vuln_func(...) do
...
end
عند دمج Sobelow في مشروع جديد، قد يكون هناك عدد كبير من الإيجابيات الزائفة. لوضع علامة على جميع النتائج المطبوعة كإيجابية زائفة، قم بتشغيل sobelow مع العلامة --mark-skip-all.
بمجرد وضع علامات على النتائج المناسبة، قم بتشغيل Sobelow مع العلامة --skip.
$ mix sobelow --skip
بينما يمكن لتعليقات # sobelow_skip فقط وضع علامات على النتائج على مستوى الدالة (وبالتالي لا يمكن استخدامها لتخطي مشكلات التكوين)، يمكن استخدام العلامة --mark-skip-all لتخطي أي نوع من النتائج.
يتم تقسيم فئات النتائج إلى وحدات. يمكن بعد ذلك استخدام هذه الوحدات إما لتجاهل فئات النتائج (عبر خيارات ignore و skip) أو للحصول على تفاصيل الثغرات (عبر خيار details).
يمكن العثور على هذه القائمة، وغيرها من المعلومات المفيدة، على سطر الأوامر:
$ mix help sobelow
لتشغيل Sobelow ضد جميع التطبيقات الفرعية داخل تطبيق Umbrella بأمر واحد، يمكنك إضافة اسم مستعار لـ sobelow في ملف mix.exs الجذر الخاص بك:
defp aliases do
[
sobelow: ["cmd mix sobelow"]
]
end
إذا كنت ترغب في استخدام ملفات التكوين في تطبيق Umbrella، أنشئ ملف .sobelow-conf في كل تطبيق فرعي واستخدم العلامة --config.
عند فحص مشروع، سيتحقق Sobelow من وجود تحديثات من حين لآخر، وسيطبع تنبيهًا إذا كان إصدار جديد متاحًا. يحتفظ Sobelow بسجل لآخر فحص تحديث عن طريق إنشاء ملف .sobelow في جذر المشروع الممسوح.
إذا لم تكن هذه الوظيفة مرغوبة، يمكن استخدام العلامة --private مع الفحص.
--all-details - الحصول على تفاصيل جميع أنواع النتائج.
--private - تخطي فحوصات التحديث.
--router - تحديد موقع الموجه. هذا يحتاج فقط إلى الاستخدام إذا كان موقع الموجه غير قياسي. يقبل وسيطة مسار،例如 my/strange/router.ex.
--exit - إرجاع حالة خروج غير صفرية عند أو فوق عتبة ثقة من low أو medium أو high. القيمة الافتراضية هي false والتي ترجع حالة خروج صفرية.
--threshold - إرجاع النتائج عند أو فوق مستوى ثقة من low (افتراضي) أو medium أو high.
--format أو -f - تحديد تنسيق إخراج النتائج. يقبل تنسيقًا،例如 txt أو json.
لاحظ أن خيارات مثل --verbose لن تعمل مع تنسيق json. جميع النتائج المنسقة بـ json تحتوي على مفتاح type و file و line. قد تختلف المفاتيح الأخرى.
--quiet - إرجاع سطر واحد يشير إلى عدد النتائج. بخلاف ذلك، لا يُرجع أي إخراج إذا لم توجد نتائج.
--compact - نتائج سطر واحد بأقل قدر من التفاصيل مع تلوين الإخراج وفقًا لمستوى الثقة.
--flycheck - نتائج سطر واحد بأقل قدر من التفاصيل متوافقة مع أدوات flycheck.
--save-config - إنشاء ملف تكوين استنادًا إلى خيارات سطر الأوامر. انظر ملفات التكوين لمزيد من المعلومات.
--config - تشغيل Sobelow مع ملف التكوين. انظر ملفات التكوين لمزيد من المعلومات.
--mark-skip-all - وضع علامة على جميع النتائج المعروضة كقابلة للتخطي.
--clear-skip - مسح التكوين الذي تم إنشاؤه بواسطة --mark-skip-all.
--skip - تجاهل النتائج التي تم وضع علامة عليها للتخطي. انظر الإيجابيات الزائفة لمزيد من المعلومات.
--version - إخراج الإصدار الحالي من Sobelow. هذا مفيد لخطوات CI أو التكامل مع أدوات أخرى مثل Salus.