1 पॉइंट द्वारा GN⁺ 2024-03-15 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • कनाडा में Flipper Zero पर प्रतिबंध को लेकर विवाद की पृष्ठभूमि में, कार key fob RF सिग्नल को वास्तव में capture और analyze करके यह जाँचा गया कि साधारण replay attack कहाँ तक संभव है
  • RTL-SDR 24~1750MHz रेंज का raw I/Q data लेकर उसे visualize, store और analyze कर सकता है, और Flipper Zero का CC1101 transmit/receive तो कर सकता है, लेकिन उसके लिए सही RF settings ज़रूरी हैं
  • 433.92MHz पर हर button input के लिए 3 छोटे burst दिखाई दिए, और center frequency के दोनों ओर के दो peaks को 0 और 1 को अलग-अलग frequency पर ले जाने वाले 2-FSK के रूप में समझा गया
  • Universal Radio Hacker में FSK, 50 samples/symbol, Manchester II decoding लागू करने पर एक लंबा no-data burst, 3 मुख्य packets, और एक छोटा अंतिम packet वाला ढाँचा सामने आया
  • सिग्नल में rolling code के लिए high-entropy area, incrementing counter, lock/unlock command byte, packet sequence number, XOR checksum, और syncword की पहचान हुई, जिससे यह निष्कर्ष निकला कि सिर्फ साधारण replay से ज़्यादातर कारें चुराना मुश्किल है

प्रयोग का लक्ष्य और संदर्भ

  • कई वर्षों से RTL-SDR dongle से wireless communication protocols की पड़ताल की जा रही थी, और इस बार फोकस इस बात पर था कि कार key fob data कैसे transmit करता है और replay attack की संभावना कितनी है
  • पहले भी key fob signals capture किए गए थे, लेकिन test के लिए कार की सीमित उपलब्धता के कारण meaningful analysis तक बात नहीं पहुँच सकी थी
  • यह प्रयोग key fob signal को वास्तव में reverse engineer और replay करने की तैयारी की प्रक्रिया है, जिसमें बुनियादी RF concepts से लेकर analysis flow तक का अनुसरण किया गया है
  • कनाडा में Flipper Zero पर प्रतिबंध के विपरीत, ज़्यादातर कारें सिर्फ साधारण replay attack से आसानी से नहीं चुराई जा सकतीं — इस समस्या-बोध को भी साथ में रखा गया है
    • Honda से जुड़ा एक अपवाद उदाहरण RollingPwn के रूप में उल्लेखित है

इस्तेमाल किया गया hardware

  • RTL-SDR

    • लगभग 10 डॉलर का terrestrial TV/radio USB dongle multi-purpose RF receiver में बदलकर 24~1750MHz रेंज के signals को inspect और decode कर सकता है
    • RTL-SDR, SDR इस्तेमाल करने में सक्षम RTL2832U chip की वजह से शक्तिशाली है
    • आम तौर पर hardware में होने वाली signal processing को bypass करके host raw I/Q data तक सीधे पहुँच सकता है
    • raw data मिलने पर modulation method, bandwidth, data rate जैसी specific settings पहले से जाने बिना भी receive, visualize, store और बाद में सीधे analyze किया जा सकता है
  • Flipper Zero और CC1101

    • Flipper Zero में इस प्रयोग के लिए महत्वपूर्ण हिस्सा Sub-GHz module है
    • यह module CC1101 chip पर आधारित है और आम consumer wireless devices में इस्तेमाल होने वाली 1GHz से कम frequency को support करता है
    • CC1101 module को अलग से 5 डॉलर या उससे अधिक में खरीदकर Arduino, Raspberry Pi, या USB-to-TTL adapter के साथ भी इस्तेमाल किया जा सकता है
  • CC1101 और RTL2832U का अंतर

    • Flipper Zero का CC1101 एक transceiver है, इसलिए यह signal transmit और receive दोनों कर सकता है
    • RTL-SDR का RTL2832U receive और raw signal analysis तो कर सकता है, लेकिन transmit नहीं कर सकता
    • CC1101 SDR support नहीं करता, इसलिए यह सिर्फ पूरी तरह processed data लौटाता है, और उपयोगी होने के लिए transmit signal की RF settings सही होनी चाहिए
    • transmit/receive दोनों करने वाले SDR devices भी मौजूद हैं, लेकिन वे महँगे होते हैं

RF signals पढ़ने के लिए बुनियादी concepts

  • radio frequency transmission, यानी radio waves नामक electromagnetic waves के ज़रिए signal भेजा जाता है
  • मूल signal की तुलना में अधिक high-frequency carrier wave का उपयोग हवा में transmission की reliability बढ़ाता है
  • frequency वह संख्या है, जितनी बार carrier एक सेकंड में घटित होता है, और आम तौर पर communication channel को define करने में उपयोग होती है
  • modulation वह तरीका है जिससे data को radio wave पर व्यक्त किया जाता है
    • AM amplitude के बदलाव से data दर्शाता है
    • FM frequency के बदलाव से data दर्शाता है
  • bandwidth वह frequency range है जिसे modulated RF signal घेरता है, और यह signal द्वारा ढोए जा सकने वाले data की मात्रा से जुड़ी होती है

SDR# में key fob signal की जाँच

  • tool और frequency

    • SDR# C# में लिखा गया एक free DSP application है, जो SDR के लिए real-time spectrum visualization और कुछ आम modulation demodulation को support करता है
    • RTL-SDR dongle को जोड़कर default DVB-T driver के बजाय WinUSB driver का उपयोग किया गया
    • 433.92MHz पर tune करने से आसपास के remote activity signals देखे जा सकते हैं
    • 433.92MHz को EU और आसपास के देशों, तथा लेखक के निवास स्थान मोरक्को में इस्तेमाल होने वाली standard unlicensed frequency के रूप में बताया गया है
  • देखे गए patterns

    • कार key fob का button दबाने पर हर बार लगातार 3 छोटे burst बनते हैं
    • spectrum के केंद्र 433.92MHz के दोनों ओर दो बड़े peaks दिखाई देते हैं
    • सामान्य modulation methods की जाँच के बाद यह रूप 2-FSK से मेल खाता दिखा
    • स्क्रीन पर दिखने वाले छोटे peaks को सस्ते transmitter hardware और remote/antenna की बहुत कम दूरी से पैदा हुई unwanted frequencies मानकर नज़रअंदाज़ किया गया
  • 2-FSK की व्याख्या

    • FSK यानी Frequency-Shift Keying, frequency modulation का एक तरीका है जिसमें carrier frequency को कई discrete frequencies के बीच बदलकर data encode किया जाता है
    • 2-FSK का “2” encoding में इस्तेमाल होने वाले channels की संख्या को दर्शाता है
    • इस मामले में 0 और 1 को दो अलग frequencies पर encode किया जाता है, जो देखे गए दो peaks की व्याख्या करता है

Universal Radio Hacker से bits और bytes निकालना

  • URH के साथ analysis

    • Universal Radio Hacker wireless protocol investigation के लिए open source tools का एक संग्रह है, और कई SDRs को मूल रूप से support करता है
    • URH signal demodulation और modulation parameters की auto-detection देता है, जिससे हवा में जा रहे bits और bytes की पहचान की जा सकती है
    • शुरुआत में सही parameters नहीं मिल पाए, इसलिए गलत results आए
    • repeating signals को एक साथ कई बार record करने पर auto-detection की success rate बढ़ी, और इस मामले में 50 samples/symbol, FSK सही setting निकली
  • burst structure और Manchester decoding

    • signal को zoom करने पर SDR# में दिखे 3 bursts फिर से दिखाई दिए
    • दूसरा burst आगे 3 अलग हिस्सों से बना था, इसलिए analysis का लक्ष्य कुल 5 sections बन गए
    • हर section से bitstream को auto-extract करके hexadecimal में बदलने पर repeating pattern दिखा, लेकिन वही 5 hex numbers और बहुत सारे 0x55 bytes बार-बार आने से अतिरिक्त processing की ज़रूरत पड़ी
    • URH के Analysis tab में कई decoding algorithms आज़माने पर Manchester II ने 0x55 bytes को null में बदला और decoding errors भी नहीं बनाए
  • Manchester encoding की भूमिका

    • Manchester एक simple digital modulation method है, जो signal को लंबे समय तक logical low या high state में रहने से रोकता है
    • यह data signal को data और synchronization के संयुक्त signal में बदलता है, जो clock recovery के लिए उपयोगी है
    • analog medium noise और interference के प्रति संवेदनशील होता है, इसलिए digital data भेजते समय यह गुण मददगार होता है
    • Manchester में binary data को दो विपरीत bits के रूप में encode किया जाता है
    • उदाहरण: 0 को 01 और 1 को 10 बनाया जाता है, या convention के अनुसार इसका उलटा भी इस्तेमाल हो सकता है

packet structure और rolling code का अनुमान

  • हर button input पर दिखने वाला ढाँचा

    • कई captures की manual तुलना से पता चला कि हर button input की एक स्थिर संरचना है
    • एक लंबा no-data burst होता है, जिसे decode करने पर 100 null bytes मिलते हैं
    • 3 ऐसे bursts होते हैं जो बहुत मिलते-जुलते हैं, लेकिन उनमें 2 bytes आंशिक रूप से बदलते हैं
    • इनके बाद एक अंतिम burst आता है जो पहले 3 से काफ़ी मिलता-जुलता है, लेकिन छोटा होता है
    • बीच के 3 bursts को मुख्य packets मानकर अधिक विस्तार से analyze किया गया
    • एक incrementing ID मिला, जो हर नए signal के साथ 1 से बढ़ता दिखा
  • rolling code mechanism

    • rolling code का उपयोग keyless entry systems में साधारण replay attack को रोकने के लिए किया जाता है
    • यह इस तरीके को रोकता है जिसमें attacker transmission record करके बाद में उसे replay कर receiver से unlock करवाने की कोशिश करे
    • कार और remote cryptographically secure algorithm पर सहमत होकर authentication के लिए rolling code बनाते हैं
    • key, counter की मदद से generate और track की जाती है, और remote तथा कार के counters का synchronized रहना ज़रूरी होता है
    • validity window यह सुनिश्चित करती है कि कार signal न मिलने पर भी remote synchronization से बाहर न हो
    • कई implementations में अधिकतम 255 out-of-range button presses तक की अनुमति होती है, उसके बाद remote को manually re-synchronize करना पड़ता है
  • signal fields की पहचान

    • rolling code cryptographically secure होने के कारण signal का सबसे high-entropy हिस्सा उस implementation से संबंधित क्षेत्र के रूप में पहचाना गया
    • पहले मिला incrementing ID, rolling code system के counter के रूप में अनुमानित किया गया
    • lock और unlock signals की तुलना करने पर command को दर्शाने वाला byte पहचाना गया
    • 8 = unlock
    • 4 = lock

sequence number, checksum, syncword

  • packet sequence जैसा दिखने वाला मान

    • बचे हुए variable fields में से एक में captured दूसरे signals में भी वही values दोहराई गईं
    • 3 values को binary में देखने पर upper bits sequence number की तरह बढ़ते दिखे
    • 0x6: 0110
    • 0xA: 1010
    • 0xE: 1110
    • चौथे अंतिम packet तक देखने पर 0x13: 10011 का रूप मिलता है, जो packet sequence number होने की व्याख्या से मेल खाता है
    • least significant bit में बदलाव को इस निष्कर्ष से बाहर रखा गया
  • XOR checksum

    • अंतिम byte हर packet में बदलता है, और पूरे signal set में भी random जैसा बदलता है
    • packet का आख़िरी byte होने और अनियमित रूप से बदलने के कारण इसके checksum होने की संभावना मानी गई
    • इस byte को पहले analyze किए गए sequence byte के साथ XOR करने पर हर उदाहरण में एक fixed value मिली
    • उदाहरण 1:
      • 0x06 ^ 0xB9 = 0xBF
      • 0x0A ^ 0xB5 = 0xBF
      • 0x0E ^ 0xB1 = 0xBF
    • उदाहरण 2:
      • 0x06 ^ 0xCC = 0xCA
      • 0x0A ^ 0xC0 = 0xCA
      • 0x0E ^ 0xC4 = 0xCA
    • सभी packet bytes पर XOR लागू करने पर value हमेशा 1 से चूकती रही, इसलिए यह संभावना अधिक मानी गई कि पहले 2 bytes checksum से बाहर हैं
    • पहले 2 bytes को receiver को synchronize करने और data की शुरुआत बताने वाले syncword के रूप में समझा गया

अंतिम signal संरचना और आगे के कदम

  • शुरुआती लंबा burst, idle state में low-power mode पर मौजूद radio receiver को जगाकर data receive के लिए तैयार करने का काम करता है
  • remote लगभग एक ही data वाले 3 packets इसलिए भेजता है ताकि transmission के दौरान उनमें से कोई एक खराब हो जाए तो भी reliability बनी रहे
  • अंतिम labeling के अनुसार कार key fob signal को syncword, rolling code से जुड़ा क्षेत्र, counter, command byte, packet sequence number, XOR checksum आदि में बाँटकर समझा गया
  • अगला कदम इस signal format को Flipper Zero में integrate करना है ताकि reading, re-serialization, और replay को support किया जा सके
  • अगर कोई जानकारी गलत हो या सुधार की गुंजाइश हो, तो GitHub पर pull request भेजी जा सकती है

1 टिप्पणियां

 
GN⁺ 2024-03-15
Hacker News की राय
  • मुझे एक इलेक्ट्रॉनिक्स प्रोजेक्ट के लिए AliExpress से खरीदे गए सस्ते car key remote का reverse engineering करना पड़ा, और सिर्फ oscilloscope और Wikipedia के सहारे भी, अगर काफी देर लगे रहो, तो यह किया जा सकता है।
    अगली बार मैं इस ब्लॉग पोस्ट का तरीका आज़माने और एक बेहतर hacker बनने का सोच रहा हूँ

  • इसी तरह के उद्देश्य के लिए एक GNU Radio flow graph भी है: https://github.com/bastibl/gr-keyfob
    प्रस्तुति सामग्री: https://www.fleark.de/keyfob.pdf

  • अगर remote और car के बीच counter के आधार पर key generate और track करके sync बनाए रखा जाता है, तो मैं हमेशा सोचता था कि learning remote इसे कैसे bypass करता है।
    मेरी car में कुछ built-in garage door button हैं, और लगता है कि मैंने car को learning mode में रखकर garage remote का button दबाकर इसे set up किया था। क्या यह simple replay नहीं, बल्कि signal decode करके उसका type पहचानता है और फिर opener के साथ pairing शुरू करता है—ऐसा कहीं ज्यादा जटिल feature है?

    • यह HomeLink जैसा लग रहा है, और वास्तव में यह ज्यादा जटिल तरीका है।
      मेरी समझ से यह कई कंपनियों के साथ काम करके fixed code और rolling code दोनों को support करता है, और उस garage door के साथ pair होने देता है। अमेरिका की सबसे बड़ी garage door manufacturer Chamberlain[0] कई brand की मालिक है और एक ज्ञात, decode किए जा सकने वाले rolling code algorithm का उपयोग करती है[1]।
      [0] https://www.chamberlain.com/
      [1] https://github.com/argilo/secplus
    • मेरी समझ में, ज़्यादातर garage door opener rolling key नहीं, बल्कि हर बार वही code भेजते हैं
    • दिशा उलटी है। सीखने वाला हिस्सा garage door opener unit होता है, और car का button सिर्फ signal transmit करता है।
      यह प्रक्रिया opener को कुछ ऐसा बताने के करीब है: “यह नई remote की आवाज़ सुन रहे हो? इसे भी door खोलने की अनुमति दे दो।” car-side button शायद कुछ आम protocol को cycle करता है, और व्यावहारिक रूप से अमेरिका में व्यापक रूप से इस्तेमाल होने वाले protocol Chamberlain/Liftmaster या Genie family के लगभग 4~5 ही होंगे
    • fixed code system में remote हर बार वही signal भेजता है, और आमतौर पर remote और main unit के DIP switch जैसी व्यवस्था से पड़ोसियों से अलग fixed signal set किया जाता है।
      ऐसे system में learning remote सिर्फ record किए गए signal को replay करके भी काम कर सकता है, लेकिन अगर recording के दौरान उसी band के किसी wireless doorbell जैसे दूसरे signal मिल जाएँ, तो वह अनचाहे signal भी साथ replay कर सकता है। इसलिए कम से कम असली door signal वाला हिस्सा काटकर निकालने जैसी processing चाहिए, और इससे बेहतर तरीका signal को decode करके code पता लगाना और फिर हर बार साफ नया signal generate करना है।
      अमेरिका की लगभग सभी residential garage door opener कंपनियों ने 1990 के दशक में नए model को rolling code पर बदल दिया था, इसलिए अगर installation को लगभग 25 साल या उससे कम हुए हैं, तो वह लगभग निश्चित रूप से rolling code इस्तेमाल करता है। आमतौर पर remote seed के साथ एक pseudo-random sequence बनाता है, और हर press पर अगला value भेजता है, जबकि main unit learning mode में कुछ लगातार values देखकर seed का अनुमान लगाकर उसे remote list में जोड़ती है।
      operation के दौरान main unit प्राप्त sequence value को decode करके देखती है कि वह ज्ञात remote में से किसी एक की expected range में है या नहीं; अगर है, तो door खोलती है और उस remote की position update करती है। ताकि बच्चा रास्ते में button कई बार दबा दे, तब भी घर पहुँचने पर remote बेकार न हो जाए, इसके लिए कुछ tolerance window भी रखी जाती है।
      सिद्धांत रूप में मौजूदा rolling code remote को clone करने वाला learning remote भी संभव है, लेकिन main unit की नज़र में clone और original एक ही remote होते हैं। अगर दोनों में से एक लंबे समय तक इस्तेमाल न हो और दूसरा sequence को tolerance range से बाहर धकेल दे, तो एक पक्ष काम करना बंद कर सकता है, और re-pairing भी system implementation के विवरण पर निर्भर करते हुए उलझ सकती है।
      मैंने वास्तव में rolling code के लिए जो universal remote देखे हैं, वे मौजूदा remote से सीखने के बजाय main unit के type को remote को बताते हैं, फिर manufacturer remote की तरह main unit के साथ नया pair बनाते हैं। UI इतना सीमित होता है कि संभव है आपको manual की table में number ढूँढना पड़े, फिर कोई hidden button दबाना पड़े, और उसके बाद program करने वाले button को उतनी बार दबाना पड़े।
      अगर मौजूदा remote signal देखकर यह अपने-आप पहचान लिया जाए कि कौन-सा rolling code system है, तो बढ़िया होगा, लेकिन उसके लिए receiver चाहिए, और उस एक काम के अलावा उसका शायद ही कोई और उपयोग हो, इसलिए उसे justify करना मुश्किल है। garage door pairing और open/close command मूलतः remote से main unit की ओर जाने वाला one-way communication है
  • लेखक ने सब कुछ decode कर लिया, लेकिन वास्तव में car door नहीं खोला। अभी भी rolling code तोड़ना बाकी है, और उसमें 1 जोड़कर फिर से भेज देने से काम नहीं चलेगा।
    बाहर से देखने पर अगला rolling code random जैसा दिखना चाहिए

    • इसलिए शुरुआत में लिखा है, “यह उतना vulnerable नहीं है जितना आप सोचते हैं”
    • असली सवाल यह है कि brute force मुश्किल है या नहीं। अगर मुश्किल है, तो sniffing संभव होने पर भी, असली button input को पहले record किए बिना car नहीं खोली जा सकती
  • अच्छा होगा अगर car manufacturer wallet में रखे जा सकने वाले बहुत छोटे, शायद RFID remote बनाने लगें।
    या फिर उम्मीद है कि credit card आकार का कोई छोटा Flipper-जैसा device वही काम कर दे। सच कहूँ तो car key मेरी pocket में phone के बाद सबसे बड़ी चीज़ है, और कम से कम thickness के हिसाब से तो काफी परेशान करती है

    • आखिरकार जो चाहिए, वह शायद phone का car key बन जाना है
    • नई BYD EV के साथ credit card आकार की NFC key मिलती है, जिससे car unlock की जा सकती है और start भी की जा सकती है
  • काफी समय बाद कोई ऐसी पोस्ट पढ़ी जिसे मैं समझ पाया, तो अच्छा लगा

  • key programming उपकरणों तक पहुँच आसान होने के साथ, key programming authority को और ज्यादा मजबूत “security” के पीछे ले जाने का रुझान दिलचस्प है।
    “security” system का हिस्सा क्या माना जाएगा, यह manufacturer तय करता है, और यह सिर्फ key तक नहीं बल्कि बहुत सारे module तक फैल सकता है। नियमों का बहुत ईमानदारी से पालन करने के लिए मशहूर अपराधियों पर इसका असर होगा या नहीं, यह बहस का विषय है(/s), लेकिन कुछ व्यवसायों पर इसका असर ज़रूर पड़ता है।
    अगर किसी के पास criminal record हो, तो उसकी भागीदारी रोकी जा सकती है। सज़ा पूरी करने के बाद self-employed होकर सफल होना, पूर्व-दोषियों के लिए एक महत्वपूर्ण रास्ता होता है, और इस व्यवस्था में वह रास्ता धुँधला हो सकता है।
    https://wp.nastf.org/?page_id=367
    https://wp.nastf.org/wp-content/uploads/2023/07/ApplicationC...

  • क्या signal intercept, decode और फिर re-encode करने की ज़रूरत भी है? बस बड़े antenna से key remote और vehicle के बीच man-in-the-middle attack करके दोनों को यकीन दिला दो कि वे एक-दूसरे के ज्यादा करीब हैं

    • यह हैरानी की बात है कि passive keyless entry इतना व्यापक हो गया। यह security feature से ज्यादा looks और convenience को प्राथमिकता देने वाला design है
    • शायद यह gigahertz band में होगा; जिज्ञासा है कि consumer स्तर का कौन-सा antenna key remote signal को relay या amplify कर सकता है, बिना ऐसा अत्यधिक signal-to-noise ratio बनाए जिसे car detect कर ले
  • आजकल तो बस car के अंदर पहुँच जाओ, फिर OBD tool से नई key program करो और car लेकर निकल जाओ—यह कहीं ज्यादा दिलचस्प और गंभीर रूप से असुरक्षित है

  • बेसिक Flipper भी raw signal receive कर सकता है

    • https://www.ti.com/lit/ds/symlink/cc1101.pdf
      शायद बिना अतिरिक्त processing के demodulated raw FSK या OOK data output करवाया जा सके, लेकिन raw IQ sample मिलना सच में संदिग्ध लगता है