Uygulamada SUID ayarlandığında çekirdek dökümü nasıl oluşturulmaz?


16

Ortamımı çöken her şeyin çekirdek dökümü oluşturacak şekilde ayarladım, ancak SUID ile bir programı yürüten kullanıcıdan farklı bir kullanıcıda çalıştırdığımda çekirdek dökümü oluşturmuyor. Bunun neden olabileceğine dair bir fikrin var mı? Web üzerinde hiçbir yerde bulamadım, sanırım bir çeşit güvenlik özelliği ama devre dışı bırakmak istiyorum ...

Sorun:

$ cd /tmp
$ cat /etc/security/limits.conf | grep core
*     -     core     unlimited
root  -     core     unlimited

$ ls -l ohai
-rwsr-sr-x 1 root root 578988 2011-06-23 23:29 ohai

$ ./ohai
...
Floating point exception

$ sudo -i
# ./ohai
...
Floating point exception (core dumped)
# chmod -s ohai
# exit
$ ./ohai
...
Floating point exception (core dumped)

Düzenleme: Mümkün olduğunca güvenli çalışması için şimdi ortamı ayarlamak için aşağıdaki komut dosyası var:

mkdir -p /var/coredumps/
chown root:adm /var/coredumps/
chmod 772 /var/coredumps/

echo "kernel.core_pattern = /var/coredumps/core.%u.%e.%p" >> /etc/sysctrl.conf
echo "fs.suid_dumpable = 2" >> /etc/sysctl.conf

echo -e "*\t-\tcore\tunlimited" >> /etc/security/limits.conf
echo -e "root\t-\tcore\tunlimited" >> /etc/security/limits.conf

Artık tek yapmanız gereken / var / coredumps'a ACL eklemektir, böylece kullanıcılar yalnızca dosya ekleyebilir ve bunları bir daha değiştiremez veya okuyamaz. Tek dezavantajı, bir bind mountveya benzeri bir şeye ihtiyaç duyacağım chroot'ed uygulamalarıyla ilgili bir sorunum olması.

Yanıtlar:


21

Setuid programının hafızası gizli veriler içerebilir (hatta muhtemelen). Yani çekirdek dökümü sadece kök tarafından okunabilir.

Çekirdek dökümü köke aitse, çekirdek var olan bir dosyanın üzerine yazmamaya dikkat etmesine rağmen, belirgin bir güvenlik açığı görmüyorum.

Linux, setxid programları için çekirdek dökümleri devre dışı bırakır. Bunları etkinleştirmek için en azından aşağıdakileri yapmanız gerekir (Bunun yeterli olup olmadığını kontrol etmedim):

  • fs.suid_dumpableSysctl değerini 2'ye ayarlayarak setuid çekirdek dökümlerini genel olarak etkinleştirin , örn echo 2 >/proc/sys/fs/suid_dumpable. (Not: 2 değil, 1; 1 “Sistemde bir bütün olarak hata ayıklıyorum ve tüm güvenliği kaldırmak istiyorum” anlamına gelir.)
  • prctl(PR_SET_DUMPABLE, 1)Programdan arayın .

Efendim, artık benim kişisel kahramanımsınız!
DipSwitch

@DipSwitch Garip, belgelerin fs.suid_dumpablesöylediği şey bu değil . Programda fs.suid_dumpablearama yapmadan ayar yapmayı deneyebilir misiniz pctrl? Belki de belgeleri yanlış anlıyorum ve bir çekirdek alıyorsunuz ama bu durumda root'a sahip oluyorsunuz.
Gilles 'SO- kötü olmayı bırak'

Ah benim kötü bok ... dosya kök aittir ama core_pattern% u (uid) ilk bakışta beni kandırıyordu.
DipSwitch

Bu çözüm en azından 2.6.27 çekirdeği için "sudo -s" altında çalışan programlar için de geçerlidir.
Seth Noble

7

Çekirdek dökümü, hata sırasında bellekte olan her şeyin bir kopyasını içerir. Program intihar çalıştırıyorsa, kullanıcı olarak erişiminizin olmadığı bir şeye erişmesi gerektiği anlamına gelir. Program bu bilgiyi alırsa çekirdeği atarsa, bu ayrıcalıklı bilgileri okuyabilirsiniz.

Yukarıdaki örneğinizden, root olarak çalışırken veya ayrıcalık yükselmesini kaldırdığınızda çekirdek dökümü alabileceğiniz anlaşılıyor.

Bir setuid programından bir coredump'a kolay erişim sağlamak (sadece geliştiriciler için) sadece kullanışlı olsa da, bir güvenlik deliğidir ve yerinde bırakılmalıdır.


1
Böyle bir şey söyleyeceğin için korktum :(
DipSwitch

0

Kullanım durumumu da unutana kadar paylaşmaya karar verdim. Aylar önce aynı sorunu çözdüğüm için gelecekteki benim için de kullanışlı olabilir ve bir kez daha öğrenmek çok zamanımı aldı. Tamam. aslında çekirdek dökümü değil, aynı zamanda yararlı olan yığın izidir.

Sorun: Orada neler olduğu hakkında hiçbir fikrim yok:

sudo id
Segmentation fault

Çözüm: suid biraz hareket ettir sudoiçin valgrindçalışmalar cezası:

chmod +s /usr/bin/valgrind
chmod -s /usr/bin/sudo
valgrind /usr/bin/sudo id

Debuginfo kuruluysa, güzel bir geri izleme yazılır.


Bu arada, persmisyonları sıfırlamayı hatırlayana kadar, herkes ve Tillie teyze valgrindistediklerini yapabilir . Bunu yapma , büyük bir güvenlik riski.
vonbrand

sadece test makinesinde ve elbette test amaçlıdır.
Jakuje

ne olursa olsun bana willies veriyor.
vonbrand
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.