2 puan yazan GN⁺ 2024-07-02 | 1 yorum | WhatsApp'ta paylaş
  • Sleep Number Hub’da UART konsolu ve U-Boot ortam değişkenleri kullanılarak root erişimi elde edilirse, SleepIQ sunucusunu aradan çıkartan bir yerel kontrol yolu oluşturulabilir
  • Mevcut Homebridge eklentisi SleepIQ API’sini 5 saniyede bir çağırıyordu; kullanıcı sayısı binler seviyesine çıkınca Sleep Number ağına yük bindirdi ve devre dışı bırakılması istendi
  • Hedef cihaz Sleep Number Hub 360SIQ01D; J16 UART pinleri, 115200 baud konsol, FAT32 veya Ext3 USB sürücü ve SSH açık anahtarı kaydı temel koşullar
  • Root erişiminden sonra Hub’ın Python 2.7.18’i ve /bam/scripts kullanılarak 8000 portundaki HTTP sunucusu üzerinden yatak ayarları ve durumu yerel ağdan yönetilebilir
  • Hub, Sleep Number sunucularına SSH ters tüneli açabildiği için, yerel kontrol yeterli hale geldiğinde harici internet bağlantısını kesip Bluetooth veya dahili kontrol kullanmak daha güvenli

Yerel erişimi aramaya götüren neden

  • Amaç, SleepIQ sunucusunu kullanmadan Sleep Number yatağı yerel ağdan kontrol etmekti
  • Daha önce oluşturulan homebridge eklentisi, yatak ayarlarının HomeKit veya otomasyonlar üzerinden kontrol edilmesini sağlıyordu
    • Özellikle yatakta birinin olup olmadığını gösteren bed presence değeri, ışıkları kapatma veya kapıları kilitleme gibi otomasyonlar için yararlıydı
  • Eklenti SleepIQ API’sini 5 saniyede bir çağırıyordu; kullanıcı sayısı binler seviyesine ulaşınca Sleep Number ağına yük bindirdi
    • Sleep Number eklentinin devre dışı bırakılmasını istedi
    • Depo markalamasının resmi bir Sleep Number aracı gibi görünebilmesi de bir sorundu
  • Sonrasında mevcut çalışma yeni homebridge-bed-control eklentisine dönüştü
    • Yeni eklenti bed presence izlemeyi varsayılan olarak devre dışı bırakıyor ve etkinleştirmeden önce uyarı ekliyor

Hub donanımında bulunan erişim yolu

  • Başta CPU yakınındaki J10 header incelendi, ancak UART verisi alınamadı
    • Bu CPU yapılandırmasında UART hatları dışarı verilmemiş durumdaydı
  • Kartın alt tarafındaki J16 header üzerinde UART sinyallerini bulmak için 10 header pinine lojik analizör bağlandı
  • UART-TTY cihazı bağlanınca cihaz konsoluna erişilebildi
  • Flash dökümü alınarak dosya sistemi ve zafiyetler incelendi, ancak UART olmadan herkesin giriş yapabileceği bir backdoor bulunamadı
  • Bunun yerine Sleep Number’ın Hub’a SSH ile bağlanmasını sağlayan bakım amaçlı backdoor keşfedildi
    • Hub dahili ev ağına bağlı olduğu için bu erişim yolu dahili ağa uzanabilir
    • Wi‑Fi bağlantısını kesip mümkün olduğunca Bluetooth kontrol kullanmak öneriliyor

Gerekenler ve hedef cihaz

  • Prosedür Sleep Number Hub 360SIQ01D modeli üzerinde uygulandı
  • Gerekli ekipman UART-TTY cihazı ve karta bağlantı araçlarıdır
    • USB-C to UART veya USB-A to UART
    • Raspberry Pi Pico W, SSH çalışmadığında uzaktan konsol erişimi için cihaz içine kalıcı olarak kurulabilir
    • 2,54 mm pin header ve havya veya PCB klipsli kıskaç
  • Kartla haberleşmek için seri konsol gerekir
    • Linux ve Mac’te minicom kullanılabilir
    • Windows’ta PuTTY kullanılabilir
  • USB-A flash sürücü FAT32 veya Ext3 biçiminde olmalıdır
  • Kullanılan Hub’a zaten bir USB cihaz takılıysa bu bir Wi‑Fi dongle olabilir; bu cihaz olmadan boot loop oluşabilir

Root erişimi prosedürünün temel akışı

  • UART cihazı kartın J16 header’ına bağlanır
    • pin 1: TX, Hub’a giren sinyal
    • pin 2: RX, Hub’dan çıkan sinyal
    • pin 3: ground
  • Seri konsol 115200 baud olarak ayarlanır
  • Hub açıldıktan sonraki 2 saniye içinde Space tuşuna basılarak otomatik boot durdurulur
  • U-Boot ortam değişkenleri önce printenv -a ile yedeklenmelidir
    • Varsayılan değerleri geri yüklemek gerekebileceği için mevcut ortamla farklar kaydedilmelidir
  • bootcmd içinden run set_bootargs; bölümü kaldırılarak boot argümanlarının elle ayarlanması sağlanır
  • /init betiği hash’lenmiş bootrom’da bulunduğu için doğrudan değiştirilemez; bu nedenle /init içeriği çalışma zamanında bootargs ile değiştirilir
    • Varsayılan betik, let_me_root ifadesiyle çözülen şifreli bir dosya arar
    • Şifre çözme satırı, çözülmüş değerle değiştirilerek şifreli dosya gereksinimi atlatılır
  • İlk boot için içinde let_me_root dosyası bulunan bir USB sürücü gerekir
    • Boot sonrasında konsolda root@bam-se:~# prompt’u görünürse root shell’e girilmiş demektir
  • Ardından root partition okuma/yazma modunda yeniden mount edilir ve USB olmadan da erişimin sürmesi için /root/let_me_root dosyası oluşturulur

SSH erişimi ayarlama

  • Root prompt’u alındıktan sonra ağ erişimini ayarlamak için SSH açık anahtarı /root/.ssh/authorized_keys dosyasına eklenir
  • Bağlanılacak yerel makinede SSH anahtarı oluşturulmalıdır
    • Örnek komut ssh-keygen -t ed25519’dir
    • Açıklama cümlesinde ecdsa anahtarı önerilse de gerçek örnek ed25519 kullanır
  • Açık anahtar eklendikten sonra bağlantı ssh root@$hub_ip -i <path to id_ed25519> biçiminde test edilir
  • Bağlantı olmazsa authorized_keys biçimi ve dosya içeriği kontrol edilmelidir
    • Bu dosyada iki anahtar olması gerektiği belirtiliyor

Yerel ağ kontrol sunucusu oluşturma

  • Yalnızca root erişimi, yatak uygulamasının kontrol işlevlerini değiştirmek için yeterli olmadığından Hub içinde yerel HTTP sunucusu çalıştırılır
  • Hub’da Python 2.7.18 bulunur
    • Hub’ın son güncellemesi 2018’de yapılmış görünüyor
    • Python 2.7.18, gerekli işlevleri sağlayan simpleHTTPServer paketine sahiptir
  • script_server.py, 8000 portunda HTTP sunucusu açar ve /bam/scripts içindeki betikleri çalıştırır
    • URL yolu betik adı olur
    • Birden fazla arg sorgu parametresi geçirilerek betik argümanı olarak kullanılabilir
    • Çalıştırma sonucu tarayıcıda gösterilir
  • Betik Hub’a scp -O script_server.py root@$hub_ip:~ biçiminde kopyalanır
  • Yeniden başlatma sonrasında otomatik başlaması için başlangıç betiğine eklemek veya bir rc.d betiği eklemek gerekir

Yeniden başlatma sonrası otomatik çalıştırma ayarı

  • Çalışan OS instance’ı, bootloader’ın /init betiğinin oluşturduğu chroot içinde çalışır
  • Birçok sistem dosyası tmpfs partition’larında tutulduğu için doğrudan değiştirilse bile yeniden başlatma sonrasında kalıcı olmaz
  • Orijinal dosyaların bulunduğu disk partition’ı ayrıca mount edilirse, yeniden başlatma sonrası kopyalanacak orijinal /etc dosyaları değiştirilebilir
  • script_server.sh biçiminde bir init betiği oluşturulup Hub’a kopyalanır, ardından orijinal root partition’daki tmp/etc/init.d içine yerleştirilir
  • Başlangıç ve kapanış zamanlarında çalışması için rc0.d, rc3.d, rc4.d, rc5.d, rc6.d içine sembolik bağlantılar eklenir
  • Yeniden başlatma sonrası tarayıcıdan http://$hub_ip:8000/bamstat adresine erişildiğinde Hub durum bilgileri görünüyorsa sunucu düzgün çalışıyor demektir

/bio betiğiyle yapılabilen kontroller

  • /bio, yatağın ana kontrol betiği gibi görünüyor
  • Komutlar /bio?arg=XXXX biçiminde geçirilir
  • Sleep Number değerleri sorgulanabilir ve ayarlanabilir
    • PSNL, PSNR: yatağın sol ve sağ tarafındaki son ayar değerlerini sorgulama
    • PSNl, PSNr: yatağın sol ve sağ tarafındaki mevcut değerleri sorgulama
    • PSNX: iki tarafın son ayar değerlerini ve mevcut değerlerini sorgulama
    • PSNS&arg=L100: sol Sleep Number değerini 100 olarak ayarlama; değer aralığı 5..100
  • Varlık algılama ve gizlilik ayarları da yönetilebilir
    • SPAU: gizlilik ayarını sorgulama
    • SPAU&arg=on: gizlilik ayarını açma, off ile kapatma
    • LBPL, LBPR, LBPX: sol, sağ ve iki tarafın varlık değerlerini sorgulama
  • Responsive Air, yatak pozisyonu, aydınlatma ve ayak ısıtma işlevleri de bulunur
    • LRSG: iki tarafın Responsive Air ayarlarını sorgulama
    • LRLE&arg=on, LRRE&arg=off: sol/sağ Responsive Air ayarını değiştirme
    • MFST: baş ve ayak pozisyonunu sorgulama
    • MFUL, MFUR, MFFL, MFFR: sol/sağ baş ve ayak pozisyonunu ayarlama
    • MFO3, MFSO: alt aydınlatma veya priz durumu ile parlaklık/zamanlayıcı ayarı
    • FWGL, FWGR, FWSL, FWSR: sol/sağ ayak ısıtma seviyesi ve zamanlayıcı sorgulama/ayarlama
    • SBAS: yatak referans değerlerini ayarlama
  • /bio?arg=help, çalıştırılabilir komutların listesini gösterir
    • help çağrısına ikinci argüman olarak komut eklenirse ilgili komutun ayrıntılı bilgisi çıkar
  • bio betiğinde foundation preset, horlama ayarı, DualTemp kontrolü ve durum bilgileri de bulunur
    • factory reset veya radio kontrolü gibi yıkıcı komutlarda dikkat gerekir
    • Yazarın kullandığı bio sürümünde MFSO öğesinin sırası LIST içinde hatalıydı; çağırabilmek için birkaç satır yukarı taşınması gerekiyordu

Erişim sonrası incelenebilecek alanlar ve güvenlik kaygıları

  • Yatak kontrol işlevleri /bam kök dizininde toplanmıştır
    • Buradaki çeşitli betikler incelenerek Hub’ın nasıl çalıştığı görülebilir
  • UART olmadan erişilebilen bir backdoor arandı, ancak belirgin bir erişim kanalı kapalıydı
  • Hub, Sleep Number sunucularıyla iletişim kurarken SSH tüneli açar ve geliştiricilerin bakım için kullanabileceği ters tünel sağlar
  • Harici kullanıcıların dahili ev ağına doğrudan bağlanma olasılığı olduğundan, dahili ağ kontrol betikleri yeterli hale gelirse Hub’ın harici internet bağlantısını kesmek değerlendirilebilir
  • SleepIQ uygulamasının doğrudan yerini alabilecek basit bir Progressive Web App de sonraki adım adaylarından biridir

1 yorum

 
GN⁺ 2024-07-02
Hacker News yorumları
  • Oldukça saçma. Eskiden böyle bir yatak kullanıyordum ama her şey akıllı olmadan önceydi. Pompaya bağlı iki kablolu kontrol cihazı vardı ve kontrol cihazlarında sayı göstergesiyle yukarı/aşağı ayar düğmeleri bulunuyordu
    İnternete gerek yoktu, Linux tabanlı bir mikrodenetleyiciye gerek yoktu, yatağın hacklenme ihtimali yoktu ve rahat rahat uyunabiliyordu

    • Ne zaman “bu tam anlamıyla saçma bir aşırı karmaşıklık” diye düşünsem, bunun birinin hayatını ne kadar basitleştirebileceğini hayal etmeye çalışıyorum
      Örneğin Parkinson’dan kuadriplejiye kadar herhangi bir hareket bozukluğunuz varsa, sesle ya da standartlaştırılmış giriş yöntemleriyle çalışan ortak bir denetleyiciye bağlanabilmesi muazzam bir avantaj olabilir. Böylece her ürünün kendine özgü erişilebilirlik sınırlamalarıyla ayrı ayrı uğraşmak gerekmez
      Bedensel engeli olmayan birine akıllı ev cihazlarının çoğu neredeyse gereksiz görünebilir ama başkaları için can simidi olabilir
    • Böyle bir yatağı alırdım. Ama yatağa bir de Wi‑Fi bağlantısı eklenmesi tuhaf. Bu, sadece duvar prizine takmaktan daha fazla donanım gerektiriyor; bence bu çılgınlık
  • “Hub, Sleep Number sunucularıyla konuşurken bir SSH tüneli açıyor ve geliştiricilerin gerektiğinde bakım için hub’a erişebilmesi adına ters tünel sağlıyor” kısmını merak ediyorum
    Açık anahtar kimlik doğrulaması mı kullanılıyor yoksa parola mı, eve tünellenirken IP mi kullanılıyor DNS mi, görmek isterim. Koşullar tam denk gelirse insanlık tarihinin en komik DNS ele geçirme düzeni mümkün olabilir gibi duruyor
    Homer Simpson’ın ölümsüz sözüyle, yatak yükseliyor ve yatak alçalıyor

    • Eski usul: kripto para sahiplerini hedef alan SIM swapping saldırısı
      Yeni usul: Sleep Number yatağı sipariş bilgileriyle bağlantılı olduğundan Sleep Number’a sız, hedefi bul, sonra o kişinin yatağına SSH ile bağlanıp ev ağına pivot et ve kripto cüzdanını çal
      Sonuçta para her zaman yatağın altında saklanır ;)
    • Satın almadan önce bundan haberdar edilmediyse, yatak sahibi dava açmamalı mı? Ağa izinsiz erişip arka kapı yerleştirmek suç değil mi?
  • Yatağın neden Linux çalıştırması gerekiyor? Neden?
    Mümkün olan tüm zaman çizelgeleri içinde en aptal olanında yaşıyormuşuz gibi geliyor. 1GB RAM ve tam teşekküllü bir işletim sistemi içermeyen sıradan bir yatakta ne sorun vardı? Her yerde aynı durum. Wi‑Fi’a bağlanmayan bir çamaşır makinesi bulmak bile uğraştırıcıydı; 10 yıl sonra bunu yeniden yapmak zorunda kalma fikri korkunç
    Eğlence için ya da para kazanmak amacıyla yaklaşık O(1000) adet “akıllı” cihazı kırmış biri olarak, böyle şeyleri eve sokmak istemiyorum. Ama bu Linux çalıştıran yatak türü delilik yüzünden bunlardan kaçınmak giderek zorlaşıyor. Ne olur durun artık

    • Yatağın karmaşık olması gerekmiyor. Eskiden Z80 ve 32K RAM ile bile yatağın yapması gereken her şey yapılıyordu. İlk işbirlikçi çoklu görev destekli yatağımı aldığım gün gerçekten anıtsaldı ve yüksek yoğunluklu yorganlar oyunun kurallarını değiştirmişti
      Yine de boş bir plak alıp yazılım güncellemesi yükletmek için halk kütüphanesine gitmek zorunda olduğumuz günleri özlemiyorum. Unutursan tahtakurusu çıkıyordu
    • https://imgur.com/6wbgy2L
      “Sahip olduğum en yeni teknoloji ürünü 2004 model bir yazıcı ve beklenmedik bir ses çıkarırsa hemen vurmak için dolu bir silahı hazırda tutuyorum”
    • Yatağın Linux çalıştırmasının sebebi, daha iyi sonuçlar elde etmek için kendimizi ölçtüğümüz bir çağda yaşamamız
      Bir yüzyıl önce antibiyotikleri keşfettik ve bu büyük bir ilerlemeydi. Ardından birçok net hastalık ve net tedavi yöntemi bulduk; şimdi geriye karmaşık ve incelikli şeyler kaldı. Bu yatak, uyku durumunu sana bildirmek için Linux çalıştırıyor
      Kötü uyku genelde hafif ama pek çok olumsuz etki yaratır ve bunu bilirsen düzeltebilirsin. Her gece düşük yoğunluklu bir uyku testi yapıyormuş gibi; bu da değerli bilgi olabilir
      Sleep Number yatakları birkaç bin dolarlık ürünler, yani kaçınmak istersen yeterince kaçınabilirsin gibi görünüyor
    • Ben de aynı hissediyorum. Neyse ki bu eğilim sayesinde daha eski, ikinci el ve tamir edilebilir eşyaları çok daha ucuza alabiliyorum; ayrıca eski elektroniklerde küçük tamirler yapmayı da yavaş yavaş öğrendim
      Cüzdan için büyük kazanç ve çalışan eşyaları çöplüğe göndermemek de ayrı bir tatmin. Azalt, yeniden kullan, geri dönüştür sıralaması önem sırasını gerçekten yansıtıyor
    • En azından Windows çalıştırmıyor
  • Başta bunun, hukuki nedenlerle şirket adını doğrudan anmak istemeyen birinin Eight Sleep yatağını hacklemeyi anlattığı bir yazı olduğunu tamamen sanmıştım
    Ama gerçekten var gibi görünen “Number Sleep Hub” fotoğrafını görünce aklım durdu. Su soğutmalı yatak yapan iki şirket olması, birinin Eight Sleep diğerinin de Sleep Number olması bu zaman çizelgesini fazlasıyla tuhaf kılıyor. Sanki bu örneğin rastgele sayı üretecine kötü bir seed verilmiş gibi

    • Sleep Number adı, yatağın sertlik ayarı değerinden geliyor. Kendi “sleep number”ını seçiyorsun, partnerin de yatağın öbür tarafında kendi değerini seçiyor
    • Komik bir tesadüf gibi geliyor ama Eight Sleep, tam dava edilmeyecek kadar Sleep Number ile karıştırılabilecek bir ad seçmiş gibi duruyor
    • Sleep Number markası muhtemelen 80’lerden beri var. Hiç kullanmadım ama eski bir marka olduğu kesin. ABD dışındaysan duymamış olabilirsin
    • Sleep Number yatakları temelde, köpükten bir lahit içine yerleştirilmiş dev dikdörtgen bir hava kesesi gibi
      https://i.ytimg.com/vi/pMiTq6YkJ2c/maxresdefault.jpg
      İnsanlar kelimenin tam anlamıyla üstüne köpük konmuş lüks ayarlanabilir bir hava yatağına birkaç bin dolar ödüyor
    • İkisini de ilk kez duyduğum için başlığın “uyku kalitesini iyileştirmek amacıyla beyne root erişimi elde etme” üzerine bir metafor olduğunu sandım
      Böyle yataklarda, karanlıkta bile dokunarak kullanılabilecek fiziksel kontroller olmasını isterim. Uyumaya çalışırken ayar yapmak için telefonu yüzünün önüne çıkarmak gerekiyorsa, yatak ve şilte üreticilerinin uyku kalitesi için neyin iyi neyin kötü olduğunu gerçekten bilip bilmediğinden şüphe ederim
  • Eight Sleep Pod 3'e de benzer şekilde girmenin bir yolu var [0]. Bazı modellerde değiştirilebilir bir MicroSD kart bulunuyor, bu da ek donanım ihtiyacını azaltıyor
    Buradaki yöntem, kartı olmayan Pod'larda root yetkisi elde etmek için iyi bir yol olabilir. Ancak az önce öğrendiğim şey şu: Eight Sleep, firmware güncellemelerini imzalıyor ama bu güncellemeleri imzalamakta kullanılan özel anahtarı da aynı paketle birlikte gönderiyor
    [0]: https://github.com/bobobo1618/ninesleep

    • İronik biçimde bunu görünce insanın alasısı geliyor. Akıllı cihazı yerel hale getirebilir veya Home Assistant ile kontrol edilir duruma getirebilir ve internet bağlantısını kesebilirseniz, o kadar da kötü görünmüyor
      Elbette 2.000-4.000 dolar pahalı, ama 10 yıl kadar kullanılan tek seferlik bir masrafsa makul. Ama 4.000 dolar ödeyip üstüne bir de aylık 25 dolar vermek saçmalık
  • Eight Sleep'te de aynısını yapan biri var mı merak ediyorum. İnternet kesildi diye yatak sıcaklığını ayarlayamamak gerçekten çok sinir bozucu

    • Bu nasıl yeni bir cehennem? Neden internete bağlanmak zorunda?
    • Bende battaniye işin %95'ini çözüyor, kayak kulübelerinde de ucuz bir elektrikli yatak pedi kalan %5'i hallediyor
    • Eight Sleep almayı düşünüyordum ama böyle bir şey yaptıklarını öğrenince ilgim anında kayboldu. Yatak örtüsüne 1000 dolardan fazla verip bir de ürün çalışsın diye “kira” ödeyecek değilim
  • Sleep Number almayacağım
    Yıllarca havalı yatakta yattım ama üretici Çin'e dış kaynak vermeye başladıktan sonra iç bölmelerin dikişleri iki yatakta da patladı

  • “Bu kılavuzu izlerseniz Sleep Number hub'ının iç dosyalarını değiştirmeniz gerekir ve garantiniz geçersiz olur” gibi saçmalıkların yayılmasını bırakmalarını isterdim
    Nasıl ki “çıkarılırsa garanti geçersizdir” etiketleri hukuken uygulanamazsa, kötüye kullanım veya yetersiz bakım dışında bir ürün garantisini otomatik olarak geçersiz kılan bir şey yoktur
    Akıllı yatak bozulduğunda sadece kontrolcüye dokunmuş olmanız, üreticiyi garanti yükümlülüğünden kurtarmaz. Buna zımni garanti de dahildir. Ürünü tüketicinin bozduğunu, “makul olmayan” şekilde kullandığını veya düzgün bakım yapmadığını kanıtlama yükü üreticiye aittir
    JTAG bağlamaya çalışırken yanlışlıkla 5V'u 3.3V mantık devresine köprüleyip yatağın beynini yaktıysanız, bu sizin sorumluluğunuzdur
    Ama güç kaynağı patladıysa ve kontrolcü bu yüzden bozulduysa, üzerine JTAG header takmış olmanız, göz etiketi yapıştırmanız ve pembe renge boyamanız önemsizdir. Onarmaları gerekir
    Firmware'i değiştirmiş olsanız bile, arızaya bu değişikliğin yol açtığını üreticinin kanıtlaması gerekir
    Dizüstü bilgisayarda oyun oynayıp çok ısındı diye garantinin geçersiz olmasını beklemezsiniz. Firefox kurmanız ya da Linux yüklemeniz de aynı şekilde. Cihaz biraz daha “aptal” diye kuralların değiştiğini düşünmek için bir neden yok

    • Kâğıt üzerindeki hukukla sahadaki hukuk farklıdır. Üretici garanti uygulamayı reddederse müşterinin yapabileceği çok az şey vardır
  • Sıradaki herhalde fidye yazılımı olur. “1000 dolar ödemezsen önümüzdeki bir ay yatağında uyuyamayacaksın”

    • Bu bir sonraki adım değil, abonelik modeli değil mi?
  • Birkaç gerçeğe bakalım
    Sleep Number yataklarında kalp atışını algılayan sensörler var. Bunu havalı yatağın içindeki basınç farklarını algılayarak yapıyorlar. Esasen bir mikrofon gibi ve oldukça hassas

    • Gerçekten basınç sensörüyle kalp atışı algılanabiliyor mu? Gürültü çok fazla olur da veri kullanılamaz sanırdım
      Bakınca, oldukça makul istatistiksel analizlerle birleştirip yeterince doğru veri elde edebildikleri anlaşılıyor. İlginç