
TLS-Attacker v7.8.0
जावा-आधारित फ्रेमवर्क TLS लाइब्रेरीज़ के व्यवस्थित फज़िंग और विश्लेषण के लिए। मनमाना प्रोटोकॉल संदेश निर्माण, संशोधन, और भेद्यता खोज के लिए TLS क्लाइंट/सर्वर के परीक्षण को सक्षम करता है।
TLS-Attacker
TLS-Attacker एक Java-आधारित फ्रेमवर्क है जो TLS लाइब्रेरीज़ का विश्लेषण करने के लिए डिज़ाइन किया गया है। यह TLS पीयर को किसी भी क्रम में मनमाने प्रोटोकॉल संदेश भेजने और एक प्रदान किए गए इंटरफ़ेस का उपयोग करके उनमें संशोधन को परिभाषित करने में सक्षम है। यह डेवलपर को आसानी से एक कस्टम TLS प्रोटोकॉल प्रवाह को परिभाषित करने और अपनी TLS लाइब्रेरी के विरुद्ध इसका परीक्षण करने का अवसर देता है।
कृपया ध्यान दें: TLS-Attacker एक शोध उपकरण है जो TLS डेवलपर्स और पेंटेस्टर्स के लिए है। इसमें कोई GUI या हरे/लाल बत्तियाँ नहीं हैं।
संकलन और चलाना
TLS-Attacker को संकलित और उपयोग करने के लिए, आपके पास Java और Maven स्थापित होना चाहिए। Ubuntu पर आप Maven को निम्नलिखित कमांड चलाकर स्थापित कर सकते हैं:
$ sudo apt-get install maven
TLS-Attacker को वर्तमान में चलाने के लिए Java JDK 21 की आवश्यकता है।
यदि आपके पास सही Java संस्करण है, तो आप TLS-Attacker निर्देशिका से Maven कमांड चला सकते हैं:
$ 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: SSLSockets के लिए TLS-Attacker का उपयोग करें
- TraceTool: TLS-Attacker वर्कफ़्लो ट्रेस का निरीक्षण और संशोधन
- Transport: निचली परतों के लिए परिवहन उपयोगिताएँ
- Utils: उपयोगिता वर्गों का संग्रह

आप इन मॉड्यूल के बारे में अधिक जानकारी विकी में पा सकते हैं।
सुविधाएँ
वर्तमान में, निम्नलिखित सुविधाएँ समर्थित हैं:
- 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 और स्ट्रीम सिफर (AES, CAMELLIA, DES, 3DES, IDEA, RC2, ARIA, GOST_28147_CNT_IMIT, RC4, SEED, NULL)
- ~300 सिफर सुइट्स, ~30 एक्सटेंशन
- क्लाइंट और सर्वर
- HTTPS
- दो से अधिक पक्षों वाले वर्कफ़्लो
- बहुत सारे एक्सटेंशन
- टोकनबाइंडिंग (EC) और HTTP पर टोकनबाइंडिंग
- सॉकेट
- TLS 1.3 0-RTT
- STARTTLS
- ...
उपयोग
यहाँ हम TLS-Attacker का उपयोग करने के कुछ बहुत ही सरल उदाहरण प्रस्तुत कर रहे हैं।
पहले, आपको एक TLS सर्वर शुरू करना होगा (कृपया सार्वजनिक सर्वर का उपयोग न करें)। यदि पहले नहीं किया गया है तो कृपया keygen.sh स्क्रिप्ट चलाएँ। उदाहरण के लिए, आप एक OpenSSL टेस्ट सर्वर का उपयोग कर सकते हैं:
$ cd TLS-Attacker/resources
$ openssl s_server -key rsa1024key.pem -cert rsa1024cert.pem
यह कमांड पोर्ट 4433 पर एक TLS सर्वर शुरू करता है।
यदि आप किसी सर्वर से कनेक्ट करना चाहते हैं, तो आप इस कमांड का उपयोग कर सकते हैं:
$ 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
यदि आप एक अधिक अनुभवी डेवलपर हैं, तो आप Java कोड लिखकर अपना स्वयं का TLS संदेश प्रवाह बना सकते हैं। उदाहरण के लिए:
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 एक "TLS संदेश प्रवाह" को परिभाषित करने के लिए WorkflowTraces की अवधारणा का उपयोग करता है। एक 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
प्रोटोकॉल-अटैकर/लेयर सिस्टम
मूल रूप से TLS प्रोटोकॉल पर हमला करने के लिए डिज़ाइन किया गया, TLS-Attacker मनमाने प्रोटोकॉल का समर्थन करने में सक्षम है। इसके लिए, TLS-Attacker प्रत्येक कनेक्शन को एक लेयर स्टैक निर्दिष्ट करता है। यह लेयर स्टैक विभिन्न प्रोटोकॉल लेयर्स से मिलकर बना होता है जिनका उपयोगकर्ता उपयोग करना चाहता है। लेयर स्टैक के साथ, उपयोगकर्ता DTLS, या HTTP (अधिक WIP हैं) जैसी लेयर्स को किसी भी क्रम में जोड़ सकता है।