العودة إلى التحديثات
New releaseJul 31, 2026

TLS-Attacker v7.0.0-rtc

إطار عمل قائم على جافا للتشويش المنهجي وتحليل مكتبات TLS. يتيح صياغة رسائل البروتوكول بشكل تعسفي، وتعديلها، واختبار عملاء/خوادم TLS لاكتشاف الثغرات الأمنية.

مشاركة

TLS-Attacker

GitHub release (latest by date) licence Build Status

TLS-Attacker هو إطار عمل مبني على Java لتحليل مكتبات TLS. يمكنه إرسال رسائل بروتوكول عشوائية بترتيب عشوائي إلى النظير TLS، وتحديد تعديلاتها باستخدام واجهة موفرة. وهذا يمنح المطور فرصة سهلة لتعريف تدفق بروتوكول TLS مخصص واختباره مقابل مكتبة TLS الخاصة به.

يرجى ملاحظة: TLS-Attacker أداة بحثية مخصصة لمطوري TLS ومختبرين الاختراق. لا توجد واجهة رسومية ولا أضواء خضراء/حمراء.

التجميع والتشغيل

للتجميع واستخدام TLS-Attacker، يجب أن يكون لديك Java و Maven مثبتين. على Ubuntu يمكنك تثبيت Maven عن طريق تشغيل:

$ sudo apt-get install maven

TLS-Attacker يحتاج حالياً إلى Java JDK 21 للتشغيل.

إذا كان لديك إصدار Java الصحيح، يمكنك تشغيل أمر maven من دليل TLS-Attacker:

$ git clone https://github.com/tls-attacker/TLS-Attacker.git
$ cd TLS-Attacker
$ mvn clean install

بدلاً من ذلك، إذا كنت في عجلة من أمرك، يمكنك تخطي الاختبارات باستخدام:

$ mvn clean install -DskipTests=true

يتم وضع ملفات jar الناتجة في مجلد "apps".

إذا كنت ترغب في استخدام هذا المشروع كاعتماد، لا تحتاج إلى تجميعه بنفسك ويمكنك تضمينه في pom.xml الخاص بك على النحو التالي.

<dependency>
    <groupId>de.rub.nds.tls.attacker</groupId>
    <artifactId>tls-attacker</artifactId>
    <version>7.0.0</version>
    <type>pom</type>
</dependency>

يأتي TLS-Attacker مع تطبيقات توضيحية توفر لك وصولاً سهلاً إلى وظائف TLS-Attacker.

يمكنك تشغيل TLS-Attacker كعميل بالأمر التالي:

$ cd apps
$ java -jar TLS-Client.jar -connect [host:port]

أو كخادم بـ:

$ java -jar TLS-Server.jar -port [port]

على الرغم من أن هذه التطبيقات النموذجية قوية بذاتها، إلا أن TLS-Attacker يطلق العنان لإمكاناته الكاملة عند استخدامه كمكتبة برمجية.

هيكل الكود

يتكون TLS-Attacker من عدة مشاريع (maven):

  • TLS-Client: تطبيق العميل النموذجي
  • TLS-Core: حزمة البروتوكول وقلب TLS-Attacker
  • TLS-Mitm: نموذج أولي لسير عمل MitM
  • TLS-Server: تطبيق الخادم النموذجي
  • TLS-Proxy: استخدام TLS-Attacker لـ SSLSockets
  • TraceTool: فحص وتعديل تتبع سير عمل TLS-Attacker
  • Transport: أدوات النقل للطبقات السفلية
  • Utils: مجموعة من الفئات المساعدة

TLS-Attacker design

يمكنك العثور على مزيد من المعلومات حول هذه الوحدات في الويكي.

الميزات

حالياً، الميزات التالية مدعومة:

  • SSL 3، إصدارات TLS 1.0 (RFC-2246)، 1.1 (RFC-4346)، 1.2 (RFC-5246)، و 1.3 (RFC-8446)
  • SSL 2 (مدعوم جزئياً)
  • خوارزميات تبادل المفاتيح (EC)DH(E)، RSA، PSK، SRP، GOST و ANON
  • تشفير CBC، AEAD و Streamciphers (AES، CAMELLIA، DES، 3DES، IDEA، RC2، ARIA، GOST_28147_CNT_IMIT، RC4، SEED، NULL)
  • ~300 مجموعة تشفير، ~30 امتداد
  • عميل وخادم
  • HTTPS
  • سير عمل بأكثر من طرفين
  • الكثير من الامتدادات
  • Tokenbinding (EC) و Tokenbinding عبر HTTP
  • مقابس (Sockets)
  • TLS 1.3 0-RTT
  • STARTTLS
  • ...

الاستخدام

نقدم هنا بعض الأمثلة البسيطة جداً على استخدام TLS-Attacker.

أولاً، تحتاج إلى بدء خادم TLS (يرجى عدم استخدام خوادم عامة). يرجى تشغيل script keygen.sh إذا لم يتم ذلك من قبل. على سبيل المثال، يمكنك استخدام خادم اختبار OpenSSL:

$ cd TLS-Attacker/resources
$ openssl s_server -key rsa1024key.pem -cert rsa1024cert.pem

يبدأ هذا الأمر خادم TLS على المنفذ 4433.

إذا كنت ترغب في الاتصال بخادم، يمكنك استخدام هذا الأمر:

$ cd TLS-Attacker/apps
$ java -jar TLS-Client.jar -connect localhost:4433

ملاحظة: إذا فشلت هذه المصافحة، فغالباً لأنك لم تحدد مجموعة تشفير محددة. TLS-Attacker لن يحترم بالكامل مجموعات التشفير التي يختارها الخادم.

يمكنك استخدام مجموعة تشفير مختلفة، إصدار TLS مختلف، أو الاتصال بمنفذ مختلف بالمعاملات التالية:

$ java -jar TLS-Client.jar -connect localhost:4433 -cipher TLS_RSA_WITH_AES_256_CBC_SHA -version TLS11

إذا كنت مطوراً أكثر خبرة، يمكنك إنشاء تدفق رسائل TLS الخاص بك عن طريق كتابة كود Java. على سبيل المثال:

Config config = Config.createConfig();
WorkflowTrace trace = new WorkflowTrace();
trace.addTlsAction(new SendAction(new ClientHelloMessage()));
trace.addTlsAction(new ReceiveAction(new ServerHelloMessage()));
State state = new State(config, trace);
DefaultWorkflowExecutor executor = new DefaultWorkflowExecutor(state);
executor.executeWorkflow();

يستخدم TLS-Attacker مفهوم WorkflowTraces لتعريف "تدفق رسائل TLS". يتكون WorkflowTrace من قائمة إجراءات يتم تنفيذها واحداً تلو الآخر. على الرغم من أن تدفق رسائل TLS النموذجي يحتاج فقط إلى SendAction و ReceiveAction، إلا أن الإطار لا يتوقف عند هذا الحد ويطبق الكثير من الإجراءات الأخرى المختلفة التي يمكن استخدامها لتنفيذ تدفقات رسائل أكثر تعسفاً. يمكن العثور على قائمة بالإجراءات المطبقة حالياً مع الشروحات في الويكي.

نعلم أن الكثير منكم يكرهون Java. لذلك، يمكنك أيضاً استخدام هيكل XML وتشغيل بروتوكول TLS المخصص من XML:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<workflowTrace>
    <!-- Send ClientHello -->
    <Send>
        <configuredMessages>
            <ClientHello>
                <extensions>
                    <ECPointFormat/>
                    <EllipticCurves/>
                    <SignatureAndHashAlgorithmsExtension/>
                    <RenegotiationInfoExtension/>
                </extensions>
            </ClientHello>
        </configuredMessages>
        <configuredRecords>
            <record/>
        </configuredRecords>
    </Send>
    
    <!-- Receive server response -->
    <Receive>
        <expectedMessages>
            <ServerHello>
                <extensions>
                    <ECPointFormat/>
                    <RenegotiationInfoExtension/>
                </extensions>
            </ServerHello>
            <Certificate/>
            <ServerHelloDone/>
        </expectedMessages>
    </Receive>
    
    <!-- Send client key exchange and finish -->
    <Send>
        <configuredMessages>
            <RSAClientKeyExchange/>
            <ChangeCipherSpec/>
            <Finished/>
        </configuredMessages>
        <configuredRecords>
            <record/>
            <record/>
            <record/>
        </configuredRecords>
    </Send>
    
    <!-- Receive server finish -->
    <Receive>
        <expectedMessages>
            <ChangeCipherSpec/>
            <Finished/>
        </expectedMessages>
    </Receive>
</workflowTrace>

بالنظر إلى أن هذا الهيكل XML موجود في TLS-Attacker/apps/workflow.xml، ستحتاج فقط لتنفيذ:

$ java -jar TLS-Client.jar -connect [host]:[port] -workflow_input workflow.xml

نظام المهاجم/الطبقات (Protocol-Attacker/Layer System)

مصمم في الأصل لمهاجمة بروتوكول TLS، TLS-Attacker قادر على دعم بروتوكولات عشوائية. لتحقيق ذلك، يعيّن TLS-Attacker حزمة طبقات لكل اتصال. تتكون حزمة الطبقات هذه من طبقات البروتوكول المختلفة التي يرغب المستخدم في استخدامها. مع حزمة الطبقات، يمكن للمستخدم إضافة طبقات مثل DTLS، أو HTTP (المزيد قيد التطوير) بترتيب عشوائي.

لإرسال واستقبال رسائل عشوائية باستخدام حزمة الطبقات، يمكن للمستخدم تعريف إعدادات لكل طبقة. تحدد هذه الإعدادات الرسائل التي يجب إرسالها أو استقبالها. يتيح هذا أيضاً للمستخدم تحديد حاويات البيانات/الرسائل الخاصة بكل طبقة. على سبيل المثال، يمكن للمرء تحديد رسائل وسجلات TLS التي يجب على TLS-Attacker إرسالها. سيقوم TLS-Attacker بتغليف رسائل TLS المعطاة في السجلات تلقائياً.

المتغيرات القابلة للتعديل (Modifiable Variables)

يستخدم TLS-Attacker مفهوم المتغيرات القابلة للتعديل (Modifiable Variables) للسماح بالتعديلات وقت التشغيل على سير العمل المحدد مسبقاً. المتغيرات القابلة للتعديل تسمح بتعيين تعديلات على الأنواع الأساسية قبل أو بعد تعيين قيمها الفعلية. عندما يتم تحديد قيمها الفعلية ويحاول المرء الوصول إلى القيمة عبر getters، سيتم إرجاع القيمة الأصلية بشكل معدل وفقاً لذلك. يمكن العثور على مزيد من التفاصيل حول هذا المفهوم على https://github.com/tls-attacker/ModifiableVariable.

الفئات