Kenapa tidak ada dump inti dibuat ketika aplikasi telah diatur SUID?

16

Saya mengatur lingkungan saya untuk membuat dump inti dari segala sesuatu yang macet, namun ketika saya menjalankan program dengan SUID yang ditetapkan pada pengguna yang berbeda dari pengguna yang menjalankannya tidak membuat dump inti. Adakah alasan mengapa hal ini terjadi? Saya tidak dapat menemukannya di mana pun di web, saya pikir ini semacam fitur keamanan tetapi saya ingin menonaktifkannya ...

Masalah:

$ 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)

Sunting: Untuk membuatnya bekerja seaman mungkin, sekarang saya memiliki skrip berikut untuk mengatur lingkungan:

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

Sekarang yang perlu dilakukan adalah menambahkan ACL ke / var / coredumps sehingga pengguna hanya dapat menambahkan file dan tidak memodifikasi atau membacanya lagi. Satu-satunya perampingan adalah bahwa saya masih akan memiliki masalah dengan aplikasi chroot yang membutuhkan bind mountatau sesuatu seperti itu.

DipSwitch
sumber

Jawaban:

21

Memori program setuid mungkin (kemungkinan, bahkan) berisi data rahasia. Jadi dump inti harus dapat dibaca oleh root saja.

Jika dump inti dimiliki oleh root, saya tidak melihat lubang keamanan yang jelas, meskipun kernel harus berhati-hati untuk tidak menimpa file yang ada.

Linux menonaktifkan core dumps untuk program setxid. Untuk mengaktifkannya, Anda harus melakukan setidaknya yang berikut (Saya belum memeriksa apakah ini cukup):

  • Aktifkan dump inti setuid secara umum dengan mengatur fs.suid_dumpablesysctl ke 2, misalnya dengan echo 2 >/proc/sys/fs/suid_dumpable. (Catatan: 2, bukan 1; 1 berarti "Saya sedang men-debug sistem secara keseluruhan dan ingin menghapus semua keamanan".)
  • Panggilan prctl(PR_SET_DUMPABLE, 1)dari program.
Gilles 'SANGAT berhenti menjadi jahat'
sumber
Pak, sekarang Anda adalah pahlawan pribadi saya!
DipSwitch
@DipSwitch Strange, bukan itu maksud dokumentasi untuk fs.suid_dumpableitu. Bisakah Anda mencoba pengaturan fs.suid_dumpabletanpa memanggil pctrlprogram? Mungkin saya salah memahami dokumentasi dan Anda mendapatkan inti tetapi dimiliki oleh root dalam kasus ini.
Gilles 'SO- stop being evil'
Ah sial saya ... file tersebut dimiliki oleh root tetapi% u (uid) di core_pattern menipu saya pada pandangan pertama.
DipSwitch
Solusi ini juga tampaknya berlaku untuk program yang dijalankan di bawah "sudo -s", setidaknya untuk kernel 2.6.27.
Seth Noble
7

Core dump berisi salinan semua yang ada di memori pada saat kesalahan. Jika program ini menjalankan suid, itu berarti ia membutuhkan akses ke sesuatu yang Anda, sebagai pengguna, tidak memiliki akses. Jika program mendapatkan informasi itu kemudian membuang inti, Anda akan dapat membaca informasi istimewa itu.

Dari contoh Anda di atas, tampaknya Anda bisa mendapatkan dump inti saat dijalankan sebagai root atau jika Anda menghapus eskalasi privilege.

Meskipun mungkin berguna (hanya untuk pengembang metode) untuk memiliki akses mudah ke coredump dari program setuid, ini adalah lubang keamanan, dan harus dibiarkan di tempatnya.

unpythonic
sumber
1
Saya takut Anda di mana akan mengatakan sesuatu seperti itu :(
DipSwitch
0

Saya memutuskan bahwa saya juga akan membagikan use case saya, sampai saya melupakannya. Mungkin berguna juga untuk masa depan saya karena saya memecahkan masalah yang sama bulan lalu dan butuh terlalu banyak waktu untuk mengetahuinya sekali lagi. Baik. sebenarnya bukan core-dump, tetapi stack trace yang juga berguna.

Masalah: Tidak tahu apa yang sedang terjadi di sana:

sudo id
Segmentation fault

Solusi: Pindahkan bit suid dari sudoke valgrindberfungsi dengan baik:

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

Jika debuginfo diinstal, backtrace yang bagus akan dihapus.

Jakuje
sumber
Dan sementara itu, sampai Anda ingat untuk mengatur ulang pengajuan, semua orang dan bibi Tillie dapat valgrindapa pun yang mereka inginkan.Jangan lakukan ini , ini adalah risiko keamanan yang sangat besar .
vonbrand
hanya pada mesin uji dan untuk keperluan pengujian saja.
Jakuje
memberi saya semangat, terlepas dari.
vonbrand