Bugünkü blog yazımda sizlerle WirelessHART protokolünün güvenlik özelliklerinden bahsedeceğim. WirelessHART, gizliliği, bütünlüğü ve kimlik doğrulaması gibi çoklu güvenlik özelliklerine sahiptir. Bu bölümde, WirelessHART protokolünün güvenlik özelliklerini katmanlar şeklinde sizlerle paylaşacağım.
Anahtar Türleri
WirelessHART ağında kullanılan yedi farklı anahtar tipi vardır. Tüm anahtarlar 128 bit AES şifrelidir. Veri Bağlantısı katmanında, public anahtarın yanında bir ağ anahtarı kullanılır. Public anahtar onaltılık gösterimde 7777 772E 6861 7274 636F 6D6D 2E6F 7267 şeklinde gösterilir. Bu anahtar WirelessHART standardında belirtilmiştir. Standartta “Rastgele seçilmiş” olduğu belirtilmiştir, fakat ASCII kodu çözüldüğünde şunu okursuz: “www.hartcomm.org” bu yüzden sonuçta rastgele seçilmiş bir anahtar değildir. Ayrıca, anahtarı standartta belirtmek onu herkese açık hale getirir. Bu nedenle, public bir anahtarın kullanılması, herkesin bu anahtara sahip olması sebebiyle bize hiçbir güvenlik garantisi vermez.
Ağ anahtarı, ağın başlatılması için güvenlik yöneticisi tarafından oluşturulan bir anahtardır. Birleştirme anahtarlarının el sıkışması (hand-shaking) sırasında ağ cihazlarına dağıtılır. Bu anahtar bir ağın her başlatılması için rastgele ve benzersizdir ve bu nedenle saldırganlar tarafından bilinememektedir. Belirli bir ağda iletilen bir paketin söz konusu ağ için geçerli olup olmadığını doğrulamak için kullanılır.
Her iki ağ anahtarı olarak adlandırılan public anahtar, aynı ağda başarıyla katılan tüm aygıtlarda aynı olmalıdır. Public anahtar sabittir, çünkü kod standartlarda sabit olarak belirtilmiştir. Public anahtar, birleştirme anahtarlarının el sıkışması sırasında ağ anahtarının ağ cihazlarına taşınması durumunda gerekecektir.
Ağ katmanında bunlardan farklı anahtarlar da bulunmaktadır, aşağıda paylaştığım tablo’dan diğer anahtarları inceleyebilirsiniz.
Birleştirme (Join Key) anahtarı, ağ yöneticisi (insan vb.) tarafından değiştirilebilen genel olarak ayarlanmış bir anahtar türüdür. Ağ cihazlarındaki bakım portu (SSH, telnet, vb. gibi bir konfigürasyon arayüzü olarak da bilinir) ile doğrudan değiştirilebilir tek anahtar bu anahtardır.
Tek noktaya yayın ahantarları bire bir iletişim için kullanılır. Aygıtlar varsayılan olarak eşler arası tek noktaya yayın anahtarlarına sahip değildir, bu nedenle tüm iletişimlerin hedefe ulaşmak için ağ geçidini geçmesi gerekir. Yayın anahtarları, yayılan komutları ağ yöneticisinden veya ağ geçidinden tüm cihazlara iletmek için kullanılır. Bu dört anahtar el sıkışma sırasında birleştirme cihazına iletilir.
Veri Değişkenleri (Nonces)
Protokolün hem Veri Bağlantısı hem de Ağ katmanları, Mesaj Bütünlüğü Kodlarını (MIC’ler) içerir. Bu MIC’leri hesaplamak için kullanılan algoritma CCM modunda AES-128’dir. Bu AES modu, MIC hesaplamak için kullanılmak üzere bir beklemektedir. Data-Link katmanında “nonce”, ASN’den (paket içinde iletilmez, ancak alıcı ağ ile senkronize ise, gönderenin adresi) (buradan sonra kaynak adresi olarak adlandırılacaktır) çıkarılabilir. Kaynak adresi ya tam EUI-64 adresidir (bir katılım isteği paketi için) ya da cihazın sıfırlarla doldurulmuş adıdır. Bu, kaynak adresin veya takma ad alanının uzunluğu her zaman 8 bayttır. ASN’nin boyutu 5 bayttır, yani Data-Link katmanı toplamı 13 bayttır.
Ağ katmanında MIC hesaplamak için kullanılan “nonce” aşağıdakilerden oluşur: “Nonce”‘nin ilk baytı birleştirme yanıtları için 1’e, diğer tüm paketler için 0’a ayarlanır. Sonraki üç bayt, söz konusu belirli aygıt için sayacın en önemli üç baytı olacaktır. Sonraki bayt, paketin Ağ katmanında iletildiği gibi sayaç alanı olacaktır. “Nonce”‘nin son 8 baytı kaynak adres olacaktır (EUI-64 adresi veya sıfır doldurulmuş takma ad). Bu nedenle, “nonce” toplam 13 bayt uzunluğa sahiptir.
Veri Bağlantısı Katmanı
Paketin ilk katmanı (Fiziksel katmandan sonra), Veri Bağlantısı katmanı, CRC-16 kullanılarak tüm çerçeve üzerinde hesaplanan bir sağlama bayrakları ve ayrıca bir Mesaj Bütünlüğü Kodu (MIC) içerir. CRC sağlama bayrakları ağ paketinin bütünlüğünü sağlar. CRC arızalanırsa, başka kontroller yapılmadan paket anında atılır.
Ayrıca Veri Bağlantı katmanı bir Mesaj Bütünlüğü Kodu (MIC) içerir. MIC, Public anahtar veya ağ anahtarı kullanılarak hesaplanır. Public anahtar, henüz ağa henüz katılmamış (örneğin reklamlar) veya ağdan kimlik doğrulaması yapma sürecinde olan cihazlar tarafından ayrıştırılması gereken PDU’lar (paketler) için kullanılır. Diğer tüm paketler için ağ anahtarı kullanılır.
MIC, önceki paragrafta açıklandığı şekilde yapılmış bir “nonce” kullanılarak hesaplanır.
Bir paket ağı geçtiğinde, ağdaki tüm cihazlar bu MIC’yi doğrulayabilecektir, çünkü ağ anahtarı ağın bir parçası olan tüm cihazlar tarafından bilinir. WirelessHART özelliklerine göre, bu özgünlük sağlar. Ancak, ağdaki her cihaz bu anahtarı bildiğinden, yalnızca bu paketin ağa başarıyla katılan bir aygıt tarafından iletildiğini gösterir. Bu anahtarın sağladığı tek kimlik doğrulaması, bu paketin bu ağ için geçerli olması, çünkü ağın bir parçası olmayan cihazlar bu anahtarı bilmemesidir.
Ağ Katmanı
Paketin ikinci katmanı olan Ağ katmanı başka bir MIC içerir. Bu MIC, ağa katılma sürecinde olan cihazlar için birleştirme anahtarı kullanılarak veya diğer tüm paket türleri için uygun oturum anahtarı kullanılarak hesaplanır. MIC, paketin tamamı üzerinden hesaplanmaz. Özellikle, MIC hesaplanırken TTL, MIC ve sayaç alanları 0x00 olarak ayarlanır. Bu alanlar daha sonra, paketin aktarılmak üzere Veri Bağlantısı katmanına teslim edilmesinden önce doldurulur.
WirelessHART özelliğine göre, Ağ katmanı MIC, alıcıya kimlik doğrulama sağlar. Bununla birlikte, birleşim anahtarını bilen herhangi bir cihaz bir araya gelen el sıkışmasına müdahale edebileceğinden, ağdaki tüm cihazlar birbirlerinin oturum anahtarlarını tanıyabilir. Bu yüzden bu MIC aslında Veri Bağlantısı katmanında bulunan MIC’ten daha fazla özgünlük sağlamaz ve bu nedenle gereksizdir.
Ağ katmanının payload’ı, MIC hesaplamak için kullanılan ile aynı olmayan AES-128 CCM kullanılarak şifrelenir. Payload’ı şifrelemek için kullanılan anahtar paket türüne bağlıdır: birleştirme istekleri için birleştirme anahtarı kullanılır, diğer tüm paketlerde karşılık gelen oturum anahtarı kullanılır. Bu, tümüyle gizlilik sağlamaz, çünkü birleşim anahtarını bilen herhangi bir cihaz başka bir cihazın oturum anahtarını engelleyebilir ve bu nedenle bu diğer cihazlar tarafından gönderilen payloadların şifresini çözebilir. Bu amaçlanan davranış olmamasına rağmen (her cihaz yalnızca kendilerine yönelik paketleri dinlemelidir), bu kesinlikle olası bir saldırı vektörüdür.
Protokolün diğer katmanları, ek güvenlik özelliklerine sahip değildir ve protokolün Veri Bağlantısı ve Ağ katmanları tarafından sağlanan kimlik doğrulama ve gizliliğe dayanır.
Doğrulama
Paketin doğrulanması, başarılı bir şekilde yeniden yapılandırılıp yapılandırılamayacağı ve alınan paketin önceden alınmış bir paketin kopyası olmadığının kontrol edilmesiyle sağlanır. “Nonce” geçerli değilse, paket bırakılacaktır. Aksi takdirde, MIC kontrol edilecektir.
MIC kontrolü başarısız olursa, paket atılır. Bu durum paket aldığı bir tabloyu tutan her bir cihaz tarafından uygulanmaktadır. Bu paketlerde kullanılan son “nonce” değeri bir tabloda saklanır. Bir sonraki paket için, “nonce”, tabloda depolanandan daha yüksek olmalıdır.