DICE: Device Identifier Composition Engine

Yusuf Yamak
4 min readNov 2, 2023

--

Uzun bir aradan sonra tekrardan merhaba. Bu yazıda günümüzde kritik öneme sahip olan IoT cihazların güvenliği için geliştirilen DICE mimarisinden bahsedeceğim.

Günümüzde tüm dünyaya yayılmış milyarlarca IoT cihazı bulunmaktadır. Akıllı evlerden akıllı şehirlere, endüstriyel otomasyon sistemlerinden sağlık sistemlerine hatta akıllı kıyafetlere kadar bir çok alanda kullanılmaktadırlar ve önemli kişisel verilere erişmektedirler. Ancak bu cihazlar karmaşık güvenlik önlemlerini uygulamak için yetersiz işlem gücü ve belleğe sahip olduklarından güvenlik sorunları yaşamaktadır. Örneğin bir sokak kamerası bu tarz bir güvenlik açığından dolayı bir DDoS saldırısının parçası haline gelebilir (Bkz Mirai). Ya da evlerde kullanılan güvenlik kameraları saldırganlar tarafından kontrol edilebilirler.

IoT cihazlardaki bu güvenlik zaafiyetlerinin önüne geçebilmek için TCG(Trusted Computing Group) tarafından düşük maliyetli mikrodenetleyicilere minimum silicon maliyeti yükü ile bir güvenlik katmanı eklemeyi amaçlayan DICE framework’ü geliştirilmiştir. Bu sayede chip üreticileri mikrodenetleyicilere çok düşük bir maliyet TPM’e benzer standart bir güvenlik katmanı ekleyebilirler. DICE sayesinde her bir IoT cihazda çalışan yazılım bütünlüğü garanti altına alınır ve kriptografik olarak benzersiz bir kimlik tanımlanır. Normalde maliyetin çok düşük olması gerekmeyen cihazlarda TPM(Trusted Platform Module) ile bu şekilde hatta daha fazla güvenlik önlemleri alınabilmektedir. Fakat TPM, IoT cihazın maliyetini önemli ölçüde artırmaktadır. Ayrıca IoT cihazların form factor’ü genellikle çok küçük olduğu için TPM gibi IC’ler PCB boyutunu da artırmaktadır. Günümüzde Texsas Insturments, NXP, Microchip gibi üreticiler güvenlik gereken uygulamalarda kullanılacak olan MCU’lara DICE katmanını eklemektediler.

DICE Mimarisi

DICE mimarisi aşağıdaki gibi katmanlı bir yapıya sahiptir.

En alt katman olan DICE Core donanım katmanıdır. Yani bu katman chip üreticisi tarafından MCU içine gömülmektedir. Bu katmanda üretici tarafından dahi bilinmeyen, üretim aşamasında oluşturulan UDS(Unique Device Secret) adında 32 byte’lık bir anahtar bulunur. Daha sonra üretilecek tüm anahtarlar UDS’e bağlı olduğu için UDS güvenliği çok önemlidir ve kesinlikle üst katmanlar tarafından erişilemeyecek şekilde saklanması gerekir. DICE Core’un diğer bir komponenti olan DICE ROM ise Layer 0'ın hash ile UDS’yi HMAC gibi bir fonksiyondan geçirip CDI(Compound Device Identifier)’yı üretir ve Layer 0'a bir register aracılığı ile iletir. Bu sayede Layer 0'da bir byte’ın bile değişmesi CDI’nın farklı bir değer almasına neden olur.

Layer 0 ise yazılım katmanıdır ve cihaz üreticisi tarafından yazılır. Layer 0 bir nevi FSBL(First Stage Boot Loader) görevi görür. Bu katmanda DICE Core’dan alınan CDI ile Alias Key ve Device Id adında iki adet public-private key çifti oluştulur. Bu key generation işleminde kritik nokta deterministic olması gerektiğidir. Yani cihaz her açıldığında eğer CDI değişmemişse aynı anahtarların oluşturuluyor olması gerekir. TCG buradaki key generation için daha az işlem gücü tükettiği için Elliptic Curve algoritmasının kullanılmasını önermektedir. Alias Key üretilirken Layer 1'in hash’i ve CDI input olarak alınır. Böylece Layer 1'de çalışan firmware’in de bütünlüğü garanti altına alınmış olur. Alias key üretildikten sonra bir üst katmana iletir. Layer 1 IoT server ile authentication işlemlerinde ve encryption işlemlerinde bu anahtar çiftini kullanır. Device ID üretilirken ise sadece CDI kullanılır. Adı üstünde Device ID cihazın kimliğini oluşturur. Bu sebepten dolayı Layer 0'daki firmware’in mümkün mertebe değiştirilmemesi gerekir. Aksi halde cihaz farklı bir cihaz olarak değerlendirilir. Device ID’ini private kısmı ile Alias Key için üretilen X.509 sertfikası imzalanır. Public kısmı ise cihaz sahaya gönderilmeden önce IoT cihaz üreticisi tarafından cihazdan bir şekilde okunup bir veri tabanında saklanması gerekir. Daha sonra bu public key, sertifikadaki imza’nın doğrulaması amacı ile kullanılır. Son olarak üretilen sertifika da Layer 1'in ulaşacağı bir yerde saklanır ve Layer 0 çalışmasını sonlandırır. Sonlandırmadan önce Device ID anahatar çiftinin ve CDI’ın bellekten silinmesi gerekir. Aksi halde Layer 1 deki bir güvenlik açığından dolayı CDI ve Device ID ele geçirilebilir. Layer 1 de ise IoT cihazın asıl fonksiyonlarını yerine getiren firmware çalışır. Layer 1'in atak alanı çok büyük olacağı için saldırılara maruz kalması çok olasıdır. Bu sebepten dolayı tüm kriptografik işlemlerde Layer 0'ın ürettiği Alias Key çiftini kullanması gerekir. Symmetric encryption kullanması gerekse bile symmetric key’i her seferinde run time’da Alias Key’den üretmesi gerekir. Buradaki amaç, cihaz bir saldırgan tarafından fiziksel olarak ele geçirilse dahi anahtarlara erişmesini engellemek. Buraya kadarki kısmın akışı aşağıdaki gibidir:

  • DICE Core Layer 0 ‘ın hash’ini ve UDS’yi kullanarak CDI üretir.
  • Layer 0, CDI ve Layer 1'in hash’ini kullanarak Alias Key’i, sadece CDI kullanarak Device ID’yi üretirir. Buradaki amaç Layer 1 de çalışacak olan firmware’in kullanacağı anahtar çiftinin bir yerde saklanmayıp run time’da üretilmesi. Böylece cihaz bir saldırgan tarafından ele geçirilse dahi anahtarlara hiç bir şekilde ulaşamayacak. Eğer Layer 0 ya da Layer 1'de çalışan firmware’ların anahtarlarını okuyacak şekilde değiştirmeye kalkarsa, bu durum hesaplanan hash’lerin farklı sonuçlanmasına ve Alias Key ve Device ID’nin farklı değerler almasına neden olacak. Ayrıca anahtarların run time’da üretilmesi, encrypted olarak saklanan değerli verilerin cihaz fiziksel olarak ele geçirilse dahi saldırgan tarafından okunamamasını sağlar.
  • Device ID nin public kısmı ilk üretim aşamasında alınır ve private kısmı run time üretilen X.509 sertifikasının imzalanması için kullanılır. Böylece IoT server elindeki public key ile cihazdan gönderilen sertifikanın doğrulamasını yapabilir. Yani self signed bir sertifika oluşturulmuş olur.
  • Üretilen sertifika da Layer 1'in erişebileceği bir bölgeye yerleştirilir ve Layer 0 çalışmasını sonlandırır.
  • Daha önce de bahsettiğim gibi CDI ve Device ID anahtar çiftinin bellekten silinmesi kritik öneme sahiptir. Aksi halde Layer 1'deki güvenlik açığı bu anahtarların ele geçirilmesine neden olabilir.
  • DICE mimarisinde Layer 0'daki firmware’in mümkün mertebe değiştirilmeyecek ve atak alanı küçük olacak şekilde tasarlanması gerekir. Örneğin bir network bağlatısı vs gibi güvenlik açığı oluşturabilecek işler yapmaması gerekir. Sadece key üretimi ve Layer 1'in çalıştırılması işlerini yapması gerekir. Layer 0'daki bir güvenlik açığı DICE’ı tamamen işlevsiz hale getirir.

Görüldüğü üzere DICE sayesinde çok küçük bir donanım maliyeti ile IoT cihazlar siber saldırılara karşı önemli ölçüde dayanıklı hale gelebilmektedir. Tabi ki her güvenlik önlemi gibi DICE da kusursuz bir güvenlik sağlayamaz. Return Oriented Programming gibi yöntemler aracılığı ile bahsetmiş olduğumuz DICE’ın attestation mekanizması etkisiz hale getirilebilmektedir. (Bu da bir başka yazının konusu olsun.)

Bir yazının daha sonuna geldik. Bir sonraki yazı da görüşmek üzere. Hoşçakalın…

--

--

Yusuf Yamak
Yusuf Yamak

Written by Yusuf Yamak

Computer Architecture, C++, Linux

No responses yet