Cách giải quyết của 'ptrace_scope' cho các chương trình Wine và có rủi ro nào không?


37

Để chạy các chương trình Windows nhất định trong RƯỢU, bạn cần có cách giải quyết này:

echo 0|sudo tee /proc/sys/kernel/yama/ptrace_scope

Theo các trang web hỗ trợ, điều này là do lỗi trong kernel Ubuntu ngăn ptrace và WINE chơi tốt với nhau.

Sử dụng lệnh trên, bạn đặt ptrace thành 0 mà theo nghiên cứu tôi đã thực hiện (đừng hỏi tôi trang web nào, tôi có vẻ như rất nhiều trong số họ), ptrace phải thực hiện với các tương tác giữa các chương trình. Cài đặt 0 dễ dàng hơn cài đặt 1.

Tôi phải giả định rằng có một lý do chính đáng để Ubuntu muốn ptrace = 1 vì vậy điều này dẫn tôi trở lại dạng câu hỏi ngắn.

Có bất kỳ rủi ro liên quan đến việc thiết lập ptrace = 0. Hạ an ninh? Vấn đề gỡ lỗi? có ai khác mà tôi không nghĩ đến không ???

PS cho bất cứ ai đọc điều này tự hỏi lỗi gì gây ra, các chương trình Windows sẽ không mở được, trong System Monitor, bạn sẽ thấy nhiều phiên bản của chương trình đang cố mở và cuối cùng chúng sẽ thoát và nếu bạn chạy progam đối với thiết bị đầu cuối, bạn sẽ gặp một lỗi cho bạn biết rằng đã đạt đến số lượng phiên bản chương trình tối đa.


Dưới đây là một mô tả được liên kết từ thông báo lỗi bật lên PlayOnLinux, hủy bỏ cài đặt .Net 4.5 trừ khi ptrace_scope được đặt thành 0: playonlinux.com/en/iêu
pabouk

Câu trả lời:


41

Câu trả lời ngắn gọn: chưa có nguy hiểm thực tế nào, nhưng hãy đọc tiếp để biết cách tốt hơn ...


Điều gì ptrace này anyway?

điều này là do lỗi trong kernel Ubuntu ngăn ptrace và WINE chơi tốt với nhau.

  • Không, bảo vệ ptrace là một biện pháp bảo mật hạt nhân có chủ ý được giới thiệu lần đầu tiên xung quanh Ubuntu 10.10. Đây không phải là một lỗi và do đó sẽ không được "sửa".

  • Nói một cách đơn giản, ptrace_scopegiá trị mặc định của 1khối một quá trình kiểm tra và sửa đổi quy trình khác trừ khi quy trình thứ hai (con) được bắt đầu bởi quy trình đầu tiên (cha mẹ).

  • Điều này có thể gây ra sự cố với một số chương trình trong Wine do cách wineservercung cấp "Dịch vụ Windows" cho các chương trình này.

Những rủi ro trong việc thiết lập ptrace_scope0gì?

  • Điều này khôi phục hành vi cũ trong đó một quy trình có thể "theo dõi" một quy trình khác, ngay cả khi không có mối quan hệ cha-con.

  • Về lý thuyết, một phần mềm độc hại có thể sử dụng điều này để gây hại cho bạn / máy tính của bạn; ví dụ: nó có thể đính kèm vào Firefox và ghi lại tất cả các URL / mật khẩu của bạn, v.v. Trong thực tế, điều này cực kỳ khó xảy ra trừ khi bạn mù quáng cài đặt các cuộc tranh luận nhị phân từ các trang web ngẫu nhiên, v.v.

  • Theo như gỡ lỗi đi, các 0thiết lập là trong thực tế cần thiết cho gdb, strace, vv để gắn vào phi trẻ em trừ khi bạn chạy chúng với quyền cao (sudo).

Các vấn đề với cách giải quyết là gì?

  • Cách giải quyết có chút vấn đề vì ptrace_scopelà giá trị toàn cầu và trong khi được đặt thành 0, tất cả các quy trình trên hệ thống của bạn đều được miễn trừ khỏi giới hạn không phải là trẻ em.
  • Nếu bạn sử dụng cách giải quyết, hãy đặt nó vào một tập lệnh bash đơn giản cho phép nó, chạy chương trình Windows của bạn và sau đó vô hiệu hóa (đặt thành 1) khi thoát.
    • KHÔNG làm cho ptrace_scopethế giới có thể ghi được (666) như bài đăng trên diễn đàn khuyến nghị - đó là một rủi ro bảo mật rất lớn bởi vì bây giờ bất kỳ quy trình nào cũng có thể thay đổi nó theo ý muốn!

Có một giải pháp tốt hơn?

  • Một giải pháp tốt hơn mà an toàn hơn và không yêu cầu sửa đổi lặp lại ptrace_scopecấp các khả năng ptrace của Wineerver .

    • Trong một thiết bị đầu cuối:

      sudo apt-get cài đặt libcap2-bin 
      sudo setcap cap_sys_ptrace = eip / usr / bin / Wineerver
      sudo setcap cap_sys_ptrace = eip / usr / bin / rượu-preloader
      
    • Điều này miễn cho các máy chủ rượu vangcác chương trình nạp tiền rượu vang khỏi các hạn chế ptrace không dành cho trẻ em và cho phép chúng thực hiện bất kỳ quy trình nào.

    • Việc này chỉ cần được thực hiện một lần và an toàn hơn vì các tệp nhị phân này thường là từ một nguồn đáng tin cậy - kho chính thức hoặc Wine PPA chính thức, vì vậy chúng sẽ không phải là phần mềm độc hại.

Nếu bạn đang sử dụng Crossover

Cài đặt libcap2:

sudo apt-get cài đặt libcap2-bin;

Sau đó, thêm một ngoại lệ cho Crossover:

sudo setcap cap_sys_ptrace = eip / opt / cxoffice / bin / Wineerver;
sudo setcap cap_sys_ptrace = eip / opt / cxoffice / bin / Wine-preloader;

Cuối cùng, thêm thư viện của nó vào ld.so.conf (hoặc bạn sẽ gặp lỗi "trong khi tải thư viện dùng chung: libwine.so.1: không thể mở tệp đối tượng dùng chung: Không có tệp hoặc thư mục như vậy"):

echo / opt / cxoffice / lib / | sudo tee /etc/ld.so.conf.d/crossover.conf
sudo / sbin / ldconfig

Tôi nghĩ rằng nó đang được gọi là một lỗi vì ptrace đã hoạt động tốt trong 10.10 sau khi Wine được vá để hỗ trợ nó. Nó đã hoạt động với 10.10-11.10 nhưng đã thoái lui vào 12.04.
TrailRider

Cảm ơn bạn đã chấp nhận @TrailRider; Tôi đã đề cập đến tuyên bố của bạn rằng "đó là một lỗi trong kernel " (không phải vậy); Đây chắc chắn là một lỗi của Wine và nên bị thay đổi :) Đôi khi mọi thứ chắc chắn thay đổi trong kernel, thường là tốt hơn, và nó để lại phần mềm bị ảnh hưởng để tự khắc phục thay vì nói với Linus "yo man, hãy tự hoàn nguyên ": P
ish

Tôi hiểu những gì bạn đang nói ở đây và đồng ý, tôi chỉ nói đó là một lỗi trong kernel vì một số trang web hỗ trợ cũng như Codeweavers gọi đó là lỗi kernel. Đây là trang từ mã trên đó. codeweavers.com/support/wiki/linux/faq/ubfox1204
TrailRider

2
Tôi đã đặt ptrace toàn cầu thành 0 và quay lại 1 sau vài giây ứng dụng bắt đầu; setcap là an toàn hơn và không gây phiền nhiễu vì phải sudo mọi lúc .. thx vm!
Sức mạnh Bảo Bình

@izx: Cảm ơn câu trả lời này. Sẽ rất thú vị khi thêm thông tin về những gì "eip" đề cập đến (được giải thích tại đây: andy-pearce.com/blog/posts/2013/Mar/file-capabilities-in-linux ). Ngoài ra, tôi đã đề xuất đề xuất phương pháp này trong tài liệu reptyr, trong đó tác giả trả lời rằng đó có thể là vấn đề bảo mật: github.com/nelhage/reptyr/pull/27#issuecomment-29486673 - sẽ rất tuyệt, nếu bạn có thể giải thích trên đó.
xanh lam

4

Trong ubuntuforums.org tôi đã có câu trả lời với liên kết sau

https://wiki.ubfox.com/SecurityTeam/Roadmap/KernelHardening#ptrace_Protection

đây là dán từ liên kết (với sự nhấn mạnh của tôi được thêm vào)

Khi Linux phát triển phổ biến, nó sẽ trở thành mục tiêu phát triển của phần mềm độc hại. Một điểm yếu đặc biệt đáng lo ngại của các giao diện quy trình Linux là một người dùng có thể kiểm tra bộ nhớ và trạng thái chạy của bất kỳ quy trình nào của họ. Ví dụ: nếu một ứng dụng (ví dụ firefox) bị xâm phạm, kẻ tấn công có thể đính kèm với các quy trình đang chạy khác (ví dụ gpg-agent) để trích xuất thông tin xác thực bổ sung và tiếp tục mở rộng phạm vi tấn công của chúng.

Đây không phải là một vấn đề lý thuyết. Chiếm quyền điều khiển phiên SSH và thậm chí tiêm mã tùy ý là hoàn toàn có thể nếu ptrace được cho phép bình thường .

Đối với một giải pháp, một số ứng dụng sử dụng prctl () để không cho phép cụ thể tệp đính kèm ptrace đó (ví dụ: ssh-agent). Một giải pháp tổng quát hơn là chỉ cho phép ptrace trực tiếp từ cha mẹ đến tiến trình con (tức là gdb trực tiếp và strace vẫn hoạt động) hoặc với tư cách là người dùng root (ví dụ gdb BIN PID và strace -p PID vẫn hoạt động như root).

Hành vi này được kiểm soát thông qua giá trị / Proc / sys / kernel / yama / ptrace_scope sysctl. Mặc định là "1" để chặn ptrace không phải con. Giá trị "0" khôi phục hành vi dễ dãi hơn trước đó, có thể phù hợp hơn với một số hệ thống phát triển và máy chủ chỉ có tài khoản quản trị viên. Sử dụng "sudo" cũng có thể cấp quyền ptrace tạm thời thông qua khả năng CAP_SYS_PTRACE, mặc dù phương pháp này cho phép ptrace của bất kỳ quy trình nào.

Vì vậy, tôi đoán câu trả lời ngắn gọn là nó kém an toàn hơn nhưng khả năng máy tính cá nhân bị tấn công dưới những kiểu tấn công đó sẽ khá mỏng.


1

CẬP NHẬT Các hướng dẫn trên:

sudo setcap cap_sys_ptrace=eip /opt/cxoffice/bin/wineserver;
sudo setcap cap_sys_ptrace=eip /opt/cxoffice/bin/wine-preloader;

không hoạt động kể từ ngày 15/9/2018 trên Ubuntu 18.04.1 và PlayOnLinux v.4.2.12 sử dụng phiên bản ổn định mới nhất Wine là v.3.0.1 libcap2 đã được cài đặt.

Thông báo lỗi trong Gnome Terminal như sau:

Failed to set capabilities on file `/usr/bin/wineserver' (Invalid argument)
The value of the capability argument is not permitted for a file. Or the file is not a regular (non-symlink) file

Không chắc điều đó có nghĩa là gì ..... nhưng tôi nghĩ tôi sẽ đưa nó ra cho mọi người giải thích và có thể có một giải pháp mới, khả thi.

Cảm ơn.

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.