- स्विट्ज़रलैंड में इस्तेमाल होने वाले Worldline Yomani XR पेमेंट टर्मिनल को खोलकर और उसके firmware का विश्लेषण करने पर पता चला कि पीछे के hatch से एक्सेस किए जा सकने वाले serial console में सिर्फ
rootटाइप करके root shell में प्रवेश किया जा सकता था - टर्मिनल में housing खुलने, PCB contact disconnect होने, zigzag trace कटने, और card reader के आसपास flex PCB damage को detect करने वाली tamper protection थी, लेकिन debug port का exposed होना एक अलग attack path बन गया
- ऑनबोर्ड flash से निकाले गए firmware में unencrypted filesystem शामिल था, और यह Linux 3.6 kernel, Buildroot 2010.02, BusyBox, uClibc, और custom bootloader Booter v1.7 पर आधारित था
- card, PIN, screen, keypad जैसी security functions को अलग processor
mp1और encrypted/signedmp1.imgसंभालते दिखते हैं, और Linuxmp2से सीधे access के सबूत नहीं मिले - vulnerable firmware version तय नहीं हो पाया और कुछ devices में root login disabled था, लेकिन ऐसी स्थिति में जहां कोई व्यक्ति थोड़े समय के लिए terminal को physical रूप से अपने control में ले सके, वहां अनावश्यक रूप से बड़ा attack surface बचा हुआ है
Worldline Yomani XR विश्लेषण का लक्ष्य
- विश्लेषण का लक्ष्य स्विट्ज़रलैंड में व्यापक रूप से इस्तेमाल होने वाला Worldline Yomani XR payment terminal था
- boot होने के बाद UI check और port scan में कोई खास परिणाम नहीं मिला, इसलिए hardware disassembly की गई
- अंदर कई PCB लगे थे
- external connectors के लिए छोटा board
- main board
- card slot लगा हुआ vertical board
- main SoC firmware में “Samoa II” code name से दिखने वाला dual-core Arm आधारित custom ASIC लगता है
- Worldline documentation के अनुसार यह chip किसी off-the-shelf chip की rebranding नहीं, बल्कि custom ASIC है
- SoC के बगल में छोटी external flash और RAM हैं
Hardware tamper protection structure
- सामान्य housing-open detection switch नहीं मिला; इसके बजाय board-to-board interconnect को ही open detection mechanism के तौर पर इस्तेमाल किया गया था
- boards के बीच pressure-sensitive Zebra strip है, जिससे contact बनाए रखने के लिए boards को screws से कसकर जकड़ना पड़ता है
- कुछ screws खोलने भर से contact टूट सकता है और tamper event trigger हो सकता है
- power disconnected होने पर भी detection की जरूरत होने के कारण coin cell battery इस्तेमाल की गई है
- vulnerable PCB areas zigzag आकार की tamper detection traces से ढके हैं
- physical intrusion से सिर्फ एक copper trace कटने पर भी tamper detection हो सकता है
- card slot एक अलग internal housing में है, और उसके आसपास लिपटा flex PCB tamper protection का काम करता है
- दोबारा assemble करने के बाद terminal ने सिर्फ “TAMPER DETECTED” वाली बड़ी red screen दिखाई, और इस mode में वह external input पर respond करता नहीं दिखा
Flash extraction और filesystem recovery
- runtime exploration blocked होने पर onboard flash chip को हटाकर wires जोड़े गए और उसका content dump किया गया
- dump किया गया content उम्मीद के विपरीत पूरी तरह encrypted नहीं था
- flash में असामान्य ECC layout इस्तेमाल किया गया था
- यह standard 2048 byte payload + 64 byte ECC/spare configuration नहीं था
- इसमें 694 byte data chunks के 3 हिस्से थे, और हर chunk के बाद 10 ECC bytes लगे थे
- spare area के आखिरी 16 bytes YAFFS2 filesystem metadata जैसे दिखे
- सामान्य YAFFS2 की तुलना में metadata area छोटा था, इसलिए छोटे metadata structure को handle करने के लिए filesystem patch करना पड़ा
- compatible filesystem reader implement करने के बाद filesystem contents को सफलतापूर्वक extract कर लिया गया
पुराने Linux आधारित system
- extract किए गए filesystem से पुष्टि हुई कि terminal Linux चला रहा है
- system में पुराने components शामिल थे
- Linux kernel 3.6
- Buildroot 2010.02
- February 2023 build
- custom bootloader
Booter v1.7 - init script, BusyBox, uClibc
libcrypt0.9.26
- dumped firmware version कितना latest था, यह confirm नहीं हुआ, लेकिन यह February 2023 के बाद release हुआ firmware होना चाहिए
बिना password वाला root shell
- flash chip को wires से वापस connect करने पर terminal tamper message दिखाते हुए भी फिर boot हुआ
- Linux boot log देखने के लिए debug connector के आसपास logic analyzer से जांच की गई, और unpopulated debug connector के एक pad पर activity मिली
- serial console पर Linux boot log के साथ login prompt दिखाई दिया
- boot log में “Reset reason: Tamper” दिखा
dropbear is not present, firmware update check, application monitoring daemon शुरू होने जैसे logs भी दिखाई दिए- अंत में
samoa login:prompt दिखा
- login के रूप में
rootenter करने पर बिना password के shell prompt~ #दिखाई दिया - इस access के लिए exploit chain या brute-force password cracking की जरूरत नहीं थी
बाहर से accessible debug port
- root shell access सिर्फ terminal के अंदर खोलने की स्थिति तक सीमित नहीं था
- serial port terminal के पीछे छोटे hatch के जरिए बाहर से accessible था
- terminal खोलकर tamper protection trigger किए बिना भी debug connector से connect किया जा सकता था
- आकलन है कि अगर कोई थोड़े समय के लिए terminal को अपने control में ले सके, तो serial port से connect कर login करने, malware deploy करने और फिर चले जाने वाला scenario संभव है
Security processor और Linux role separation
- exposed root shell का मतलब तुरंत card या PIN data access होना नहीं है
- Linux system पूरी architecture का सिर्फ एक हिस्सा है, और ऐसा कोई सबूत नहीं मिला कि display, keypad, card reader को Linux से सीधे access किया जा सकता है
- screen output भी framebuffer driver द्वारा सीधे handle होने के बजाय, strings को
display_toolbinary को pass करने और फिर इस binary द्वारा inter-processor message भेजने का तरीका दिखा - card, PIN entry, screen display जैसी security-related functions को अलग processor
mp1संभालता दिखता है - दूसरे processor
mp2पर चलने वाला Linux networking, update और business logic संभालता है
Boot flow और security image
- Linux core tamper state से स्वतंत्र रूप से हमेशा boot होता दिखता है
- इसके बाद Linux secure bootloader
loadercodeको memory में load करता है loadercodecheck करता है कि tamper protection trigger हुई है या नहीं- tamper detect होने पर red screen दिखाता है
- कोई issue न हो तो actual secure image
mp1.imgboot करता है
mp1.imgLinux filesystem के अंदर है, लेकिन encrypted और दो entities द्वारा signed प्रतीत होता है- card, display और keypad संभालने वाली secure image ठीक से encrypted और signed थी
Disclosure schedule और बाकी uncertainties
- disclosure schedule इस तरह दर्ज किया गया
- 14 November 2024: root shell discovery
- 15 November 2024: manufacturer को report किया और 90 दिनों बाद disclosure予定 होने की सूचना दी
- 18 November 2024: manufacturer ने report receipt confirm की
- 1 June 2025: disclosure
- exposed root shell अनावश्यक रूप से बड़ा attack surface है, लेकिन card information जैसे sensitive data इस path से compromise हो सकते हैं, इसका कोई सबूत नहीं मिला
- कौन-सा firmware version vulnerable है, यह confirm नहीं हुआ
- research के दौरान root login disabled वाले devices भी मिले
- debug feature किस समय production firmware में आया, या manufacturer के अंदर इसे पहले ही discover और fix किया गया था या नहीं, यह confirm नहीं हुआ
1 टिप्पणियां
Hacker News की रायें
2 डॉलर के USB कार्ड रीडर से नकली डेबिट/क्रेडिट कार्ड transaction बनाई जा सकती है
specs पूरी तरह public हैं और protocol भी documented है। याद से, PDF करीब 5000 पेज की थी, इसलिए पढ़ना बहुत दर्दनाक है
लेकिन उस transaction को verify करने के लिए उसे Internet के जरिए bank को भेजना पड़ेगा, और तब federal agencies/FBI जैसी जगहों से लोग आपके पास आ सकते हैं
कार्ड रीडर में खुद असली protection बहुत कम होती है; ज्यादातर एक छोटे Linux पर घटिया passwords इस्तेमाल करने जैसा होता है। protection store और bank के बीच contracts और regulations से आती है
noexecset होता हैroot login disabled होता है, बहुत सारे features निकाले हुए busybox का इस्तेमाल होता है, और boot के समय keys secure area से load होती हैं। master key injection सिर्फ factory loading के दौरान संभव है, boot खुद भी कुछ हद तक secure होता है, और tamper detection trigger होने पर chip खाली कर दी जाती है
बेशक, अगर एशिया से आया कोई सस्ता, EMV-uncertified Android terminal है, तो standard Linux पर read/write root file system, root login, app चलाने वाले user के लिए sudo तक enabled होने की काफी संभावना है। tamper detection भी नहीं होगा, screen casting locked नहीं होगी, ports भी खोले जा सकेंगे और busybox भी लगभग पूरा हो सकता है
कई सालों तक कार्ड acquiring के लिए EMV applications develop करने और अब भी कभी-कभी करने के अनुभव से, development mode तक में vendor को developer ID देनी पड़ती है और यह काफी tightly locked होता है
इसलिए portable कार्ड रीडर लेकर घूमते हुए contactless cards से पैसा चुराने जैसी conspiracy theories भी गलत हैं। ऐसी transaction खुद बनाई जा सकती है, लेकिन उसके बाद क्या होता है और पहले से कौन-सी setup चाहिए, समस्या वहां है
पकड़े और blocked किए जाने से पहले पैसा निकाल पाना भी पक्का नहीं है। आजकल बहुत से लोग transaction push notifications enabled रखते हैं, इसलिए मुझे लगता है यह और मुश्किल है
अगर वे keys leak हो जाएं, तो कोई normal transaction का नाटक कर सकता है
इस specific case में यह मुश्किल या असंभव लगता है, लेकिन इसी वजह से इस area की research मायने रखती है
मुझे पता नहीं कि क्या देखना चाहिए, लेकिन मेरे पास मौजूद एक Stripe M2 reader को खोलकर अंदर देखने का temptation था
समस्या यह है कि खरीदे गए 36 readers में से 7 “dead” हो गए। 2 charge hold नहीं करते, 1 NFC scan नहीं कर पाता, और 4 “tampered” दिखाते हैं। ऊपर से देखने पर loss rate बुरा है, लेकिन पूरी तस्वीर के लिए usage frequency और age देखनी होगी
पर वह जवाब और भी खराब है। devices 1–3 साल पुराने हैं, और total usage days अधिकतम 9 दिन ही हैं। यानी कुल 9 दिन इस्तेमाल में 36 में से 7 किसी न किसी तरह fail हो गए। travel के दौरान भी सभी को foam inserts वाले hard-shell case में, हर reader के लिए अलग slot में रखा जाता है
इसलिए M2 reader मुझे बहुत पसंद नहीं है, लेकिन फिर भी मेरे लिए यह best option है
[0] background जोड़ूं तो, हमारी company festivals के payments process करती है। हम event venues पर जाकर iPad और M2 reader से in-person payments process करते हैं, और ज्यादातर payments web/app पर होते हैं। इसलिए 3 साल में “usage days” इतने कम हैं
और tamper detection को भी शायद ठीक से काम करने वाली battery चाहिए होती है
संभव है कि tamper seal trigger होने पर root shell खुलने वाली design हो
यानी system या तो operation के लिए जरूरी cryptographic keys वाले secure mode में हो, या debugging और failure analysis के लिए root shell खुले हुए non-secure mode में हो, लेकिन उस transition में जरूरी private keys delete हो जाती हों
सच में एक terminal मिल सकता है या नहीं, यह जानने की curiosity हुई। अगर वे replace होकर गायब हो रहे हैं, तो used वाला ढूंढना शायद इतना मुश्किल न हो
जो लोग जल्दी excite हो जाते हैं, उनके लिए जोड़ दूं: इसमें लिखा है, “exposed root shell उतना बड़ा जोखिम नहीं लगता जितना शुरू में डर था। हमें ऐसा evidence नहीं मिला कि card information जैसा sensitive data इस तरीके से compromise हो सकता है”
फिर भी security designers के लिए यह अच्छा read है
security में physical access, और कुछ कम हद तक root access भी, practically successful hack के लगभग बराबर माना जाता है
अगर compromised Linux यह तय करता है कि “compromised mode” code और mp1 security system में से क्या load करना है, तो यह explore करने लायक path लगता है
bootloader खुद secure बताया गया है, लेकिन actual execution location के हिसाब से अगर वह compromised environment में load होता है, तो उसका बहुत मतलब नहीं रह सकता
co-processor को एक तरह के Secure Enclave की तरह देखा जा सकता है, लेकिन यह बात चिंताजनक है कि Linux अलग bootloader load और execute कर सकता है
loadercodeनाम के “secure” bootloader को modify करके देखा, लेकिन boot नहीं हुआइसलिए मेरा अनुमान है कि कोई third party, शायद boot ROM, इसे verify करता है
साथ ही, Linux tamper state की परवाह किए बिना हमेशा
loadercodeऔरmp1.imgload करता लगता है। tamper state के अनुसार अलग code path शायद integrity-protectedloadercodeके अंदर चुना जाता हैअगर आसान मोड चाहिए, तो आजकल आने वाले Android-आधारित card terminals देख सकते हैं
खासकर क्योंकि PIN सीधे स्क्रीन पर दबाया जाता है, इसलिए इसके कहीं ज़्यादा rewarding होने की संभावना है
PIN या PAN जैसे sensitive data डालते समय touch controller का output GUI संभालने वाले Android-वंश के operating system को bypass करके सीधे security processor तक route होता है
इसलिए ऐसे हमलों में accessible intermediate applications PIN नहीं देख सकतीं
modern cards ऐसे हमलों को रोकने के लिए card के अंदर ही बहुत सारे cryptographic operations करते हैं
यह हमला शायद केवल उन terminals पर चलेगा जहाँ payment options में सिर्फ़ magnetic card reader बचा हो; ऐसे terminal पर तो PIN prompt दिखने से पहले ही skimmer warning light जल जानी चाहिए
शानदार। इस तरह की व्यापक tamper resistance जैसी hardware restrictions को bypass और exploit करने के तरीके सोचना मुझे पसंद है, लेकिन मैं अब तक मानता था कि एक बार यह trigger हो जाए तो game over है
लेकिन ज़रूरी नहीं कि ऐसा ही हो; अभी भी झांकने लायक कई दिलचस्प हिस्से बचे थे। हालांकि security part का ठीक से disable हो जाना स्वाभाविक है। वरना designers पर मेरा सारा भरोसा खत्म हो जाता
सिर्फ़ text strings
display_toolनाम के binary को pass की जाती हैं, और वह binary processors के बीच messages भेजता दिखता है। keypad और card reader के साथ भी ऐसा ही है। मुझे ऐसा कोई सबूत नहीं मिला कि ये peripherals Linux से सीधे accessible हैंइसके बजाय
mp1नाम का एक पूरी तरह अलग processor card processing, PIN input और screen information display जैसे “security” काम संभालता दिखता है। दूसरे processormp2पर चलने वाला “non-security” Linux सिर्फ़ networking, updates और business logic संभालता हैफिर भी उम्मीद है कि संरचना ऐसी ही हो जिसमें वह सिर्फ़ यह देख सके कि tampering हुई है। वरना पहले root shell पाने के बाद tamper event द्वारा security keys deletion को रोकने का मौका मिल सकता है
device की सारी tamper detection पढ़ते हुए सोचने लगा कि tamper mode trigger करने का सबसे आसान तरीका क्या होगा
आखिर अगर ऐसी कुछ devices को ही इस हालत में लाया जा सके, तो जिन दुकानों में payment का ज़्यादातर या पूरा हिस्सा इन्हीं terminals से होता है, वहाँ यह एक प्रभावी denial-of-service attack हो सकता है
ऐसी device में झांकना दिलचस्प है, लेकिन समझ नहीं आया कि इसे सीधे खोलकर tamper state क्यों trigger कर दिया। क्या उन्हें नहीं पता था कि ज़्यादातर readers में ऐसी व्यवस्था होती है?
tamper state में किए गए actual tests शायद अर्थहीन भी हो सकते हैं। संभव है कि initialization के लिए tamper state में जाने पर shell खुलता हो
देखने में device खोलना सबसे आखिर में आज़माने वाली चीज़ लगती है
वरना सब कुछ बहुत अंधेरे में था। हाँ, पीछे मुड़कर देखें तो बस debug connector पर tap लगाकर बात खत्म की जा सकती थी
और मैंने दूसरी, untampered device पर भी shell हासिल किया
ऐसी devices यूरोप में हर जगह हैं। Switzerland के बारे में पक्का नहीं, लेकिन यूरोप के जिन बड़े हिस्सों को मैं जानता हूँ वहाँ लोग credit cards को वास्तव में रखते या बहुत इस्तेमाल नहीं करते
मैं इसे POS, यानी point-of-sale system कहूँगा। ऐसी devices हर तरह के cards पढ़ सकती हैं। खैर, अच्छा लेख है
phone या smartwatch में और चीज़ें डालने का आकर्षण भी समझ नहीं आता। मुझे mechanical watch पसंद है, और phone खो जाए तो privacy के लिहाज़ से वह पहले ही काफ़ी बड़ी disaster है। बेशक यह मेरे मामले में है