هجمات بطاقة البنك تماس



بواسطة: cuamckuu

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

مقدمة


حصلت هذا العام على تدريب داخلي في Summer of Hack 2019 في Digital Security ، وعملت على موضوع البحث على بطاقات EMV التي لا تلامس. خلال فترة التدريب ، تبين أنه من الأفضل معرفة كيفية عمل البطاقات المصرفية ، وإنشاء أداة مساعدة جديدة للعمل مع البطاقات التي لا تلامس. ويمكن الاطلاع على عرض توضيحي لوضع قراءة البيانات هنا .

أنواع الهجمات


تتواصل البطاقة والطرف باستخدام معيار EMV (Europay + MasterCard + VISA) ، والذي تم تطويره لزيادة أمان المدفوعات. في هذا الصدد ، لا يوجد العديد من متجهات الهجوم على بطاقات تماس. سوف تركز المقالة على ما يلي:

  • ربط بطاقة شخص آخر في المتجر عبر الإنترنت
  • خطوة مساعدة في الهندسة الاجتماعية
  • DoS تماس الذي يحول البطاقة إلى لبنة

هذه الهجمات ممكنة عند التفاعل مع البطاقة وفقًا لمعايير EMV. تسمح لك العديد من البطاقات بقراءة المعلومات الخاصة للمستخدم بسهولة ، وخاصة PAN وتاريخ انتهاء الصلاحية واسم صاحب التسجيل. تعد بيانات القراءة كافية لتعيين البطاقة في بعض المتاجر عبر الإنترنت ، مثل Amazon. ويمكن استخدام البيانات الخاصة المستلمة للخداع أكثر تخصيصًا أو عند إرسال بريد مزعج.

بطريقة مماثلة ، يتم تنفيذ هجوم DoS. يتيح لك استدعاء أوامر EMV الضرورية تجاوز عداد المعاملات الداخلية أو محاكاة إدخال رمز PIN غير الصحيح ، مما يؤدي إلى حظر البطاقة.

لماذا إعادة اختراع العجلة؟


قبل البدء في التطوير ، تقرر دراسة الحلول الحالية. على وجه الخصوص ، نظروا في: RFIDIOt / ChAP.py و Jaccal و nfcmillionaire و Conference PoC و script "Ruby" وتطبيقات Android / libs .

تحاول معظم البرامج التي تمت مراجعتها محاكاة تشغيل جهاز POS واستخدام القواميس مع معرّفات البطاقات المدعومة ، وبالتالي غالبًا ما تعمل هذه الحلول فقط مع Visa و MasterCard.

مشكلة أخرى هي قراءة جزء صغير من البيانات بدلاً من إلقاء تفريغ كامل. تحاول جميع البرامج تقريبًا تحليل أكبر عدد ممكن من EMV أثناء التنقل وإحداث أخطاء في التحليل.

إذا كانت أي مشكلة من المشكلات غائبة أو غير واضحة ، فمن المرجح أننا نتحدث عن تطبيق / مكتبة لنظام Android ، وستحتاج إلى هاتف به قارئ NFC ، وليس لدى الجميع.

يمكن حل المشكلات الموضحة ، لذلك من الضروري:

  • كشف نوع الخريطة بشكل حيوي ، بدلاً من استخدام القواميس
  • أضف أوضاع تشغيل متعددة لقراءة الملف بالكامل
  • لا تحاول تفكيك معيار EMV على الطاير
  • استخدام قارئ رخيص PN532 (~ 5 $)

استرجاع البيانات من البطاقة


توجد بالفعل مقالات عن حبري تصف بالتفصيل عملية التفاعل بين البطاقة والطرف ( واحد ، اثنان ، ثلاثة ) ، لذلك سأحاول ألا أكرر نفسي والتركيز على الجزء العملي.

للتواصل مع البطاقة ، سوف نستخدم قارئ PN532 بسبب السعر اللطيف ومكتبة libnfc. بسلاسة الوصول إلى العمل. يتم تنظيم البيانات على الخريطة على النحو التالي:
البيئة -> التطبيقات -> الملفات -> السجلات.

الغرض من القراءة هو الحصول على البيانات من جميع السجلات ، لذلك عليك أن تمر بسلسلة كاملة ، ويحدث اختيار البيئة والتطبيق مرة واحدة فقط في بداية الاتصال.
نفس العملية من حيث أوامر EMV:

  • SELECT PPSE // حدد بيئة عدم الاتصال
  • SELECT APPLICATION // حدد تطبيقًا بواسطة AID
  • اقرأ السجل // حدد الملف ورقم التسجيل

النظر في مثال تشكيل واحد من الفرق. الأمر الأول لتحديد بيئة تماس يكون دائمًا كما هو:

byte_t const command[] = { 0x40, 0x01, // Pn532 InDataExchange 0x00, 0xA4, // SELECT ppse 0x04, 0x00, // P1:By name, P2:_ 0x0e, // Lc: Data length 0x32, 0x50, 0x41, 0x59, 0x2e, 0x53, 0x59, // Data string: 0x53, 0x2e, 0x44, 0x44, 0x46, 0x30, 0x31, // 2PAY.SYS.DDF01 (PPSE) 0x00 // Le }; 

مثال على الاستجابة: 6F 23 84 0E 32 50 41 59 2E 53 59 53 2E 44 44 46 30 31 A5 11 BF 0C 0E 61 0C 4F 07 A0 00 00 00 03 10 10 87 01 01 90 00

للاتصال بالأمر التالي ، نحتاج إلى تحليل استجابة الأمر السابق.



نحن مهتمون بمعرف معرف التطبيق. نحفظه ونشكل استعلام SELECT جديدًا ، لكن هذه المرة نقوم بتمرير AID المستلم إلى أمر SELECT ، وليس PPSE ، كما في الأمر الأول.

مثال: 00 A4 04 00 07 A0 00 00 00 03 10 10 00

كما ذكرنا سابقًا ، من المهم الحصول على AID بشكل حيوي ، بدلاً من استخدام قاموس مُعد ، فمن المحتمل أن يكون التطبيق الخاص بك قادرًا على قراءة أنواع مختلفة من البطاقات ، على سبيل المثال ، بطاقات MIR.

بعد تحديد التطبيق ، يمكننا قراءة السجلات اللازمة باستخدام الأمر READ RECORD وتمرير رقم الملف ورقم التسجيل كمعلمات.

مثال على تكوين الفريق: (يمكن الاطلاع على المزيد حول هذا الموضوع في المعيار. EMV Book1. 11.2 اقرأ السجل)

  byte_t const sfi_param = (sfi << 3) | (1 << 2); byte_t const command[] = { 0x40, 0x01, // Pn532 InDataExchange 0x00, 0xB2, // READ RECORD record_number, sfi_param, // P1:record_number and P2:SFI 0x00 // Le }; 

اتصل على سبيل المثال: 00 B2 02 14 00

لاحظ أنه لا يتم تخصيص بايت كامل لرقم الملف ، على التوالي ، قد يكون هناك 31 ملفًا (2 ^ 5 - 1) في المجموع ، و 255 إدخالًا. يتم تخصيص الملفات من الأول إلى العاشر لتخزين البيانات الداخلية ، ويتم تخصيص الملفات الباقية للتخزين سجل المعاملة إذا كانت البطاقة تدعم التسجيل.

الآن باستخدام حلقتين متداخلتين ، يمكننا الحصول على بيانات جميع سجلات الخريطة عن طريق استدعاء أمر قراءة السجل لكل زوج. يمكن تسريع عملية البحث بشكل كبير إذا كنت تهتم بكلمة الحالة التي تم إرجاعها بواسطة البطاقة (آخر وحدتي بايت من الاستجابة). يمكن أن تخبرنا الحالة أن الملف غير موجود (SW = 0x6A82) أو أنه لا توجد إدخالات أخرى في هذا الملف (SW = 0x6A83).

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

جزء من البيانات المستخرجة من سجلات الخرائط:



تعد بيانات القراءة كافية لتعيين البطاقة في بعض المتاجر عبر الإنترنت (بشكل أساسي في المتاجر الأجنبية) ، ويمكن استخدام المعلومات التي تم الحصول عليها لهجوم أكثر تخصيصًا باستخدام الهندسة الاجتماعية.

ننظم دوس تماس


ننتقل إلى النوع التالي من الهجوم. هناك 2 طرق تنفيذ على الأقل لـ DoS-a.

طريقة بطيئة


لتنفيذ الطريقة البطيئة (سيستغرق الهجوم حوالي 4 دقائق) ، من الضروري ملء عداد بطاقة المعاملات الداخلية (ATC). للقيام بذلك ، اتصل:

  • SELECT PPSE // حدد بيئة عدم الاتصال
  • اختر التطبيق // اختر تطبيقًا
  • الحصول على البيانات // تعرف على المبلغ المتبقي قبل تجاوز السعة ATC (اختياري)
  • الحصول على خيارات المعالجة // ابدأ الصفقة
  • ...
  • الحصول على خيارات معالجة // كرر المعاملات حتى الفائض

النظر في الخطوات بمزيد من التفصيل. يشبه اختيار البيئة والتطبيق اللاامسين للعنصر الذي يحتوي على استخراج البيانات ، والفرق الوحيد هو أننا في هذه المرة نحتاج إلى معالجة استجابة الأمر SELECT APPLICATION.



نحن مهتمون بحقل PDOL ، حيث ستكون هناك حاجة للمكالمة اللاحقة للأمر GET PROCESSING OPTIONS ، مما سيزيد من عداد المعاملات لكل مكالمة.
في PDOL ، تطلب البطاقة معلومات حول الجهاز والدفع منا.

في المثال أعلاه ، تطلب منا الخريطة:

  • مؤهل المعاملة الطرفية 9F66 04 // (4 بايت)
  • 9F02 06 // المبلغ (6 بايت)
  • 9F37 04 // رقم غير متوقع (4 بايت)
  • 5F2A 02 // رمز عملة المعاملة (2 بايت)

نظرًا لأننا ننفذ DoS ، وليس دفعًا حقيقيًا ، فلا يمكننا القلق بشأن صحة القيم واستخدام القيم المعدة مسبقًا التي تقبلها البطاقة. اقرأ المزيد عن القيم المطلوبة في المعيار. (EMV Book 3. Annex A Data Elements Dictionary).

من أجل راحة الاستخدام العملي ، أقتبس الجدول:
علامة (عرافة)وصفقيمة صالحة (عرافة)
9F59معلومات المعاملات الطرفيةC8 80 00
9F5Aنوع المعاملة الطرفية00
9F58مؤشر نوع التاجر01
9F66تصفيات المعاملات النهائية79 00 40 80
9F02المبلغ (المصرح به)00 00 00 10 00 00
9F03المبلغ (الآخر)00 00 00 00 00 00 00
9F1Aرمز البلد الطرفي01 24
5F2Aرمز عملة المعاملة01 24
95نتائج التحقق الطرفية00 00 00 00 00
9Aتاريخ المعاملة19 01 01
9Cنوع المعاملة00
9F37عدد لا يمكن التنبؤ به82 3D DE 7A

بعد تشكيل البيانات المطلوبة بواسطة البطاقة ، نحن على استعداد للاتصال بـ GPO.

مثال: 80 A8 00 00 12 83 10 79 00 40 80 00 00 00 10 00 00 82 3D DE 7A 01 24 00

الإجابة: 77 4F 82 02 20 00 94 0C 10 02 03 00 18 01 01 00 10 04 04 00 57 13 42 76 55 00 66 83 25 13 D2 00 52 01 14 89 36 20 00 00 1F 5F 20 02 20 2F 9F 10 07 06 01 11 03 80 20 00 9F 6C 02 30 00 9F 26 08 33 33 89 D5 70 A3 DF 37 9F 27 01 00 9F 36 02 02 48 90 00

كرر استدعاء GPO 65 536 مرة ، ويتم حظر البطاقة. يمكنك تقليل عدد المكالمات المطلوبة من خلال قراءة قيمة ATC الحالية أولاً باستخدام GET DATA.

طريقة سريعة


الطريقة السريعة أكثر ملاءمة (والأكثر خطورة) ، لأن الأمر سيستغرق حوالي ثانيتين لقفل البطاقة ، لذلك سيبقى التحليل التفصيلي لتفاصيل التنفيذ وراء الكواليس.

تشبه هذه الطريقة السابقة ، ولكن سيكون من الضروري هذه المرة تخفيض عداد محاولات إدخال رمز PIN ، بدلاً من زيادة عداد المعاملة. يمكن الحصول على قيمة PIN الخاصة بـ Try Counter من خلال GET DATA ، ولكن في هذه الحالة لن تكون هناك زيادة كبيرة في السرعة.

العمليات المطلوبة:

  • SELECT PPSE // حدد بيئة عدم الاتصال
  • اختر التطبيق // اختر تطبيقًا
  • الحصول على البيانات // معرفة عدد محاولات إدخال رقم التعريف الشخصي
  • الحصول على خيارات المعالجة // ابدأ الصفقة
  • تحقق // وأدخل رقم التعريف الشخصي الخطأ
  • ...
  • تحقق // حتى يتم حظر البطاقة

النتائج


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

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


All Articles