dmesg_restrict¶
kernel.dmesg_restrict, unprivileged kullanıcıların kernel log'unu okumasını engeller ve KASLR/pointer leak'lerine kolay erişimi reddeder.
Mechanism¶
Note
Kernel ring buffer'ı (dmesg(8), syslog(2) ve /dev/kmsg üzerinden okunur)
çoğu zaman KASLR'yi etkisizleştirmek ve exploit kurmak için yararlı kernel pointer'ları,
slab/heap adresleri ve oops/WARN çıktısı içerir. dmesg_restrict=0 iken
hiçbir kısıtlama yoktur; 1'e set edildiğinde caller'lar buffer'ı okumak için
CAP_SYSLOG tutmak zorundadır. Compile-time CONFIG_SECURITY_DMESG_RESTRICT,
sysctl'in boot default'unu belirler.
Bu, info leak'lere karşı defense-in-depth olarak kptr_restrict (ham pointer yazdırmayı bastırır) ile birlikte çalışır.
Walkthrough¶
Unprivileged bir kullanıcı olarak:
CAP_SYSLOG (ya da root) tutan bir process onu hâlâ normal şekilde okur.
kernel.org doc (verbatim)
This toggle indicates whether unprivileged users are prevented from using
dmesg(8)to view messages from the kernel's log buffer. Whendmesg_restrictis set to 0 there are no restrictions. Whendmesg_restrictis set to 1, users must haveCAP_SYSLOGto usedmesg(8). The kernel config optionCONFIG_SECURITY_DMESG_RESTRICTsets the default value ofdmesg_restrict.
Mitigation¶
Zaten leak olmuş log'ları geriye dönük olarak temizlemez ve CAP_SYSLOG'u meşru şekilde
tutan bir process'i durdurmaz. Attacker'lar başka leak primitive'lerine geri döner
(kptr_restrict gevşekse /proc/kallsyms,
timing/side channel'lar ya da güvenlik açığının kendi info-leak'i). Distro default'ları
değişir (Ubuntu bunu etkinleştirir).