Apa solusi 'ptrace_scope' untuk program Wine dan apakah ada risiko?

37

Untuk menjalankan program Windows tertentu di WINE Anda perlu solusi ini:

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

Menurut situs web dukungan, ini disebabkan oleh bug di kernel Ubuntu yang mencegah ptrace dan WINE bermain bersama dengan baik.

Dengan menggunakan perintah di atas Anda mengatur ptrace ke 0 yang menurut penelitian yang telah saya lakukan (jangan tanya situs web mana, saya sepertinya banyak di antaranya), ptrace ada hubungannya dengan interaksi antar program. Pengaturan 0 lebih permisif daripada 1.

Saya harus berasumsi bahwa ada alasan bagus Ubuntu menginginkan ptrace = 1 jadi ini membawa saya kembali ke bentuk pertanyaan singkat.

Apakah ada risiko yang terlibat dalam pengaturan ptrace = 0. Keamanan lebih rendah? masalah debugging? ada orang lain yang saya belum memikirkan ???

PS untuk siapa pun yang membaca ini yang bertanya-tanya apa yang menyebabkan bug, program Windows akan gagal untuk membuka sama sekali, di Monitor Sistem Anda akan melihat banyak contoh program mencoba untuk membuka dan kemudian mereka akhirnya semua akan berhenti dan jika Anda menjalankan progam untuk terminal Anda akan mendapatkan kesalahan yang memberi tahu Anda bahwa jumlah maksimum instance program telah tercapai.

TrailRider
sumber
Berikut ini adalah deskripsi terkait dari PlayOnLinux pesan kesalahan pop-up yang dibatalkan instalasi Bersih 4.5 kecuali ptrace_scope diatur ke 0: playonlinux.com/en/...
pabouk

Jawaban:

41

Jawaban singkat: belum ada bahaya praktis, tetapi baca terus untuk cara yang lebih baik ...


Apa sih yang dimaksud dengan ptrace ini ?

ini disebabkan oleh bug di kernel Ubuntu yang mencegah ptrace dan WINE bermain bersama dengan baik.

  • Tidak, perlindungan ptrace adalah tindakan keamanan kernel yang disengaja yang pertama kali diperkenalkan di sekitar Ubuntu 10.10. Ini bukan bug , dan tidak akan diperbaiki.

  • Dalam istilah sederhana, default ptrace_scopenilai 1blok satu proses dari memeriksa dan memodifikasi proses lain kecuali proses kedua (anak) dimulai oleh proses pertama (orang tua).

  • Ini dapat menyebabkan masalah dengan beberapa program di bawah Wine karena cara wineservermenyediakan "Layanan Windows" untuk program ini.

Apa resiko dalam menetapkan ptrace_scopeke 0?

  • Ini mengembalikan perilaku lama di mana satu proses dapat "melacak" proses lain, bahkan jika tidak ada hubungan orangtua-anak.

  • Secara teori, sepotong malware dapat menggunakan ini untuk membahayakan Anda / komputer Anda; mis. ia dapat melampirkan ke Firefox dan mencatat semua URL / kata sandi Anda, dll. Dalam praktiknya ini sangat tidak mungkin kecuali Anda secara membuta menginstal utang biner dari situs acak, dll.

  • Sejauh debugging pergi, 0pengaturan sebenarnya diperlukan untuk gdb, strace, dll untuk melampirkan non-anak kecuali jika Anda menjalankan mereka dengan hak tinggi (sudo).

Apa masalah dengan solusinya?

  • Solusinya agak bermasalah karena ptrace_scopemerupakan nilai global, dan sementara itu diatur untuk 0, semua proses pada sistem Anda dibebaskan dari pembatasan non-anak.
  • Jika Anda menggunakan solusinya, letakkan di bash script sederhana yang memungkinkannya, jalankan program Windows Anda dan kemudian nonaktifkan (set ke 1) saat keluar.
    • JANGAN membuat tulisan ptrace_scopedunia (666) sebagai rekomendasi forum - itu adalah risiko keamanan yang sangat besar karena sekarang setiap proses dapat mengubahnya sesuka hati!

Apakah ada solusi yang lebih baik?

  • Solusi yang lebih baik yang lebih aman dan tidak memerlukan memodifikasi ptrace_scope berulang adalah untuk memberikan kemampuan ptrace Wineserver .

    • Di terminal:

      sudo apt-get install libcap2-bin 
      sudo setcap cap_sys_ptrace = eip / usr / bin / wineserver
      sudo setcap cap_sys_ptrace = eip / usr / bin / wine-preloader
      
    • Ini mengecualikan binari anggur dan preloader anggur dari pembatasan ptrace non-anak, dan memungkinkan mereka untuk melacak proses apa pun.

    • Ini hanya perlu dilakukan sekali, dan lebih aman karena biner ini biasanya dari sumber tepercaya - repositori resmi atau Wine PPA resmi, sehingga mereka tidak akan menjadi malware.

Jika Anda menggunakan Crossover

Instal libcap2:

sudo apt-get install libcap2-bin;

Lalu, tambahkan pengecualian untuk Crossover:

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

Terakhir, tambahkan pustaka ke ld.so.conf (atau Anda akan mendapatkan "kesalahan saat memuat pustaka bersama: libwine.so.1: tidak dapat membuka file objek bersama: Tidak ada file atau direktori" ":

echo / opt / cxoffice / lib / | sudo tee /etc/ld.so.conf.d/crossover.conf
sudo / sbin / ldconfig
ish
sumber
Saya pikir itu disebut bug karena ptrace bekerja dengan baik di 10.10 setelah Wine ditambal untuk mendukungnya. Ini telah bekerja dengan 10.10-11.10 tetapi telah mengalami kemunduran di 12.04.
TrailRider
Terima kasih telah menerima @TrailRider; Saya merujuk pada pernyataan Anda bahwa "itu adalah bug di kernel " (yang bukan); itu tentu saja bug-of-macam untuk Wine, dan harus ditampar :) Hal-hal pasti berubah dalam kernel kadang-kadang, biasanya menjadi lebih baik, dan itu tergantung pada perangkat lunak yang terpengaruh untuk memperbaiki sendiri daripada memberitahu Linus "yo man, buka kembali dirimu ": P
ish
Saya mengerti apa yang Anda katakan di sini dan setuju, saya hanya mengatakan itu adalah bug di kernel karena beberapa situs web dukungan serta Codeweavers menyebutnya bug kernel. Berikut ini adalah halaman codeweavers. codeweavers.com/support/wiki/linux/faq/ubuntu1204
TrailRider
2
Saya mengatur ptrace global ke 0, dan kembali ke 1 setelah beberapa detik aplikasi dimulai; setcap jauh lebih aman dan tidak menyebalkan karena harus sudo sepanjang waktu .. thx vm!
Aquarius Power
@izx: Terima kasih atas jawaban ini. Akan menarik untuk menambahkan informasi tentang apa yang dimaksud dengan "eip" (dijelaskan di sini: andy-pearce.com/blog/posts/2013/Mar/file-capabilities-in-linux ). Selain itu, saya telah menyarankan untuk merekomendasikan metode ini dalam dokumen reptyr, di mana penulis menjawab bahwa ini mungkin masalah keamanan: github.com/nelhage/reptyr/pull/27#issuecomment-29486673 - akan lebih bagus, jika Anda bisa menguraikan itu.
blueyed
4

Di ubuntuforums.org saya mendapat jawaban dengan tautan berikut

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

di sini adalah tempel dari tautan (dengan penekanan saya ditambahkan)

Seiring semakin populernya Linux, Linux akan menjadi target yang berkembang untuk malware. Salah satu kelemahan yang sangat mengganggu dari antarmuka proses Linux adalah bahwa satu pengguna dapat memeriksa memori dan menjalankan keadaan dari setiap proses mereka. Misalnya, jika satu aplikasi (mis. Firefox) dikompromikan, akan mungkin bagi penyerang untuk melampirkan ke proses yang berjalan lainnya (misalnya agen gpg) untuk mengekstraksi kredensial tambahan dan terus memperluas cakupan serangan mereka.

Ini bukan masalah teoretis. Pembajakan sesi SSH dan bahkan injeksi kode arbitrase sepenuhnya dimungkinkan jika ptrace diizinkan secara normal .

Untuk solusi, beberapa aplikasi menggunakan prctl () untuk secara khusus melarang lampiran ptrace tersebut (misalnya ssh-agent). Solusi yang lebih umum adalah dengan hanya mengizinkan ptrace langsung dari orangtua ke proses anak (yaitu gdb langsung dan strace masih berfungsi), atau sebagai pengguna root (yaitu gdb BIN PID, dan strace -p PID masih berfungsi sebagai root).

Perilaku ini dikendalikan melalui nilai sysctl / proc / sys / kernel / yama / ptrace_scope. Standarnya adalah "1" untuk memblokir ptrace bukan anak. Nilai "0" mengembalikan perilaku sebelumnya yang lebih permisif, yang mungkin lebih sesuai untuk beberapa sistem pengembangan dan server dengan hanya akun admin. Menggunakan "sudo" juga dapat memberikan izin ptrace sementara melalui kemampuan CAP_SYS_PTRACE, meskipun metode ini memungkinkan ptrace dari setiap proses.

Jadi saya kira jawaban singkatnya adalah bahwa itu kurang aman tetapi kemungkinan kap komputer pribadi yang datang di bawah serangan semacam itu akan sangat tipis.

TrailRider
sumber
1

UPDATE Instruksi di atas:

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

tidak bekerja pada 9/15/2018 di Ubuntu 18.04.1 dan PlayOnLinux v.4.2.12 menggunakan versi stabil terbaru Wine yang v.3.0.1 libcap2 sudah diinstal.

Pesan kesalahan di Terminal Gnome adalah sebagai berikut:

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

Tidak yakin apa artinya itu ..... tetapi saya pikir saya akan menaruhnya di luar sana bagi siapa saja untuk menafsirkan dan mungkin memiliki solusi baru yang bisa diterapkan.

Terima kasih.

Danny Strickland
sumber