Akıllı Izgaramı Nasıl Hackledim ?
If you are looking for an English version of this article, please visit here.
Üst düzey bürokrat olan Mert SARICA’yı hedef alan Rus Askeri İstihbarat Dairesi (GRU), yaşadığı evinin kablosuz ağına sızıp Çok Gizli sınıfındaki belgeleri ele geçirmesi için 2004 yılından bu yana faaliyetlerine devam eden 26165 birimi olan namıdiğer APT 28 hacker grubunu görevlendirir.
10 Nisan’da diplomatik pasaport ile ülkeye giriş yapan APT 28 grup üyeleri, kiraladıkları Citroen C3 marka arabanın bagajına, kablosuz ağ hacklemek için bir bilgisayar ve çeşitli donanımlardan oluşan teçhizatlarını yerleştirdikten hemen sonra evin adresine doğru yola koyulurlar.
Eve yaklaştıklarında hedef alacakları kablosuz ağın adını (SSID) tespit edebilmek için Wardriving yöntemine başvururlar. Evin önünden 2 defa geçtikten sonra sinyal seviyesi en yüksek olan Hack4Career ağının ona ait olduğunu tespit ederler.
Şüphe çekmemek için eve en yakın sokağın başına arabalarını park eden APT 28 grubu, WPA3 protokolü ile korunan kablosuz ağın, özel karakter de içeren 15 hane uzunluğundaki alfanumerik parolasını tespit etmek için bilgisayarın başına geçerler.
Uzun uğraşlar sonucunda şifreyi kıramayacakları konusuna kanaat getiren grup, evin etrafında keşfe (reconnaissance) çıkmaya karar verirler.
Günümüz dünyasında mutfak gereçlerinden, otomobillere, termostatlardan, akıllı ev sistemlerine kadar birçok alanda karşılaşılan Nesnelerin İnternetinin (IoT), barındırdıkları zafiyetler nedeniyle kolayca istismar edilebilmesi sebebiyle akıllı cihaz aramaya koyulurlar.
İstatistiklere göre 2023 yılı itibariyle gezegenimizde 8 milyar insan yaşarken, IoTlerin sayısının ise insan sayısının iki katına yani 16 milyara ulaştığı görülmektedir.
Kısa bir keşif gezisinden sonra terasta yer alan ve fişe takılı olan Wi-Fi, Bluetooth destekli akıllı pelet ızgarası dikkatlerini çeker. Marka ve modelinin fotoğrafını uzaktan çektikten sonra bir tane satın alıp, zafiyet araştırması yapmaya başlarlar. 8 saatin sonunda sadece fişe takılı olması yeterli olan bu ızgaraya Bluetooth üzerinden gönderdikleri bir paket/komut sayesinde dahil olduğu kablosuz ağın adını ve parolasını uzaktan kolayca elde etmeyi başarırlar.
Bu bilgi ışığında vakit kaybetmeden arabalarına binip Mert SARICA’nın evine doğru yola çıkarlar. Araçlarını sokağın başındaki aynı yere park ettikten sonra 300 metre mesafeden bilgisayarlarının USB bağlantı noktasına taktıkları Parani-UD100 aygıt ile Bluetooth üzerinden akıllı ızgaraya paket/komut gönderirler. Akıllı ızgaradan gelen yanıt ile Hack4Career kablosuz ağ adını, 15 haneli parolayı elde ettikten sonra başarıyla kablosuz ağa bağlanırlar ve operasyonlarının birinci adımını başarıyla tamamlamış olurlar.
Yukarıda anlattığım bu kurgu hikaye birçoğunuza iki nedenden dolayı ütopik gelebilir.
Barbekü sezonunun yaklaşmasıyla 2023 yılının Nisan ayında evimin terasında kullanmak üzere bir mangal arayışına girdim. Kömürle her defasında kim uğraşacak, gazlı mangal gibi pratik bir şey mi alsam derken WiFi ve Bluetooth destekli akıllı bir pelet yakıtlı ızgara satın almaya karar verdim.
Izgara elime ulaştıktan sonra her ne kadar yıllardır “Akıllı cihaz demek, casus cihaz demektir.” desem de akıllı cihazlar kullanmayı tercih etmekten geri kalmayan biri olarak (Doktorun dediğini yap, yaptığını yapma derler.) ızgaranın kullanım kılavuzunda yer alan mobil uygulamayı indirip, kurdum. Hemen ardından da çuvaldızı kendime batırarak kendimi eleştiren bir tweeet paylaşmayı ihmal etmedim. :)
Honeypot isimli bir kişi tarafından gönderilen tweet aslında yapacağım güvenlik araştırmasına bir nevi davetiye çıkardı.
Uygulamayı açtıktan sonra yönlendirmeleri takip ederek önce Bluetooth üzerinden ızgarayı ekledim ardından da kablosuz ağımın parolasını girerek ızgarayı ev ağıma dahil ettim.
Eşimle birlikte ızgarada ilk yemeğimizi pişirip, afiyetle yedikten sonra tabii ki satın aldığım cihazları, aygıtları güvenlik araştırmalarıma (Koş Mert Koş vb.) konu eden biri olarak bu akıllı ızgarayı da boş geçmemeye karar verdim. :)
İlk iş olarak ApkPure sitesinden ızgaranın mobil uygulamasını indirip jadx aracı ile kaynak kodunu incelemeye başladım. Derleme aşamasında herhangi bir gizleme yöntemi (obfuscation) kullanılmadığı için kaynak kodlarını rahatlıkla inceleyebildim.
Kodlar arasında biraz gezindikten sonra getFileContent() fonksiyonuna parametre olarak gönderilen init.js dikkatimi çekti. getFileContent() fonksiyonunu incelediğimde Fs.Get metodu ile ızgaranın işletim sisteminde yer alan init.js dosyasını okuduğunu gördüm.
Tabii bunu görünce kafamda şimşekler çaktı ve aklımda tek bir soru belirdi: “init.js yerine başka bir dosya ismini Bluetooth üzerinden ızgaraya iletirsem, gelen yanıtta o dosyanın içeriğini görebilir miydim?”
Bu sorunun yanıtını bulmak için Koş Mert Koş başlıklı blog yazımda olduğu gibi mobil uygulama ile ızgara arasındaki Bluetooth haberleşmeyi incelemek için Samsung’un destek sayfasında Bluetooth paketleri kaynaklı problem yaşayan bir kişinin mesajına yazılan yanıttaki adımları adım adım gerçekleştirdim.
btsnoop_hci.log dosyasını Wireshark ile analiz etmeye başladığımda iletişimin bir noktasında mobil uygulamanın, ızgaranın 5f6d4f53-5f52-5043-5f74-785f63746c5f (CHARACTERISTIC_BROIL_KING_WRITE_DATA_LENGTH) Bluetooth servisinin karakteristiğine ait olan 0x33 tanıtıcısına (handle) 00000055 değerini yazdığını (WRITE REQUEST) gördüm.
Sonraki adımda ise bu defa 5f6d4f53-5f52-5043-5f64-6174615f5f5f (CHARACTERISTIC_BROIL_KING_WRITE_COMMAND) servisinin karakteristiğine ait olan 0x2e tanıtıcısına (handle), {“id”:999,”method”:”FS.Get”,”params”:{“filename”:”init.js”,”offset”: 0 , “len”:20}} komutunun parça parça gönderildiğini (WRITE REQUEST) gördüm.
Izgaradan gelen yanıtta (READ RESPONSE) yer alan {“id”:999,”src”:”XXX-XXXXXXX”,”result”:{“data”: “Ly9CS1B2MDQyLjQ1ICAgICAgICA=”, “left”: 35298}} Base64 ile kodlanmış veriyi çözdüğümde ise //BKPv042.45 karakter dizisi ile karşılaştım.
Google arama motorunda mobil uygulamanın kaynak kodunda dikkatimi çeken bazı kelimeleri arattığımda ızgaranın Mongoose OS isimli bir işletim sistemine sahip olduğunu öğrendim.
Daha önce bu işletim sistemini görmediğim, duymadığım için web sitesinde yer alan kullanıcı kılavuzuna göz atmaya karar verdim. Yapılandırma sayfasını ziyaret ettiğimde conf ile başlayan json uzantılı dosyalar arasında yer alan conf9.json dosyası hemen dikkatimi çekti.
Kullanıcı ayarlarını içeren bu dosyada dikkate değer bilgiler olabileceğini düşündüğüm için init.js yerine conf9.json dosyasını bluetoothctl aracı ile Bluetooth bağlantısı üzerinden okumamı sağlayacak 88 karakter uzunluğundaki aşağıdaki isteği oluşturup Bash betiği üzerinden ızgaraya gönderdiğimde Invalid Offset ile hatası ile ile karşılaştım.
{“id”:999,”method”:”FS.Get”,”params”:{“filename”:”conf9.json”,”offset”: 0 , “len”:20}}
Biraz araştırma yaptıktan sonra “invalid offset” hatasının boyuttan kaynaklı tetiklendiğini öğrendim. Daha sonra 85 karakter uzunluğundaki init.js isteği ile yukarıdaki 88 karakter uzunluğundaki conf9.json isteğini boyut olarak eşitlemeye karar verdim. 3 tane boşluk karakterini (space) sildikten sonra istek aşağıdaki şekle bürünmüş ve 85 karakter uzunluğunda olmuş oldu.
{“id”:999,”method”:”FS.Get”,”params”:{“filename”:”conf9.json”,”offset”:0,”len”:20}}
Bu isteği ızgaraya gönderdikten sonra conf9.json dosyasının ilk 20 karakterini başarıyla okuyabildiğimi gördüm.
Opsiyonel parametre olan Offset değerini yavaş yavaş arttırarak dosyayı okumaya devam ettiğimde ise aşağıdaki istek sonucunda ızgaranın kurulumu aşamasında uygulamaya girmiş olduğum kablosuz ağ adımı ve parolamı elde edebildiğimi gördüm!
{“id”:999,”method”:”FS.Get”,”params”:{“filename”:”conf9.json”,”offset”:280,”len”:99}}
Sonuç itibariyle yaptığım güvenlik araştırması sonucunda ortaya çıkan bu kritik zafiyeti istismar ederek, art niyetli bir kişinin bu marka ve model bir ızgaraya 30 ila 300 metre mesafe uzaklıktan istek göndererek dahil olduğu kablosuz ağ adını ve parolasını kolaylıkla öğrenebileceğini ortaya koymuş oldum. İşin şaşırtıcı kısmı ise bu zafiyetin istismar edebilebilmesi için ızgaranın açık konumda (POWER ON) olmadan sadece fişe takılı olması yeterli oluyordu.
Bu zafiyetin kaç haneyi etkilediğini bilemesem de istatistiklere göre Amerika’da 2021 yılı başı itibariyle 100 milyon hanenin ızgara kullandığını, her üç haneden birinin de birden fazla ızgara kullandığını dikkate aldığımızda, bu tür akıllı ızgaraların (IoT) yaygınlaşması ile ciddi güvenlik risklerini beraberinde getireceğini söyleyebilirim.
Keşfettiğim bu ciddi zafiyet sonrasında akıllı ızgaram ile yollarımızı ayırmak yerine kendisini diğer IoTler ile birlikte Wi-Fi Misafir Ağına taşıyarak iştahımı kaçırmasını engelledikten sonra lezzetli yemeklerin keyfini çıkarmaya devam etmeye karar verdim. :)
Her ihtimale karşı üretici bu zafiyeti ortadan kaldırana dek mümkünse akıllı ızgaranızı kullanmadığınız zamanlarda fişe takılı bırakmamanızı tavsiye ederim.
Bir sonraki yazıda görüşmek dileğiyle herkese güvenli günler dilerim.
Not: Izgara üreticisine 1 Nisan tarihinde zafiyetle ilgili e-posta gönderdiğimi ancak bu zamana kadar yanıt alamadığımı da üzülerek paylaşmak isterim.