- Firmware dosyası açıldığında cihazın iç yapısı kolayca incelenebiliyordu ve Rodecaster Duo'da SSH varsayılan durumda açıktı
- Güncelleme paketi gzipped tarball biçimindeydi; cihazda, hasar durumunda diğer tarafa önyükleme yapan iki bölüm ve güncelleme için kabuk betikleri bulunuyordu
- Gelen firmware için imza doğrulaması yoktu; gerçek SSH erişimi Ethernet bağlantısı üzerinden doğrulandı ve yalnızca pubkey kimlik doğrulamasına izin veriliyordu
- Windows'ta USB güncelleme akışı yakalanarak güncelleme moduna girişin ve flashlama işleminin
MveUadlı tek ASCII komutları ile yapıldığı görüldü;archive.tar.gzvearchive.md5kopyalandıktan sonra yeniden başlatmayla yeni firmware yükleniyordu - macOS'ta özel firmware ile SSH parola kimlik doğrulaması etkinleştirildi ve açık anahtar eklendi; böylece gerçek bağlantı da mümkün oldu, ancak SSH'nin varsayılan etkin gelmesinin ve varsayılan anahtarların neden eklendiğinin nedeni sonuna kadar açıklığa kavuşmadı
Firmware güncellemesi ve SSH'nin varsayılan etkin olması
- Rodecaster Duo, firmware güncelleme sürecinde cihaza aktarılan dosyaların kolayca incelenmesine izin veriyordu ve varsayılan durumda SSH etkin geliyordu
- macOS'ta disk etkinliği izlenerek firmware'in saklandığı konum bulundu; firmware basit bir gzipped tarball biçimindeydi
- Güncelleme denenirken cihazda USB disk yazma işlevi devre dışı olduğundan bu güncelleme başarısız oldu
- Cihazın içinde çalıştırılabilir ikililer ve güncelleme için kabuk betikleri vardı; diskte iki bölüm bulunuyordu, böylece biri bozulursa diğeriyle önyükleme yapılabiliyordu
- Gelen firmware için imza doğrulaması yok
- Ethernet kablosu bağlanarak yapılan kontrolde SSH'nin gerçekten açık olduğu ve yalnızca pubkey kimlik doğrulamasına izin verdiği görüldü
- Varsayılan olarak eklenmiş iki SSH anahtarı tespit edildi
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
Güncelleme akışı ve özel firmware
- Windows'ta Wireshark ve USBPcap ile güncelleme trafiği yakalanarak RODECaster App'in cihaza gönderdiği kontrol akışı incelendi
- Cihazı güncelleme moduna alan 'M' komutu ve güncellemeyi çalıştıran 'U' komutu vardı
- Her iki komut da HID report 1 üzerinden gönderilen tek bir ASCII karakteriydi
- Gerçek güncelleme yapısı basitti
Mkomutu gönderildikten sonra yeni görünen diskearchive.tar.gzvearchive.md5kopyalanıyorduarchive.md5, arşivin md5sum değeriydi- Ardından disk unmount edilip
Ukomutu gönderildiğinde flashlama başlıyor, sonrasında cihaz yeniden başlatılarak yeni firmware ile açılıyordu
- macOS'ta konteyner kullanılarak SSH parola kimlik doğrulamasını açan ve kendi açık anahtarını authorized keys içine ekleyen bir özel firmware oluşturuldu
- Flashlama için gereken en küçük işlev örneği burada görülebilir
- Betik çalıştırılıp flashlandıktan sonra cihaza SSH ile bağlanmak mümkün oldu
- Bu cihazda firmware'i flashlamak son derece kolaydı; SSH'nin varsayılan etkin olması ve varsayılan anahtarların dahil edilmesinin nedeni ise doğrulanmadan kaldı
- Bu sorun RODE'a bir ticket ile iletildi ancak yanıt alınmadı
- Sonraki firmware güncellemelerinde bir değişiklik olup olmadığı izlenmeye devam edilecek
1 yorum
Hacker News yorumları
Varsayılan olarak doğrulamayı açık tutmak sorun değil, ama donanımı satın alan kişinin kendi anahtarını kaydedebilmesi, bir jumper değiştirebilmesi ya da açılışta bir düğmeye basabilmesi gibi yollarla sahip denetimini alabilmesi gerekir.
Bunu gerçekten yapan yerler birkaç Chromebook ve ağ cihazıyla sınırlı olduğu için, firmware güvenliği gündeme gelince iş hep "tam kilitleyelim" ile "tamamen açık bırakalım" kavgasına dönüyor ve parayı veren kullanıcının karar verdiği yapı ortadan kayboluyor.
Rode'un bunu tarball + hash ile dağıtması çok iyi; ileride daha sıkı hale getirse bile, umarım elimdeki cihaza istediğim şeyi yükleyebileceğim bir yol bırakır.
Keşke bu kadar açık daha fazla cihaz olsa ve umarım Rode bunu görüp firmware yükseltmelerini kilitlemez.
Lütfen bunu değiştirmeyin.
Yazıcı yaklaşık 2009 modeldi ve RAM'i 256MB'a çıkarmak için firmware güncellemesi gerekiyordu; ağ üzerinden yazıcıya tarball'ı FTP ile göndermek yeterliydi.
FileZilla ile attım, birkaç dakika çalıştı ve güncelleme hemen bitti; o günden sonra firmware güncellemesinin neden bundan daha karmaşık olması gerektiğini sorgulamaya başladım.
Güvenlik için en fazla checksum kontrolü yapılsa bile, tek bir blob'u FTP, SCP ya da SFTP ile yükleyip işin bitmesine izin verseler keşke.
Bir tür DFU mode'a geçmeden olmamalı; yoksa USB'ye erişebilen herhangi bir şey yanlış firmware'i itip cihazı kullanılmaz hale getirebilir.
10-20 yıl önce olsaydı bu tür işlevler muhtemelen küçük bir 16 bit ya da 32 bit SoC üzerinde VxWorks gibi bir RTOS ile uygulanırdı.
Üzerinde çok sayıda fiziksel kontrol de olduğuna göre, bir sonraki adımın onu oyun konsoluna çevirmek olması doğal görünüyor.
Üstelik iki tane 1GbE portu bulunuyor ve her biri makinenin farklı bir parçasıyla haberleşiyor.
Ama bu tür kurulumlar profesyonel ses dünyasında o kadar da sıra dışı değil; ev masasının üstünde kullanınca etkileyici duruyor, fakat sektör içinde oldukça sıradan sayılır.
Sonradan root shell alınınca ya da cihaz tuğlaya dönünce hikâye daha da ilginç olabilir.
maliyet ve uyumluluk açısından Linux'u geçmek de kolay değil.
Genelde altta bir ARM SoC üzerinde çalışan minimal bir Linux bulunuyor ve vendor BSP bazen yanlışlıkla sshd açık şekilde gönderiliyor.
Bu daha çok kötü niyetten ziyade, ses tarafında rootfs'den gerçekten sorumlu birinin olmamasına benziyor.
Asıl mesele bunun yalnızca USB tarafındaki ağda mı açık olduğu, yoksa gerçek LAN üzerinde de mi dinlediği.
İlki can sıkıcı seviyede, ikincisi ise gerçekten endişe verici.
Buna karşılık Android'de eng / userdebug / user gibi varsayılan imaj türleri ayrılmış durumda; bu yüzden önceden yapılandırılmış doğru varsayılanı seçmek bile bu tip hataları önlemeyi kolaylaştırıyor.
Yalnızca belirli bir işlev kullanılırken Wi‑Fi'ye bağlandığı için, o arayüzde de açık olup olmadığını kontrol edemedim.
Bir ajana veriyorsun, birkaç dakika içinde firmware'e bakıp cihazı modifiye etmek için bir yaklaşım çıkarıyor.
Geçen yıla kadar bunlar ya en az Hotz seviyesinde bir hacker'ın ya da çok uzun süre inatla kurcalayacak birinin yapacağı işlerdi.
LLM'lerin analiz, debug ve bypass işlerini çok daha kolaylaştırdığı doğru, ama bu cihazın koruma seviyesi o kadar düşüktü ki orta seviye becerisi olan biri bile yeterli motivasyon ve zamanla bunu rahatça yapabilirdi.
Ne şifrelenmiş firmware vardı, ne imza kontrolü, ne de gömülü SSH access eksikti.
Buna karşılık George Hotz'un kırdığı PS3 hypervisor, saldırgan açısından çok daha sağlam tasarlanmıştı ve gerçek exploit için FPGA ile voltage glitching bile gerekmişti.
O tür saldırılarda LLM yardımcı olabilir ama tam bir geri bildirim döngüsü olmadığı için hâlâ ciddi insan emeği gerekiyor.
https://rdist.root.org/2010/01/27/how-the-ps3-hypervisor-was-hacked/
Wireshark kurulu değilse biraz zaman kazandırabilir ama bir miktar halüsinasyon riski de var.
Bunun dışında Docker içinde firmware tarball'ındaki
~root/.ssh/authorized_keysve/etc/shadowdosyalarını değiştirmek, ilgili HID mesajlarını yollamak ve modifiye edilmiş tarball'ı cihazın USB sürücüsü gibi sunduğu volume'a kopyalamak için basit bir Python betiği kullanılmış.Yani bu iş çılgın seviyede bir hacker gerektirmiyor; Linux sysadmin temelleri ve USB HID kütüphanesi kullanarak ufak bir program yazabilecek düzey yeterli.
Yalnız Ubuntu container'a neden
whoispaketini kurduklarını bir an merak etmiştim; Debian türevlerinde mkpasswd tarihsel nedenlerle onun içinde olduğu için anlam kazandı.Ayrıca cihazın
sshd_configdosyası varsayılan hâliyle duruyorsa,PermitRootLoginyüzünden root parola girişi zaten baştan mümkün olmamış olabilir.https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=116260
Credo 50'yi IQ250 gibi gösterdim; içleri zaten fiilen aynı.
Derine inmenin eğlencesi ayrı ama yaş ilerledikçe rastgele firmware blob'larıyla 16 saat geçirmek zorlaşıyor.
Ayrıca SSH açık bir cihazla uğraşmak için özel bir beceri de gerekmiyor.
Özellikle aynı odada oyun oynayıp Discord kullanırken benim ve kız arkadaşımın kendi bilgisayarlarımıza mikrofon bağlayıp eko olmadan kullanmak istememiz kısmı buna çok benziyor.
İkisi de aynı Discord görüşmesine katılır; iki mikrofonu tek bir bilgisayar girişinde birleştirip gönderirsin, diğer kişi ise mikrofonunu mute edip istemcide sadece sesi alır.
Mix yerelde yapıldığı için eko oluşmaz.
Daha fazla ayrıntı istersen e-posta at demek isteyecek kadar basit.
Gecikme yaklaşık 40ms, Wi‑Fi üzerinden ise 50-60ms civarında.
Bir PC'de mikseri çalıştırıp yerel mikrofonu bir giriş kanalı olarak alırsın; diğer PC ise kendi mikrofonunu yayınlayıp mikserde kanal 2'ye gönderir, böylece benzer şekilde çözülebilir.
Yerel PC'de müzik de çalınabilir ve mixer ya da broadcaster yerel bir sink oluşturabilir.
En sonda her şey mixer'de birleşir; ana çıkış Discord'a gider, monitör hattı da Discord sesini çıkarıp diğer PC'ye tekrar relay ederek gerçek zamanlı dinleme için kullanılabilir.
Tabii durumu yanlış anlamış da olabilirim.
Zola'yı pek bilmiyorum ama bunun yaygın bir tema mı yoksa özel bir şey mi olduğunu anlamasam da çok hoş görünüyor.
Sanırım signed image zorlamalarının nedeni de bu.
Böyle bir arayüz için insan tam tersine açık kalmasını ister gibi geliyor.
Sonuçta burada neredeyse İngilizce benzeri bir şey de konuşuyoruz, yani bir şekilde anlaşılır herhâlde.