Tüm eğitimler
TEKNİK REHBER GÖMÜLÜ LİNUX GÜVENLİK 2026

IMA/EVM
Linux Bütünlük Ölçüm Mimarisi

Dosya bütünlüğünü çalışma zamanında zorlayan IMA ve EVM alt sistemleri — hash politikası, imzalama, TPM entegrasyonu ve uzak tasdik.

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:

Fiziksel erişimJTAG/UART üzerinden flash yazımı, SD kart çıkararak rootfs değişikliği
Yazılım güvenlik açığıArabellek taşması veya path traversal ile /etc/passwd veya /sbin/init üzerine yazma
Tedarik zinciriÜretim hattında cihaza yüklenen firmware'in beklenen firmware olmadığı durum
Privileged kötü amaçlı yazılımCihazda çalışan ve sistem ikili dosyalarını değiştiren rootkit

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 sistemSorumlulukKernel seçeneği
IMA measurementHer erişilen dosyanın SHA-256 hash'ini /sys/kernel/security/ima/ascii_runtime_measurements'a yazarCONFIG_IMA
IMA appraisalsecurity.ima xattr ile saklanan referans hash'i karşılaştırır; eşleşmezse erişimi reddederCONFIG_IMA_APPRAISAL
IMA auditHer ölçüm olayını audit alt sistemine iletirCONFIG_IMA_AUDIT
EVMsecurity.ima ve diğer güvenlik xattr'larının HMAC veya asimetrik imzasını doğrularCONFIG_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.

bash
# Ö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İçerikKullanım
imaSHA-1 hash + dosya adıEski kerneller, önerilmez
ima-ngAlgoritma + hash + dosya adıVarsayılan, SHA-256 desteği
ima-sigima-ng + imza alanıAsimetrik imza doğrulaması
ima-bufima-ng + veri tamponuKEY_CHECK, CRITICAL_DATA
ima-modsigima-ng + kernel modsigModül imzalama

Kernel konfigürasyonu

Kconfig
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

ima_policy=tcbTCB (Trusted Computing Base) politikası: tüm çalıştırılabilir dosyaları, kütüphaneleri, kernel modüllerini ve IMA politika dosyasını ölçer. Üretim başlangıcı için önerilir.
ima_policy=appraise_tcbtcb politikasına ek olarak appraisal zorlaması ekler — tüm TCB dosyalarında security.ima xattr aranır.
ima_policy=secure_bootGüvenli önyükleme için optimize edilmiş: kernel modülleri ve firmware için imza gerektirir.
ima_policy=critical_dataKernel kritik veri yapıları için ölçüm ekler (5.12+).

Özel politika kuralı sözdizimi

ima-policy
# 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

bash
# 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ürBayt 0 (header)İçerikKullanım
IMA_DIGSIG_V10x01RSA imza (2048b)Eski, önerilmez
IMA_DIGSIG_V20x03key_id (4B) + imza boyutu (2B) + imzaGüncel asimetrik imza
IMA_DIGSIG_V30x04EVM HMAC ile birleşikEVM ile entegre
IMA_XATTR_DIGEST0x02SHA-1/256 hash (ham)İmzasız hash
IMA_XATTR_DIGEST_NG0x04algorID (1B) + hashÇoklu algoritma desteği

Hash tabanlı appraisal kurulumu

bash
# 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.

bash
# 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

EACCES: missing xattrDosyada security.ima xattr yok; enforce modunda erişim reddedilir. Fix: evmctl ima_hash veya evmctl sign ile xattr ekle
EACCES: invalid hashDosya içeriği xattr'daki hash ile eşleşmiyor; dosya değiştirilmiş veya bozulmuş
EACCES: unknown keyİmza bilinmeyen bir anahtarla oluşturulmuş; sertifika .ima anahtarlığında değil
ESTALE: immutable flagDosya sistemi salt okunur; xattr yazılamaz. Fix: ro mount'ta ima_appraise=log kullan

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

security.imaIMA hash veya imzası — içerik bütünlüğü
security.selinuxSELinux bağlamı — etiket bütünlüğü
security.smackSmack etiketi (aktifse)
security.capabilityDosya capability değerleri (setcap)
İnode meta-datauid, gid, mode, inode numarası, dosya sistemi UUID (EVM_ATTR_FSUUID=y ise)

EVM HMAC anahtarı oluşturma (TPM trusted key)

bash
# 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

bash
# 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ı

CONFIG_MODULE_SIGModül imzalama desteğini etkinleştirir; imzalı modüller tercih edilir ancak zorunlu değildir
CONFIG_MODULE_SIG_FORCEİmzasız modül yüklemesini tamamen engeller; üretim için önerilir
CONFIG_MODULE_SIG_SHA256SHA-256 ile imzalama (önerilir; SHA-1 yerine)
CONFIG_MODULE_SIG_KEYModül imzalama anahtarının yolu; varsayılan certs/signing_key.pem
CONFIG_SYSTEM_TRUSTED_KEYRINGGüvenilir sertifika keyring; built-in CA sertifikaları buraya eklenir

Modül imzalama anahtarı ve sertifika oluşturma

bash
# 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-policy
# 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.

bash
# /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

local.conf / distro.conf
# 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 (.bb)
# 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

Buildroot menuconfig
# 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

Build-time imzalamaÖzel anahtar yalnızca CI/CD sunucusunda; cihazlara sadece imzalanmış rootfs gönderilir
Sertifika gömmePublic sertifika kernel içine gömülür (CONFIG_SYSTEM_TRUSTED_KEYS) — cihazda değiştirilemez
TPM sealed keyEVM HMAC anahtarı TPM'de PCR değerlerine bağlı saklanır — cihaz dışına çıkamaz
HSM entegrasyonuBüyük ölçekli üretim için imzalama HSM (PKCS#11) üzerinden yapılır

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

bash
# 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)

python3
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.

keylime_verifierSunucu tarafı: cihazlardan düzenli aralıklarla quote + IMA günlüğü alır, doğrular
keylime_registrarCihaz kayıt servisi: EK sertifikası + AK'yı kaydeder
keylime_agentCihaz tarafı: TPM işlemlerini gerçekleştirir, günlüğü iletir
allowlistBeklenen dosya hash'lerinin listesi; verifier bu listeyle karşılaştırır

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/policyYü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_measurementsTPM ile uyumlu ikili ölçüm günlüğü
/sys/kernel/security/ima/runtime_measurements_countToplam ölçüm sayısı
/sys/kernel/security/ima/violationsPolitika ihlali sayısı
/sys/kernel/security/evmEVM durumu (0=devre dışı, 1=HMAC, 2=asimetrik, 3=her ikisi)

Yaygın hataların tanısı

bash
# 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

BelirtiOlası nedenÇözüm
Program çalışmıyor, EACCESsecurity.ima xattr eksikima_appraise=fix ile boot, evmctl ima_hash çalıştır
Program çalışmıyor, hash mismatchDosya güncellendi, xattr eskievmctl ima_hash ile xattr'ı güncelle
Tüm sistem boot edemiyorima_appraise=enforce + xattr eksikima_appraise=fix veya ima_appraise=log ile boot
EVM EACCESEVM anahtarı keyring'de yokinitramfs'te keyctl add adımını kontrol et
violations sayısı artıyorPolitika çok geniş veya dosya sistemi bozukdmesg ve ausearch ile hangi dosya ihlal ediyor bul
Modül yüklenemiyorMODULE_SIG_FORCE + imzasız modülscripts/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:

dont_measure kurallarıtmpfs, procfs, sysfs gibi sanal dosya sistemlerini ölçüm dışı bırak
Hash önbelleklemeKernel, değişmemiş dosyaların hash'ini inode önbelleğinde saklar; tekrar hesaplamaz
Seçici politikaTüm FILE_CHECK yerine yalnızca BPRM_CHECK + MODULE_CHECK ölç
fs.verityfs-verity ile IMA entegrasyonu: verity hash'i IMA'ya aktarır, I/O hash'i elimine eder

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