00 IMA/EVM neden var
Geleneksel dosya sistemi izinleri (DAC) ve hatta SELinux/AppArmor (MAC) bir dosyanın içeriğinin değişmediğini garanti etmez. IMA bu boşluğu kapatır.
Tehdit modeli
Bir saldırgan root erişimi olmadan bile bazı senaryolarda kritik ikili dosyaları veya konfigürasyon dosyalarını değiştirebilir:
Boot-time vs runtime bütünlük
UEFI Secure Boot / U-Boot Verified Boot
│
▼
Bootloader imzası doğrulanır
│
▼
Kernel imzası doğrulanır
│
▼
┌─────────────────────────────────┐
│ IMA: çalışma zamanı ölçümü │
│ - Her dosya erişiminde hash │
│ - PCR extend → TPM │
│ - Appraisal: politikaya göre │
│ erişime izin ver / reddet │
└─────────────────────────────────┘
│
▼
EVM: extended meta-data bütünlüğü
(security.ima + diğer xattr'ların HMAC'i)
IMA/EVM hangi katmanda çalışır
IMA, Linux Security Module (LSM) çerçevesi içinde integrity subsystem olarak uygulanır. Herhangi bir dosya açma/yürütme/mmap olayında tetiklenen hook'lar sayesinde ölçüm veya doğrulama gerçekleştirilir. Bu sayede kullanıcı alanı değişikliği gerektirmez.
| Alt sistem | Sorumluluk | Kernel seçeneği |
|---|---|---|
| IMA measurement | Her erişilen dosyanın SHA-256 hash'ini /sys/kernel/security/ima/ascii_runtime_measurements'a yazar | CONFIG_IMA |
| IMA appraisal | security.ima xattr ile saklanan referans hash'i karşılaştırır; eşleşmezse erişimi reddeder | CONFIG_IMA_APPRAISAL |
| IMA audit | Her ölçüm olayını audit alt sistemine iletir | CONFIG_IMA_AUDIT |
| EVM | security.ima ve diğer güvenlik xattr'larının HMAC veya asimetrik imzasını doğrular | CONFIG_EVM |
Bu bölümde
- IMA, çalışma zamanında dosya içeriği bütünlüğünü ölçer ve zorlayabilir
- EVM, genişletilmiş xattr bütünlüğünü HMAC veya asimetrik imzayla korur
- Secure Boot + IMA birlikte tam bir bütünlük zinciri oluşturur
01 IMA mimarisi
IMA üç işlem modunda çalışır: measurement (ölçüm), appraisal (doğrulama) ve audit (denetim). Bu modlar birbirini dışlamaz; politika dosyasıyla kombinlenebilir.
Measurement modu
Her dosya erişiminde (exec, mmap, open) dosyanın SHA-256 hash'i hesaplanır ve ölçüm günlüğüne eklenir. Günlük, TPM PCR-10 değerine de extend edilir; böylece günlüğün geriye dönük olarak değiştirilemeyeceği TPM donanımıyla garanti altına alınır.
# Ölçüm günlüğünü oku (her satır: PCR-sha256, template-hash, template-name, file-hash, filename)
cat /sys/kernel/security/ima/ascii_runtime_measurements | head -5
# Örnek çıktı:
# 10 abc123... ima-ng sha256:def456...::/usr/bin/sshd
# 10 bcd234... ima-ng sha256:ef5678...::/lib/x86_64-linux-gnu/libc.so.6
# PCR-10 mevcut değerini göster (tpm2-tools)
tpm2_pcrread sha256:10
Appraisal modu
Appraisal modunda kernel, dosyaya erişim izni vermeden önce security.ima genişletilmiş özelliğindeki (xattr) referans hash veya imzayı kontrol eder. Eşleşme başarısız olursa erişim EACCES ile reddedilir.
open("/usr/bin/sshd")
│
▼
IMA hook tetiklenir
│
├─ security.ima xattr var mı?
│ │
│ HAYIR │ EVET
│ ▼ ▼
│ ima_appraise=fix hash karşılaştır
│ yeni hash yaz eşleşiyor mu?
│ │ │
│ EVET HAYIR
│ │ │
│ erişim ver EACCES
Audit modu
Appraisal sonucundan bağımsız olarak her ölçüm olayını Linux audit sistemine gönderir. ausearch -m INTEGRITY_DATA ile sorgulanabilir.
Template formatları
| Template | İçerik | Kullanım |
|---|---|---|
| ima | SHA-1 hash + dosya adı | Eski kerneller, önerilmez |
| ima-ng | Algoritma + hash + dosya adı | Varsayılan, SHA-256 desteği |
| ima-sig | ima-ng + imza alanı | Asimetrik imza doğrulaması |
| ima-buf | ima-ng + veri tamponu | KEY_CHECK, CRITICAL_DATA |
| ima-modsig | ima-ng + kernel modsig | Modül imzalama |
Kernel konfigürasyonu
CONFIG_INTEGRITY=y
CONFIG_IMA=y
CONFIG_IMA_MEASURE_PCR_IDX=10
CONFIG_IMA_NG_TEMPLATE=y
CONFIG_IMA_DEFAULT_TEMPLATE="ima-ng"
CONFIG_IMA_DEFAULT_HASH="sha256"
CONFIG_IMA_APPRAISAL=y
CONFIG_IMA_APPRAISAL_MODSIG=y
CONFIG_IMA_TRUSTED_KEYRING=y
CONFIG_IMA_KEYRINGS_PERMIT_SIGNED_BY_BUILTIN_OR_SECONDARY=y
CONFIG_EVM=y
CONFIG_EVM_ATTR_FSUUID=y
CONFIG_EVM_EXTRA_SMACK_XATTRS=n # Smack kullanmıyorsanız
CONFIG_TRUSTED_KEYS=y # TPM ile trusted key
CONFIG_ENCRYPTED_KEYS=y
Bu bölümde
- Measurement: hash günlüğü + TPM PCR extend — pasif izleme
- Appraisal: security.ima xattr karşılaştırması — erişim kontrol
- Audit: audit sistemine entegrasyon — log tabanlı uyum
- ima-ng + SHA-256 üretim için önerilen template/hash kombinasyonudur
02 IMA politikası
IMA politikası hangi dosyaların ölçüleceğini, doğrulanacağını ve denetleneceğini tanımlayan kural setleridir. Kernel içinde yerleşik politikalar vardır; özel politika /sys/kernel/security/ima/policy'ye yazılarak yüklenir.
Yerleşik politikalar
Özel politika kuralı sözdizimi
# Genel biçim:
# action [condition ...] [template=TEMPLATE] [pcr=N]
#
# action: measure | dont_measure | appraise | dont_appraise | audit | dont_audit
# condition örnekleri:
# func=FILE_CHECK | BPRM_CHECK | MMAP_CHECK | MODULE_CHECK | FIRMWARE_CHECK
# mask=MAY_READ | MAY_WRITE | MAY_EXEC | MAY_APPEND
# fsmagic=0xEF53 (ext4) | 0x6969 (nfs) | 0x9123683E (btrfs)
# uid=0 | euid=0 | fowner=0
# obj_type=exec_t (SELinux)
# Tüm çalıştırmalar için ölçüm (root da dahil)
measure func=BPRM_CHECK mask=MAY_EXEC
# Kernel modülleri için ölçüm
measure func=MODULE_CHECK
# Firmware için ölçüm
measure func=FIRMWARE_CHECK
# Root tarafından okunan tüm dosyaları ölç
measure func=FILE_CHECK mask=MAY_READ uid=0
# /etc altındaki tüm dosyaları doğrula (appraisal)
appraise func=FILE_CHECK fowner=0 appraise_type=imasig
# NFS üzerindeki dosyaları ölçme (performans)
dont_measure fsmagic=0x6969
# tmpfs üzerindeki dosyaları appraisal'dan muaf tut
dont_appraise fsmagic=0x01021994
# İmzalı modülleri appraise et, diğerlerini reddet
appraise func=MODULE_CHECK appraise_type=imasig
Politikayı çalışma zamanında yükleme
# Politika dosyasını hazırla
cat /etc/ima/ima-policy.conf
# Kernel'e yükle (sadece bir kez yapılabilir; reboot gerekir değişiklik için)
sudo sh -c 'cat /etc/ima/ima-policy.conf > /sys/kernel/security/ima/policy'
# Yüklenen politikayı doğrula
cat /sys/kernel/security/ima/policy
# Kernel parametresi ile önyüklemede yükle
# /boot/cmdline: ima_policy=tcb ima_appraise=fix
# ima_appraise modu:
# off — appraisal devre dışı
# log — başarısızlığı logla, erişime izin ver
# fix — eksik xattr varsa yaz, doğrulama yapma (geçiş dönemi)
# enforce — doğrulama zorunlu, başarısızlık = EACCES
Politika öncelik sırası
Kurallar yukarıdan aşağıya değerlendirilir; ilk eşleşen kural uygulanır. dont_measure ve dont_appraise kuralları, daha özel kurallardan önce konumlandırılmalıdır. Aksi hâlde muafiyet kuralları hiçbir zaman eşleşmez.
Bu bölümde
- Yerleşik politikalar: tcb, appraise_tcb, secure_boot — kernel parametresiyle aktif edilir
- Özel politika: /sys/kernel/security/ima/policy dosyasına yazılarak yüklenir, tek seferlik
- Kural bileşenleri: action + func + mask + fsmagic + uid + fowner + appraise_type
- ima_appraise=fix geçiş döneminde hash'leri yazarken enforce moduna geçişi kolaylaştırır
03 IMA appraisal
IMA appraisal modu, her dosyanın security.ima genişletilmiş özelliğini okur ve içerik hash'ini karşılaştırır. İmzalı appraisal, asimetrik anahtar ile doğrulama ekler.
security.ima xattr yapısı
| Tür | Bayt 0 (header) | İçerik | Kullanım |
|---|---|---|---|
| IMA_DIGSIG_V1 | 0x01 | RSA imza (2048b) | Eski, önerilmez |
| IMA_DIGSIG_V2 | 0x03 | key_id (4B) + imza boyutu (2B) + imza | Güncel asimetrik imza |
| IMA_DIGSIG_V3 | 0x04 | EVM HMAC ile birleşik | EVM ile entegre |
| IMA_XATTR_DIGEST | 0x02 | SHA-1/256 hash (ham) | İmzasız hash |
| IMA_XATTR_DIGEST_NG | 0x04 | algorID (1B) + hash | Çoklu algoritma desteği |
Hash tabanlı appraisal kurulumu
# ima-evm-utils kurulumu
apt-get install ima-evm-utils # Debian/Ubuntu
# Tekil dosya için hash hesapla ve xattr'a yaz
evmctl ima_hash /usr/bin/sshd
# Dosya sistemindeki tüm dosyalar için hash'leri yaz (fix modu)
# Önce ima_appraise=fix ile boot edin, sonra:
find / -fstype ext4 \( -type f -o -type l \) -exec evmctl ima_hash {} \; 2>/dev/null
# xattr içeriğini doğrula
getfattr -n security.ima --only-values -e hex /usr/bin/sshd
# Çıktı: 0x04 (NG tipi) + 0x04 (sha256) + hash_bytes
# evmctl ile doğrulama
evmctl ima_verify /usr/bin/sshd
İmzalı appraisal (IMA_DIGSIG_V2)
Hash tabanlı appraisal, root erişimi olan bir saldırganın hash'i değiştirip xattr'ı güncelleyebileceği bir açığa sahiptir. Asimetrik imza bu sorunu giderir: özel anahtar yalnızca build sunucusundadır.
# 1. IMA imzalama anahtarı oluştur
openssl genrsa -out ima-key.pem 4096
openssl req -new -x509 -key ima-key.pem \
-out ima-cert.pem \
-days 3650 \
-subj "/CN=IMA Signing Key/O=MyOrg"
# 2. Dosyayı imzala
evmctl sign --imasig --key ima-key.pem /usr/bin/sshd
# 3. Sertifikayı kernel anahtarlığına ekle (önyükleme sırasında)
# initramfs içinde veya kernel komut satırında:
evmctl import ima-cert.pem $(keyctl show @.ima | awk '/ima/{print $1}')
# 4. Veya sertifikayı kernel'e göm (derleme zamanında)
# IMA_TRUSTED_KEYRING=y + sertifika DER olarak eklenir
openssl x509 -in ima-cert.pem -outform DER -out ima-cert.der
# certs/signing_key.pem ile birlikte kernel kaynak dizinine koy
# 5. Politikada imza zorunluluğu belirt
# appraise func=BPRM_CHECK appraise_type=imasig
Appraisal başarısızlık nedenleri
Bu bölümde
- Hash appraisal: evmctl ima_hash — kolay kurulum ancak root saldırısına açık
- İmzalı appraisal: evmctl sign — özel anahtar build sunucusunda, cihazda yalnızca public sertifika
- ima_appraise=fix → enforce geçişi: önce tüm dosyalara hash yaz, sonra zorlamayı etkinleştir
04 EVM ve HMAC
EVM (Extended Verification Module), bir dosyanın güvenlik genişletilmiş özelliklerinin (security.ima, security.selinux, security.smack vb.) bütününü tek bir HMAC veya asimetrik imza ile korur.
EVM'in koruduğu alanlar
EVM HMAC anahtarı oluşturma (TPM trusted key)
# 1. TPM trusted key oluştur (kernel 5.0+)
# initramfs içinde veya boot script'te çalıştır:
# TPM'de yeni bir trusted key oluştur
keyctl add trusted evm-key "new 32" @s
EVM_KEYID=$(keyctl show @s | awk '/evm-key/{print $1}')
# Anahtarı blob olarak kaydet (her boot'ta TPM'den geri yüklemek için)
keyctl pipe $EVM_KEYID > /etc/keys/evm-trusted.blob
# 2. Alternatif: yazılım anahtarı (TPM yoksa, üretim için önerilmez)
keyctl add user evm-key "$(dd if=/dev/urandom bs=32 count=1 2>/dev/null | xxd -p)" @s
# 3. EVM'i etkinleştir
echo 1 > /sys/kernel/security/evm
# EVM etkinleştirme değerleri:
# 1 = HMAC (TPM trusted/encrypted key)
# 2 = Asimetrik imza doğrulaması
# 6 = Her ikisi (HMAC + asimetrik)
EVM xattr'larını yazma
# Dosya sistemi için EVM HMAC değerlerini hesapla ve yaz
# (EVM anahtarı yüklenmiş ve EVM etkin olmalı)
evmctl sign --hmac /usr/bin/sshd
# Toplu imzalama (tüm dosya sistemi)
find / -fstype ext4 -type f -exec evmctl sign --hmac {} \; 2>/dev/null
# security.evm xattr içeriğini gör
getfattr -n security.evm --only-values -e hex /usr/bin/sshd
# EVM durumunu kontrol et
cat /sys/kernel/security/evm
# 3 = EVM_INIT_HMAC | EVM_INIT_X509 (her iki mod aktif)
TPM ile anahtar zinciri
TPM SRK (Storage Root Key)
│ sealed-by
▼
evm-trusted.blob ←──── /etc/keys/evm-trusted.blob
│ unseal (PCR-10 değeri doğruysa)
▼
EVM HMAC anahtarı (kernel keyring @s)
│ HMAC-SHA256
▼
security.evm = HMAC(security.ima ‖ security.selinux ‖ inode_meta)
Anahtarın PCR değerlerine bağlanması (sealed key), cihaz üzerinde değişiklik yapılırsa TPM'in anahtarı açmamasını sağlar — tam bütünlük zinciri.
Bu bölümde
- EVM, tüm güvenlik xattr'larını ve inode meta-datasını tek HMAC ile korur
- TPM trusted key: PCR değerlerine bağlı, cihaz dışına çıkamaz
- EVM etkinleştirme: echo 1 > /sys/kernel/security/evm (tek seferlik, reboot gerekir sıfırlama için)
05 Kernel modül imzalama
IMA, kernel modüllerini de kapsayan bir bütünlük zinciri kurar. CONFIG_MODULE_SIG_FORCE ile imzasız modül yüklemesi engellenir; IMA ile birlikte ölçüm günlüğüne de eklenir.
Kernel modül imzalama altyapısı
Modül imzalama anahtarı ve sertifika oluşturma
# Kernel kaynak dizininde otomatik üretim (make modules_sign sırasında yapılır)
# Veya manuel:
# 1. Özel anahtar + kendi kendine imzalı sertifika
openssl req -new -x509 -newkey rsa:4096 \
-keyout signing_key.pem \
-out signing_cert.pem \
-days 3650 \
-subj "/CN=Kernel Module Signing Key" \
-nodes
# 2. Modülü imzala (kernel scripts/sign-file kullanır)
scripts/sign-file sha256 signing_key.pem signing_cert.pem drivers/mydriver/mydriver.ko
# 3. İmzayı doğrula
modinfo mydriver.ko | grep signer
# signer: Kernel Module Signing Key
# 4. Sertifikayı kernel anahtarlığına göm
# Kconfig: CONFIG_MODULE_SIG_KEY="certs/signing_key.pem"
# Veya CONFIG_SYSTEM_EXTRA_CERTIFICATE ile ek sertifika ekle
# Yüklü modüllerin imza durumunu kontrol et
cat /proc/modules | awk '{print $1, $5}'
# E = imzalı, O = imzasız (out-of-tree), F = force-loaded
IMA ile modül ölçümü (ima-modsig)
# IMA politikasına modül ölçüm kuralı ekle
measure func=MODULE_CHECK template=ima-modsig
appraise func=MODULE_CHECK appraise_type=imasig|modsig
# ima-modsig: modül içindeki yerleşik imzayı ölçüm günlüğüne ekler
# Bu sayede modülün dosya sistemi imzası + modül içi imzası birlikte izlenir
Dışarıdan yüklenen modüller (DKMS)
DKMS modülleri kernel güncellendikçe yeniden derlenir ve imzalanmalıdır. DKMS konfigürasyonuna imzalama adımı eklenmezse MODULE_SIG_FORCE aktifken modül yükleme başarısız olur.
# /etc/dkms/framework.conf içine ekle:
sign_tool="/lib/modules/$(uname -r)/build/scripts/sign-file"
mok_signing_key="/var/lib/shim-signed/mok/MOK.priv"
mok_certificate="/var/lib/shim-signed/mok/MOK.der"
# MOK (Machine Owner Key) ile UEFI Secure Boot + DKMS entegrasyonu
mokutil --import MOK.der # Reboot sonrası MOK Manager ile onayla
Bu bölümde
- MODULE_SIG_FORCE: imzasız modül yüklemeyi engeller
- scripts/sign-file: modülü sha256 + RSA ile imzalar
- ima-modsig template: modül içi imzayı IMA günlüğüne ekler
- DKMS: her kernel güncellemesinde otomatik yeniden imzalama ayarlanmalı
06 Yocto/Buildroot entegrasyonu
Üretim görüntüsüne IMA/EVM desteği eklemek için ima-evm-utils paketi, imzalama anahtarları ve doğru kernel konfigürasyonu gerekir.
Yocto entegrasyonu
# meta-security layer'ı ekle (ima-evm-utils burada)
# bblayers.conf:
# BBLAYERS += "${BSPDIR}/sources/meta-security"
# Kernel konfigürasyon parçası oluştur
# meta-YOUR-layer/recipes-kernel/linux/linux-%.bbappend:
# SRC_URI += "file://ima-evm.cfg"
# ima-evm.cfg içeriği:
CONFIG_INTEGRITY=y
CONFIG_IMA=y
CONFIG_IMA_NG_TEMPLATE=y
CONFIG_IMA_DEFAULT_HASH="sha256"
CONFIG_IMA_APPRAISAL=y
CONFIG_IMA_TRUSTED_KEYRING=y
CONFIG_EVM=y
CONFIG_EVM_ATTR_FSUUID=y
CONFIG_TRUSTED_KEYS=y
CONFIG_ENCRYPTED_KEYS=y
CONFIG_MODULE_SIG=y
CONFIG_MODULE_SIG_FORCE=y
CONFIG_MODULE_SIG_SHA256=y
# Image recipe'ye ekle
IMAGE_INSTALL:append = " ima-evm-utils keyutils"
# IMA politika dosyasını kök dosya sistemine koy
IMAGE_INSTALL:append = " ima-policy"
# ima-policy recipe (meta-YOUR-layer/recipes-security/ima-policy/ima-policy.bb):
SUMMARY = "IMA runtime policy"
LICENSE = "MIT"
SRC_URI = "file://ima-policy.conf"
do_install() {
install -d ${D}/etc/ima
install -m 0644 ${WORKDIR}/ima-policy.conf ${D}/etc/ima/ima-policy.conf
}
# Initramfs içinde EVM anahtarı oluşturma (initramfs hook)
# /etc/initramfs-tools/scripts/init-bottom/evm-setup:
# keyctl add trusted evm-key "load $(cat /etc/keys/evm-trusted.blob | xxd -p | tr -d '\n')" @s
# echo 1 > /sys/kernel/security/evm
Buildroot entegrasyonu
# Target packages -> Security -> ima-evm-utils
BR2_PACKAGE_IMA_EVM_UTILS=y
BR2_PACKAGE_KEYUTILS=y
# Kernel konfigürasyonu için:
# linux/linux.config dosyasına yukarıdaki CONFIG değerlerini ekle
# Post-image script ile imzalama (board/myboard/post-image.sh):
#!/bin/bash
ROOTFS="$1/rootfs.ext4"
MOUNT_DIR=$(mktemp -d)
mount -o loop "$ROOTFS" "$MOUNT_DIR"
find "$MOUNT_DIR" -type f \( -perm /111 -o -name "*.so*" \) | while read f; do
evmctl ima_hash "$f" 2>/dev/null || true
done
umount "$MOUNT_DIR"
rmdir "$MOUNT_DIR"
Anahtar dağıtımı ve güvenlik
Bu bölümde
- Yocto: meta-security layer'ı + kernel cfg parçası + ima-policy recipe
- Buildroot: BR2_PACKAGE_IMA_EVM_UTILS + post-image imzalama scripti
- Özel anahtar CI sunucusunda; public sertifika kernel'e gömülü
07 Remote attestation ile IMA
IMA ölçüm günlüğü + TPM quote mekanizması, uzaktaki bir sunucunun cihazın bütünlük durumunu doğrulamasını sağlar. Bu yaklaşım, IETF RATS mimarisinin temelini oluşturur.
Attestation akışı
Attestation Sunucusu (Verifier)
│ 1. Nonce gönder (replay saldırısı engeli)
▼
Cihaz (Attester)
│ 2. TPM2_Quote(PCR-10, nonce) → TPM imzalı PCR alıntısı
│ 3. IMA ascii_runtime_measurements günlüğünü ekle
│ 4. EK sertifikası + AK sertifikası ekle
▼
Attestation Sunucusu
│ 5. TPM imzasını doğrula (EK/AK chain)
│ 6. PCR-10'u günlükten yeniden hesapla
│ 7. Günlükteki her dosya hash'ini referansla karşılaştır
│ 8. PASS/FAIL kararı ver
TPM2 quote alma
# tpm2-tools ile PCR quote al
# 1. Attestation Key (AK) oluştur
tpm2_createek -c ek.ctx -G rsa -u ek.pub
tpm2_createak -C ek.ctx -c ak.ctx -u ak.pub -n ak.name
# 2. Nonce ile PCR-10 alıntısı al
NONCE="$(openssl rand -hex 20)"
tpm2_quote \
--key-context ak.ctx \
--pcr-list sha256:10 \
--message pcr_quote.msg \
--signature pcr_quote.sig \
--qualification "$NONCE" \
--pcrs_output pcr_values.out
# 3. IMA günlüğünü al
cp /sys/kernel/security/ima/ascii_runtime_measurements ima-log.txt
# 4. Sunucuya gönder (örn. curl ile)
curl -X POST https://attestation-server/api/attest \
-F "quote=@pcr_quote.msg" \
-F "sig=@pcr_quote.sig" \
-F "imalog=@ima-log.txt" \
-F "nonce=$NONCE"
PCR extend hesabı (sunucu tarafı doğrulama)
import hashlib
def sha256(data: bytes) -> bytes:
return hashlib.sha256(data).digest()
def pcr_extend(current_pcr: bytes, new_value: bytes) -> bytes:
# TPM PCR extend: SHA-256(current || new)
return sha256(current_pcr + new_value)
def verify_ima_log(log_lines: list[str], expected_pcr: bytes) -> bool:
pcr = bytes(32) # PCR başlangıç değeri: 32 sıfır byte
for line in log_lines:
parts = line.strip().split()
if len(parts) < 2:
continue
template_hash_hex = parts[1]
template_hash = bytes.fromhex(template_hash_hex)
pcr = pcr_extend(pcr, template_hash)
return pcr == expected_pcr
Keylime — açık kaynak remote attestation
Keylime, IMA + TPM tabanlı uzak tasdik için geliştirilmiş açık kaynaklı bir çerçevedir. CNCF projesi statüsündedir.
Bu bölümde
- TPM quote: PCR-10 değerini nonce ile imzalar, replay saldırısını engeller
- Sunucu tarafı: günlükten PCR'ı yeniden hesapla, TPM quote ile karşılaştır
- Keylime: production-grade açık kaynak uzak tasdik çerçevesi (CNCF)
08 Hata ayıklama
IMA/EVM sorunları genellikle erişim reddedilen dosyalar, eksik xattr'lar veya yanlış politika kuralları şeklinde ortaya çıkar. Bu bölüm tanı araçlarını ve yaygın sorunları ele alır.
IMA sysfs arayüzü
| Dosya | İçerik |
|---|---|
| /sys/kernel/security/ima/policy | Yüklü politikayı göster / yeni politika yükle (yazma) |
| /sys/kernel/security/ima/ascii_runtime_measurements | İnsan okunabilir ölçüm günlüğü |
| /sys/kernel/security/ima/binary_runtime_measurements | TPM ile uyumlu ikili ölçüm günlüğü |
| /sys/kernel/security/ima/runtime_measurements_count | Toplam ölçüm sayısı |
| /sys/kernel/security/ima/violations | Politika ihlali sayısı |
| /sys/kernel/security/evm | EVM durumu (0=devre dışı, 1=HMAC, 2=asimetrik, 3=her ikisi) |
Yaygın hataların tanısı
# 1. Politika ihlali sayısını izle
watch -n 1 cat /sys/kernel/security/ima/violations
# 2. Kernel log'unda IMA mesajlarını filtrele
dmesg | grep -i "ima:"
# Örnek: ima: appraise_measurement: <filename>: No such xattr
# Örnek: ima: appraise_measurement: <filename>: hash mismatch
# 3. Audit günlüğünde IMA olaylarını ara
ausearch -m INTEGRITY_DATA -ts recent
ausearch -m INTEGRITY_PCR -ts recent
# INTEGRITY_DATA: appraisal başarısızlığı
# INTEGRITY_PCR: PCR extend olayı
# 4. Belirli bir dosyanın xattr durumunu kontrol et
getfattr -n security.ima -e hex /usr/bin/sshd
getfattr -n security.evm -e hex /usr/bin/sshd
# 5. Dosyanın mevcut hash'ini hesapla ve xattr ile karşılaştır
sha256sum /usr/bin/sshd
evmctl ima_verify /usr/bin/sshd
# 6. IMA anahtarlığını kontrol et
keyctl show %keyring:.ima
keyctl show %keyring:.evm
# 7. Politika kurallarını yeniden yükle (geliştirme sırasında)
# Yükleme tek seferlik! Değişiklik için reboot gerekir.
# Test için: ima_appraise=log boot parametresiyle başlayın
Sorun giderme tablosu
| Belirti | Olası neden | Çözüm |
|---|---|---|
| Program çalışmıyor, EACCES | security.ima xattr eksik | ima_appraise=fix ile boot, evmctl ima_hash çalıştır |
| Program çalışmıyor, hash mismatch | Dosya güncellendi, xattr eski | evmctl ima_hash ile xattr'ı güncelle |
| Tüm sistem boot edemiyor | ima_appraise=enforce + xattr eksik | ima_appraise=fix veya ima_appraise=log ile boot |
| EVM EACCES | EVM anahtarı keyring'de yok | initramfs'te keyctl add adımını kontrol et |
| violations sayısı artıyor | Politika çok geniş veya dosya sistemi bozuk | dmesg ve ausearch ile hangi dosya ihlal ediyor bul |
| Modül yüklenemiyor | MODULE_SIG_FORCE + imzasız modül | scripts/sign-file ile modülü imzala |
IMA performans etkisi
Her dosya açıldığında SHA-256 hesabı gerçekleştirilir. Bu, I/O yoğun iş yüklerinde %5–15 performans kaybına yol açabilir. Azaltma stratejileri:
Bu bölümde
- /sys/kernel/security/ima/ : politika, günlük, ihlal sayacı
- dmesg | grep "ima:" ve ausearch -m INTEGRITY_DATA ile hızlı tanı
- Boot sorunlarında ima_appraise=log veya ima_appraise=fix ile başla
- Performans: dont_measure ile sanal dosya sistemlerini muaf tut, seçici politika kullan