silabs 21Q2 güvenli BLE cihazı Güvenlik Laboratuvarı

BLE Güvenlik Laboratuvarı Kılavuzu

Bu laboratuvarda, daha güvenli bir BLE cihazının nasıl tasarlanacağını göreceksiniz. Bir BLE cihazının nasıl tasarlanacağını öğreneceksiniz.view Yığın özelliklerinin bazılarının nasıl kullanılacağına dair bazı genel tavsiyelere geçeceğiz ve daha güvenli bağlantılar için teknikler hakkında bazı genel tavsiyelerde bulunacağız. Son olarak, bir çevre birimini gerçek olarak tanımlamak için BLE üzerinden cihaz sertifikalarının nasıl kullanılacağını göreceğiz.

Başlarken

Bluetooth'larampÜzerinde inşa edeceğiniz uygulama bir önyükleyici ile kullanılmak üzere tasarlanmıştır. Yepyeni bir EFR32MG21B ile çalışıyorsanız, bir önyükleyiciye sahip olmayacaktır. platform\bootloader\s'da önceden oluşturulmuş bir önyükleyici bulabilirsinizampSDK'nizin le-apps\bootloader-storage-internalsingle\efr32mg21a010f1024im32-brd4181a klasörüne gidin.

  1. Boş bir s ile başlayınampUygulama. Bu sampUygulama bir şablon olarak kullanılır ve herhangi bir BLE uygulaması için iyi bir başlangıç ​​noktası oluşturur.
    1. Simplicity Studio'dan Silicon Labs Proje Sihirbazını açın File menü -> yeni.
    2. BRD4181C'yi seçin ve 'ileri' butonuna tıklayın.
    3. Teknoloji türü altında 'Bluetooth (9)' onay kutusunu tıklayın.
    4. 'Bluetooth – SoC Empty' seçeneğini vurgulayın ve ardından Next'e tıklayın.
    5. 'Bitir' butonuna tıklayın.
  2. Artık korunan ve korunmayan özelliklerin nasıl farklı şekilde ele alındığını görmek için bazı özellikler ekleyebilirsiniz.
    1. Projenin slcp'sini açın file Proje Gezgini penceresinde çift tıklayarak
    2. 'YAZILIM BİLEŞENLERİ' sekmesini vurgulayın ve aşağıda gösterildiği gibi GATT yapılandırma aracını açın: Ve gatt_configuration.btconf'u içe aktarmak için aşağıda gösterilen içe aktarma aracını kullanın file Sağlanan materyallerdeki sunucu klasöründen.GATT veritabanında, bazı verilerin korunduğu ve bazılarının korunmadığı 'Eğitim' adlı özel bir hizmet vardır. Bu, korunan bir özelliğe ve korunmayan bir özelliğe erişmeye çalışırken ne olduğunu karşılaştırmanızı sağlar. Bu, çok temel güvenliğe sahip bir cihaz yapmanın hızlı bir yoludur.
  3. Uygulamada neler olup bittiğini takip etmek için Simplicity Studio'daki konsola yazdırmak için seri portu kullanacağız. Bu bileşenleri bulmanın en kolay yolu, gösterildiği gibi YAZILIM BİLEŞENLERİ iletişim kutusunda bunları aramaktır:
      1. IO Stream USART bileşenini yükleyin
      2. IO Stream Retarget STDIO bileşenini yükleyin
      3. Standart G/Ç bileşenini yükleyin
      4. Log bileşenini yükleyin
      5. Board Control bileşenini açın ve 'Sanal COM UART'ı Etkinleştir' seçeneğini etkinleştirin
      6. 'Debug Adapters' panelinde adaptöre sağ tıklayın ve 'Launch Console'u seçin. 'Serial 1' sekmesini seçin ve imleci konsol penceresinin metin giriş alanına yerleştirin ve konsolu uyandırmak için enter'a basın.
  4. Bağlantı tutamacını kaydetmek için app.c'de bulunan sl_bt_on_event()'te yerel bir değişken oluşturun. Değişken statik olmalıdır çünkü bu fonksiyon yığın tarafından her olay yükseltildiğinde çağrılır ve değerin kalıcı olmasını isteriz. Bağlantı tutamacı daha sonra kullanılacaktırlaboratuvar bölümü.
  5. Bağlantı kurduğumuz zamanı, güvenlik modlarını vb. görmek için olaylara yönelik bazı app_log() ifadeleri ekleyin
      1. app_log.h başlığını ekleyin file
      2. sl_bt_evt_connection_opened – bağ tutamacını yazdır ve bağlantı tutamacını kaydet. Bağ tutamacı 0xFF ise, bağlı cihazlar arasında bağ yoktur. Mevcut olay işleyicisini aşağıdaki gibi görünecek şekilde değiştirin:
      3. sl_bt_evt_connection_parameters – güvenlik modu. Bu, güvenlik modunun ne zaman değiştiğini görebilmeniz için yapılır. Güvenlik modu 1'in 0 değeriyle numaralandırıldığı güvenlik modlarının numaralandırılmasında bir fark vardır, vb. Uygulamanıza aşağıdaki olay işleyicisini ekleyin:
      4. sl_bt_evt_connection_closed_id. Bu olay işleyicisi bağlantı işleyicisini güncellemek için değiştirildi. 0xFF değeri etkin bir bağlantı olmadığını belirtmek için kullanılır. app_log() komutu bağlantının kapatılma nedenini yazdırmak için kullanılır, durum kodlarının listesi buradadır. Mevcut olay işleyicisini şuna benzer şekilde değiştirin:
  6. Projeyi derleyin ve flaşlayın. Bu noktada, s'yi çalıştıracağızampGATT veritabanının dışında herhangi bir değişiklik yapılmadan uygulamanın nasıl davrandığını görmek için tıklayın.
  7. EFRConnect mobil uygulamasına aşağıdaki şekilde bağlanın:
      1. 'Bluetooth Tarayıcısı' simgesine dokunun.
      2. 'Eğitim' adlı cihazınızda 'Bağlan' simgesine dokunun.
  8. Korunmayan özelliği şu şekilde okuyun:
      1. UUID a815944e-da1e-9d2a- 02e2-a8d15e2430a0 olan bilinmeyen servisin altındaki 'Daha Fazla Bilgi' bağlantısına dokunun.
      2. Korunmayan özelliği, UUID f9e91a44-ca91-4aba-1c33-fd43ca270b4c'yi 'Oku' simgesine dokunarak okuyun. Burada sürpriz yok. Özellik hiçbir şekilde korunmadığı için düz metin olarak gönderilecektir.
  9. Şimdi korumalı özelliği okuyun, UUID d4261dbb-dcd0-daab-ec95-deec088d532b. Cep telefonunuz eşleştirmeniz ve bağlanmanız için sizi uyarmalıdır, mesaj mobil işletim sisteminize bağlı olarak değişebilir. Eşleştirme isteğini kabul ettikten sonra konsolda aşağıdaki gibi bir mesaj görmelisiniz: Not: Bu kılavuzun sonundaki Ek A'da referans olması açısından G/Ç yetenekleri ve eşleştirme yöntemlerinin bir özeti bulunmaktadır. Ek B'de Bluetooth güvenlik modları özetlenmektedir.

Güvenlik Yöneticisi Yapılandırması

Güvenlik yöneticisi, hangi güvenlik özelliklerinin kullanılacağını belirleyen Bluetooth yığınının bir parçasıdır. Bu özellikler arasında aracı (MITM) koruması, LE Güvenli bağlantılar (diğer adıyla ECDH), bağlama için onay gerektirme vb. bulunur. Güvenlik yöneticisi ayrıca eşleştirme/bağlama için hangi yöntemin kullanılacağını belirlemek için kullanılan G/Ç yeteneklerini de yönetir (özet için Ek A'ya bakın). Bu bölümde basit bir kurulum göreceksiniz.

  1. SM'yi istediğiniz yapılandırmayla kurun. Bu laboratuvar için donanım, konsolda bir geçiş anahtarı görüntülemeyi kolaylaştırır. Geçiş anahtarı girişi, MITM korumasını etkinleştirmek için bir gerekliliktir. Aşağıdaki kodu sl_bt_system_boot_id olay işleyicinize ekleyin. Bu, aracıyı etkinleştirir ve uzak cihaza bir geçiş anahtarı görüntüleme yeteneğimiz olduğunu bildirir, ancak hepsi bu.
  2. Konsolda geçiş anahtarını görüntülemek için aşağıda gösterildiği gibi bir olay işleyicisine ihtiyaç vardır:
  3. Bağlanma modunu, maksimum bağlanma sayısını vb. ayarlayın. Başlamak için aşağıdaki kodu kullanın:Bu ayarlar, bir saldırganın cihazınızla bağ kurma yeteneğini sınırlamak için kullanılabilir. Ürününüzün yalnızca bir kullanıcıya ihtiyacı varsa, maksimum bağ sayısını 1 ile sınırlayabilirsiniz. Bu çağrıları eklemek için iyi bir yer sl_bt_system_boot_id olay işleyicisidir. Laboratuvarın geri kalanının daha sorunsuz ilerlemesi için şu anda bağlamayı etkinleştirmeyeceğiz ancak yalnızca bir bağlamaya izin verecek şekilde bir bağlama politikası belirliyoruz. Referans olması açısından, bu API'lerin belgeleri burada ve burada bulunabilir.
  4. sl_bt_evt_sm_bonded_id ve sl_bt_evt_sm_bonding_failed_id için olay işleyicileri ekleyin. Bu olayların ana kullanımı şu anda bilgilendiricidir ancak daha sonra laboratuvarda işlevsellik ekleyeceksiniz.
  5. Hedef panoya kurun ve flaşlayın. EFRConnect ile bağlanın ve korunan özelliği daha önce olduğu gibi okuyun. Bu sefer konsolda görüntülenen bir geçiş anahtarı göreceksiniz. İstendiğinde bu geçiş anahtarını cep telefonunuza girin.
  6. Bağlanma onayını deneyin. Bu özellik kullanıcıya bağlanma isteklerinin onaylanmasını isteme olanağı verir. Bunu yapmak uygulamaya hangi eş cihazlarla bağlanacağı konusunda kontrol sağlar. Bir olasılık, kullanıcının bağlanmaya izin vermeden önce bir düğmeye basmasını istemektir.
    1. Cep telefonunuzdaki Bluetooth ayarlarını açın ve EFR32 cihazına olan bağı kaldırın. Cep telefonu uygulamaları farklılık gösterdiğinden bu adım gerekli olmayabilir. Bluetooth ayarlarınızda 'Eğitim' cihazını görmüyorsanız, bir sonraki adıma geçin.
    2. Yazılım bileşenlerinde, basit düğme işleyicisinin bir örneğini yükleyin.
    3. Başlığı dahil et file app.c'deki sl_simple_button_instances.h
    4. sl_bt_evt_sm_bonding_confirm_id olayı için bir işleyici ekleyin. Bu olay işleyicisinin ana işi, kullanıcıya uzak bir cihazın yeni bir bağ talep ettiğini bildirmektir.
    5. Basit düğme işleyicisi için bir geri arama işlevi ekleyin ve Bluetooth yığınına bir düğmeye basıldığını belirten bir sinyal gönderin. Bu, basitçe geri dönen varsayılan geri aramayı geçersiz kılar.
    6. Harici bir sinyal olay işleyicisi ekleyin. Bu olay, önceki adımda olduğu gibi bir sinyal alındığında yanıt olarak yükseltilir. Harici sinyal olayı, bağlanmayı onaylamak için kullanılacaktır.
    7. Bağlama onayının gerekli olması için sl_bt_sm_configure çağrısını değiştirin.
    8. Yeniden oluştur ve flaşla.
    9. EFRConnect ile bağlanın ve korunan özelliği daha önce olduğu gibi okuyun. Şimdi konsolda aşağıdaki gibi bir mesaj göreceksiniz:Bağlantıyı onaylamak için PB0'a basın. Şimdi konsol, bağlantı için cep telefonuna girilecek şifreyi gösterecektir. Bağlantı sürecini tamamlamak için şifreyi girin.

 

: Yığın işlenmeyen bir olay gönderdiğinde bir mesaj yazdırmak için olay işleyicisindeki varsayılan durumu kullanın. Yığın size önemli bir şey anlatmaya çalışıyor olabilir.

Temellerin Ötesinde

Bu noktada, bir adım öne geçtiniztagYığınımızın sunduğu güvenlik özelliklerinden biri. Şimdi, elimizdeki özellikleri akıllıca kullanarak uygulamayı iyileştirelim. Aşağıdaki adımlar isteğe bağlı ve birbirinden bağımsızdır, her birinden sonra davranışı görmek için derleme ve flaş yapabilir veya hepsini birlikte deneyebilirsiniz.

  1. Başarısız bağ girişimlerinde bağlantıyı kesin. Bu, tehditleri tespit etmek için iyi bir yerdir. Uzak cihaz şifreleme/kimlik doğrulamayı desteklemiyorsa veya doğru anahtarlara sahip değilse, bir bilgisayar korsanı olabilir. O halde, bağlantıyı keselim. sl_bt_sm_bonding_failed_id olayında sl_bt_connection_close()'a bir çağrı eklemeyi deneyin. API burada belgelenmiştir.Yanlış şifreyi girerek bu özelliği test edebilirsiniz.
  2. Yalnızca belirli zamanlarda bağlanmaya izin verme. Bu, bir saldırganın bir bağ oluşturmak için sahip olduğu zamanı sınırlar ve 'yalnızca bağlı bağlantılara izin ver' özelliğini kullanmayı mümkün kılar. Tasarımcı, bağlanabilir modun nasıl etkinleştirileceğini veya devre dışı bırakılacağını seçebilir. Burada gösterim amaçlı olarak, PB1 ile bir 'kurulum modu' etkinleştireceğiz ve 30 saniye sonra devre dışı bırakmak için bir zamanlayıcı kullanacağız.
    1. Basit düğme arayüzünün ikinci bir örneğini yükleyin. Bu, PB1'in kullanımını etkinleştirecektir.
    2. Bağlanmayı etkinleştirmek/devre dışı bırakmak için yığına farklı bir sinyal göndermek üzere geri aramayı değiştirin. Sonuç aşağıdaki gibi görünmelidir:
    3. Harici sinyal olay işleyicisini bu yeni sinyali işleyecek şekilde değiştirin. Sonuç şu şekilde olmalıdır:
    4. sl_bt_evt_system_soft_timer_id olayı için bir olay işleyicisi ekleyin. Bu, kurulum modunu devre dışı bırakmak için kullanılacaktır.
    5. Aşağıdaki kod, bağlanabilir modu etkinleştirmek ve tüm bağlantılara izin vermek veya bağlanabilir modu devre dışı bırakmak ve yalnızca bağlı cihazlardan gelen bağlantılara izin vermek için kullanılabilir:
    6. sl_bt_system_boot_id olay işleyicisine aşağıdaki çağrıyı ekleyin
    7. Projeyi derleyin ve cihaza yükleyin.
    8. EFRConnect ile cihaza bağlanmayı deneyin. Bağlantı başarısız olmalı.
    9. Şimdi EFRConnect ile bağlanmadan önce PB1'e basmayı deneyin. Bu sefer bağlantı başarılı olacaktır. 30 saniye sonra konsolda cihazın kurulum modundan çıktığını belirten bir mesaj göreceksiniz. Bu, bağlanabilir modun artık devre dışı olduğu anlamına gelir.
  3. Bağlantı oluştururken güvenliği artırın. Güvenlik isteğe bağlı olduğundan, GATT özelliklerine güvenmek yerine mümkün olan en kısa sürede şifrelenmiş bir bağlantı talep etmeliyiz. API burada belgelenmiştir. Bu API'yi çağırmak için iyi bir yer sl_bt_evt_connection_opened_id olayıdır. Bağlantı tutamacı bağlantı değişkeninde mevcuttur.

Güvenli Kimlik

Artık daha güvenli bir Bluetooth cihazımız olduğuna göre, kimlik doğrulama adımını iyileştirelim. Önceki eğitim laboratuvarlarında kasa cihazlarının güvenli kimliğinin komut satırıyla nasıl doğrulanacağını gördünüz. Bu bölümde, bir BLE cihazının sertifika zincirini talep ederek ve bir meydan okuma göndererek başka bir BLE cihazının kimliğini nasıl doğrulayabileceğini göreceğiz. Tüm güvenli kasa parçaları kendi cihaz sertifikasını ve toplu sertifikasını tutar. Fabrika ve kök sertifikaları, tüm sertifika zincirinin doğrulanmasını sağlamak için istemci uygulamasına sabit kodlanmıştır. Güvenli kimlik hakkında daha fazla ayrıntı için AN1268'e bakın.

  1. Cihaz doğrulama imzasını depolamak için aşağıdaki gibi genel bir tampon tanımlayın:
  2. Güvenlik yöneticisi yapılandırmasını JustWorks eşleştirmesini kullanacak şekilde ayarlayın. Bu, bağlantının şifrelenmesi için yapılır. Pratikte, MITM koruması kullanılmalıdır ancak laboratuvarı basit tutmak için JustWorks kullanacağız. sl_bt_sm_configure çağrısını aşağıdakine geri değiştirin:Ayrıca, system_boot olay işleyicisindeki setup_mode(true) çağrısını yorum satırına alın.
  3. Sağlanan materyallerden helpers.c'yi açın ve içerikleri app.c'ye kopyalayın. Bu geri çağırma işlevleri, sertifikaları BLE üzerinden gönderilebilecek şekilde segmentlere ayırma, sertifika zincirini doğrulama ve zorluğu oluşturma/doğrulama gibi görevleri gerçekleştirir.
  4. Sertifikaların parçalara ayrılıp yeniden birleştirilebilmesi için maksimum transfer birimi (MTU) boyutunun belirlenmesi gerekir. Burada gösterildiği gibi MTU'yu kaydetmek için genel bir değişken tanımlayın:Daha sonra aşağıda gösterildiği gibi GATT MTU değiş tokuş edilen olay için bir olay işleyicisi ekleyin:
  5. Okunabilen üç kullanıcı verisi özelliği vardır. Bu özellikler cihaz sertifikasını, toplu sertifikayı ve zorluğu iletmek için kullanılır. Bu kullanıcı okuma isteklerini işlemek için bir geri çağırma işlevi kullanılır. Bu işlevi çağırmak için aşağıda gösterildiği gibi bir işleyici ekleyin:Geri arama, sertifikaları gerektiği gibi segmentlemek ve göndermek için adım #2'deki MTU'yu kullanır. Ayrıca imzalanmış zorluğun gönderilmesini de yönetir.
  6. İstemci, GATT özelliklerinden birini yazarak sunucu tarafından imzalanacak rastgele bir sayı olan bir meydan okuma gönderir. Bu nedenle, uygulamanın aşağıdaki gibi kullanıcı yazma isteği olayı için bir işleyiciye sahip olması gerekir:
  7. Güvenli kimlik desteği ekleyin fileProjeye:
    1. app_se_manager_macro.h, app_se_manager_secure_identity.c ve app_se_secure_identity.h projeye sağlanan malzemelerden. Bunlar files, sertifikanın boyutunu alma, cihaz ortak anahtarını alma ve bir zorluğun imzalanması gibi görevler için bazı yardımcı fonksiyonlar içerir.
    2. app_se_manager_secure_identity.h dosyasını app.c dosyasına ekleyin.
  8. Sağlanan materyallerden sağlanan gatt_configuration-attest.btconf'u içe aktarın. Bu GATT veritabanı, cihazımızın kimliğini doğrulamak için kullanılacak dört özelliği içeren güvenli tasdik olarak adlandırılır. Bunlara cihaz sertifikası, parti sertifikası, meydan okuma ve yanıt dahildir.
  9. Gateway gibi bir cihazı simüle etmek için kullanılan istemci, oluşturulması daha karmaşık olduğundan tam bir proje olarak sağlanır. Genel olarak istemcinin çalışması şu şekildedir:
    1. Güvenli doğrulama hizmetini duyuran cihazları tarar ve onlara bağlanır.
    2. GATT veritabanı hizmetlerini ve özelliklerini keşfeder.
    3. Aygıt ve toplu sertifikaları okur ve flash'ta depoladığı fabrika ve kök sertifikasını kullanarak sertifika zincirini doğrular.
    4. Sunucuya rastgele bir meydan okuma gönderir.
    5. Meydan okumaya verilen cevabı doğrulama girişimleri.
    6. Doğrulamalardan herhangi biri başarısız olursa bağlantıyı kapatır.
  10. Sunucu projenizi derleyin ve WSTK /radioboard sunucunuza yükleyin.
  11. Sağlanan materyallerdeki istemci klasöründen istemci projesini içe aktarın. İstemci projesini oluşturun ve istemci WSTK/radioboard'unuza yükleyin.
  12. İstemci WSTK'de sıfırlamaya basın ve seri konsolu açın. İstemci güvenli kimlik servisimizi tanıtan cihazları taramaya başlar ve bir tane bulduğunda bağlanır.
  13. İstemci, istenen hizmeti sunan sunucuyu bulduğunu belirten bazı iletiler ve sertifika zincirinin doğrulanmasıyla ilgili durum iletileri görüntüler.
  14. Doğrulama geçerse, istemci meydan okuma adı verilen rastgele bir sayı üretecek ve bunu sunucuya gönderecektir. Sunucu meydan okumayı güvenli bir şekilde tutulan özel cihaz anahtarıyla imzalayacak ve imzayı istemciye geri gönderecektir, buna meydan okuma yanıtı denir. İstemci daha sonra imzayı doğrulamak için daha önce alınan cihaz sertifikasındaki genel anahtarı kullanır. Bu, sunucunun iddia ettiği özel anahtara gerçekten sahip olduğunu doğrulamak için yapılır. Meydan okuma doğru bir şekilde doğrulanırsa, bu yönde bir mesaj görüntülenir; aksi takdirde, bağlantı kapatılır ve nedenini açıklayan bir mesaj görüntülenir.
  15. Şimdi doğrulamanın gerçekten çalıştığını doğrulamak için geçersiz bir sertifika gönderin. user_read_request_cb()'yi sertifika verilerini veya meydan okuma yanıtını bozacak şekilde değiştirebilirsiniz.

Ek A – G/Ç Yetenekleri ve Eşleştirme Yöntemleri
Ek B – Güvenlik Modları ve Seviyeleri

Güvenlik modu 1, Silicon Labs' yığınında Bluetooth Düşük Enerji için desteklenen tek moddur. Seviyeler aşağıdaki gibidir:

  • Seviye 1 güvenlik yok
  • Şifreleme ile 2. seviye kimlik doğrulaması yapılmamış eşleştirme
  • Şifreleme ile Seviye 3 kimlik doğrulamalı eşleştirme
  • Güçlü şifrelemeyle (ECDH anahtar değişimi) Seviye 4 kimlik doğrulamalı güvenli bağlantılar

 

Belgeler / Kaynaklar

silabs 21Q2 güvenli BLE cihazı Güvenlik Laboratuvarı [pdf] Kullanıcı Kılavuzu
21Q2 güvenli BLE cihazı Güvenlik Laboratuvarı, güvenli BLE cihazı Güvenlik Laboratuvarı, Güvenlik Laboratuvarı

Referanslar

Yorum bırakın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar işaretlenmiştir *