مهندسی معکوس تصفیه هوا Coway من برای از بین بردن ابر
آدرس مقاله: https://scottjg.com/posts/2026-11-11-reverse-engineering-my-coway-air-purifier-to-ditch-the-cloud/ آدرس نظرات: https://news.ycombinator.com/item?id=50474959 امتیاز: 348 # نظر:
سال 2017 است. رشتهای از آتشسوزیهای جنگلی سالانه ساحل غربی را به لرزه در میآورد. آسمان در روز به این شکل است:
خانه من، مانند بسیاری در منطقه خلیج، فاقد عایق است و واقعا هوا بند نیست. برای جلوگیری از خفگی در دوده، بسیاری از مردم شروع به خرید دستگاه های تصفیه هوا مانند این کردند:
این یک فن جعبه ای گران قیمت با فیلتر HEPA و سنسور کیفیت هوا است. کنترلهایی برای سرعت فن دارد و همچنین در صورت بد بودن کیفیت هوا میتواند به طور خودکار افزایش یابد. زشت است، اما آنها آنقدر در این اطراف هستند که احساس می کنم دیگر هیچ کس حتی متوجه آنها نمی شود. همچنین، FWIW، دستگاه کار می کند. واقعا کیفیت هوا را بهبود می بخشد.
این دستگاه زمانی که همسرم در نهایت شروع به روشن کردن فن در شب برای صدای سفید کرد (یک هدف دوگانه!) این دستگاه به یک کالای اصلی در خانه ما تبدیل شد. با گذشت زمان، من به آن عادت کرده ام و در حال حاضر نیز نیاز به خوابیدن دارم.
خانه ما همچنین دارای روشنایی هوشمند است و همه آن با Apple Home یکپارچه شده است. در شب همیشه دکمه «شب بخیر» را فشار میدهم که همه چراغها را خاموش میکند. من واقعا می خواستم فن را به آن گره بزنم. من شب بخیر را فشار می دادم، چراغ ها خاموش می شد و پنکه به صدای سفید مورد علاقه همسرم می رسید.
Airmega قدیمی Wi-Fi نداشت، بنابراین راه آسانی برای ادغام آن با Apple Home وجود نداشت. زمانی که در نهایت خراب شد، Coway Airmega IconS را خریداری کردم (برای مدلهای Wi-Fi غیرقطعی، Airmega 250S یا Airmega MightyS را بررسی کنید). این هنوز هم فقط یک فن جعبه ای با فیلتر HEPA است، اما به طور قابل توجهی گران تر است، هدف آن شبیه به یک مبلمان فانتزی اواسط قرن است، و مهمتر از همه، می توان آن را از طریق Wi-Fi کنترل کرد (نوعی).
برنامه آیفون Coway یک امر کاملا کلاسیک IoT است. بارگیری آن برای همیشه طول می کشد، و تقریبا هر بار که آن را راه اندازی می کنم از من می خواهد که رمز عبور خود را تغییر دهم. خوشبختانه، یک روح شجاع برنامه را مهندسی معکوس کرد و یک ادغام برای Home Assistant نوشت. ادغام کم و بیش وانمود می کند که برنامه تلفن است. این سرویس ابری Coway را برای به روز رسانی وضعیت نظرسنجی می کند و از طریق آن دستوراتی را برای کنترل فن ارسال می کند. Home Assistant پل را به Apple Home و… voilà!
نقطه ضعف این رویکرد این است که شما هنوز در خدمت (یا فقدان آن) سرویس ابری Coway هستید. به نظر می رسد حداقل یک یا دو بار در سال می شکند.
در اینجا برخی از دلایلی که من دیده ام شکسته شده است:
علاوه بر این، بعید به نظر می رسد که Coway این سرویس را برای همیشه حفظ کند. من گمان می کنم که در نهایت، مانند تمام تولید کنندگان اینترنت اشیا، آنها یا هزینه ای برای این سرویس دریافت می کنند یا آن را متوقف می کنند. مدل فن من قبلا متوقف شده است (اگرچه مدل های دیگری با Wi-Fi فعال هستند، بنابراین… چه کسی می داند).
اعتراف می کنم، تنبلی کرده ام. سالها، تلاش برای کشف راهی برای حذف ابر Coway را به تعویق انداختم، زیرا اگر دستگاه واقعا قفل میشد، بسیار سخت بود. احتمالا وقتی فن راهاندازی میشود، به coway.com (یا هر چیز دیگری) متصل میشود و اعتبار گواهی SSL سرور را بررسی میکند. به احتمال زیاد، من نمیتوانم گواهی جعلی بسازم که این بررسی را انجام دهد، بنابراین فن به سرور من وصل نمیشود.
همچنین، راه اندازی یک محیط مرد در وسط (MitM) فقط یک درد در گردن است. فن باید به یک شبکه Wi-Fi ایزوله متصل شود که تمام ترافیک خود را از طریق سرور خودم در مسیر خروج به اینترنت هدایت می کند. برای انجام این کار، باید مجموعه ای از قوانین مسیریابی و فایروال را برای تغییر مسیر ترافیک پیکربندی کنید. هیچکدام از اینها غیرممکن نیست (من قبلا این کار را انجام دادهام)، اما راهاندازی آن دشوار است، و درست کردن آن همیشه دشوار است. و هنگامی که آن را راه اندازی کردید، این فقط مرحله اول است.
تمام آنچه گفته شد، دو چیز عمده تغییر کرده است.
اول، یک حادثه امنیتی اخیر (اکتبر 2026) رخ داد که در آن شخصی متوجه شد که eMudhra، یکی از مقامات معتبر گواهی اینترنتی، از یک پارامتر بسیار ضعیف برای برخی از کلیدهای خصوصی خود استفاده کرده است.
برای چند روز یا هفته آینده، هر کسی به لطف eMudhra اکنون یک CA ریشه دارد. وقت آن است که با دستگاههای غیرمایل به MiTMing سرگرم شوید!
بنابراین، اگر دستگاه بدون وصله باشد و دارای گواهیهای ریشه سخت کد شده باشد و گواهی سرویس ابری را پین نکند،… شاید این یک راه باشد. مسلما، اگرهای زیادی وجود دارد، اما با فرض اینکه دستگاه هیچ اشتباه امنیتی عمده ای در طراحی خود نداشته باشد، این می تواند جای پایی باشد که برای کنترل آن لازم است.
دومین مورد به سادگی هوش مصنوعی است. یک LLM میتواند همه چیزهایی را که برای محیط MitM نیاز دارید تنظیم کند، بنابراین میتوانید مستقیما نحوه عملکرد فن را بیابید. می تواند این کار را بدون مراقبت و در عرض چند دقیقه انجام دهد.
هنگامی که بتوانید بین فن و اینترنت بنشینید، میتوانید نحوه برقراری ارتباط آن را مشاهده کنید، که باید به ما کمک کند تا بفهمیم چگونه فن را وادار کنیم که به جای فضای ابری با ما صحبت کند.
این در واقع کار نکرد، زیرا Raspberry Pi از یک آنتن ردیابی PCB کوچک استفاده می کند که قدرت سیگنال زیادی را دریافت نمی کند. وقتی پی در اتاق با روتر من بود، سیگنال برای رسیدن به فن خیلی ضعیف بود. حدس میزنم میتوانستم فن را با روتر به اتاق منتقل کنم، اما وقتی میتوانم این مشکل را با یک راهحل فنی پیچیده حل کنم، چرا این کار را انجام دهم؟
Raspberry Pi از رادیو Wi-Fi خود برای اجرای نقطه دسترسی خود برای اتصال فن استفاده می کند. در حالی که از طریق Wi-Fi به شبکه خانگی متصل است، نمی تواند به راحتی این کار را انجام دهد. بنابراین، Pi را با فن به اتاق منتقل کردم و درگاه اترنت آن را به لپتاپم وصل کردم، که آن را از طریق Wi-Fi به شبکه خانگی متصل میکند:
من واقعا در اینجا قضاوت ارزشی نمیکنم که آیا این یک چیز منصفانه برای مسدود کردن است، اما کلود این درخواست را ملزم نمیکند، حتی برای… اوه… اهداف آزمایشی
پس از چند دور از آن، در اینجا قوانین nftables که با آن به پایان رسید آورده شده است:
اساسا، قانون بالماسکه، ترافیک شبکه Wi-Fi ایزوله را از طریق اینترنت خانگی ما ترجمه میکند، و قانون تغییر مسیر HTTP/HTTPS را به یک نمونه در حال اجرا از mitmproxy هدایت میکند.
همچنین در Pi، mitmproxy با رابط وب خود، mitmweb، با استفاده از خط فرمانی مانند زیر اجرا میشود:
بله، خارج از قفسه، mitmproxy یک گزینه داخلی (-emudhra-old) دارد تا به طور خودکار از eMudhra root CA برای رهگیری ترافیک استفاده کند.
در مرحله بعد، من از برنامه iPhone برای تنظیم فن در شبکه Wi-Fi Pi-MITM-Test خود استفاده کردم. در پایان، برنامه گزارش داد که راهاندازی ناموفق بود. بیایید به رابط وب mitmproxy نگاهی بیندازیم:
بنابراین، ما می دانیم که نوعی مشکل اتصال وجود دارد، زیرا برنامه می گوید فن وصل نشد. اما به وضوح به وای فای ایزوله ما وارد شد، زیرا درخواستی را ارائه کرد.
درخواست بسیار مشکوک است. به نظر می رسد که طرفدار در حال دانلود گواهی ریشه برای مجوز مجوز آمازون از طریق HTTP ساده است. این رابط فقط اتصالاتی را نشان می دهد که به اندازه کافی برای درخواست HTTP واقعی فاصله دارند. برای مثال، اگر طرفدار گواهی eMudhra را که ما برای جعل هویت سرورهای واقعی استفاده میکنیم، نپذیرد، اتصالات HTTPS قبل از آن نقطه از کار میافتد و هرگز در لیست نشان داده نمیشود.
فرضیه: دستگاه این گواهی عمومی را از طریق HTTP دانلود می کند، بنابراین چیزی برای تأیید اعتبار اتصالات HTTPS بعدی (در حال حاضر دیده نشده) خود دارد. این به هیچ وجه گواهینامه ریشه ندارد.
mitmproxy یک حالت پلاگین دارد که در آن می توانید درخواست های خاصی را تغییر دهید. میتوانیم از آن برای تعویض گواهی CA تولید شده توسط mitmproxy به جای این گواهی عمومی استفاده کنیم. اگر فرضیه ما درست باشد، فن به آن CA اعتماد خواهد کرد و ما می توانیم بقیه ترافیک آن را رهگیری کنیم.
مطمئنا، دستگاه اکنون به طور کامل متصل می شود، و ما می توانیم برخی از درخواست های جدید را مشاهده کنیم:
ما میتوانیم ترافیک بین فن و سرور را رهگیری کنیم، به این معنی که احتمالا میتوانیم سرور خود را برای جایگزینی ابر Coway IoCare بسازیم. همچنین معلوم شد که ما اصلا به هک eMudhra نیاز نداریم. فن گواهی CA ریشه خود را از طریق HTTP ساده دانلود می کند. همیشه قابلیت MitM را داشت.
تنها چیزی که وجود ندارد این است که هیچ یک از این درخواست ها ربطی به تغییر سرعت فن یا هر چیز دیگری که می توانید در برنامه انجام دهید ندارد. با این حال، فهمیدن آن آسان است. اگر همزمان با کلیک کردن روی دکمههای برنامه، tcpdump را روی Pi اجرا کنید، میتوانید ترافیک رمزگذاری شده را در پورت 8883، پورت استاندارد MQTT از طریق TLS، مشاهده کنید. MQTT یک پروتکل گذرگاه پیام است که معمولا در دستگاه های IoT استفاده می شود.
با بازگشت به POST در لیست درخواست بالا، در اینجا چیزی است که آن تماس API برگردانده است:
بنابراین، اگر پاسخ به این تماس را کنترل کنیم، کنترل میکنیم که فن از کدام کلیدها برای اتصال به سرور MQTT استفاده میکند و همچنین آن سرور MQTT کجاست.
در حال حاضر، میتوانیم افزونه mitmproxy دیگری بنویسیم که کلید ما را به این پاسخ تزریق کند و سپس از آن برای پراکسی کردن ترافیک MQTT استفاده کنیم. کد افزونه تا حدی طولانی می شود، بنابراین من آن را در اینجا وارد نکردم، اما هوش مصنوعی آن را نسبتا سریع تولید می کند. mitmproxy MQTT را رمزگشایی نمی کند، اما همچنان می تواند جریان خام را به ما نشان دهد:
داده ها ترکیبی از دودویی و ASCII به نظر می رسد، اما یک جریان پروتکل استاندارد MQTT است. وقتی سرعت فن را در برنامه تنظیم می کنم، می توانید پیام جدیدی از سرور Coway به دستگاه را مشاهده کنید. معمولا، من این را در یک کالبد شکافی ترافیک بارگذاری میکردم و جدولی از اینکه با فشار دادن هر یک از دکمههای برنامه وارد میشود، جدولی درست میکردم، اما اکنون…
اکنون در اینجا کافی است تا وب سرور خودمان را بسازیم که گواهینامه ها و پیکربندی خود را در حین راه اندازی به فن می دهد، به علاوه سرور MQTT خودمان برای ارسال دستورات به آن. این به طور کامل ابر Coway را در طول عملکرد عادی از تصویر خارج می کند، اما ما همچنان از برنامه Coway برای تنظیم دستگاه استفاده می کنیم. همچنین ما هنوز به یک محیط نسبتا آزاردهنده MitM نیاز داریم تا فن را به جای Coway به ما متصل کنیم.
هنگامی که از برنامه Coway برای راه اندازی فن استفاده می کنید، دستگاه را از طریق بلوتوث جستجو می کند. من امیدوار بودم که بتوانیم راهی برای پیکربندی دستگاه خود بدون برنامه پیدا کنیم. به علاوه، اگر خوش شانس باشیم، ممکن است در این راه چیز مفید دیگری پیدا کنیم.
من قبلا دستگاههای بلوتوث را مهندسی معکوس کردهام. استراتژی قدیمی من این بود که نسخه اندروید برنامه را دریافت کنم، آن را از حالت کامپایل خارج کنم، و سپس فقط روی کدها بنویسم. همیشه آنطور که به نظر می رسد ساده نیست. توسعه دهندگان اغلب برنامه های خود را مبهم می کنند، که خواندن کدهای دیکامپایل شده را سخت تر می کند. برخی از بایت کدها نیز به طور کامل به کد منبع بازگردانده نمی شوند، به این معنی که در نهایت باید بایت کد خام را بخوانید.
با این حال، به نظر من، این معمولا ساده تر از کار با برنامه های آیفون است. برنامههای اندروید معمولا به زبان جاوا (یا Kotlin) نوشته میشوند، و مهندسی معکوس برنامههای جاوا نسبت به برنامههای کامپایلشده از سویفت یا Objective-C سادهتر است.
این بار، یک استراتژی جدید را امتحان کردم، استفاده از سیاهههای اشکالزدایی بلوتوث داخلی اندروید.
سپس، تلفن را از طریق USB وصل کردم و از هوش مصنوعی خواستم که گوشی را از طریق adb درایو کند، به گزارشهای بلوتوث نگاه کند و پروتکل را بازسازی کند. هوش مصنوعی مدتی طول کشید تا این کار را انجام دهد. در نهایت، مشخص شد که پیام حامل پیکربندی Wi-Fi رمزگذاری شده است. از آنجایی که در نهایت باید بفهمیم از چه الگوریتمی برای رمزگذاری استفاده شده است، احتمالا باید به برنامه دیکامپایل شده نگاه کنیم. مطمئنا، کار بعدی که انجام داد این بود که برنامه Coway را از تلفن بیرون کشید، آن را دیکامپایل کرد. سپس شروع به تطبیق کد منبع با سیاهههای بلوتوث کرد.
پس از همه اینها، ما می توانیم کارهای تدارکاتی را مانند این مشاهده کنیم:
نیازی به گفتن نیست که انجام این کار با دست از انتها به انتها از برنامه دیکامپایل شده اندروید بسیار زمان بر بود. حداقل ساعات کار (احتمالا روزها) خواهد بود. هوش مصنوعی در اینجا واقعا در کلاچ است. هوش مصنوعی حدود 20 دقیقه طول کشید.
با این حال، بخش خوب این است که تمام دادههایی که برای رمزگشایی آن محموله نیاز دارید، در سیاهههای بلوتوثی است که ما از تلفن گرفتهایم، بنابراین میتوانیم بررسی کنیم که اجرای مجدد ما فقط از آنها درست است. از آنجا، هوش مصنوعی کار سریعی را برای پیاده سازی مجدد کل جریان راه اندازی در یک اسکریپت کوچک پایتون انجام داد.
در حالی که این اتفاق در حال انجام بود، من با دقت پیشرفت را تماشا می کردم. هوش مصنوعی هرگز در واقع بار کامل را به من نشان نداد، اما میتوانستم آن را در خروجی میانی اسکریپتهایی که مینوشت ببینم. و آن موقع بود که متوجه چیزی شدم. دو تا از URLهای ضبط شده ما درست در این بار تنظیم شده اند (caUrl و certSvrUrl). اولی به طرفدار میگوید که از کجا باید گواهی CA ریشه را از طریق HTTP ساده دانلود کند، و دومی به او میگوید کجا روی HTTPS پست کند تا پیکربندی MQTT خود را دریافت کند.
از آنجایی که ما اکنون این بار را ارسال میکنیم، میتوانیم آن URLها را به هر کجا که بخواهیم نشان دهیم. مهمتر از همه، این بدان معناست که ما دیگر نیازی به انجام MitM نداریم. ما فقط باید سرور خود را اجرا کنیم و هنگام راه اندازی فن، URL های آن را وصل کنیم.
بر اساس یافتههای این مقاله، من توانستم یک ادغام سفارشی Home Assistant برای فن بسازم. سرور Home Assistant من بلوتوث ندارد و از طرفداران من بسیار دور است، بنابراین من تصمیم گرفتم که این کار را با بلوتوث وب انجام دهم. به این ترتیب می توانید لپ تاپ خود را در کنار فن بیاورید و آن را برای صحبت مستقیم با Home Assistant فراهم کنید.
پس از آن، دستگاه مستقیما از طریق Wi-Fi با Home Assistant صحبت می کند.
و مهمتر از آن، از Home Assistant به Apple Home من متصل می شود.
همه در کار یک روزه حالا بالاخره می توانم شب بخیر را کلیک کنم.
متن اصلی (انگلیسی)
Reverse engineering my Coway air purifier to ditch the cloud
Article URL: https://scottjg.com/posts/2026-11-11-reverse-engineering-my-coway-air-purifier-to-ditch-the-cloud/ Comments URL: https://news.ycombinator.com/item?id=50474959 Points: 344 # Comments: 89