TPM geçmişi hakkında kısaca
Neden ihtiyacımız var?
TPM Nedir?
TPM modülleri değiştirilebilir midir?
Raspberry Pi gibi çip üzerinde sistemler için TPM mikro-kartlar üreten firmalar vardır. Bunun yanında Raspberry Pi 4 ARM destekli Trusted Zone ile gelmektedir. Aynı zamanda Pi 3B+ kısmen de olsa, ARM Trusted Zone desteği sağlamaktadır.
Genel olarak TPM çipler, veri işleme konusunda kayda değer hıza sahip değildir (bazı TPM modüllerinde, bazı işlemleri tamamlamak, bir kaç saniye sürebilmektedir), bu yüzden TPM modüllerini kriptografik hesaplama işlemleri için kullanmayı düşünüyorsanız, tekrar düşünün..
Platform Configuration Registers (PCR)
TPM tarafından önerilen asıl özellik PCRlerdir (platform configuration registers). PCR ler: “kirptolojik olarak yazılımların durumunu ölçmek, platform üzerinde çalışan yazılımı ve konfigürasyonu saklamak için” kullanılır. Başka bir değişle, PCR ler , platform üzerinde çalışan yazılımları doğrulamak için kullanılabilir anahtarlar saklarlar. Buna rağmen, TPM bu operasyonu tek başına yapabilecek yetenekte değildir, bu yüzden ön yükleyici (boot-loader), kernel, TPM yi kullanarak bu işlemleri gerçekleştirir.
Linux ve windows gibi modern işletim sistemleri bunu işlemleri kendileri yapabilecek yetenektedir, bu yüzden sadece TPM yi bios ayarlarından aktif hale getirmek kadar basit bir konfigürasyonla devreye alınabilir.
Diğer yandan, PCR ler , aynı zamanda intelin Trusted Execution Technology denilen, Güvenilir çalıştırma teknolojisi ile de kullanılır.
Ölçülebilir Önyükleme (measured boot)
Windows/Linux gibi işletim sistemleri, TPM modülünü boot sırasında kullanırken, bu boot sürecine “ölçülebilir önyükleme (measured boot)” adı verilir. Boot sırasında, işletim sistemi, boot işlemi için gerekli olan her bileşenin ayrı ayrı birer kriptografik özetini(hash) çıkartarak, bunları TPM modülüne gönderir. Boot bileşenlerinden herhangi birisine yapılacak olan herhangi bir müdahale, özet değerlerini değiştirecektir. TPM ile bu özet değerleri farklılık gösterecektir. Buna Measured Boot (ölçülebilir boot) adı verilir.
TPM Türleri
Genel olarak beş çeşit TPM vardır. Bunlar;
- Discrete TPM (dTPM) fiziksel bir çip ya da gömülü bir bileşen olarak anakart üzerinde ya da mikro-pcb üzerinde yer alırlar
- Integrated TPM Entegre görüntü kartları gibi, başka bir çipe entegre edilmiş TPM çipleridir.
- Software TPM bir nevi yazılım emülatörü olarak değerlendirilebilir. Herhangi bir yazılımın çalışması gibi çalışır.
- Virtual TPM (vTPM) genellekli bir sanallaştırma platformu ile kullanılır. Bir çeşit yazılımsal TPM dir, ve sanal makinanın izole bir ortamda çalışmasını sağlar
- Firmware TPM (aynı zamanda fTPM olarak da geçer, işlemci üzerinde ekstra bir micro-code olarak bulunur) dicrete TPM e benzer fonksiyonlar sağlar, fakat CPU tarafından çalıştırılır. Intel ‘in geliştirdiği Trusted Execution Environment bu kapsamdadır. Firmware TPM aynı zamanda Intel’in PTT (Platform Trust Technology) ya da ARM tarafından geliştirilen TrustZone olarak da bilinir.
Not: Firmware TPM ve TPM’in Firmware’i farklı şeylerdir.
Apple Mac kullanıcıları için Ek Not: Apple geçtiğimiz senelerde T1 ve T2 güvenlik çiplerini geliştirdi. Bu çip, TPM olmamasına rağmen, TPM fonksiyonlarını “Entegre edilmiş TPM” yaklaşımıyla sağlamaktadır. Apple Tn çipleri, tipik bir TPM çipinden çok ileridir. Aynı zamanda SMC (System Management Controller) görevini yaparken, macOS için parmak izi, Touch id gibi kimlik bilgilerini şifrelenmiş olarak sağlar, T1/T2 çipleri üzerlerinde ayrı bir gömülü işletim sistemi çalıştırılar (eOS, daha basite indirgenerek watchOS olarak da kullanılmıştır). Bu sayede işletim sisteminden tamamen bağımsız hale gelmiştir. Özelliklerinin başında, FaceTime doğrulamaları için, renk düzeltme yeteneklerini sağlaması, aynı zamanda bir görüntü sinyal işleme görevi sunmaktadır. T2 ayrıca ses sinyal işleme yeteneklerine ve SSD kontrolcüsüne sahiptir. Anlaşılacağı üzere, Tn çiplerinin tasarımı TPM den çok daha ötededir.
TPM Standartı
TPM bir standart haline gelmiştir, ve gün geçtikçe gelişmektedir. Orjinal spesifikasyonlar TPM 1.2 ve TPM 2.0 olarak yayınlanmıştır.
1.2 ve 2.0 arasında en büyük fark, TPM 1.2 sadece SHA-1 ve RSA-2048 desteklemek üzere tasarlanmıştır. TPM 2.0 ise bu yetenekleri genişleterek cipher suite ‘den ötesi olmak için tasarlanmıştır. TPM2.0 hangi cipher suiteleri desteklediğini belirtmez, bunun için TPM2.0 üreticisine başvurmak gerekmektedir. TPM 2.0 aynı zamanda kamu standartlarını da desteklemektedir.
TPM Kullanım yaygınlığı
Windows 10 ‘un tanıtımıyla birlikte, pekçok donanım sağlayıcı ürünlerine TPM 2.0 entegresini gerçekleştirdi. Yani Modern laptop ve bilgisayarların pek çoğu TPM 2.0 ile gelmektedir.
Windows 10 kullanıcıları TPM 2.0 ile sorun yaşamazken, Linux kullanıcıları bu kadar şanslı değil, ve bazen halen sorunlar yaşayabilmektedirler. Maalesef Linux topluluk destekli bir işletim sistemi olduğu için, bu tür teknolojilerin adapte edilmesinde halen biraz geride kalabilmektedir, zira donanımlar TPM 2.0 ile gelmekteyken, pek çok linux aracı, halen sadece TPM 1.2 desteklemektedir.
Linux ile TPM 1.2 konfigürasyonu
Öncelikle herhangi bir işletim sisteminde TPM ile uğraşabilmeniz için, TPM özelliğinin biostan aktive edilmiş olması gerekmekte. Bu adımı zaten yaptığınızı kabul ediyorum.
Not: Eğer TPM kapalı haldeyse, Linux kernel boot sırasında “a tpm error (7) occurred attempting to read a pcr value” şeklinde bir hata mesajı verecektir. Bunu düzeltmek için biostan TPM i aktif hale getirmeniz yeterli olacaktır.
Bu adımları tamamlayıp, giriş konsoluna düştüğünüzü varsayarsak, root ile giriş yaptığınızda TPM i incelemk için aşağıdaki komutları verebilirsiniz.
st of all verify that your kernel can see the TPM module correctly by checking your /var/log/message like this:
# cat /var/log/messages | grep -i tpm
TPM modülünün sürüm bilgilerini ve tarihini vermesi gerekmekte:
Mar 17 20:37:15 vmm kernel: tpm_tis 00:05: 1.2 TPM (device-id 0xD, rev-id 18)
Eğer herhangi bir cevap alamadıysanız, şu komutu deneyin;
# dmesg | grep -i tpm
daha sonra tcsd servisi çalışıyor mu kontrol edin:
# systemctl status tcsd
eğer bu servis yoksa, aşağıdaki komutlarla kurabilirsiniz
Debian, Kali, Ubuntu ve Pardusta ;
# apt install trousers
Eğer servis yüklü fakat çalışmıyorsa;
# systemctl start tcsd
Eğer servisin modüle erişiminde bir hata ile karşılaşırsanız;
“Tspi_Context_Connect failed: 0x00003011 – layer=tsp, code=0011 (17), Communication failure”. benzer bi mesaj olacaktır. Bu sorunla karşılaşmamak için tcsd servisini başlatmalısınız.
Servisi her açılışta otomatik başlatmak için ise:
# systemctl enable tcsd
Bu noktadan sonra, TPM araçlarını yükleyebilirsiniz;
Debian, Kali, Ubuntu ve Pardusta ;
# apt install tpm-tools -y
Ve son olarak, artık TPM modülünü doğrudan sorgulayabilirsiniz;
# tpm_version
Eğer herşey yoludna ise, aşağıdakine benzer bir mesaj alacaksınız
TPM 1.2 Version Info:
Chip Version: 1.2.3.19
Spec Level: 2
Errata Revision: 2
TPM Vendor ID: <VENDORID>
Vendor Specific data: AAAAAAAAAAA BB
TPM Version: CCCCCCCC
Manufacturer Info: DDDDDDDD
Linux ile TPM 2.0 Konfigürasyonu
Öncelikle kernelde TPM modülünün düzgün bir şekilde yüklendiğinden emin olalım.
# dmesg | grep -i tpm
Eğer TPM yok ya da düzgün bir şekilde yüklenmediyse şuna benzer bir mesaj alacaksınız;
ima: No TPM chip found, activating TPM-bypass!
Eğer bu mesajı aldıysanız, öncelikle TPM modülünüzün aktif olduğundan (ve hatta olduğundan) emin olmanız gerekmekte.
Eğer herşey yolunda ise TPM modülünün bilgillerine erişeceksiniz;
Mar 17 20:37:15 vmm kernel: tpm_tis 00:05: 2.0 TPM (device-id 0xD, rev-id xy)
bir başka yolu da /dev/tpmN cihazını kontrol etmektir:
# ls /dev/tpm0
ve bir başka yolda, sisteme yüklenen anahtarların kontrol edilmesi olabilir;
# cat /proc/keys
Yine de son iki metod, TPM 2.0 kontrol etmek için ilk metod kadar güvenilir değildir.
Eğer linuıx kernel sürümünüz 5.6 ve üzeri ise, aynı zamanda ;
# cat /sys/class/tpm/tpm*/tpm_version_major
komutuyla TPM 2.0 ı kontrol edebilirsiniz.
TPM 2.0 modülünü kontrol etmek için gerekli servisler
Öncelikle, tpm2-abrmd servisi kurulumu kontrol edelim;
# systemctl status tpm2-abrmd
Eğer servisi bulamıyorsanız şu komutla kurabilirsiniz;
Debian, Kali, Ubuntu ve Pardusta:
# apt install tpm2-abrmd
Eğer tpm2-abrmd kuruluysa, aşağıdaki komut ile çalıştıralım:
# systemctl start tpm2-abrmd
eğer hata mesajı vermeden çalışırsa, otomatik çalışma için servisi aktif hale getirelim;
# systemctl enable tpm2-abrmd
Bu noktadan sonra tpm2 araçlarını aşağıdaki komutla kurabilirsiniz:
Debian, Kali, Ubuntu ve Pardusta;
# apt install tpm2-tools
Kurulum tamamlandıktan sonra, artık TPM modülünüzün kontrolünü ele geçirebilirsiniz:)
Not: Microsoft, Windows 11 ile beraber, TPM modülünü opsiyon olmaktan çıkartıp, zorunlu hale getirmiştir.
Kaynaklar:
Linux Foundation presentation: TCG TPM2 Software Stack & Embedded Linux
Linux TPM driver kaynak kod repo > github.com
Comments are closed.