Що таке "ptrace_scope" для програм Wine та чи є якісь ризики?


37

Щоб запустити певні програми Windows у WINE, вам потрібно виконати таке рішення:

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

За даними веб-сайтів підтримки, це пов’язано з помилкою в ядрі Ubuntu, яка не дозволяє ptrace та WINE добре грати разом.

Використовуючи вищевказану команду, ви встановлюєте ptrace до 0, що відповідно до проведених нами досліджень (не запитуйте мене, які веб-сайти, я їх, мабуть, багато), ptrace пов'язаний із взаємодією між програмами. Налаштування 0 дозволеніше, ніж 1.

Я маю припустити, що з уважної причини Ubuntu захотів ptrace = 1, тому це повертає мене до короткої форми питання.

Чи є ризики, пов’язані із встановленням ptrace = 0. Нижча безпека? проблеми налагодження? будь-які інші, про які я не думав ???

PS для тих, хто читає це, що цікавиться, що викликає помилку, програми Windows взагалі не зможуть відкритись, у системному моніторі ви побачите багато примірників програми, які намагаються відкритись, і вони з часом все вийдуть, і якщо запустити прогаму для терміналу ви отримаєте помилку, яка повідомляє про те, що досягнуто максимальної кількості екземплярів програми.


Ось опис, пов’язаний із спливаючим повідомленням про помилку PlayOnLinux, яке припиняє встановлення .Net 4.5, якщо для ptrace_scope встановлено значення 0: playonlinux.com/en/…
pabouk

Відповіді:


41

Коротка відповідь: практичної небезпеки поки немає, але читайте далі для кращого шляху ...


Що це за річ ptrace ?

це пов’язано з помилкою в ядрі Ubuntu, яка не дозволяє ptrace та WINE грати добре разом.

  • Ні, захист ptrace - це навмисний захід безпеки ядра, вперше введений навколо Ubuntu 10.10. Це не помилка , і тому не буде "виправлено".

  • Простіше кажучи, ptrace_scopeзначення за замовчуванням 1блокує один процес від вивчення та зміни іншого процесу, якщо другий процес (дочірня) не був запущений першим процесом (батьком).

  • Це може спричинити проблеми з деякими програмами під Wine через те, що вони wineserverнадають "Windows Services" цим програмам.

Які ризики при постановці ptrace_scopeна 0?

  • Це відновлює стару поведінку, коли один процес може «простежити» інший процес, навіть якщо немає стосунків батько-дитина.

  • Теоретично, шкідливі програми можуть скористатися цим, щоб нашкодити вам / вашому комп’ютеру; наприклад, він може приєднуватися до Firefox та реєструвати всі ваші URL-адреси / паролі тощо. На практиці це вкрай малоймовірно, якщо ви сліпо не встановлюєте бінарні деби з випадкових сайтів тощо.

  • Що стосується налагодження йде, то 0настройки, насправді потрібно для gdb, straceі т.д. , щоб прикріпити до не-дітям , якщо не запускати їх з підвищеними привілеями (SUDO).

Які проблеми з вирішенням проблеми?

  • Вирішення проблеми є дещо проблематичним, оскільки ptrace_scopeце глобальне значення, і хоча він встановлений 0, усі процеси у вашій системі звільнені від заборони, що не стосується дитини.
  • Якщо ви використовуєте вирішення, введіть його у простий скрипт bash, який це дозволяє, запускає вашу програму Windows, а потім вимикає (встановлює значення 1) при виході.
    • НЕ робіть ptrace_scopeдля запису в світі (666), як рекомендує повідомлення на форумі - це величезний ризик для безпеки, тому що тепер будь-який процес може змінити це за бажанням!

Чи є краще рішення?

  • Краще рішення, яке є більш безпечним і не потребує повторної модифікації ptrace_scope - надання Wineserver ptrace можливостей .

    • У терміналі:

      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
      
    • Це звільняє винні сервери та бінарні файли для завантаження вина від обмеження, яке не стосується ptrace, і дозволяє їм простежити будь-який процес.

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

Якщо ви використовуєте Crossover

Встановити libcap2:

sudo apt-get install libcap2-bin;

Потім додайте виняток для Crossover:

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

Нарешті, додайте його бібліотеки до ld.so.conf (або ви отримаєте "помилку під час завантаження спільних бібліотек: libwine.so.1: не вдається відкрити спільний файл об'єкта: немає такого файлу чи каталогу"):

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

Я думаю, що його називають помилкою, тому що ptrace працював чудово в 10.10 після того, як Wine був виправлений для його підтримки. Він працює з 10.10-11.10, але регресував у 12.04.
TrailRider

Дякуємо за прийом @TrailRider; Я мав на увазі ваше твердження, що "це помилка в ядрі " (що це не так); це, безумовно, помилка сортів для Wine, і його слід розшарувати :) Деякі речі, безумовно, змінюються в ядрі іноді, як правило, на краще, і це залишається на програмному забезпеченні, яке впливає на виправлення, а не скаже Лінусу: "Людина, іди повернись ": П
останній

Я розумію, що ви тут говорите, і згоден, я лише сказав, що це помилка в ядрі, оскільки кілька веб-сайтів підтримки, а також Codeweavers називали це помилкою ядра. Тут розміщена сторінка кодоверів. codeweavers.com/support/wiki/linux/faq/ubuntu1204
TrailRider

2
Я встановив глобальний ptrace на 0, а через кілька секунд повернувся до 1; setcap набагато безпечніший і не дратівливий, оскільки потрібно весь час судо .. thx vm!
Сила Водолія

@izx: Дякую за цю відповідь. Було б цікаво додати інформацію про те, на що посилається "eip" (пояснено тут: andy-pearce.com/blog/posts/2013/Mar/file-capa sposobnosti-in-linux ). Крім того, я запропонував рекомендувати цей метод у документах рептіра, де автор відповів, що це може бути проблема безпеки: github.com/nelhage/reptyr/pull/27#issuecomment-29486673 - було б чудово, якби ви могли розробити детальніше. на тому.
синюваті

4

На ubuntuforums.org я отримав відповідь за наступним посиланням

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

ось паста із посилання (з моїм акцентом додано)

По мірі зростання популярності Linux це стане зростаючою ціллю для зловмисного програмного забезпечення. Особливо тривожною слабкістю інтерфейсів процесів Linux є те, що один користувач може вивчити пам'ять та стан будь-якого з своїх процесів. Наприклад, якщо одна програма (наприклад, firefox) була порушена, зловмисник може приєднатися до інших запущених процесів (наприклад, gpg-агент), щоб отримати додаткові облікові дані та продовжити розширення сфери їхньої атаки.

Це не теоретична проблема. Викрадення сеансу SSH і навіть довільне введення коду повністю можливі, якщо ptrace дозволено нормально .

Для рішення деякі програми використовують prctl (), щоб спеціально заборонити таке вкладення ptrace (наприклад, ssh-агент). Більш загальне рішення полягає в тому, щоб дозволити ptrace лише від батьківського до дочірнього процесу (тобто прямі gdb та strace все ще працюють) або як кореневий користувач (тобто gdb BIN PID та strace -p PID все ще працюють як root).

Ця поведінка контролюється через / proc / sys / kernel / yama / ptrace_scope sysctl значення. За замовчуванням є "1" для блокування ptrace, що не є дочірнім. Значення "0" відновлює попередню більш дозвільну поведінку, що може бути більш доцільним для деяких систем розвитку та серверів, які мають лише облікові записи адміністратора. Використання "sudo" також може надати тимчасові дозволи на ptrace за допомогою можливості CAP_SYS_PTRACE, хоча цей метод дозволяє ptrace будь-якого процесу.

Тож я думаю, що коротка відповідь буде: це менш захищено, але ймовірний капюшон персонального комп’ютера, що потрапляє під такі види атак, був би досить малим.


1

ОНОВЛЕННЯ Наведені вище інструкції:

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

не працює з 15.09.2018 на Ubuntu 18.04.1 та PlayOnLinux v.4.2.12, використовуючи останню стабільну версію Wine, яка v.3.0.1 libcap2 вже була встановлена.

Повідомлення про помилку в терміналі Gnome таке:

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

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

Спасибі.

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