Sleep Number yatağa root erişimi elde etme yöntemi
(dillan.org)- 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/scriptskullanı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
minicomkullanılabilir - Windows’ta PuTTY kullanılabilir
- Linux ve Mac’te
- 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 -aile yedeklenmelidir- Varsayılan değerleri geri yüklemek gerekebileceği için mevcut ortamla farklar kaydedilmelidir
bootcmdiçindenrun set_bootargs;bölümü kaldırılarak boot argümanlarının elle ayarlanması sağlanır/initbetiği hash’lenmiş bootrom’da bulunduğu için doğrudan değiştirilemez; bu nedenle/initiçeriği çalışma zamanındabootargsile değiştirilir- Varsayılan betik,
let_me_rootifadesiyle çözülen şifreli bir dosya arar - Şifre çözme satırı, çözülmüş değerle değiştirilerek şifreli dosya gereksinimi atlatılır
- Varsayılan betik,
- İlk boot için içinde
let_me_rootdosyası 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
- Boot sonrasında konsolda
- Ardından root partition okuma/yazma modunda yeniden mount edilir ve USB olmadan da erişimin sürmesi için
/root/let_me_rootdosyası 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_keysdosyasına eklenir - Bağlanılacak yerel makinede SSH anahtarı oluşturulmalıdır
- Örnek komut
ssh-keygen -t ed25519’dir - Açıklama cümlesinde
ecdsaanahtarı önerilse de gerçek örneked25519kullanır
- Örnek komut
- Açık anahtar eklendikten sonra bağlantı
ssh root@$hub_ip -i <path to id_ed25519>biçiminde test edilir - Bağlantı olmazsa
authorized_keysbiç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
simpleHTTPServerpaketine sahiptir
script_server.py, 8000 portunda HTTP sunucusu açar ve/bam/scriptsiçindeki betikleri çalıştırır- URL yolu betik adı olur
- Birden fazla
argsorgu 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.dbetiği eklemek gerekir
Yeniden başlatma sonrası otomatik çalıştırma ayarı
- Çalışan OS instance’ı, bootloader’ın
/initbetiğinin oluşturduğu chroot içinde çalışır - Birçok sistem dosyası
tmpfspartition’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
/etcdosyaları değiştirilebilir script_server.shbiçiminde bir init betiği oluşturulup Hub’a kopyalanır, ardından orijinal root partition’dakitmp/etc/init.diçine yerleştirilir- Başlangıç ve kapanış zamanlarında çalışması için
rc0.d,rc3.d,rc4.d,rc5.d,rc6.diçine sembolik bağlantılar eklenir - Yeniden başlatma sonrası tarayıcıdan
http://$hub_ip:8000/bamstatadresine 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=XXXXbiçiminde geçirilir - Sleep Number değerleri sorgulanabilir ve ayarlanabilir
PSNL,PSNR: yatağın sol ve sağ tarafındaki son ayar değerlerini sorgulamaPSNl,PSNr: yatağın sol ve sağ tarafındaki mevcut değerleri sorgulamaPSNX: iki tarafın son ayar değerlerini ve mevcut değerlerini sorgulamaPSNS&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ı sorgulamaSPAU&arg=on: gizlilik ayarını açma,offile kapatmaLBPL,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ı sorgulamaLRLE&arg=on,LRRE&arg=off: sol/sağ Responsive Air ayarını değiştirmeMFST: baş ve ayak pozisyonunu sorgulamaMFUL,MFUR,MFFL,MFFR: sol/sağ baş ve ayak pozisyonunu ayarlamaMFO3,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/ayarlamaSBAS: yatak referans değerlerini ayarlama
/bio?arg=help, çalıştırılabilir komutların listesini gösterirhelpçağrısına ikinci argüman olarak komut eklenirse ilgili komutun ayrıntılı bilgisi çıkar
biobetiğinde foundation preset, horlama ayarı, DualTemp kontrolü ve durum bilgileri de bulunurfactory resetveya radio kontrolü gibi yıkıcı komutlarda dikkat gerekir- Yazarın kullandığı
biosürümündeMFSOöğesinin sırasıLISTiç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
/bamkö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
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
Ö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
“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
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 ;)
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
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
“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”
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
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
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
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
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
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
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
Sıradaki herhalde fidye yazılımı olur. “1000 dolar ödemezsen önümüzdeki bir ay yatağında uyuyamayacaksın”
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
Bakınca, oldukça makul istatistiksel analizlerle birleştirip yeterince doğru veri elde edebildikleri anlaşılıyor. İlginç