Jakie jest obejście „ptrace_scope” dla programów Wine i czy istnieje jakieś ryzyko?

37

Aby uruchomić niektóre programy Windows w WINE, musisz obejść to obejście:

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

Według stron wsparcia, jest to spowodowane błędem w jądrze Ubuntu, który uniemożliwia prawidłowe działanie ptrace i WINE.

Używając powyższego polecenia, ustawiasz ptrace na 0, co zgodnie z badaniami, które przeprowadziłem (nie pytaj mnie, które strony, wydaje mi się, że jest ich dużo), ptrace ma związek z interakcjami między programami. Ustawienie 0 jest bardziej liberalne niż 1.

Muszę założyć, że był dobry powód, dla którego Ubuntu chciał ptrace = 1, więc to prowadzi mnie z powrotem do krótkiej formy pytania.

Czy jest jakieś ryzyko związane z ustawieniem ptrace = 0. Niższe bezpieczeństwo? masz problemy z debugowaniem? jakieś inne, o których nie myślałem ???

PS dla każdego, kto to czyta, który zastanawia się, co powoduje błąd, programy Windows w ogóle się nie otwierają, w Monitorze systemu zobaczysz wiele instancji programu próbującego się otworzyć, a następnie w końcu wszystkie zakończą się, a jeśli uruchomisz program dla terminala pojawi się błąd informujący o osiągnięciu maksymalnej liczby instancji programu.

TrailRider
źródło
Oto opis połączony z wyskakującym komunikatem o błędzie PlayOnLinux, który przerywa instalację .Net 4.5, chyba że ptrace_scope jest ustawiony na 0: playonlinux.com/en/…
pabouk

Odpowiedzi:

41

Krótka odpowiedź: nie ma jeszcze praktycznego niebezpieczeństwa, ale czytaj dalej, aby uzyskać lepszy sposób ...


Co to w ogóle za ptrace ?

jest to spowodowane błędem w jądrze Ubuntu, który uniemożliwia ptrace i WINE granie razem.

  • Nie, ochrona ptrace to celowy środek bezpieczeństwa jądra wprowadzony po raz pierwszy w Ubuntu 10.10. To nie jest błąd , więc nie zostanie „naprawiony”.

  • Mówiąc prościej, domyślna ptrace_scopewartość 1blokuje przed badaniem i modyfikacją innego procesu inny proces, chyba że drugi proces (potomny) został uruchomiony przez pierwszy proces (macierzysty).

  • Może to powodować problemy z niektórymi programami w Wine z powodu sposobu, w jaki wineserverzapewnia „Usługi Windows” dla tych programów.

Jakie są zagrożenia w tworzeniu ptrace_scopesię 0?

  • Przywraca to stare zachowanie, w którym jeden proces może „śledzić” inny proces, nawet jeśli nie ma relacji rodzic-dziecko.

  • Teoretycznie złośliwe oprogramowanie może wykorzystać to do wyrządzenia szkody tobie / komputerowi; np. może dołączyć do Firefoksa i zapisać wszystkie twoje adresy URL / hasła itp. W praktyce jest to bardzo mało prawdopodobne, chyba że na ślepo zainstalujesz binarne debaty z losowych stron itp.

  • Jeśli chodzi o debugowanie, 0ustawienia są w rzeczywistości wymagane gdb, straceaby itp. Dołączyć do osób niebędących dziećmi, chyba że uruchomisz je z podwyższonymi uprawnieniami (sudo).

Jakie są problemy z obejściem?

  • To obejście jest nieco problematyczne, ponieważ ptrace_scopejest wartością globalną i chociaż jest ustawione na 0, wszystkie procesy w twoim systemie są zwolnione z ograniczeń innych niż potomne.
  • Jeśli korzystasz z obejścia, umieść go w prostym skrypcie bash, który go włącza, uruchamia program Windows, a następnie wyłącza (ustawia na 1) przy wyjściu.
    • NIE rób ptrace_scopezapisywania na całym świecie (666), jak zaleca post na forum - jest to ogromne zagrożenie bezpieczeństwa, ponieważ teraz każdy proces może go dowolnie zmienić!

Czy jest lepsze rozwiązanie?

  • Lepszym rozwiązaniem, które jest bezpieczniejsze i nie wymaga powtarzalnej modyfikacji ptrace_scope, jest przyznanie możliwości ptrace Wineserver .

    • W terminalu:

      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
      
    • To zwalnia binaria serwera wina i modułu ładującego wino z ograniczenia nietracącego ptrace i pozwala im śledzić dowolny proces.

    • Trzeba to zrobić tylko raz i jest to bezpieczniejsze, ponieważ pliki binarne pochodzą zwykle z zaufanego źródła - oficjalnych repozytoriów lub oficjalnego PPA Wine, więc nie będą złośliwym oprogramowaniem.

Jeśli używasz zwrotnicy

Zainstaluj libcap2:

sudo apt-get install libcap2-bin;

Następnie dodaj wyjątek dla Crossover:

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

Na koniec dodaj swoje biblioteki do ld.so.conf (w przeciwnym razie pojawi się błąd „podczas ładowania bibliotek współdzielonych: libwine.so.1: nie można otworzyć pliku obiektu współdzielonego: brak takiego pliku lub katalogu”):

echo / opt / cxoffice / lib / | sudo tee /etc/ld.so.conf.d/crossover.conf
sudo / sbin / ldconfig
ish
źródło
Myślę, że nazywa się to błędem, ponieważ ptrace działało dobrze w 10.10 po tym, jak Wine zostało załatane, aby to obsługiwać. Działa z 10.10-11.10, ale regresował w 12.04.
TrailRider
Dzięki za przyjęcie @TrailRider; Odniosłem się do twojego stwierdzenia, że ​​„to błąd w jądrze ” (który nie jest); z pewnością jest to pewien rodzaj błędu dla Wine, i powinien zostać potraktowany :) Rzeczy z pewnością czasami się zmieniają w jądrze, zwykle na lepsze, i to zależy od oprogramowania, które ma to naprawić, a nie powiedzieć Linusowi: idź cofnij się ": P
is
Rozumiem, co tu mówisz i zgadzam się, powiedziałem tylko, że to błąd w jądrze, ponieważ kilka stron wsparcia technicznego, a także Codeweavers nazwali to błędem jądra. Oto strona o programistach. codeweavers.com/support/wiki/linux/faq/ubuntu1204
TrailRider
2
Ustawiałem globalną wartość śledzenia na 0, a po kilku sekundach ponownie uruchamia się; setcap jest DUŻO bezpieczniejszy i nie denerwujący, ponieważ musi sudo cały czas .. dzięki VM!
Aquarius Power
@izx: Dzięki za tę odpowiedź. Interesujące byłoby dodanie informacji o tym, do czego odnosi się „eip” (wyjaśnione tutaj: andy-pearce.com/blog/posts/2013/Mar/file-capabilities-in-linux ). Dodatkowo zasugerowałem zalecenie tej metody w dokumentach reptyr, w których autor odpowiedział, że może to być problem bezpieczeństwa: github.com/nelhage/reptyr/pull/27#issuecomment-29486673 - byłoby wspaniale, gdybyś mógł opracować Na tym.
niebieskawy
4

W ubuntuforums.org otrzymałem odpowiedź z następującym linkiem

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

oto pasta z linku (z dodanym wyróżnieniem)

Wraz ze wzrostem popularności Linux stanie się coraz popularniejszym celem szkodliwego oprogramowania. Jedną ze szczególnie niepokojących słabości interfejsów procesowych systemu Linux jest to, że pojedynczy użytkownik może zbadać pamięć i stan działania dowolnego z procesów. Na przykład, jeśli jedna aplikacja (np. Firefox) została przejęta, atakujący mógłby dołączyć do innych uruchomionych procesów (np. Gpg-agent) w celu wyodrębnienia dodatkowych danych uwierzytelniających i kontynuowania rozszerzania zakresu swojego ataku.

To nie jest problem teoretyczny. Przejęcie sesji SSH, a nawet wstrzyknięcie dowolnego kodu jest w pełni możliwe, jeśli ptrace jest normalnie dozwolone .

Dla rozwiązania niektóre aplikacje używają prctl (), aby w szczególności zabraniać takiego załączania ptrace (np. Ssh-agent). Bardziej ogólnym rozwiązaniem jest zezwolenie ptrace tylko bezpośrednio na proces nadrzędny na proces potomny (tj. Bezpośrednie działanie gdb i strace nadal działa) lub jako użytkownik root (tj. Gdb BIN PID, a strace -p PID nadal działa jako root).

To zachowanie jest kontrolowane przez wartość / proc / sys / kernel / yama / ptrace_scope sysctl. Wartość domyślna to „1”, aby zablokować narzędzie śledzenia inne niż potomne. Wartość „0” przywraca wcześniejsze bardziej liberalne zachowanie, które może być bardziej odpowiednie dla niektórych systemów programistycznych i serwerów z tylko kontami administracyjnymi. Użycie „sudo” może również tymczasowo udzielić uprawnień do śledzenia za pomocą funkcji CAP_SYS_PTRACE, chociaż ta metoda umożliwia śledzenie dowolnego procesu.

Wydaje mi się, że krótka odpowiedź byłaby mniej bezpieczna, ale prawdopodobne, że komputer osobisty narażony na tego rodzaju ataki byłby dość niewielki.

TrailRider
źródło
1

AKTUALIZACJA Powyższe instrukcje:

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

nie działa od 15.09.2018 na Ubuntu 18.04.1 i PlayOnLinux v.4.2.12 przy użyciu najnowszej stabilnej wersji Wine, czyli v.3.0.1 libcap2 został już zainstalowany.

Komunikat o błędzie w terminalu Gnome jest następujący:

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

Nie jestem pewien, co to oznacza ..... ale pomyślałem, że przedstawię to każdemu, aby mógł to zinterpretować i może mieć nowe, wykonalne rozwiązanie.

Dzięki.

Danny Strickland
źródło