Tại sao không có kết xuất lõi được tạo khi ứng dụng có SUID được đặt?


16

Tôi thiết lập môi trường của mình để tạo kết xuất lõi của tất cả mọi thứ gặp sự cố, tuy nhiên khi tôi chạy một chương trình với SUID được đặt trên một người dùng khác với người dùng thực thi thì nó không tạo ra kết xuất lõi. Vài ý tưởng tại sao nó như thế? Tôi không thể tìm thấy nó ở bất cứ đâu trên web, tôi nghĩ đó là một loại tính năng bảo mật nhưng tôi muốn nó bị vô hiệu hóa ...

Vấn đề:

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

Chỉnh sửa: Để làm cho nó hoạt động an toàn nhất có thể, bây giờ tôi có đoạn script sau để thiết lập môi trường:

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

Bây giờ tất cả những gì còn lại phải làm là thêm ACL vào / var / coredumps để người dùng chỉ có thể thêm tệp và không sửa đổi cũng như không đọc chúng nữa. Điều đáng tiếc duy nhất là tôi vẫn sẽ gặp vấn đề với các ứng dụng chroot'ed cần một bind mounthoặc một cái gì đó tương tự.

Câu trả lời:


21

Bộ nhớ của chương trình setuid có thể (có khả năng, thậm chí) chứa dữ liệu bí mật. Vì vậy, kết xuất lõi sẽ chỉ có thể đọc được bằng root.

Nếu kết xuất lõi được sở hữu bởi root, tôi không thấy lỗ hổng bảo mật rõ ràng, mặc dù kernel sẽ phải cẩn thận để không ghi đè lên tệp hiện có.

Linux vô hiệu hóa các bãi chứa lõi cho các chương trình setxid. Để kích hoạt chúng, bạn cần thực hiện ít nhất các thao tác sau (Tôi chưa kiểm tra xem điều này có đủ không):

  • Nói chung, kích hoạt các bãi chứa lõi setuid bằng cách đặt fs.suid_dumpablesysctl thành 2, ví dụ như với echo 2 >/proc/sys/fs/suid_dumpable. (Lưu ý: 2, không phải 1; 1 có nghĩa là tôi đang gỡ lỗi toàn bộ hệ thống và muốn xóa tất cả các bảo mật.)
  • Gọi prctl(PR_SET_DUMPABLE, 1)từ chương trình.

Thưa bạn, bây giờ bạn là anh hùng cá nhân của tôi!
DipSwitch

@DipSwitch Lạ, đó không phải là những gì tài liệu fs.suid_dumpablenói. Bạn có thể thử cài đặt fs.suid_dumpablemà không gọi pctrltrong chương trình? Có thể tôi đang hiểu nhầm tài liệu và bạn có được một lõi nhưng được sở hữu bởi root trong trường hợp này.
Gilles 'SO- ngừng trở nên xấu xa'

Ah xấu của tôi ... tập tin được sở hữu bởi root nhưng% u (uid) trong core_potype đã đánh lừa tôi từ cái nhìn đầu tiên.
DipSwitch

Giải pháp này dường như cũng áp dụng cho các chương trình chạy trong "sudo -s", ít nhất là cho kernel 2.6.27.
Seth Noble

7

Kết xuất lõi chứa một bản sao của tất cả mọi thứ trong bộ nhớ tại thời điểm xảy ra lỗi. Nếu chương trình đang chạy suid, điều đó có nghĩa là nó cần quyền truy cập vào thứ mà bạn, với tư cách là người dùng, không có quyền truy cập. Nếu chương trình có được thông tin đó sau đó bỏ lõi, bạn sẽ có thể đọc thông tin đặc quyền đó.

Từ ví dụ của bạn ở trên, có vẻ như bạn có thể nhận được kết xuất lõi khi chạy bằng root hoặc nếu bạn loại bỏ sự leo thang đặc quyền.

Mặc dù nó có thể hữu ích (chỉ dành cho các nhà phát triển methinks) để dễ dàng truy cập vào một coredump từ một chương trình setuid, nhưng đó là một lỗ hổng bảo mật và nên được đặt đúng chỗ.


1
Tôi sợ bạn sẽ nói điều gì đó như thế :(
DipSwitch

0

Tôi quyết định rằng tôi cũng sẽ chia sẻ trường hợp sử dụng của mình, cho đến khi tôi quên nó. Nó cũng có thể hữu ích cho tôi trong tương lai vì tôi đã giải quyết vấn đề tương tự vài tháng trước và tôi đã mất quá nhiều thời gian để tìm hiểu thêm một lần nữa. Đồng ý. nó không thực sự là core-dump, nhưng stack stack cũng hữu ích.

Vấn đề: Không biết chuyện gì đang xảy ra ở đó:

sudo id
Segmentation fault

Giải pháp: Di chuyển bit suid từ sudođể valgrindhoạt động tốt:

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

Nếu debuginfo được cài đặt, backtrace đẹp sẽ được viết ra.


Và trong khi đó, cho đến khi bạn nhớ đặt lại các bản thuyết phục, mọi người và dì Tillie có thể làm valgrindbất cứ điều gì họ muốn. Đừng làm điều này , nó là một rủi ro bảo mật rất lớn .
vonbrand

Chỉ trên máy thử nghiệm và cho mục đích thử nghiệm tất nhiên.
Jakuje

cho tôi ý chí, bất kể.
vonbrand
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.