Ölü bulut kamerayı ağdan root’ladım (sonra bir yerlerini bozdum — dürüst hikâyesi)
Herkesin evinde vardır: bir zamanlar çalışmış, üreticisi uygulamayı bırakmış, şimdi “çöp mü atsak” dedirten bir cihaz. Benimki bir GT111A Wi-Fi PTZ kameraydı — Anyka AK3918E çipli, bulut uygulamasıyla çalışan, dönen başlıklı ucuz bir kamera. Uygulama ölmüştü; donanım sapasağlamdı ama yazılım onu esir almıştı. Karar verdim: bu kamerayı bulutsuz, uygulamaya muhtaç olmadan, tamamen yerel çalışacak hale getirecektim. Vida bile sökmeden.
Şifre avı ve ölüm
İlk kapı telnet ve FTP’ydi. Kırk beş farklı varsayılan şifre denedim — hepsi “Login incorrect” ile öldü. Bir hafta sonumu sözlük saldırısıyla geçirdikten sonra fark ettim ki yanlış kapıyı kılıçla zoruyorum. Kapı başka yerdeydi.
Kaynak kod her şeyi anlatıyor
Çip ailesinin SDK kaynak kodu internette duruyordu. Okumaya başlayınca çıkacaklar çıkıtı: kameranın içinde daemon adında bir servis TCP 6789 portunu dinliyordu — üreticinin fabrika test hattı, üstüne hiçbir kimlik doğrulaması yok. Yani üretici kameraya koca bir kilit koymuş, sonra test için arka kapıyı açık bırakıp hattan çıkmış.
Telgrafı çözmek
Daemon’ın konuştuğu dil, hex dökümleriyle saatlerce oturduktan sonra netleşti: dosya adı ve argüman taşıyan, sağlama toplamıyla biten bir telgraf. Kamera “bu dosya var mı?” sorusunu cevaplarken komut çalıştırıyordu — root olarak. Dört günlük yanlış başlangıçtan (kamerayı iki kez çökerttim; dahili tampon taşmasını çözmek bir gecemi aldı) sonra kazanan atış şu oldu:
# dosya adi: ../../bin/busybox
# arguman: tcpsvd 0 2327 /bin/sh #
# sondaki # neydi? daemon'in komutun sonuna ekledigi
# "/var/stat &" parcasini yorum satirina ceviriyordu.
# sonuc: kamera 2327 portunda sifresiz root kabugu aciyor.
uid=0(root) çıktısını gördüğüm an odada tek başıma alkışladım.
Zafer gecesi
Root’tan sonra SD karta açık kaynak yazılımlar yükledim: RTSP sunucusu, PTZ daemon’u, web arayüzü. Ve o akşam kameram bulutsuz, yerel ağda canlı yayındaydı: rtsp://kamera:554/vs0 — H.264 720p, ses dahil. Tarayıcıdan “sola dön” dediğimde kameranın başı, I2C hattından konuşan motor MCU’suyla fiziksel olarak döndü; öncesi ve sonrası çektiğim iki karede kadraj kaymıştı. Üç gün uğraştığım cihaz ilk kez kendi iradesiyle başını çeviriyordu. Hobi denince kastedilen buydu.
Ve felaket
İnsanın aklına hemen şu gelir: “kalıcı olsun.” Tam flash yedeğim vardı, rootfs bölmesine dokunmama planım vardı, kurtarma senaryolarım vardı. Yamalı firmware’i kameranın kendi resmi güncelleyicisiyle flash’ladım. Kamera güncelleme melodisini çaldı, yeniden başladı, bir kez Wi-Fi’a bağlandı — ve sonra sonsuza dek sustu. Açılış döngüsü. Yedek elimdeydi ama onu yazacak donanım (UART çevirici, flash klipsi) elimde değildi. USB kablosuyla kurtarma modunu denedim: bu cihaz sınıfında micro-USB sadece şarj çekiyormuş, veri hattı çipe bağlı bile değilmiş. Kısası: dört gün uğraşıp dirilttiğim cihazı, kendi ellerimle ikinci kez öldürmüştüm.
Dersler (bedava, kanlı canlı)
Felaketin tek tesellisi derslerin satın alınmış olmasıydı. En sert üçü:
1. Prova, gerçek koşulların provası değildir. Elle çalışan betik, açılışta çalışan betik değildir — boot anında her şey aynı anda kalkar; prova ortamında zaten ayaktaydılar. (“Prova yanılsaması” — artık repomda kavram olarak yaşıyor.)
2. Yedeğin olması yetmez; onu yazacak elin de olmalı. Kurtarma donanımını flash’tan önce al. Kargonun gelmesini bekleyen yedeğe “sigorta” denmez, “anıt” denir.
3. Flash’ı her zaman en sona bırak. Önce her iki senaryoyu gerçek açılışta izle. Ve gece 03:00’ten sonra kalıcı yazma yapma — bu maddenin bedeli bir kameraydı.
Peki kamera öldü mü?
Hayır — donanım erişimiyle kurtarılabilir durumda bekliyor; tam 8 MB’lık fabrika yedeği, UART kılavuzu ve kurtarma planı masada. Asıl kazanım ise yol haritası oldu: proje, iki dilli dokümantasyonla (adım adım rehber + 17 bölümlük tecrübe günlüğü + 11 güvenlik açığı analizi) GitHub’a yayımlandı ve yayınlandığı gün tarayıcılar tarafından bulunup Vulners ve Sploitus gibi güvenlik veritabanlarına kaydoldu. Çekmeceden çıkan bir çöp kamera, uluslararası güvenlik literatürüne girmişti.
Ve asıl mesaj şu: satın aldığın cihazın donanımı senin; yazılımına mahkûm olmak zorunda değilsin. Ölü bulut, terk edilmiş uygulama, kilitli firmware — bunların hepsi kurtarılmayı bekleyen donanımdır. Kendi çekmecenize bakın. Zaman kaybı değil, zaman yatırımı.
Kod ve dokümanlar: github.com/4onurdemir/anyka-ak3918-gt111a-root-decloud