
ماسح ضوئي آلي لتكوين خادم وعميل TLS لاختبار الاختراق والباحثين. يقوم بتقييم مجموعات التشفير وإصدارات البروتوكول وإرشادات الأمان مع عمق مسح قابل للتخصيص ومخرجات قابلة للقراءة آليًا.
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 دون تعيين أي معاملات.
نقدم صور دوكر مبنية مسبقًا لسهولة استخدام 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 - يقيم إلى إذا كانت نتيجة مجموعة خاصية محللة أصغر أو مساوية أو أكبر من قيمة ثابتة.بالإضافة إلى هذه المتطلبات المحددة مسبقًا، يمكن أيضًا توسيع فئة 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));
}
trueProtocolRequirement - يقيم إلى true إذا كانت إصدارات بروتوكول معينة مدعومة.ExtensionRequirement - يقيم إلى true إذا كانت امتدادات معينة مدعومة من قبل النظير البعيد.OptionsRequirement - يقيم إلى true إذا تم تعيين أعلام سطر أوامر إضافية. يُستخدم حاليًا في بعض استقصاءات العميل (ALPN, SNI, session resumption).WorkingConfigRequirement - يقيم إلى true إذا تم العثور على تكوين عامل.