Wi-Fi protokolü üzerindeki çalışmadan sonra, gözümü enerji verimliliğinin kralı olan Bluetooth Low Energy (BLE) protokolüne çevirdim. Akıllı saatlerden fitness bilekliklerine kadar her yerde olan bu teknolojinin güvenlik mimarisi ne kadar sağlamdı? RW-32 marka fason bir saat üzerindeki inceleme notlarım;
Bölüm 1: BLE'nin Anatomisi ve Protokol Mimarisinin Dili
Bir cihaza saldırmadan önce, onun dilini ve mantıksal mimarisini anlamak şarttır. BLE, düşük enerji tüketimi için optimize edilmiştir ancak bu optimizasyon, bazen güvenlikten feragat etmek anlamına gelebilir. Peki hangi dili konuşuyor bu arkadaş?
BLE Protokol Mimarisi (GATT Stack)
Tüm BLE işlemleri, aşağıdaki katmanlı mimari üzerine kuruludur. Güvenlik açıkları, bu katmanlar arasındaki geçişlerde (HCI arayüzü) veya Link Layer (LL) tarafında bulunur. BLE mimarisi, donanım ve yazılım olmak üzere iki temel parçadan oluşur. En altta, Controller (Donanım) katmanında Physical Layer (PHY) radyo sinyallerini yönetirken, Link Layer (LL) ise bağlantı durum makinesini ve kritik paket zamanlamasını yönetir; bu, cihazın temel kural kitabıdır. HCI (Host Controller Interface), bu donanım (Controller) ve yazılımı (Host) birbirine bağlayan tek iletişim arayüzüdür ve bizim Logic Analyzer ile dinleyeceğimiz noktadır. Üst katmanda, Host (Yazılım) tarafında, L2CAP / ATT / SM (Veri Taşıma ve Güvenlik Yönetimi) protokolleri çalışır; burada SM eşleşme ve şifrelemeyi kontrol eder. En üstte ise GAP (Generic Access Profile), cihazın rollerini ve kendini tanıtma kurallarını belirleyerek keşif (Sniffing) operasyonlarımızı başlatırken, GATT (Generic Attribute Profile) ise verinin nihai yapısını (Servisler ve Karakteristikler) tanımlar, yani bizim okuyup yazdığımız ve manipüle ettiğimiz veri noktalarıdır.
Büyük markalar GATT/SM katmanında güçlü şifreleme ve eşleştirme isterken, RW-32 gibi fason cihazlarda bu kurallar ya esnek bırakılır ya da hiç uygulanmaz.
Bölüm 2: RW-32 Üzerindeki Teknik Operasyonlar
Faz 1: Broken Access Control ve Gizli Servislerin Tespiti
Operasyonun ilk ve en kritik aşaması, hedef cihaza yetkisiz erişim sağlamak ve tüm GATT yapısını çıkarmaktı. ESP32 kartımızı Central cihaz rolünde kullanarak saatin MAC adresine (c0:a0:b1:a4:28:ee) doğrudan bağlantı isteği gönderdik. Büyük bir zafiyet olarak, saat GAP (Generic Access Profile) katmanında SM (Security Manager) kurallarını uygulamadı ve bizden herhangi bir eşleşme kodu istemeden bağlantıya izin verdi. Bu, teknik olarak Broken Access Control zafiyetini kanıtladı ve bize cihazın tüm BLE mimarisine yetkisiz bir pencere açtı.
Erişim sağlandıktan sonra, GATT Enumeration yaparak saatin kullandığı tüm servis ve karakteristik UUID'lerini haritaladım. Standart 0x180D (Nabız) servislerinin yanında, 0x3802, 0xAA02 ve 0xFEE7 gibi kontrol mekanizmalarına ait olabileceğini düşündüğümüz kritik özel (Proprietary) UUID'leri tespit ettik. Dahası, okuma izni olan karakteristiklerden yürüttüğümüz Information Disclosure (Bilgi Sızıntısı) testi ile cihazın Pil Seviyesi ve dahili yazılım kod adı olan "leopard" gibi bilgileri şifresiz okuyabildik.
Genel Fuzzing
İncelediğimizde bu veriler:
000018f kodu Bluetooth SIG'e göre "Battery Service" olarak tanımlıyor ve değer olarak 49 görünüyor decimal olarak 73 e denk geliyor.
Kontrol ettiğimizde bilgiler doğru görünüyor.
52 57 2D 33 32 00 Cihaz ismi olan RW-32'den bahsediyor.
00001802 UUID Immediate Alert Service WN yetkisi var
Peki buraya data göndersek ne olur? hadi deneyelim :)
0x00001802 Servisi altındaki 0x00002a06 Karakteristiği, Bluetooth SIG tarafından standartlaştırılmış "Alert Level" (Uyarı Seviyesi) için kullanılır. Bu, titreşim için spesifik bir protokoldür ve yalnızca tek bir byte veri ister.
Veri gönderildi... sanırım saat standart 0x1802 servisini açmış olmasına rağmen titreşim için özel proprietary komutu bekliyor :/ pes etmek yok devam.
Tespit ettiğimiz 00003802-0000-1000-8000-00805f9b34fb hizmeti, standart dışı (Proprietary) bir üretici kanalı sanırım. Bu hizmetin altındaki 00004a02-0000-1000-8000-00805f9b34fb karakteristiğinde fazla yetki var... deneyelim şansımızı o zaman. aklıma saat manipülasyonu geliyor. biraz araştırma yaptıktan sonra xiaomi gibi cihazlarda saat ayarı genelde belirli bir 7-byte'lık paket üzerinden yapılıyormuş. vakit kaybı olarak gördüğüm için bu süreci pas geçtim
Standart SIG değil yine bir özel servis. internette pek fazla bir şey bulamadım ama 2 değerde de write yetkimiz olduğu için ikisine de 0x01 değeri gönderelim.
Sürekli yeniden başlıyor.
Ve bingo, nur topu gibi DoS zafiyetimiz var. herhangi bir kimlik doğrulama ve girdi denetimi olmadığı için sürekli aynı yere aynı veriyi gönderdiğimizde saati kullanılmaz hale getiriyoruz.
Bu çalışma, RW-32 cihazının yetkisiz bağlantılara izin vererek temel güvenlik mimarisini ihlal ettiğini kanıtladı. GATT fuzzing ve hedefli komut enjeksiyonları sayesinde, cihazın Pil Seviyesi gibi hassas verileri ifşa ettiğini ve birden fazla karakteristik üzerinden uzaktan çökertilebildiği (Remote DoS) tespit edilmiştir. Bu bulgular, IoT ekosisteminde güvenliğin sadece parola değil, protokol katmanında (LL/GATT) da sağlanması gerektiğinin somut bir kanıtıdır.
// RAPOR SONU, MUCAHIC / OP-0042 / 2025.11.26