Bugünkü blog yazımda sizlerle detaylı olarak WirelessHART paket yapısından bahsedeceğim. WirelessHART protokol güvenlik analizlerine geçmeden önce protokolü iyi tanımak, çalışma mantığını iyi anlamak ve atak yüzeylerini iyi kavramamız gerekiyor.
Aşağıdaki şekilde1, WirelessHART ağ paketlerinin yapısı genel olarak gösterilmektedir. WirelessHART katmanları Fiziksel katman ile başlar ve veri bağlantı (Data-Link) katmanı ile devam eder. Bir sonraki katman, Ağ katmanıdır. Alt katman, tek bir başlık alanından (TL Kontrol Baytı) ve taşıma/aktarım payload’ından oluşur ve bu katmana Aktarım katmanı diyoruz. Taşıma/Aktarım katmanının payload’ı, Uygulama katmanı olarak da adlandırılan gerçek HART komutularının bulunduğu katmandır.2 Şimdi sırasıyla bu katmanları detaylı bir şekilde inceleyelim.
Fiziksel Katman
Paketin fiziksel katmanı, fiziksel bir başlıktan oluşur. Bu başlık, alıcı cihaza bir paketin geldiğini bildiren 4 boş byte ile başlar (alıcı belirli bir frekanstaki enerjiyi algılayabilir). Boşluğu, alıcının saat hızını göndericiyle senkronize etmesini sağlayan tek bir bayt 0xA7 (ikili modda 10100111) izler. Fiziksel katman, WirelessHART tarafından kullanılacak 15 kanalı tanımlar.
Veri Bağlantı (Data-Link) Katmanı
Veri Bağlantı katmanı bir üstbilgi ve altbilgiyi tanımlar. Başlık, veri modunu ve IEEE 802.15.4-2006 standardının güvenlik modunun etkin olduğunu belirten statik bayt 0x41 ile başlar. Bu bayt WirelessHART ağında her zaman statiktir, çünkü bu alanlar kullanılmaz ve bitlerin kalanını sıfır olarak ayarlayarak, 802.15.4 uyumlu bir radyonun WirelessHART paketlerini almasına izin verir. Başlıkta, yönlendirme bilgilerini gösteren alanlar da bulunmaktadır. Ağ kimliği, hedef ve kaynak adresleri, alıcının bu paketi daha fazla ayrıştırması gerekip gerekmediğini gösterir. Veri Bağlantı katman ayrıştırıcısı, bu alanlardan biri konfigürasyonuyla eşleşmiyorsa paketi düşürür. Paket ayrıştırıcının bağlı olduğu ağa ait olmaması veya Veri Bağlantı katmanındaki hedef adres ayrıştırıcının adresiyle eşleşmediği durumlar paketlerin düşmesine örnek verilebilir.
Veri Bağlantısı katmanındaki adresler, bu “sıçramanın” kaynağını ve hedefini gösterir. Örneğin, ağ yöneticisine (0xf980 adresi olan) gönderilen bir paketin önce ağ geçidini geçmesi gerekir. Böyle bir paketin göndereni Veri Bağlantı katmanı hedef adresini 0x0001 (ağ geçidi) ve Ağ katmanı hedef adresini 0xf980 olarak ayarlayacaktır (bir sonraki paragrafta bu durumu detaylı bir şekilde anlatacağım). Bunun anlamı, çok sekmeli konfigürasyonda, Veri Bağlantısı katmanı alanlarının her sekme üzerinde değiştirildiği anlamına gelir.
Ayrıca bu alana bir dizi numarası da dahil edilmiştir. Bu sıra numarası, bu paketin iletildiği mutlak slot numarasının (ASN) en az anlamlı olanıdır. Ayrıştırıcı, bu paketin belirli bir ASN’de gerçekten iletilip iletilmediğini veya paketin “eski” olup olmadığını kontrol etmektedir. Eski bir paketin alınması bir tekrarlama saldırısı durumunda gerçekleşebilir.
Paketin altbilgisinde, Veri Bağlantı katmanı bir MIC ve bir CRC16 sağlama bayrakları (ayrıca Frame Checksum veya FCS olarak da bilinir) bulunmaktadır. Bu CRC sağlama bayrağı “normal” bir ITU-T CRC16 polinomuyla hesaplanır. Bu CRC sağlama bayrağı, Veri Bağlantısı katman başlığının ilk baytından başlayarak 16 bitlik CRC sağlama bayrağı alanına kadar olan tüm paket üzerinden hesaplanır. Eğer CRC sağlama bayrağı yerinde ise ve CRC aynı veriler üzerinden tekrar hesaplanırsa, CRC alanının sıfır değerini alacaktır. Bu, alıcının CRC’nin geçerli olup olmadığını kontrol etme şeklidir: CRC’yi tüm paket boyunca hesaplanır ve bu hesaplamanın sonucunun sıfıra eşit olup olmadığını kontrol edilir. Veri Bağlantısı katmanının payload’ı Ağ katmanıdır.
Ağ Katmanı
Paketin Ağ katmanı bir başlık tanımlar. Bu başlık, esas olarak protokolün güvenlik özellikleri ile ilgili alanları içerir. Paketlerin yalnızca en fazla 128 kez iletilebilmesini sağlayan veya yaşanacak bir atlama süresi (TTL / HTL) alanı bulunur. Alındığında bu sayaç azalır ve sıfır olup olmadığı kontrol edilir. TTL sıfıra ulaşırsa, paket düşürülür. Ayrıca Veri Bağlantısı katmanı sıra numarasından farklı bir sıra numarası içerir. Ağ katmanı sıra numarası yine mutlak yuva numarasının (ASN) en az önemli oktetidir, ancak paketin alındığı zaman aralığına eşit olması gerekmez. Bu alan ağ katmanı bir veri alır almaz doldurulur. İstek iletmek, bu yüzden bu paketin ne kadar zaman önce yaratıldığını ölçmenin kabaca yoludur. Ayrıca kaynak ve hedef adres dahil edilmiştir. Ağ katmanının kaynak ve hedef adresleri, paketin gerçek ilk kaynak adresi ve son hedef adresidir. Bu nedenle, birden fazla atlamalı iletişimlerde, bu adresler diğer cihazları geçerken aynı kalır. AES şifrelemesi için meta veri içeren birkaç alan da vardır. Güvenlik kontrol alanı, veri yükünü şifrelemek için kullanılan anahtar tipini belirler (sırasıyla 0x00, 0x01 ve 0x02 oturum anahtarı, birleştirme anahtarı ve el anahtarı). Ayrıca, oturum anahtarı kullanıldığında paketi şifrelemek ve imzalamak için kullanılan, en az 8 bit olan bir sayaç ya da birleştirme veya elde taşınır anahtarlar kullanıldığında, tek seferlik 32 bitinin tamamı olan bir sayaç vardır. Son başlık alanı olarak bir Mesaj bütünlüğü kodu (MIC) dahil edilmiştir. MIC, kaynak adresini kullanarak ve kullanılmadan paketin tam Ağ katmanı üzerinden hesaplanır. Ağ katmanının payloadı, üstbilgilerdeki meta veriler kullanılarak CCM modunda AES-128 kullanılarak şifrelenir.
Taşıma/Aktarım Katmanı
Paketin Aktarım katmanı, tek bir başlık baytı içerir. Bu kontrol baytının ilk üç biti, yük kapasitesinin varış yeri tarafından kabul edilip edilmeyeceğini, önceki bir talebe cevap olup olmadığını ve bunun yayın payloadı olup olmadığını gösterir. Ayrıca, kontrol baytının son 5 biti, Aktarım katmanı sıra numarasını belirtir. Bu sıra numarası sadece kopya ve eksik komutları tespit etmek ve bir cevabı bir istek ile ilişkilendirmek için kullanılır. Aktarım katmanının payloadı, gerçek HART komutlarını içermektedir.