Что такое обходной путь 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 вообще не смогут открыться, в системном мониторе вы увидите множество примеров попыток открытия программы, а затем все они в конечном итоге закроются, и если вы запустите программу для терминала вы получите ошибку, сообщающую, что максимальное количество экземпляров программы было достигнуто.

TrailRider
источник
Вот описание, связанное с всплывающим сообщением об ошибке 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» этим программам.

Каковы риски при постановке 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 установить libcap2-bin 
      sudo setcap cap_sys_ptrace = eip / usr / bin / wineserver
      sudo setcap cap_sys_ptrace = eip / usr / bin / wine-preloader
      
    • Это освобождает двоичные файлы wineserver и wine- preloader от ограничения ptrace, не связанного с дочерним процессом, и позволяет им отслеживать любой процесс.

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

Если вы используете кроссовер

Установите libcap2:

sudo apt-get install libcap2-bin;

Затем добавьте исключение для кроссовера:

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, и ее следует опровергнуть :) В ядре иногда что-то меняется, обычно в лучшую сторону, и это зависит от программного обеспечения, которое влияет на то, чтобы исправить себя, а не сказать Линусу: «Человек, иди сам ": P
Иш
Я понимаю, что вы здесь говорите, и согласен, я только сказал, что это ошибка в ядре, так как несколько веб-сайтов поддержки, а также Codeweavers назвали это ошибкой ядра. Вот страница кодоверов на нем. codeweavers.com/support/wiki/linux/faq/ubuntu1204
TrailRider
2
Я установил глобальный ptrace на 0, а через несколько секунд приложение вернулось к 1; setcap НАМНОГО безопаснее и не раздражает тем, что приходится постоянно sudo .. спасибо vm!
Водолей Сила
@izx: Спасибо за этот ответ. Было бы интересно добавить информацию о том, что означает «eip» (объяснение здесь: andy-pearce.com/blog/posts/2013/Mar/file-capabilities-in-linux ). Кроме того, я предложил рекомендовать этот метод в документах reptyr, где автор ответил, что это может быть проблема безопасности: github.com/nelhage/reptyr/pull/27#issuecomment-29486673 - было бы здорово, если бы вы могли уточнить на что.
синеватый
4

В ubuntuforums.org я получил ответ по следующей ссылке

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

вот паста по ссылке (с моим акцентом добавлена)

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

Это не теоретическая проблема. Перехват сеанса SSH и даже произвольное внедрение кода полностью возможны, если ptrace разрешен нормально .

В качестве решения некоторые приложения используют prctl (), чтобы специально запретить такое вложение ptrace (например, ssh-agent). Более общее решение состоит в том, чтобы разрешить ptrace только напрямую от родительского к дочернему процессу (т. Е. Прямой gdb и strace по-прежнему работают) или как пользователь root (т. Е. Gid-идентификатор BIN PID и strace -p PID по-прежнему работают как root).

Это поведение контролируется с помощью значения / proc / sys / kernel / yama / ptrace_scope sysctl. По умолчанию установлено значение «1» для блокировки не дочерних ptrace. Значение «0» восстанавливает прежнее более разрешающее поведение, которое может быть более подходящим для некоторых систем разработки и серверов, имеющих только учетные записи администратора. Использование sudo может также временно предоставить разрешения ptrace с помощью возможности CAP_SYS_PTRACE, хотя этот метод позволяет использовать ptrace для любого процесса.

Таким образом, я думаю, что короткий ответ будет таким: он менее защищен, но вероятный капот персонального компьютера, подверженного таким атакам, будет довольно узким.

TrailRider
источник
1

ОБНОВЛЕНИЕ Приведенные выше инструкции:

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

не работает с 15.09.2008 в Ubuntu 18.04.1 и PlayOnLinux v.4.2.12 с использованием последней стабильной версии Wine, которая является v.3.0.1 libcap2 уже установлена.

Сообщение об ошибке в Gnome Terminal выглядит следующим образом:

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

Не уверен, что это значит ..... но подумал, что я бы выложил это, чтобы кто-нибудь мог его интерпретировать и, возможно, найти новое, работающее решение.

Спасибо.

Дэнни Стрикленд
источник