- फ़र्मवेयर फ़ाइल को unpack करने पर डिवाइस की आंतरिक संरचना आसानी से देखी जा सकती थी, और Rodecaster Duo में डिफ़ॉल्ट स्थिति में SSH खुला हुआ था
- अपडेट पैकेज gzipped tarball फ़ॉर्मेट में था, और डिवाइस में खराबी आने पर दूसरी तरफ़ से boot करने के लिए दो partitions और अपडेट के लिए shell scripts मौजूद थीं
- आने वाले फ़र्मवेयर पर signature verification नहीं था, और वास्तविक SSH access Ethernet कनेक्शन पर पुष्टि हुआ, जहाँ सिर्फ pubkey authentication की अनुमति थी
- Windows पर USB update flow को capture करके यह पता चला कि
MऔरUनाम के एकल ASCII commands से update mode में जाना और flashing चलाना होता है;archive.tar.gzऔरarchive.md5कॉपी करने के बाद reboot के साथ नया फ़र्मवेयर इंस्टॉल हो जाता है - macOS पर custom firmware के जरिए SSH password authentication चालू किया गया और public key जोड़ी गई, जिससे वास्तविक access भी संभव हुआ; लेकिन डिफ़ॉल्ट SSH enable रहने और default keys शामिल होने का कारण अंत तक स्पष्ट नहीं हुआ
फ़र्मवेयर अपडेट और SSH का डिफ़ॉल्ट सक्षम होना
- Rodecaster Duo में फ़र्मवेयर अपडेट प्रक्रिया के दौरान डिवाइस तक भेजी जाने वाली फ़ाइलों को आसानी से देखा जा सकता था, और डिफ़ॉल्ट स्थिति में SSH सक्षम था
- macOS पर disk activity को trace करके फ़र्मवेयर का storage location ढूँढा गया, और फ़र्मवेयर साधारण gzipped tarball फ़ॉर्मेट में था
- जिस डिवाइस पर अपडेट की कोशिश की गई, उसमें USB disk write फ़ंक्शन disabled था, इसलिए वह अपडेट असफल रहा
- डिवाइस के अंदर executable binaries और अपडेट के लिए shell scripts थीं, और disk पर दो partitions थे ताकि एक खराब होने पर दूसरी तरफ़ से boot किया जा सके
- आने वाले फ़र्मवेयर पर signature verification नहीं है
- Ethernet cable जोड़कर जाँचने पर SSH वास्तव में खुला मिला, और सिर्फ pubkey authentication की अनुमति थी
- डिफ़ॉल्ट रूप से जोड़ी गई SSH की दो keys की पुष्टि हुई
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCX/bCFTDgViuPvdFL/VMMVRrw9b5S8HcDQk17qoCEYwmI+IIG8rEAsLiaeCOwyhf9IN+8/LRaN0Z5ZfU3WMbmsKEg8zd1Yvqq74nFbhO47vbtzmCi9S4ucIKkBEVOyvyN5lt9hWf5t5nZSmlfldZK3Pem5y8wHM5A+K/gSnzp4gwQ1QYfFb068uQ+ciIdOhb8SkUs8CwzotglIbp19I6ZmXmsNj/TmpbUf5rMfUAf1gysZ5j1UdRWrvWVh5daqvZRsBBPbXEeJfDU3Nr3HR14XYt9mgexrz/5oyKSj/lQYLmh9cDfsxvkGNIQ8fF9l+n2L1KZM4lLgiGk4KFBjQHaIBZx9OebCiiZCO4NTJUBDk9a+SZpiDiipADV07s7vTInYyFA6GrmKtnq3M6upT4WJBvVuL/BMnK5yY1RZtoqox2/pcCg2rH5S1GIy0v0HFJisl7kWInlaG2mdsaCx19wAjCFe/qT9LyxjQ6+0rArI55/JJFDkNeMjrewRQwNdASjCox8vqXCBfjvsR9qv70/ywcymgsnLAnq2LuYg5FYwMMDYOvVnhACC+BYTdNDTn5oeMIjQCUenY/DPCHpJkf4YOf3YCMUTEU9tExhtwW/X+m21hS3+STLtTfqbUeg9CeuPQZgfl9vc65n3tMxAdlEGEDoTaNMAgr2TzJv92Ka9iQ==ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDaNyzPfIcEeQsfzyQs/wyX6mX52kiS+4eNHfCaxFlgj
अपडेट फ्लो और custom firmware
- Windows पर Wireshark और USBPcap के साथ update traffic को capture करके RODECaster App द्वारा डिवाइस को भेजे जाने वाले control flow की पुष्टि की गई
- डिवाइस को update mode में डालने वाला 'M' command और update चलाने वाला 'U' command मौजूद था
- दोनों commands HID report 1 के रूप में भेजे जाने वाले एकल ASCII characters थे
- वास्तविक update संरचना सरल थी
Mcommand भेजने के बाद नए exposed disk परarchive.tar.gzऔरarchive.md5कॉपी किए जाते हैंarchive.md5, archive का md5sum मान था- इसके बाद disk को unmount करके
Ucommand भेजने पर flashing शुरू होती है, और फिर डिवाइस reboot होकर नए फ़र्मवेयर पर चलने लगता है
- macOS पर container का इस्तेमाल करके SSH password authentication चालू करने और अपनी public key को authorized keys में जोड़ने वाला custom firmware बनाया गया
- flashing के लिए ज़रूरी न्यूनतम functions का उदाहरण यहाँ देखा जा सकता है
- script चलाकर flashing करने के बाद डिवाइस से SSH के जरिए जुड़ा जा सका
- इस डिवाइस पर फ़र्मवेयर को बहुत आसानी से flash किया जा सकता था, और डिफ़ॉल्ट SSH enable रहने तथा default keys शामिल होने का कारण अब भी स्पष्ट नहीं है
- यह मुद्दा RODE को ticket के ज़रिए भेजा गया, लेकिन कोई जवाब नहीं मिला
- आगे के फ़र्मवेयर updates में कोई बदलाव आता है या नहीं, इसकी निगरानी जारी रहेगी
1 टिप्पणियां
Hacker News की राय
डिफ़ॉल्ट रूप से verification चालू रखना ठीक है, लेकिन जिसने hardware खरीदा है उसे अपनी key register करने, jumper बदलने, या boot के समय button दबाने जैसे तरीकों से owner control मिलना चाहिए
व्यवहार में ऐसा करने वाले बहुत कम हैं, बस कुछ Chromebook और network equipment जैसे उदाहरण हैं, इसलिए firmware security की बात आते ही बहस हमेशा "सब कुछ कसकर बंद कर दो" बनाम "सब कुछ पूरी तरह खुला छोड़ दो" में बदल जाती है, और जिसने पैसे देकर device खरीदा वही फैसला करे, यह ढांचा गायब हो जाता है
Rode का tarball + hash के रूप में distribute करना बहुत अच्छा है, और अगर आगे चलकर वे इसे और सख्त भी करें, तब भी उम्मीद है कि मेरे अपने device पर मैं जो चाहूँ वह चढ़ा सकूँ, ऐसा रास्ता बना रहे
काश इस तरह के खुले devices और होते, और उम्मीद है Rode यह देखकर firmware upgrades को lock नहीं कर देगा
कृपया इसे मत बदलना
वह लगभग 2009 का printer था, और RAM को 256MB तक बढ़ाने के लिए firmware update ज़रूरी था; बस network पर printer को tarball FTP से भेजना होता था
मैंने FileZilla से भेजा, कुछ मिनट तक वह चलता रहा और update पूरा हो गया, और उसके बाद से मुझे हमेशा लगा कि firmware update इससे ज़्यादा जटिल होने की क्या ज़रूरत है
security के लिए checksum जैसी चीज़ हो सकती है, लेकिन अच्छा होगा अगर बस FTP, SCP, या SFTP से एक blob upload करो और काम खत्म हो जाए
यानी किसी तरह के DFU mode में जाना पड़े; नहीं तो USB तक पहुँच रखने वाली कोई भी चीज़ गलत firmware push करके device को brick कर सकती है
10 या 20 साल पहले ऐसी functionality शायद किसी छोटे 16-bit या 32-bit SoC पर VxWorks जैसे RTOS से implement की जाती
इसमें इतने physical controls हैं कि अगला कदम इसे game console बना देना भी स्वाभाविक सा लगता है
ऊपर से उसमें दो 1GbE ports हैं, और हर एक machine के अलग हिस्से से बात करता है
लेकिन pro audio दुनिया में यह setup इतना अनोखा नहीं है; घर की desk पर रखा हो तो प्रभावशाली लगता है, पर industry में यह काफ़ी सामान्य है
बाद में अगर कोई root shell निकाल ले या इसे brick कर दे, तो शायद तब कहानी और मज़ेदार हो
cost और compatibility के लिहाज़ से Linux को हराना भी आसान नहीं है
आमतौर पर नीचे ARM SoC पर चलने वाला minimal Linux होता है, और कभी-कभी vendor का BSP गलती से sshd enabled छोड़कर shipping तक पहुँच जाता है
यह ज़्यादा बुरी नीयत का मामला नहीं, बल्कि अक्सर audio side में rootfs की सही ज़िम्मेदारी लेने वाला कोई नहीं होता
असली सवाल यह है कि यह सिर्फ़ USB-side network पर खुला है, या सचमुच के LAN पर भी खुला है
पहला वाला बस झंझट है, दूसरा सच में चिंता की बात है
इसके मुक़ाबले Android में eng / userdebug / user जैसी default image types पहले से बँटी होती हैं, इसलिए बस सही preconfigured default चुन लेने से ऐसी गलती से बचना आसान हो जाता है
किसी खास feature के इस्तेमाल पर ही Wi‑Fi से connect होता है, इसलिए वह interface भी खुला है या नहीं, यह मैं जाँच नहीं पाया
किसी agent को बस यह दे दो, और कुछ ही मिनटों में वह firmware को देखकर device modify करने का तरीका बता देता है
पिछले साल तक भी यह काम कम-से-कम Hotz-level hacker या फिर बहुत लंबे समय तक टिककर गहराई में जाने वाले व्यक्ति का लगता था
LLM ने analysis, debugging, और bypass को काफ़ी आसान ज़रूर बनाया है, लेकिन इस device की protection इतनी कमज़ोर थी कि मध्यम स्तर की skill वाला कोई भी व्यक्ति, अगर उसके पास समय और motivation हो, यह कर सकता था
न encrypted firmware था, न signature checks, ऊपर से built-in SSH access भी था
इसके उलट George Hotz ने जिस PS3 hypervisor को तोड़ा था, वह attacker के नज़रिए से कहीं ज़्यादा मजबूती से design किया गया था, और असली exploit के लिए FPGA का उपयोग करके voltage glitching तक करनी पड़ी थी
उस तरह के attacks में LLM मदद कर सकता है, लेकिन पूरी feedback loop न होने की वजह से अब भी इंसानी मेहनत काफ़ी लगती है
https://rdist.root.org/2010/01/27/how-the-ps3-hypervisor-was-hacked/
अगर Wireshark install न हो, तो यह थोड़ा समय बचा सकता है, लेकिन hallucination का थोड़ा जोखिम भी है
इसके अलावा काम बस इतना था कि Docker के भीतर firmware tarball की
~root/.ssh/authorized_keysऔर/etc/shadowको modify किया गया, संबंधित HID messages भेजे गए, और फिर modified tarball को उस volume में copy किया गया जिसे device USB drive की तरह expose करता है; इसके लिए एक simple Python script इस्तेमाल हुईइसलिए यह कोई पागल-स्तर का hacker माँगने वाला काम नहीं था; Linux sysadmin की बुनियादी समझ और USB HID library जोड़कर छोटा-सा program लिख सकने भर का स्तर काफ़ी था
हाँ, एक पल के लिए मुझे यह ज़रूर अजीब लगा कि Ubuntu container में
whoispackage क्यों install किया गया, लेकिन फिर समझ आया कि Debian परिवार में ऐतिहासिक कारणों से mkpasswd उसी में आता हैऔर अगर device का
sshd_configसच में default ही था, तोPermitRootLoginकी वजह से root password login शुरू से ही शायद काम नहीं करताhttps://bugs.debian.org/cgi-bin/bugreport.cgi?bug=116260
मैंने Credo 50 को IQ250 बनकर दिखाने लायक बना दिया था, जबकि अंदर से वे लगभग एक जैसे ही हैं
गहराई में जाना मज़ेदार है, लेकिन उम्र बढ़ने के साथ किसी random firmware blob पर 16 घंटे खर्च करना मुश्किल होता जाता है
और ऊपर से SSH खुला होने वाले device से निपटने के लिए कोई खास skill भी नहीं चाहिए
खासकर यह हिस्सा कि एक ही कमरे में game खेलते हुए और Discord इस्तेमाल करते हुए, मैं और मेरी girlfriend अपने-अपने computer में mic लगाए रखें लेकिन echo के बिना काम हो जाए
दोनों को उसी Discord call में रखो, लेकिन दोनों mics को मिलाकर एक computer के input में भेजो, और दूसरे वाले पर mic mute रखकर client में सिर्फ़ audio receive करो
mixing local स्तर पर होती है, इसलिए echo नहीं बनता
अगर और सवाल हों तो ईमेल करने को कहने लायक आसान setup है
latency लगभग 40ms है, और Wi‑Fi के ज़रिए 50~60ms तक पहुँच जाती है
एक PC पर mixer चलाइए और local mic को एक input channel बनाइए, फिर दूसरे PC से उसका mic broadcast कीजिए ताकि वह mixer के channel 2 में आ जाए; इस तरह मिलता-जुलता समाधान हो सकता है
local PC पर music भी चलाया जा सकता है, और mixer या broadcaster local sink बना सकता है
अंत में सब कुछ mixer में मिलाकर main out को Discord में भेजें, और monitor line Discord audio बाहर भेजकर दूसरे PC तक relay कर सकती है ताकि real-time monitoring हो सके
बेशक, हो सकता है मैं स्थिति को गलत समझ रहा हूँ
Zola के बारे में मुझे ज़्यादा पता नहीं, इसलिए यह common template है या custom, यह नहीं कह सकता, लेकिन दिखने में बहुत अच्छा है
शायद इसी वजह से वे signed image जैसी चीज़ों को enforce करते हैं
ऐसे interface के मामले में तो शायद इसे खुला ही रखना बेहतर लगेगा
वहाँ तो लगभग अंग्रेज़ी जैसी ही बोली जाती है, तो बात समझ में आ जाएगी