Чому не створюється жодний дамп, коли додаток встановлено SUID?


16

Я налаштовую своє середовище, щоб створити основний дамп всього, що виходить з ладу, однак, коли я запускаю програму з SUID, встановленою для іншого користувача, ніж виконавець, вона не створює дамп ядра. Будь-яка ідея, чому це може бути? Я не міг його знайти в Інтернеті, я думаю, що це якась функція безпеки, але хотілося б, щоб вона була відключена ...

Проблема:

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

Редагувати: щоб зробити його максимально безпечним, тепер у мене є такий сценарій для налаштування середовища:

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

Тепер залишається лише додати ACL до / var / coredumps, щоб користувачі могли додавати лише файли і не змінювати і не читати їх більше ніколи. Єдиний менший розмір - це те, що у мене все ще будуть проблеми з chroot'ed додатками, які потребують bind mountщось подібне.

Відповіді:


21

Пам'ять встановленої програми може (можливо, навіть) містити конфіденційні дані. Таким чином, основний дамп повинен бути читабельним лише для кореня.

Якщо основний дамп належить root, я не бачу явної діри у захисті, хоча ядро ​​повинно бути обережним, щоб не перезаписати існуючий файл.

Linux відключає основні скиди для програм setxed. Щоб увімкнути їх, вам потрібно зробити щонайменше наступне (я не перевірив, чи цього достатньо):

  • Увімкніть встановлені скиди основних ядер, встановивши fs.suid_dumpablesysctl на 2, наприклад, з echo 2 >/proc/sys/fs/suid_dumpable. (Примітка: 2, а не 1; 1 означає "Я налагоджую систему в цілому і хочу видалити всю безпеку".)
  • Телефонуйте prctl(PR_SET_DUMPABLE, 1)з програми.

Сер, ви зараз мій особистий герой!
DipSwitch

@DipSwitch Дивно, це не те, що fs.suid_dumpableговорить документація . Чи можете ви спробувати налаштувати fs.suid_dumpableбез виклику pctrlпрограми? Можливо, я неправильно розумію документацію, і ви отримуєте ядро, але у цьому випадку володієте коренем.
Жил "ТАК - перестань бути злим"

Ну лайно моя погана ... Файл належить root, але% u (uid) в core_pattern з першого погляду мене обдурив.
DipSwitch

Це рішення також видається застосовно до програм, що працюють під "sudo -s", принаймні для ядра 2.6.27.
Сет Благородний

7

Основний дамп містить копію всього, що було в пам'яті на момент вини. Якщо програма працює suid, це означає, що їй потрібен доступ до того, до чого ви, як користувач, не маєте доступу. Якщо програма отримає цю інформацію, то скидає ядро, ви зможете прочитати цю привілейовану інформацію.

З наведеного вище прикладу видно, що ви можете отримати основний дамп при запуску як root або при видаленні ескалації привілеїв.

Хоча це може бути зручно (для розробників лише для методів), щоб мати легкий доступ до коредера з встановленою програмою, це безпека, і його потрібно залишити на місці.


1
Я боявся вас, де збираєтесь сказати щось подібне :(
DipSwitch

0

Я вирішив, що також поділюсь своїм випадком використання, поки не забуду. Це може бути корисним і для майбутніх мене, оскільки я вирішував таке ж питання місяцями тому, і мені знадобилося занадто багато часу, щоб ще раз дізнатися про це. Добре. це насправді не основний-дамп, але слід стека, який також корисний.

Проблема: Поняття не маю, що там відбувається:

sudo id
Segmentation fault

Рішення: Перемістіть біт suid, sudoщоб він valgrindпрацював нормально:

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

Якщо встановлено налагодження, виписується хороший зворотній шлях.


А тим часом, поки ви не згадаєте про скидання переконань, всі і тітка Тіллі можуть valgrindвсе, що завгодно. Не робіть цього , це величезний ризик для безпеки.
фонбранд

тільки на випробувальній машині і для тестування, звичайно.
Jakuje

дає мені воллі, незалежно.
фонбранд
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.