- İki siber güvenlik öğrencisi, eğlence ve meydan okuma için çamaşır makinesi hackleme girişiminde bulundu
- Çamaşır makinesinin mobil uygulamasını tersine mühendislikle analiz ederek API ve şifreleme yöntemini incelediler
- XOR şifreleme anahtarını bularak çamaşır makinesi durum verilerini gerçek zamanlı olarak okuyup çözümleyen bir yöntem geliştirdiler
- Discord webhook kullanarak, çamaşır makinesinin çalışma durumu ve tamamlanma bildirimlerini otomatikleştiren bir bildirim botu yaptılar
- Gelecekte diğer "aptal" ev aletlerine de benzer şekilde akıllı ev otomasyonu uygulamayı planlıyorlar
Giriş
- Yazar, yeni taşındığı evde bir arkadaşıyla birlikte çamaşır makinesi hackleme projesi yürüttü
- Amaç saf kullanım kolaylığından çok eğlence ve teknik meydan okumaydı
- Çamaşır makinesi ve diğer ev aletlerini akıllı ev sistemine bağlama merakı çıkış noktası oldu
- Doğrudan hackleyerek kazanılan deneyim, gerçek dünya tersine mühendislik pratiğine de yardımcı oldu
Arka plan
- Evde varsayılan olarak Wi-Fi destekli akıllı bir çamaşır makinesi bulunuyordu
- Bu çamaşır makinesi, mobil uygulama üzerinden ilerleme bildirimleri gönderebiliyordu
- Aynı anda yalnızca bir kişi uygulamayla eşleyebildiği için paylaşım kullanışsızdı
- Bunu bir fırsat olarak görüp, uygulamanın kısıtları olmadan birden fazla kişinin durum bildirimi almasını sağlamaya karar verdiler
Kapı zili örneği
- Evin kapı zili, 433MHz kablosuz sinyal ile bildirim gönderen bir sistemdi
- Yazarın arkadaşı, kapı zili sinyalini algılayıp Discord sunucusuna bildirim gönderen bir sistem yaptı
- Bu sistem, gerçek kapı zili sesinin yanında yedek bildirim olarak da kullanıldı
- Bu başarılı örneği gördükten sonra çamaşır makinesi için de aynı şekilde otomatik bildirim entegrasyonunu denemeye karar verdiler
Plan ve hazırlık
- Yazar, API'nin nasıl çalıştığını anlamak için mobil uygulamayı reverse engineering ile incelemeye karar verdi
- Akıllı çamaşır makinesinden doğrudan ağ trafiği yakalamak için OpenWRT yönlendirici kullandı
- Çamaşır makinesini geçici bir Wi-Fi ağına bağlayarak paket yakalama ile iletişim desenlerini analiz etmeyi denedi
Çamaşır makinesi trafiğinin analizi
- Çamaşır makinesi; kendi IP'si, 255.255.255.255 (broadcast), harici sunucular (HTTP API, şifreli trafik) ve uygulamayla doğrudan HTTP iletişimi (port 80) gibi çeşitli yollar üzerinden trafik gönderip aldı
- Özellikle mobil uygulamayla doğrudan iletişim kuran bölüme odaklanıp bunu ayrıntılı biçimde analiz ettiler
Çamaşır makinesi API'sinin tersine mühendisliği
- Uygulama sürekli olarak iki endpoint kullanıyordu: /http-read.json?encrypted=1 (durum okuma) ve /http-write.json?encrypted=1 (komut gönderme)
- Asıl ilgi okuma endpoint'indeydi ancak yanıt verisi şifreliydi (HEX, HTML tipi)
- Query parametresi olarak
encrypted=0 verilse bile yalnızca çözümleme başarısızlığı ya da 400 hatası alındı
Şifreleme analizi ve anahtarı bulma
- Bunun XOR tabanlı basit bir şifreleme olduğu tahminiyle, CyberChef gibi çevrimiçi araçlarla brute force denemeleri yapıldı
- Referans proje (CandySimplyFi-tool) içinde anahtar çıkarmayı başarmış bir kod bulundu ve bu sayede birkaç saniye içinde anahtar geri kazanılıp veri çözüldü
- Veri şemasını daha iyi anlamak için ofalvai/home-assistant-candy açık kaynak koduna da başvuruldu
Çamaşır makinesi durum değerleri deneyi
- Program değiştirme, sıcaklık ve devir ayarı, çalıştırma/durdurma/bitirme gibi çeşitli fiziksel işlemler sırasında verideki değişimler gözlemlendi
- Durum değerlerindeki başlıca alanlar:
- Pr: program seçim düğmesinin durumu
- PrPh: devam eden yıkama döngüsü
- Temp: ayarlanan sıcaklık
- SpinSp: ayarlanan sıkma devri
- RemTime: kalan süre (dakika; bazen 10 dakikada sabit kalma durumu olabiliyor)
- Dezavantaj: bazı değerler (ör. SpinSp) gerçek değerle farklı olabilir
Bildirim otomasyonu betiğinin geliştirilmesi
- Çamaşır makinesi API şeması, şifreleme anahtarı, veri okuma ve çözümleme ile durum tespiti tamamlandı
- Discord webhook kullanan bir bildirim botu betiği geliştirildi
- Temel çalışma sırası:
- Çamaşır makinesini poll et
- Durum değişikliği yoksa uykuya geç ve tekrar et
- Değişiklik algılanırsa son mesajı güncelle veya yeni mesaj gönder
- Tekrar et
Kapanış ve gelecek planları
- Kapı zili ve çamaşır makinesi bildirim otomasyonunda şimdiden başarı sağlandı
- İleride bulaşık makinesi, kurutucu, TV gibi cihazlara da benzer otomasyonlar (akıllı priz, titreşim sensörü, IR blaster) uygulamayı düşünüyorlar
- Webcam kullanarak basit bir güvenlik sistemi de denemeyi planlıyorlar
Sonuç
- Bu proje deneyimi sayesinde gerçek dünya IoT tersine mühendisliği ve basit akıllı ev hackleme konularında temel bilgi kazanıldı
- Hem pratiklik hem de eğlence sunan bir örnek oldu
1 yorum
Hacker News görüşleri
Öncelikle bunun asıl yazıya bir eleştiri olmadığını belirteyim; bence gerçekten ilginç bir cihaz analiz sürecini harika şekilde anlatmış
Cihaz Android uygulamasıyla iletişim kuruyorsa, apk-mitm öneririm
Bu araç, APK içindeki bilinen sertifika pinning yöntemlerinin neredeyse tamamını kaldırıyor ve manifest dosyasını yeniden yazarak root olmadan yerel sertifikaların kullanılmasını sağlıyor
Orijinal uygulamayı kaldırıp apk-mitm çıktısını sideload ederseniz, normal stok cihazlarda mitmproxy kullanabilirsiniz
Bir diğer önemli nokta da şu: uygulamaya şifreli veri gönderiliyorsa ve uygulama bunu çözüp gösteriyorsa, anahtar ya uygulamanın bir yerindedir ya da bir yerden alınıyordur
APK’yi jadx ile incelerseniz neredeyse Java kodu biçiminde görebilirsiniz; bazen anahtarı da bulabilirsiniz
Ama bazı üreticiler şifreleme işlemini native koda taşıyor; o durumda Ghidra gibi araçlarla tersine mühendislik yapmak gerekiyor
Bu süreç bazen inanılmaz sıkıcı, bazen de aşırı eğlenceli olabiliyor
Yazarın mevcut başka insanların araştırmalarından yararlandığını biliyorum ama kimsenin daha önce yapmadığı bir iş olsa bile vazgeçmeden denemeye kesinlikle değer diye düşünüyorum
Sonuçta size ait bir cihazın nasıl çalıştığını ortaya çıkarırken çok şey öğreniyorsunuz
Sonunda bir noktada sunucu erişimi engellendi ve sertifika pinning konusunu tesadüfen öğrenince bu repo’yu denedim; gerçekten tertemiz çözdü
Eski reklam URL’si de gitmiş olmalı ki reklamlar da görünmez oldu
Geliştirici şirket zaten uygulamayı giderek daha kötü hale getirmeye odaklanmış gibiydi, o yüzden hiç üzülmedim
Ben Bosch çamaşır makinesini farklı bir amaçla kullanıyorum (asıl yazıdakinden farklı olarak): evin öbür ucundayken makinenin durumunu izlemek için
Bosch API sayesinde yıkama döngüsünün bitip bitmediğini ve kapağın açılıp açılmadığını anlayabiliyorum
Şu anda temel API sürümünü kullanıyorum ama PoC tamamlandı; ileride yerel barındırma seçeneğine geçmeyi planlıyorum
Home Assistant ile döngü bittiyse ama kapak açılmadıysa, bu hâlâ içeride ıslak çamaşır olduğu anlamına geliyor
Bu yüzden her 15 dakikada bir telefonuma ve yalnızca eşim evdeyse onun telefonuna da çamaşır bildirimi gidecek şekilde ayarladım
Çok basit ve kusursuz çalışıyor
Benim çamaşır makinem 90’lardan kalma eski bir model, bu yüzden zamanlayıcı düğmesine göre çalışıyor
Bilgisayar ya da sensör yok; sadece su alma aşamasını ayrıca algılıyor
Her zaman 40 dakikalık zamanlayıcıyı ayarlıyorum ve iş bitiyor; alarm kapatma özelliği de var, bundan daha basit olamaz
Ben de benzer bir şeyi küçük bir fırına uygulamayı planlıyorum
API ya da bağlantı özelliği yok ama akıllı prize takıp güç tüketimini ölçerek bekleme/çalışma durumunu izleyip bildirim verme fikri var
Yatmadan önce çamaşır çalıştırıp ertesi güne bıraktığım sık oluyor ama benim makinemde çamaşırları gece boyunca taze tutan “extended tumble” benzeri bir özellik var
Biraz daha fazla su harcıyor ama akşam rutinimi kurtarıyor ve gece saatlerinde elektriği kullanmaya da yardımcı oluyor
Electrolux’ümü gerçekten seviyorum; muhtemelen diğer markalarda da benzer bir özellik vardır
Ben 15 yılı aşkın süredir G-Shock 5600 saatimi çamaşır zamanlayıcı uyarısı için kullanıyorum
Yıkamayı başlatırken toplam süreyi saatin zamanlayıcısına ayarlıyorum; bitince bip sesiyle haber veriyor
API olsun olmasın, marka fark etmeksizin kullanılabiliyor
Gerçekten zarif bir çözüm
Basit bir mantık ama günlük hayatta somut fayda sağlıyor
Ben de bu sıralar bir buzdolabının donanımını hack’liyorum
Yazılım değil; kamp aracı için pahalı bir buzdolabı ve gaz/12v/220v desteği var
Elektronik kontrol bölümünde yangın çıktı; kablolar ve iç kısımlar zarar gördü ama buzdolabının kendisi sağlam
Madem bütün parçaları değiştirmem gerekiyor, 250 dolar verip yeni bir kontrol kartı almak yerine eski gaz kazanı parçalarını bir araya getirip yeni bir sistem kurmayı düşünüyorum
Kazan anakartında ateşleme sistemi zaten mevcut; mantığı ve güvenlik kısımlarını doğru kurarsam gaz modunda çalıştırabilirim gibi görünüyor
Böylece yeni bir buzdolabı almam gerekmeyecek ve 9 yaşındaki oğluma elektronik öğretmek için de güzel bir proje olacak
Elbette gaz olduğu için tehlikeli olabilir ama sonuçta hep eğlenceli oluyor ve hack bitince eleştiriler de kayboluyor
İlgilenirseniz tüm süreci ayrı bir gönderi olarak da paylaşabilirim
Ben çamaşır makinesi/kurutucuya Zigbee titreşim sensörleri bağlayıp Home Assistant ile kullanıyorum
Akıllı priz üzerinden akım/voltaj izleme yöntemini hiç düşünmemiştim; iyi fikir gibi geldi
Basit tetikleyici koşullarıyla makinenin başlama/bitiş anında panel güncellemesi ve e-posta bildirimi otomatik çalışıyor
Uygulama ve Bluetooth özellikleri de var ama uygulama telefonumun kamerasına, sesine ve rehberine erişim istediği için kullanmayı düşünmüyorum
HA entegrasyonu için aşağıdaki bağlantıda da bir şeyler yapılmış gibi görünüyor
https://github.com/home-assistant-HomeWhiz/home-assistant-HomeWhiz/blob/main/README.md
Bence tam da bu tür yazılar Hacker News’in özünü oluşturuyor
Keşke gerçek hacking’e, yani hobi amaçlı modifiye işlerine dair daha fazla yazı olsa; son zamanlarda her yer AI/LLM konuşması gibi geliyor
Bu tür donanım hack’lerini seviyorsanız https://hackaday.com/ sitesini de şiddetle tavsiye ederim
Root edilmemiş Android’de kişisel sertifika kurmak biraz zahmetli
Yalnızca sistem sertifika deposuna eklenebiliyor ve genelde Magisk modülü gerekiyor
Daha kolay yöntem, PC’de eski bir Android emülatörü çalıştırıp sertifikayı oraya eklemek ve trafiği Burpsuite ya da mitmproxy’ye yönlendirmek
Cihaz değiştirmenize de gerek kalmıyor
APKLab ya da Jadx ile uygulama kodunu inceleyerek anahtar türetme algoritmasını bulabilirsiniz gibi geliyor
Uygulama ile çamaşır makinesi yalnızca aynı ağdayken mi çalışıyor, merak ettim; o kısmı sevdim
“3 saatlik” (gerçekte 4-5 saat) bir yıkama döngüsü lafı beni şaşırttı
Benim makinemde normal eco modu 30 dakikadan bile kısa sürüyor ve bittiğinde çok yüksek sesli bir uyarı veriyor
Kısa döngü ile bildirim birleşince ayrıca karmaşık bir teknik çözüme ihtiyaç kalmıyor
Muhtemelen yorum yapan kişi ABD’dedir
Avrupa’daki çamaşır makineleri daha düşük su/elektrik tüketimi gereksinimleri yüzünden daha uzun sürüyor
Yazıdaki cihaz da yıkama+kurutma kombinesi olduğu için daha da uzun sürüyor gibi
Bizim evde normal mod bile 104 dakika sürüyor; fazla doldurulursa 3 saate kadar çıkabiliyor
Uzun döngüler, enzimli deterjan ve aktif oksijenli ağartıcı bileşenleri kullanıldığında mikropları gidermede daha etkili oluyor
30 dakikalık program çamaşırı adeta sadece “durulamak” gibi
https://pubmed.ncbi.nlm.nih.gov/25207988/
Benim kurutucum kanalsız bir model (açıkçası tam bir dert), bu yüzden 3 saat sürüyor
Yıkamadan kurutmanın sonuna kadar toplam 4,5 saat gidiyor
Kullandığım cihazlar arasında beni en çok hayal kırıklığına uğratan bu oldu
Bazen doğru düzgün kurutmuyor bile
Ortada bir şifreleme görünmediğini belirtmiş
İlk ekran görüntüsündeki (
cyberchef.avif) input penceresindeki verinin basit, şifrelenmemiş hex ASCII olduğunu söylüyorÖrnek olarak 7D’nin
{, 0D0A’nın CRLF, 09’un TAB, 22’nin"anlamına geldiğini göstermişYani bunun zaten çözümlenmiş düz metin olduğunu, XOR şifreleme açıklamasının buna uymadığını düşünüyor
Ayrıca ekran görüntüsündeki anahtar değerinin de bayt sınırları ve hizalama açısından tutarlı görünmediğini, gerçek girişteki boşluklarla da örtüşmediğini söylüyor
Bu yüzden ekran görüntüsünün sonradan oynanmış ya da düzenlenmiş olup olmadığını sorguluyor
Neden böyle olduğunu, orada tam olarak ne yaşandığını merak ettiğini söylüyor
“For now, I plugged this key into CyberChef, and was able to decrypt the data.” ifadesiyle işaretlenen görsel bağlantısının bozuk olduğunu bildiriyor
Belirli HTML öğesini ve ilgili bağlantıyı da ayrıntılı biçimde paylaşıyor
“Çamaşır makinesi kendi kendisiyle aşırı derecede iletişim kuruyordu” kısmı için, bunun ağ yığını tasarımcısının loopback arayüzü kavramını bilmemesinden kaynaklanmış olabileceğini söylüyor
Kendi IP’sine çok sayıda paket göndermiş, ayrıca 255.255.255.255 adresine de saniyede paket yolluyormuş; ama yazar bununla pek ilgilenmemiş
IoT cihazlarda buna sık rastladım; bazen IP çakışması ya da değişimini tespit etmek için kullanılıyor
Ben de benzer düşünüyorum