2 पॉइंट द्वारा GN⁺ 2024-07-02 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • Sleep Number Hub में UART console और U-Boot environment variables का उपयोग करके root access पाने पर, SleepIQ servers से गुज़रे बिना local control path बनाया जा सकता है
  • मौजूदा Homebridge plugin SleepIQ API को हर 5 सेकंड में call करता था, और हजारों users के पैमाने पर Sleep Number network पर load डालने के कारण उसे disable करने का अनुरोध मिला
  • target device Sleep Number Hub 360SIQ01D है, और J16 UART pins, 115200 baud console, FAT32 या Ext3 USB drive, तथा SSH public key registration मुख्य शर्तें हैं
  • root access के बाद Hub के Python 2.7.18 और /bam/scripts का उपयोग करके port 8000 के HTTP server के ज़रिए bed settings और status को local network से manage किया जा सकता है
  • Hub Sleep Number servers के लिए SSH reverse tunnel खोल सकता है, इसलिए local control पर्याप्त हो जाने पर external internet connection काटकर Bluetooth या internal control इस्तेमाल करना ज़्यादा सुरक्षित है

local access खोजने की वजह

  • लक्ष्य SleepIQ servers से गुज़रे बिना Sleep Number bed को local network से control करना था
  • पहले बनाया गया homebridge plugin HomeKit या automation से bed settings control करने देता था
    • खासकर व्यक्ति bed पर है या नहीं यह दिखाने वाली bed presence value lights बंद करने या door lock करने जैसी automation के लिए उपयोगी थी
  • plugin SleepIQ API को हर 5 सेकंड में call करता था, और users की संख्या हजारों में पहुँचने पर Sleep Number network पर load बढ़ा
    • Sleep Number ने plugin को disable करने का अनुरोध किया
    • repository branding भी official Sleep Number tool जैसी दिख सकती थी, यह समस्या भी थी
  • बाद में पुराना काम नए homebridge-bed-control plugin में आगे बढ़ा
    • नया plugin bed presence monitoring को default रूप से disabled रखता है और enable करने से पहले warning जोड़ता है

Hub hardware में मिला access path

  • शुरुआत में CPU के पास J10 header देखा गया, लेकिन UART data नहीं मिला
    • उस CPU configuration में UART lines बाहर नहीं निकली हुई थीं
  • board के निचले हिस्से में J16 header पर UART signal खोजने के लिए logic analyzer को 10 header pins से जोड़ा गया
  • UART-TTY device जोड़ने पर device console तक access मिल गया
  • flash dump करके file system और vulnerabilities देखीं, लेकिन UART के बिना कोई भी login कर सके ऐसा backdoor नहीं मिला
  • इसके बजाय Sleep Number द्वारा Hub में SSH access के लिए maintenance backdoor मिला
    • Hub internal home network से जुड़ा होता है, इसलिए यह access path internal network तक जा सकता है
    • Wi-Fi connection काटकर जितना संभव हो Bluetooth control इस्तेमाल करने का तरीका recommended है

तैयारी और target device

  • यह procedure Sleep Number Hub 360SIQ01D model पर किया गया
  • जरूरी उपकरण UART-TTY device और board connection tools हैं
    • USB-C to UART या USB-A to UART
    • Raspberry Pi Pico W को, SSH काम न करने पर remote console access के लिए अंदर permanently install किया जा सकता है
    • 2.54mm pin header और soldering iron, या PCB clip clamp
  • board से communication के लिए serial console चाहिए
    • Linux और Mac पर minicom इस्तेमाल किया जा सकता है
    • Windows पर PuTTY इस्तेमाल किया जा सकता है
  • USB-A flash drive FAT32 या Ext3 format में होना चाहिए
  • उपयोग में मौजूद Hub में अगर पहले से USB device लगा है, तो वह Wi-Fi dongle हो सकता है; इस device के बिना boot loop हो सकता है

root access procedure का मुख्य flow

  • UART device को board के J16 header से जोड़ें
    • pin 1: TX, Hub में जाने वाला signal
    • pin 2: RX, Hub से निकलने वाला signal
    • pin 3: ground
  • serial console को 115200 baud पर set करें
  • Hub power on करने के बाद 2 सेकंड के अंदर Space key दबाकर automatic boot रोकें
  • U-Boot environment variables को पहले printenv -a से backup करना चाहिए
    • default values restore करने की जरूरत पड़ सकती है, इसलिए current environment से क्या फर्क है यह record करना चाहिए
  • bootcmd में से run set_bootargs; हिस्सा हटाकर boot arguments manual रूप से set करने के लिए बदलें
  • /init script hashed bootrom में है, इसलिए उसे directly modify नहीं किया जा सकता; bootargs के जरिए runtime पर /init content बदलें
    • default script let_me_root phrase से decrypt होने वाली encrypted file खोजती है
    • decryption line को decrypted value से replace करके encrypted file requirement को bypass करें
  • पहली boot में let_me_root file वाली USB drive चाहिए
    • boot के बाद console में root@bam-se:~# prompt दिखे तो आप root shell में हैं
  • इसके बाद root partition को read/write mode में फिर mount करें और /root/let_me_root file बनाएं ताकि USB के बिना भी access बना रहे

SSH access setup

  • root prompt मिलने के बाद SSH public key को /root/.ssh/authorized_keys में add करके network access set करें
  • जिस local machine से connect करना है, उस पर SSH key generate करनी होगी
    • example command ssh-keygen -t ed25519 है
    • description text में ecdsa key recommend की गई है, लेकिन actual example ed25519 इस्तेमाल करता है
  • public key add करने के बाद ssh root@$hub_ip -i <path to id_ed25519> के रूप में connection test करें
  • connect न हो तो authorized_keys format और file content check करें
    • कहा गया है कि उस file में दो keys होनी चाहिए

local network control server बनाना

  • सिर्फ root access से bed app की control functionality replace करना मुश्किल है, इसलिए Hub के अंदर local HTTP server चलाया जाता है
  • Hub में Python 2.7.18 included है
    • Hub का last update 2018 का लगता है
    • Python 2.7.18 में required functionality देने वाला simpleHTTPServer package है
  • script_server.py port 8000 पर HTTP server खोलता है और /bam/scripts के scripts execute करता है
    • URL path script name बनता है
    • कई arg query parameters pass करके उन्हें script arguments के रूप में इस्तेमाल किया जा सकता है
    • execution result browser में दिखता है
  • script को scp -O script_server.py root@$hub_ip:~ के रूप में Hub में copy करें
  • reboot के बाद auto-start के लिए start script में जोड़ना या rc.d script add करना होगा

reboot के बाद auto-run setup

  • running OS instance bootloader की /init script द्वारा बनाए गए chroot के अंदर चलता है
  • कई system files tmpfs partition में stored हैं, इसलिए directly modify करने पर reboot के बाद बदलाव persist नहीं होते
  • original files वाले disk partition को अलग से mount करने पर, reboot के बाद copy होने वाली original /etc files modify की जा सकती हैं
  • script_server.sh के रूप में init script बनाकर Hub में copy करें, फिर उसे original root partition के tmp/etc/init.d में रखें
  • rc0.d, rc3.d, rc4.d, rc5.d, rc6.d में symbolic links add करें ताकि start और shutdown के समय execute हो
  • reboot के बाद browser से http://$hub_ip:8000/bamstat access करने पर Hub status info दिखे, तो server ठीक से चल रहा है

/bio script से संभव control

  • /bio bed की main control script लगती है
  • commands /bio?arg=XXXX format में pass किए जाते हैं
  • Sleep Number values query और set की जा सकती हैं
    • PSNL, PSNR: left/right bed side की last settings query
    • PSNl, PSNr: left/right bed side की current values query
    • PSNX: दोनों sides की last settings और current values query
    • PSNS&arg=L100: left Sleep Number value को 100 पर set करें, value range 5..100 है
  • presence detection और privacy settings भी handle की जा सकती हैं
    • SPAU: privacy setting query
    • SPAU&arg=on: privacy setting on करें, off से off करें
    • LBPL, LBPR, LBPX: left, right, दोनों presence values query
  • Responsive Air, bed position, lighting, foot warming features भी शामिल हैं
    • LRSG: दोनों sides की Responsive Air settings query
    • LRLE&arg=on, LRRE&arg=off: left/right Responsive Air settings बदलें
    • MFST: head और foot position query
    • MFUL, MFUR, MFFL, MFFR: left/right head·foot position set करें
    • MFO3, MFSO: under-bed lighting या outlet status और brightness·timer settings
    • FWGL, FWGR, FWSL, FWSR: left/right foot heating level और timer query·set
    • SBAS: bed baseline value set करें
  • /bio?arg=help executable commands की list दिखाता है
    • help call में दूसरे argument के रूप में command जोड़ने पर उस command की detailed info आती है
  • bio script में foundation preset, snore settings, DualTemp control, status info भी हैं
    • factory reset या radio control जैसे destructive commands में सावधानी जरूरी है
    • लेखक द्वारा इस्तेमाल किए गए bio version में MFSO item order LIST में गलत था, इसलिए call करने के लिए उसे कुछ lines ऊपर ले जाना पड़ा

access के बाद देखने लायक areas और security concerns

  • bed control features /bam root directory में इकट्ठे हैं
    • इसके अंदर कई scripts देखने पर Hub कैसे काम करता है यह समझा जा सकता है
  • UART के बिना access हो सके ऐसा backdoor खोजने की कोशिश की गई, लेकिन कोई obvious access channel खुला नहीं था
  • Hub Sleep Number servers से communicate करते समय SSH tunnel खोलता है, और developers द्वारा maintenance के लिए इस्तेमाल हो सकने वाला reverse tunnel प्रदान करता है
  • external users के internal home network से directly connect करने की संभावना है, इसलिए internal network control scripts पर्याप्त हो जाने पर Hub का external internet connection काटने का तरीका consider करें
  • SleepIQ app को directly replace कर सकने वाला सरल Progressive Web App भी next-step candidate है

1 टिप्पणियां

 
GN⁺ 2024-07-02
Hacker News की राय
  • काफी बेतुका है। पहले मैंने ऐसा बिस्तर इस्तेमाल किया था, लेकिन वह सब कुछ smart बनने से पहले की बात थी। पंप से दो wired controllers जुड़े थे, और controllers में नंबर display और ऊपर/नीचे adjust करने के buttons थे
    इंटरनेट की जरूरत नहीं थी, Linux-based microcontroller की जरूरत नहीं थी, बिस्तर hack होने की कोई गुंजाइश नहीं थी, और आराम से सो सकते थे

    • जब भी लगता है, “यह तो पूरी तरह बेकार की over-complexity है”, मैं सोचने की कोशिश करता हूं कि यह किसी की जिंदगी कितनी आसान बना सकती है
      उदाहरण के लिए, अगर किसी को Parkinson’s disease से लेकर quadriplegia तक कोई motor disability हो, तो voice या standardized input method से चलने वाले common controller से जुड़ना बहुत बड़ा फायदा हो सकता है। क्योंकि तब हर product की अलग-अलग accessibility limits से अलग से निपटना नहीं पड़ेगा
      जिन लोगों को शारीरिक दिक्कत नहीं है, उनके लिए ज्यादातर smart home devices लगभग बेकार लग सकते हैं, लेकिन दूसरों के लिए वे lifeline हो सकते हैं
    • ऐसा बिस्तर हो तो मैं खरीदूंगा। बिस्तर में Wi‑Fi connectivity तक जोड़नी पड़े, यह अजीब है। सिर्फ wall socket में plug करने की तुलना में इसमें ज्यादा hardware चाहिए होगा, यह पागलपन लगता है
  • “जब hub Sleep Number servers से communicate करता है, तो वह SSH tunnel खोलता है और developers को जरूरत पड़ने पर hub में login करके maintenance करने के लिए reverse tunnel देता है” — यह हिस्सा दिलचस्प है
    देखना चाहूंगा कि वे public key authentication इस्तेमाल करते हैं या password, और घर तक tunnel करते समय IP इस्तेमाल करते हैं या DNS। अगर conditions बिल्कुल सही बैठें, तो मानव इतिहास का सबसे मजेदार DNS hijacking setup संभव हो सकता है
    Homer Simpson की अमर अभिव्यक्ति उधार लें तो, बिस्तर ऊपर जाता है और बिस्तर नीचे आता है

    • पुराना तरीका: cryptocurrency holders को निशाना बनाने वाले SIM swapping attacks
      नया तरीका: Sleep Number बिस्तर order information से जुड़ा है, तो Sleep Number में घुसकर target ढूंढो, उस व्यक्ति के बिस्तर में SSH से login करो, फिर home network में pivot करके cryptocurrency wallet चुरा लो
      वैसे भी पैसा हमेशा mattress के नीचे ही छिपाया जाता है ;)
    • अगर खरीदने से पहले मालिक को यह बात नहीं बताई गई थी, तो क्या bed owner को मुकदमा नहीं करना चाहिए? network में unauthorized access करना और backdoor लगाना अपराध नहीं है क्या?
  • बिस्तर को Linux चलाने की जरूरत क्यों है? क्यों?
    लगता है हम सभी possible timelines में सबसे बेवकूफ timeline में रह रहे हैं। 1GB RAM और पूरा operating system न रखने वाले एक सामान्य बिस्तर में आखिर क्या कमी थी? हर जगह यही हाल है। Wi‑Fi से connect न होने वाली washing machine ढूंढना भी एक काम था, और 10 साल बाद फिर वही करना पड़ेगा, यह सोचकर ही डर लगता है
    मजे के लिए हो या पैसे कमाने के लिए, करीब O(1000) “smart” devices में सेंध लगा चुके व्यक्ति के तौर पर, मैं ऐसी चीज घर में नहीं लाना चाहता। लेकिन इस तरह के Linux-powered beds जैसी दीवानगी की वजह से बचना धीरे-धीरे मुश्किल होता जा रहा है। कृपया इसे रोकिए

    • बिस्तर को जटिल होने की जरूरत नहीं है। पुराने समय में Z80 और 32K RAM से ही बिस्तर के सारे काम हो जाते थे। जिस दिन मैंने पहला cooperative multitasking bed खरीदा था, वह सचमुच ऐतिहासिक था, और high-density comforters ने खेल बदल दिया था
      हालांकि खाली vinyl record लेकर public library तक जाकर software updates लाने की बात याद नहीं आती। भूल जाते तो bedbugs हो जाते थे
    • https://imgur.com/6wbgy2L
      “मेरे पास सबसे modern tech product 2004 का printer है, और अगर वह कोई unexpected आवाज निकाले तो तुरंत गोली मारने के लिए loaded gun तैयार रखी है”
    • बिस्तर Linux इसलिए चलाता है क्योंकि हम ऐसे दौर में रह रहे हैं जहां बेहतर results के लिए चीजें खुद को measure करती हैं
      एक सदी पहले हमने antibiotics खोजे थे, और वह बड़ी प्रगति थी। उसके बाद कई स्पष्ट बीमारियां और उनके स्पष्ट इलाज मिले, और अब जटिल और subtle चीजें बची हैं। यह बिस्तर sleep state बताने के लिए Linux चलाता है
      अगर नींद ठीक न आए तो आम तौर पर हल्के लेकिन कई negative effects होते हैं, और यह जान लेने पर उन्हें सुधारा जा सकता है। यह हर रात कम-intensity sleep test करने जैसा है, इसलिए valuable information हो सकती है
      Sleep Number beds कई हजार dollars के होते हैं, इसलिए उनसे बचना चाहें तो शायद आसानी से बच सकते हैं
    • मुझे भी ऐसा ही लगता है। अच्छी बात यह है कि इस trend की वजह से मैं पुराने, second-hand और repairable सामान बहुत सस्ते में खरीदने लगा हूं, और पुराने electronics की छोटी-मोटी repair भी धीरे-धीरे सीख रहा हूं
      wallet के लिए भी बड़ा फायदा है, और अच्छी हालत की चीजों को landfill में न भेजने का संतोष भी बड़ा है। reduce, reuse, recycle — यह importance के order में ही है
    • कम से कम Windows तो नहीं चला रहा
  • शुरुआत में मुझे पूरी तरह लगा कि यह post किसी ऐसे व्यक्ति की Eight Sleep bed hacking पर है जो कानूनी वजहों से company का नाम सीधे नहीं लेना चाहता
    लेकिन जब मैंने “Number Sleep Hub” की photo देखी, जो सच में मौजूद लगता है, तो दिमाग हिल गया। water-cooled beds बनाने वाली दो कंपनियां हैं, एक Eight Sleep और दूसरी Sleep Number — यह timeline बहुत ही अजीब है। लगता है इस instance के random number generator को खराब seed मिला है

    • Sleep Number नाम mattress की firmness setting से आया है। आप अपना “sleep number” चुनते हैं, और आपका partner बिस्तर के दूसरे हिस्से में अपना value चुनता है
    • मुझे यह मजेदार संयोग लगता है, लेकिन ऐसा लगता है कि Eight Sleep ने ऐसा नाम चुना जो Sleep Number से confuse होने लायक बस इतना है कि तुरंत lawsuit न हो
    • Sleep Number brand शायद 80s से है। मैंने खुद इस्तेमाल नहीं किया, लेकिन यह definitely पुराना brand है। अगर आप America के बाहर हैं तो हो सकता है आपने इसका नाम न सुना हो
    • Sleep Number bed मूल रूप से एक विशाल mattress-shaped rectangular air bladder है, जो foam के मकबरे के अंदर रखा होता है
      https://i.ytimg.com/vi/pMiTq6YkJ2c/maxresdefault.jpg
      लोग सचमुच ऊपर foam लगी premium adjustable airbed के लिए कई हजार dollars दे रहे हैं
    • मैंने दोनों का नाम पहली बार सुना, इसलिए मुझे लगा title “sleep quality improve करने के लिए brain में root access पाने का तरीका” का metaphor है
      उम्मीद है ऐसे beds में अंधेरे में भी छूकर इस्तेमाल किए जा सकने वाले physical controls होंगे। अगर सोने की कोशिश करते समय adjust करने के लिए smartphone चेहरे के सामने निकालना पड़े, तो शक होता है कि bed और mattress makers सच में जानते भी हैं या नहीं कि sleep quality के लिए क्या अच्छा है और क्या बुरा
  • Eight Sleep Pod 3 में भी इसी तरह प्रवेश करने का तरीका है [0]। कुछ मॉडलों में बदला जा सकने वाला MicroSD कार्ड होता है, इसलिए अतिरिक्त hardware की कम ज़रूरत पड़ती है
    लेख में बताया गया तरीका उन Pod पर root access पाने के लिए अच्छा हो सकता है जिनमें कार्ड नहीं है। हालांकि अभी पता चला कि Eight Sleep firmware update पर signature तो करता है, लेकिन उस update को sign करने के लिए इस्तेमाल होने वाली private key भी उसी package में भेज देता है
    [0]: https://github.com/bobobo1618/ninesleep

    • विडंबना यह है कि यह देखकर उल्टा एक खरीदने का मन हो रहा है। अगर smart device को local बनाया जा सके या Home Assistant से control कराया जा सके, और internet connection काटा जा सके, तो यह इतना बुरा नहीं लगता
      बेशक 2,000–4,000 डॉलर महंगा है, लेकिन अगर यह करीब 10 साल चलने वाला one-time खर्च हो तो ठीक है। लेकिन 4,000 डॉलर देने के बाद भी हर महीने 25 डॉलर और देने हों, तो यह बिल्कुल बेहूदा है
  • सोच रहा हूं कि Eight Sleep में भी किसी ने यही किया है या नहीं। सिर्फ internet बंद होने की वजह से bed का temperature control न कर पाना सच में बहुत खलता है

    • यह कौन-सा नया नरक है। internet से जुड़ना क्यों ज़रूरी है?
    • मेरे मामले में कंबल 95% काम कर देता है, और ski lodge में सस्ता electric mattress pad बाकी 5% संभाल लेता है
    • Eight Sleep खरीदने वाला था, लेकिन यह पता चलते ही कि वे ऐसा करते हैं, मेरी दिलचस्पी तुरंत खत्म हो गई। mattress cover के लिए 1000 डॉलर से ज़्यादा देने के बाद, चीज़ को चलाने के लिए “rent” भी देने का कोई इरादा नहीं है
  • Sleep Number नहीं खरीदूंगा
    कई सालों तक inflatable mattress पर सोया, लेकिन manufacturer ने China में outsourcing शुरू की, उसके बाद internal baffles की seams दो mattresses में फट गईं

  • “इस guide को follow करने पर Sleep Number hub की internal files बदलनी पड़ेंगी और warranty void हो जाएगी” जैसी बकवास फैलाना बंद होना चाहिए
    जैसे “हटाने पर warranty void” stickers कानूनी तौर पर enforce नहीं किए जा सकते, वैसे ही misuse या खराब maintenance के अलावा कोई चीज़ product warranty को automatically void नहीं करती
    smart bed खराब होने पर सिर्फ इसलिए कि आपने controller से छेड़छाड़ की थी, manufacturer warranty obligation से बच नहीं जाता। इसमें implied warranty भी शामिल है। यह साबित करने की ज़िम्मेदारी manufacturer पर है कि consumer ने product खराब किया, उसे “unreasonable” तरीके से इस्तेमाल किया, या ठीक से maintain नहीं किया
    अगर JTAG जोड़ने की कोशिश में गलती से 5V को 3.3V logic circuit से bridge करके bed का brain जला दिया, तो वह आपकी ज़िम्मेदारी है
    लेकिन अगर power supply फटकर controller खराब हो गया, तो यह तथ्य irrelevant है कि आपने JTAG header लगाया था, आंखों वाला sticker चिपकाया था और उसे pink paint कर दिया था। उन्हें उसे ठीक करना होगा
    firmware modify किया हो तब भी manufacturer को यह साबित करना होगा कि वही modification failure की वजह था
    laptop पर gaming करने से heat ज़्यादा होती है, इसलिए warranty void है—ऐसी उम्मीद नहीं की जाती। Firefox install करने या Linux install करने पर भी यही बात है। फिर सिर्फ device थोड़ा ज़्यादा “dumb” है, इसलिए rules अलग होंगे—ऐसा सोचने की कोई वजह नहीं है

    • कागज़ पर कानून और असल मैदान में कानून अलग होते हैं। manufacturer अगर warranty honor करने से मना कर दे, तो customer बहुत कम कर सकता है
  • अगला ransomware ही होगा शायद। “1000 डॉलर दो, वरना अगले एक महीने तक अपने bed पर सो नहीं पाओगे”

    • अगला subscription model नहीं होगा क्या?
  • कुछ facts देखते हैं
    Sleep Number bed में heart rate detect करने वाला sensor होता है। यह air mattress के अंदर pressure difference detect करके करता है। असल में यह लगभग microphone जैसा ही है और काफी sensitive है

    • क्या सच में pressure sensor से heart rate detect करते हैं? noise इतनी ज़्यादा होगी कि data usable नहीं लगेगा
      खोजने पर लगा कि वे काफी plausible statistical analysis मिलाकर पर्याप्त accurate data पा लेते हैं। दिलचस्प है