
ماسح ضوئي آلي لتكوين خادم وعميل 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
سيقوم TLS-Scanner بتقييم الخادم المحدد (هنا localhost على المنفذ 4433)، وفي النهاية سيطبع تقريرًا.
يستخدم التقرير الألوان لنقل خطورة النتائج:
يجب عليك تحديد المضيف الذي تريد فحصه باستخدام المعلمة -connect.
إذا كنت تريد تحسين أداء الفحص، يمكنك استخدام المعلمة -threads لزيادة عدد الخيوط المستخدمة.
معلمة مهمة أخرى لأسباب تتعلق بالأداء هي المعلمة -scanDetail، والتي يمكن استخدامها لتكوين مدى التفصيل الذي تريد الفحص به. القيم الممكنة التي تتراوح من سريع إلى مفصل جدًا هي: QUICK، NORMAL، DETAILED، ALL.
يمكن تكوين تفصيل المخرجات باستخدام المعلمة -reportDetail. من أجل رؤية مزيد من التفاصيل حول الإرشادات، استخدم -reportDetail ALL.
بشكل افتراضي، تُكتب النتائج إلى الطرفية فقط. إذا كنت تريد مخرجات قابلة للقراءة آليًا، يمكنك استخدام -outputFile output.json لكتابة النتائج تلقائيًا في ملف JSON.
أهم المعلمات التي يجب تغييرها هي -scanDetail و -reportDetail. فيما يلي، نشرح بعض حالات الاستخدام لهذه المعلمات.
في معظم الحالات، تكون إعدادات المعلمات الافتراضية لدينا كافية. يقوم هذا بإجراء فحص مع ضبط كلا مستويي التفصيل على NORMAL.
إذا كنت تريد إجراء فحص سريع والحصول على نظرة عامة سريعة على نظامك، فإننا نوصي بضبط كلا مستويي التفصيل على QUICK. يحد هذا من مدى بعض الفحوصات المنفذة لتقليل وقت التشغيل ويحد من تفصيل التقرير لعدم تضمين معلومات مفصلة جدًا وتقنية.
إذا كنت تريد تقييم نظامك بالكامل وتنفيذ كل ما لدينا، فإننا نوصي بضبط كلا مستويي التفصيل على ALL. يقوم هذا بتنفيذ جميع الفحوصات الموجودة بالكامل ويطبع معلومات مفصلة جدًا لمزيد من التحليل والتقييم.
بدلاً من (أو بالإضافة إلى) ضبط معلمات مثل -scanDetail بشكل فردي، يمكنك تجميع
الفحوصات التي تريد تشغيلها وأي من هذه المعلمات تريد استخدامها في ملف تعريف فحص JSON قابل لإعادة الاستخدام
باستخدام المعلمة -profile <path/to/profile.json>. وهي متاحة على كل من TlsServerScanner و
TlsClientScanner.
ملف التعريف هو ملف JSON يحتوي على:
inheritedFromProfiles: مسارات لملفات تعريف أخرى لدمج الفحوصات منها، يتم حلها نسبةً إلى
دليل ملف التعريف الذي يعلن عنها (يُستخدم المسار المطلق كما هو).probes: الفحوصات التي يجب تشغيلها، كخريطة من الاسم المؤهل بالكامل لفئة تعداد ProbeType
إلى قائمة أسماء ثوابتها التي يجب تشغيلها. يقوم هذا بتجميع الفحوصات حسب النوع بدلاً من تكرار
النوع لكل فحص على حدة، بينما لا يزال بإمكان ملف تعريف واحد دمج الفحوصات بحرية من
تطبيقات ProbeType مختلفة، مثل TlsProbeType و QuicProbeType. تقبل كل قائمة
لكل نوع أيضًا "*" (جميع ثوابت ذلك النوع) و "!CONSTANT_NAME" (إزالة ثابت
تمت إضافته سابقًا بالاسم أو بواسطة "*")، وتتم معالجتها بالترتيب — راجع Everything.json و
demo.json في scan-profiles/ للحصول على أمثلة.settings (اختياري): تجاوزات لمعلمات مثل -scanDetail، -reportDetail،
-postAnalysisDetail، -noColor، -outputFile، -probeTimeout، -parallelProbes، و
-threads. أي حقل يتم تركه يحتفظ بقيمته الافتراضية العادية (أو أي قيمة تم تمريرها على سطر
الأوامر). على عكس probes، لا يتم توريث settings — فقط الإعدادات المعلنة مباشرة على
ملف التعريف الذي تشير إليه -profile هي التي تُطبق، حتى لو كان يورث الفحوصات من ملفات تعريف أخرى.يتم تنفيذ فقط الفحوصات التي تم حلها من ملف التعريف النشط (وكل ما يورثه منه)؛ يتم تخطي كل شيء آخر.
مثال، يجمع بين فحوصات ملف تعريف أساسي وفحوصاتك الخاصة ويضبط تفصيل الفحص:
base.json:
{
"probes": {
"de.rub.nds.tlsscanner.core.constants.TlsProbeType": ["PROTOCOL_VERSION", "CIPHER_SUITE"]
}
}
quic.json (في نفس دليل base.json):
{
"inheritedFromProfiles": ["base.json"],
"settings": {
"scanDetail": "QUICK"
},
"probes": {
"de.rub.nds.tlsscanner.core.constants.QuicProbeType": ["SUPPORTED_VERSIONS"]
}
}
$ java -jar apps/TLS-Server-Scanner.jar -connect localhost:4433 -profile quic.json
يقوم هذا بتشغيل PROTOCOL_VERSION و CIPHER_SUITE و SUPPORTED_VERSIONS مع -scanDetail QUICK.
لمشاهدة كل فحص متاح لماسح معين (دون الاتصال بهدف)، استخدم -listProbes.
يطبعها مجمعة حسب فئة ProbeType بصيغة JSON الدقيقة التي يتوقعها حقل probes في ملف التعريف،
حتى تتمكن من نسخها ولصقها مباشرة في ملف تعريف:
$ java -jar apps/TLS-Server-Scanner.jar -listProbes
{
"de.rub.nds.tlsscanner.core.constants.TlsProbeType" : [ "ALPN", "ESNI", "CERTIFICATE", ... ],
"de.rub.nds.tlsscanner.core.constants.QuicProbeType" : [ "SUPPORTED_VERSIONS", ... ]
}
للحصول على معلومات مفصلة حول جميع المعلمات الممكنة، استخدم المعلمة -help أو نفذ ملف jar دون ضبط أي معلمات.
نوفر صور Docker مبنية مسبقًا لسهولة استخدام TLS-Server-Scanner.
$ docker run -it --network host ghcr.io/tls-attacker/tlsscanner -connect localhost:4433
الصورة مصممة للاستخدام في فحص الخادم ولكنها تحتوي أيضًا على ملفات jar الأخرى. يمكن الوصول إليها عن طريق تغيير نقطة الدخول (entrypoint).
$ 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 فلا تتردد في إرسال طلب سحب (pull request)
أحيانًا يكون لفحوصات (TLS) متطلبات أساسية مطلوبة لتنفيذ هذا الفحص المحدد. يسمح لك نظام المتطلبات بتعريف مجموعات من هذه المتطلبات التي يجب تلبيتها لكي يتم تنفيذ الفحص.
يقدم كل متطلب دالة evaluate تُرجع قيمة منطقية تشير إلى ما إذا كان المتطلب قد تم استيفاؤه.
يمكن ربط المتطلبات بعدة طرق باستخدام العمليات المنطقية المعروفة. يقدم كل متطلب دوال
and و or و not و xor كدوال على المثيل لربط متطلبات متعددة. الفحوصات التالية منفذة حاليًا ويمكن استخدامها جاهزة: