- 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 इस्तेमाल किया जा सकता है
- Linux और Mac पर
- 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 करने के लिए बदलें/initscript hashed bootrom में है, इसलिए उसे directly modify नहीं किया जा सकता;bootargsके जरिए runtime पर/initcontent बदलें- default script
let_me_rootphrase से decrypt होने वाली encrypted file खोजती है - decryption line को decrypted value से replace करके encrypted file requirement को bypass करें
- default script
- पहली boot में
let_me_rootfile वाली USB drive चाहिए- boot के बाद console में
root@bam-se:~#prompt दिखे तो आप root shell में हैं
- boot के बाद console में
- इसके बाद root partition को read/write mode में फिर mount करें और
/root/let_me_rootfile बनाएं ताकि 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 में
ecdsakey recommend की गई है, लेकिन actual exampleed25519इस्तेमाल करता है
- example command
- public key add करने के बाद
ssh root@$hub_ip -i <path to id_ed25519>के रूप में connection test करें - connect न हो तो
authorized_keysformat और 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 देने वाला
simpleHTTPServerpackage है
script_server.pyport 8000 पर HTTP server खोलता है और/bam/scriptsके scripts execute करता है- URL path script name बनता है
- कई
argquery parameters pass करके उन्हें script arguments के रूप में इस्तेमाल किया जा सकता है - execution result browser में दिखता है
- script को
scp -O script_server.py root@$hub_ip:~के रूप में Hub में copy करें - reboot के बाद auto-start के लिए start script में जोड़ना या
rc.dscript add करना होगा
reboot के बाद auto-run setup
- running OS instance bootloader की
/initscript द्वारा बनाए गए chroot के अंदर चलता है - कई system files
tmpfspartition में stored हैं, इसलिए directly modify करने पर reboot के बाद बदलाव persist नहीं होते - original files वाले disk partition को अलग से mount करने पर, reboot के बाद copy होने वाली original
/etcfiles 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/bamstataccess करने पर Hub status info दिखे, तो server ठीक से चल रहा है
/bio script से संभव control
/biobed की main control script लगती है- commands
/bio?arg=XXXXformat में pass किए जाते हैं - Sleep Number values query और set की जा सकती हैं
PSNL,PSNR: left/right bed side की last settings queryPSNl,PSNr: left/right bed side की current values queryPSNX: दोनों sides की last settings और current values queryPSNS&arg=L100: left Sleep Number value को 100 पर set करें, value range 5..100 है
- presence detection और privacy settings भी handle की जा सकती हैं
SPAU: privacy setting querySPAU&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 queryLRLE&arg=on,LRRE&arg=off: left/right Responsive Air settings बदलेंMFST: head और foot position queryMFUL,MFUR,MFFL,MFFR: left/right head·foot position set करेंMFO3,MFSO: under-bed lighting या outlet status और brightness·timer settingsFWGL,FWGR,FWSL,FWSR: left/right foot heating level और timer query·setSBAS: bed baseline value set करें
/bio?arg=helpexecutable commands की list दिखाता हैhelpcall में दूसरे argument के रूप में command जोड़ने पर उस command की detailed info आती है
bioscript में foundation preset, snore settings, DualTemp control, status info भी हैंfactory resetया radio control जैसे destructive commands में सावधानी जरूरी है- लेखक द्वारा इस्तेमाल किए गए
bioversion मेंMFSOitem orderLISTमें गलत था, इसलिए call करने के लिए उसे कुछ lines ऊपर ले जाना पड़ा
access के बाद देखने लायक areas और security concerns
- bed control features
/bamroot 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 टिप्पणियां
Hacker News की राय
काफी बेतुका है। पहले मैंने ऐसा बिस्तर इस्तेमाल किया था, लेकिन वह सब कुछ smart बनने से पहले की बात थी। पंप से दो wired controllers जुड़े थे, और controllers में नंबर display और ऊपर/नीचे adjust करने के buttons थे
इंटरनेट की जरूरत नहीं थी, Linux-based microcontroller की जरूरत नहीं थी, बिस्तर hack होने की कोई गुंजाइश नहीं थी, और आराम से सो सकते थे
उदाहरण के लिए, अगर किसी को Parkinson’s disease से लेकर quadriplegia तक कोई motor disability हो, तो voice या standardized input method से चलने वाले common controller से जुड़ना बहुत बड़ा फायदा हो सकता है। क्योंकि तब हर product की अलग-अलग accessibility limits से अलग से निपटना नहीं पड़ेगा
जिन लोगों को शारीरिक दिक्कत नहीं है, उनके लिए ज्यादातर smart home devices लगभग बेकार लग सकते हैं, लेकिन दूसरों के लिए वे lifeline हो सकते हैं
“जब 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 की अमर अभिव्यक्ति उधार लें तो, बिस्तर ऊपर जाता है और बिस्तर नीचे आता है
नया तरीका: Sleep Number बिस्तर order information से जुड़ा है, तो Sleep Number में घुसकर target ढूंढो, उस व्यक्ति के बिस्तर में SSH से login करो, फिर home network में pivot करके cryptocurrency wallet चुरा लो
वैसे भी पैसा हमेशा mattress के नीचे ही छिपाया जाता है ;)
बिस्तर को Linux चलाने की जरूरत क्यों है? क्यों?
लगता है हम सभी possible timelines में सबसे बेवकूफ timeline में रह रहे हैं। 1GB RAM और पूरा operating system न रखने वाले एक सामान्य बिस्तर में आखिर क्या कमी थी? हर जगह यही हाल है। Wi‑Fi से connect न होने वाली washing machine ढूंढना भी एक काम था, और 10 साल बाद फिर वही करना पड़ेगा, यह सोचकर ही डर लगता है
मजे के लिए हो या पैसे कमाने के लिए, करीब O(1000) “smart” devices में सेंध लगा चुके व्यक्ति के तौर पर, मैं ऐसी चीज घर में नहीं लाना चाहता। लेकिन इस तरह के Linux-powered beds जैसी दीवानगी की वजह से बचना धीरे-धीरे मुश्किल होता जा रहा है। कृपया इसे रोकिए
हालांकि खाली vinyl record लेकर public library तक जाकर software updates लाने की बात याद नहीं आती। भूल जाते तो bedbugs हो जाते थे
“मेरे पास सबसे modern tech product 2004 का printer है, और अगर वह कोई unexpected आवाज निकाले तो तुरंत गोली मारने के लिए loaded gun तैयार रखी है”
एक सदी पहले हमने antibiotics खोजे थे, और वह बड़ी प्रगति थी। उसके बाद कई स्पष्ट बीमारियां और उनके स्पष्ट इलाज मिले, और अब जटिल और subtle चीजें बची हैं। यह बिस्तर sleep state बताने के लिए Linux चलाता है
अगर नींद ठीक न आए तो आम तौर पर हल्के लेकिन कई negative effects होते हैं, और यह जान लेने पर उन्हें सुधारा जा सकता है। यह हर रात कम-intensity sleep test करने जैसा है, इसलिए valuable information हो सकती है
Sleep Number beds कई हजार dollars के होते हैं, इसलिए उनसे बचना चाहें तो शायद आसानी से बच सकते हैं
wallet के लिए भी बड़ा फायदा है, और अच्छी हालत की चीजों को landfill में न भेजने का संतोष भी बड़ा है। reduce, reuse, recycle — यह importance के order में ही है
शुरुआत में मुझे पूरी तरह लगा कि यह post किसी ऐसे व्यक्ति की Eight Sleep bed hacking पर है जो कानूनी वजहों से company का नाम सीधे नहीं लेना चाहता
लेकिन जब मैंने “Number Sleep Hub” की photo देखी, जो सच में मौजूद लगता है, तो दिमाग हिल गया। water-cooled beds बनाने वाली दो कंपनियां हैं, एक Eight Sleep और दूसरी Sleep Number — यह timeline बहुत ही अजीब है। लगता है इस instance के random number generator को खराब seed मिला है
https://i.ytimg.com/vi/pMiTq6YkJ2c/maxresdefault.jpg
लोग सचमुच ऊपर foam लगी premium adjustable airbed के लिए कई हजार dollars दे रहे हैं
उम्मीद है ऐसे 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
बेशक 2,000–4,000 डॉलर महंगा है, लेकिन अगर यह करीब 10 साल चलने वाला one-time खर्च हो तो ठीक है। लेकिन 4,000 डॉलर देने के बाद भी हर महीने 25 डॉलर और देने हों, तो यह बिल्कुल बेहूदा है
सोच रहा हूं कि Eight Sleep में भी किसी ने यही किया है या नहीं। सिर्फ internet बंद होने की वजह से bed का temperature control न कर पाना सच में बहुत खलता है
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 अलग होंगे—ऐसा सोचने की कोई वजह नहीं है
अगला ransomware ही होगा शायद। “1000 डॉलर दो, वरना अगले एक महीने तक अपने bed पर सो नहीं पाओगे”
कुछ facts देखते हैं
Sleep Number bed में heart rate detect करने वाला sensor होता है। यह air mattress के अंदर pressure difference detect करके करता है। असल में यह लगभग microphone जैसा ही है और काफी sensitive है
खोजने पर लगा कि वे काफी plausible statistical analysis मिलाकर पर्याप्त accurate data पा लेते हैं। दिलचस्प है