
TLS-Scanner v7.0.0-rtc
ماسح ضوئي آلي لتكوين خادم وعميل TLS لاختبار الاختراق والباحثين. يقوم بتقييم مجموعات التشفير وإصدارات البروتوكول وإرشادات الأمان مع عمق مسح قابل للتخصيص ومخرجات قابلة للقراءة آليًا.
TLS-Scanner
TLS-Scanner هي أداة لمساعدة مختبرين الاختراق وباحثي الأمن في تقييم تكوينات خوادم وعملاء TLS.
يرجى الملاحظة: TLS-Scanner هي أداة بحثية مخصصة لمطوري TLS ومختبرين الاختراق والمشرفين والباحثين. لا توجد واجهة رسومية. إنها في الإصدار الأول وقد تحتوي على بعض الأخطاء.
التجميع
لتجميع واستخدام TLS-Scanner، تحتاج إلى تشغيل:
$ cd TLS-Scanner
$ git submodule update --init --recursive
$ mvn clean package
بدلاً من ذلك، إذا كنت مستعجلاً، يمكنك تخطي الاختبارات باستخدام:
$ mvn clean package -DskipTests=true
إذا كنت ترغب في استخدام TLS-Scanner كمكتبة، فيجب تثبيته باستخدام الأمر التالي:
$ mvn clean install
التشغيل
لتشغيل TLS-Scanner، تحتاج إلى تشغيل أحد ملفات jar في مجلد apps/. يمكن الحصول عليها عن طريق تجميع التطبيق بنفسك أو عن طريق تحميل ملفات jar المنشورة من GitHub.
$ java -jar apps/TLS-Server-Scanner.jar -connect localhost:4433
المعاملات الهامة
يجب تحديد مضيف تريد مسحه باستخدام المعامل -connect.
إذا كنت ترغب في تحسين أداء المسح، يمكنك استخدام المعامل -threads لزيادة عدد الخيوط المستخدمة.
معامل مهم آخر لأسباب تتعلق بالأداء هو -scanDetail، والذي يمكن استخدامه لتكوين درجة التفصيل التي ترغب بها في المسح. القيم الممكنة تتراوح من سريع إلى مفصل جدًا: QUICK, NORMAL, DETAILED, ALL.
يمكن تكوين تفصيل المخرجات باستخدام المعامل -reportDetail. لعرض المزيد من التفاصيل حول الإرشادات، استخدم -reportDetail ALL.
افتراضياً، تُكتب النتائج على وحدة التحكم فقط. إذا كنت ترغب في الحصول على مخرجات قابلة للقراءة آليًا، يمكنك استخدام -outputFile output.json لكتابة النتائج تلقائيًا في ملف JSON.
حالات الاستخدام
أهم المعاملات التي يمكن تغييرها هي -scanDetail و -reportDetail. فيما يلي، نشرح بعض حالات الاستخدام لهذه المعاملات.
المسح الافتراضي
في معظم الحالات، تكفي إعدادات المعاملات الافتراضية لدينا. يقوم هذا بإجراء مسح بمستويي تفصيل مضبوطين على NORMAL.
المسح السريع
إذا كنت ترغب في إجراء مسح سريع والحصول على نظرة عامة سريعة على نظامك، نوصي باستخدام مستويي التفصيل مضبوطين على QUICK. يحد هذا من مدى بعض الاستقصاءات المنفذة لتقليل وقت التشغيل ويحد من تفصيل التقرير ليشمل معلومات غير مفصلة جدًا وغير تقنية.
المسح المفصل
إذا كنت ترغب في تقييم نظامك بالكامل وتنفيذ كل ما لدينا، نوصي باستخدام مستويي التفصيل مضبوطين على ALL. يقوم هذا بتنفيذ جميع الاستقصاءات الموجودة بالكامل ويطبع معلومات مفصلة جدًا لمزيد من التحليل والتقييم.
جميع المعاملات
للحصول على معلومات مفصلة حول جميع المعاملات الممكنة، استخدم المعامل -help أو قم بتنفيذ jar دون تعيين أي معاملات.
Docker
نقدم صور دوكر مبنية مسبقًا لسهولة استخدام TLS-Server-Scanner.
$ docker run -it --network host ghcr.io/tls-attacker/tlsscanner -connect localhost:4433
الصورة مصممة لاستخدامها في مسح الخوادم ولكنها تحتوي أيضًا على ملفات jar الأخرى. يمكن الوصول إليها عن طريق تغيير نقطة الدخول.
$ docker run -it --network host --entrypoint java ghcr.io/tls-attacker/tlsscanner -jar TLS-Client-Scanner.jar
نقدم لك أيضًا Dockerfile، لبناء الحاوية بنفسك:
$ docker build . -t tlsscanner
$ docker run -t tlsscanner
يرجى الملاحظة: لست على دراية بأفضل ممارسات Docker بأي حال من الأحوال. إذا كنت تعرف كيفية تحسين Dockerfile، فلا تتردد في تقديم طلب سحب
نظام المتطلبات
قد تحتوي استقصاءات (TLS) أحيانًا على متطلبات مسبقة ضرورية لتنفيذ هذا الاستقصاء المحدد. يسمح لك نظام المتطلبات بتعريف مجموعات من هذه المتطلبات التي يجب استيفاؤها لتنفيذ الاستقصاء.
يقدم كل متطلب دالة evaluate تعيد قيمة منطقية (boolean) تشير إلى ما إذا كان المتطلب قد تم استيفاؤه.
يمكن ربط المتطلبات بعدة طرق باستخدام عمليات منطقية معروفة. يقدم كل متطلب طرق مثيل and, or, not, و xor لربط متطلبات متعددة. الاستقصاءات التالية منفذة حاليًا ويمكن استخدامها جاهزة:
FulfilledRequirement- يقيم دائمًا إلىtrue، مفيد للإشارة إلى عدم وجود متطلبات.UnfulfillableRequirement- يقيم دائمًا إلىfalse، يمنع تنفيذ الاستقصاءات.ProbeRequirement- يقيم إلىtrueإذا تم تنفيذ الاستقصاء (الاستقصاءات) المحدد.PropertyRequirement- يقيم إلىtrueإذا كانت الخصائص المحللة المحددة لها قيمة محددة مسبقًا. يمكن تقديم القيمة إما كمعامل للمنشئ أو يمكن استخدامPropertyTrueRequirementوPropertyFalseRequirementكاختصار لـTestResults.TRUEوTestResults.FALSE.PropertyComparatorRequirement- يقيم إلىtrueإذا كانت نتيجة مجموعة خاصية محللة أصغر أو مساوية أو أكبر من قيمة ثابتة.ProtocolRequirement- يقيم إلىtrueإذا كانت إصدارات بروتوكول معينة مدعومة.ExtensionRequirement- يقيم إلىtrueإذا كانت امتدادات معينة مدعومة من قبل النظير البعيد.OptionsRequirement- يقيم إلىtrueإذا تم تعيين أعلام سطر أوامر إضافية. يُستخدم حاليًا في بعض استقصاءات العميل (ALPN, SNI, session resumption).WorkingConfigRequirement- يقيم إلىtrueإذا تم العثور على تكوين عامل.
بالإضافة إلى هذه المتطلبات المحددة مسبقًا، يمكن أيضًا توسيع فئة Requirement بشكل مجهول داخل طريقة getRequirements. إذا لم يكن هناك حاجة لأي شيء، يمكنك استخدام FulfilledRequirement الذي يقيم دائمًا إلى true.
يمكن العثور على أمثلة حول كيفية استخدام المتطلبات في حزم probe لكل من tls-client-scanner و tls-server-scanner.
@Override
public Requirement<ClientReport> getRequirements() {
return new ProbeRequirement<ClientReport>(TlsProbeType.CIPHER_SUITE)
.and(new PropertyTrueRequirement<>(TlsAnalyzedProperty.SUPPORTS_DHE));
}