Qual é a solução alternativa para 'ptrace_scope' para programas Wine e há algum risco?

37

Para executar determinados programas do Windows no WINE, você precisa desta solução alternativa:

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

De acordo com os sites de suporte, isso ocorre devido a um bug no kernel do Ubuntu que impede o ptrace e o WINE tocando bem juntos.

Usando o comando acima, você define o ptrace para 0, o que, de acordo com a pesquisa que fiz (não me pergunte quais sites, eu pareço muitos deles), o ptrace tem a ver com as interações entre os programas. A configuração 0 é mais permissiva que a 1.

Eu tenho que assumir que havia uma boa razão para o Ubuntu querer o ptrace = 1, então isso me leva de volta à forma abreviada da questão.

Existem riscos envolvidos na configuração de ptrace = 0. Menor segurança? problemas na depuração? quaisquer outros que eu não tenha pensado ???

PS para qualquer pessoa que esteja lendo isso e se perguntando o que o bug causa, os programas do Windows não serão abertos. No Monitor do Sistema, você verá muitas instâncias do programa tentando abrir e, em seguida, todos sairão e se você executar o programa para o terminal, você receberá um erro informando que o número máximo de instâncias do programa foi atingido.

TrailRider
fonte
Aqui está uma descrição vinculada a uma mensagem de erro pop-up do PlayOnLinux que interrompe a instalação do .Net 4.5, a menos que o ptrace_scope esteja definido como 0: playonlinux.com/en/…
pabouk

Respostas:

41

Resposta curta: sem perigo prático ainda, mas continue lendo para uma maneira melhor ...


O que é essa coisa de ptrace , afinal?

isso ocorre devido a um bug no kernel do Ubuntu que impede que o ptrace e o WINE sejam executados juntos.

  • Não, a proteção do ptrace é uma medida deliberada de segurança do kernel, introduzida pela primeira vez no Ubuntu 10.10. Não é um bug e, portanto, não será "corrigido".

  • Em termos simples, o ptrace_scopevalor padrão de 1impede que um processo examine e modifique outro processo , a menos que o segundo processo (filho) tenha sido iniciado pelo primeiro processo (pai).

  • Isso pode causar problemas em alguns programas do Wine, devido à maneira como o wineserver"Windows Services" fornece esses programas.

Quais são os riscos na definição ptrace_scopede 0?

  • Isso restaura o comportamento antigo em que um processo pode "rastrear" outro processo, mesmo se não houver relacionamento pai-filho.

  • Em teoria, um pedaço de malware pode usar isso para prejudicar você / seu computador; por exemplo, ele pode se conectar ao Firefox e registrar todos os seus URLs / senhas, etc. Na prática, isso é extremamente improvável, a menos que você instale cegamente as senhas binárias de sites aleatórios, etc.

  • No que diz respeito à depuração, as 0configurações são de fato necessárias para que gdb, straceetc. sejam anexadas a não-filhos, a menos que você as execute com privilégios elevados (sudo).

Quais são os problemas com a solução alternativa?

  • A solução alternativa é um pouco problemática porque ptrace_scopeé um valor global e, embora esteja definido como 0, todos os processos no seu sistema estão isentos da restrição que não é filho.
  • Se você usar a solução alternativa, coloque-a em um script bash simples que a habilite, execute o programa do Windows e desabilite (define como 1) na saída.
    • NÃO torne o ptrace_scopemundo gravável (666), como recomenda a publicação no fórum - isso é um enorme risco à segurança, porque agora qualquer processo pode alterá-lo à vontade!

Existe uma solução melhor?

  • Uma solução melhor, mais segura e que não exija modificações repetidas no ptrace_scope, é conceder aos recursos ptrace do Wineserver .

    • Em um terminal:

      sudo apt-get install libcap2-bin 
      sudo setcap cap_sys_ptrace = eip / usr / bin / vinhoservidor
      sudo setcap cap_sys_ptrace = eip / usr / bin / wine-preloader
      
    • Isso isenta os binários do servidor de vinho e do pré-carregador de vinho da restrição não-filho ptrace e permite que eles sigam qualquer processo.

    • Ele só precisa ser feito uma vez e é mais seguro, porque esses binários geralmente são de uma fonte confiável - os repositórios oficiais ou o PPA oficial do Wine, para que não sejam malware.

Se você estiver usando o Crossover

Instale a libcap2:

sudo apt-get install libcap2-bin;

Em seguida, adicione uma exceção para o Crossover:

sudo setcap cap_sys_ptrace = eip / opt / cxoffice / bin / vinhoservidor;
sudo setcap cap_sys_ptrace = eip / opt / cxoffice / bin / preloader de vinho;

Por fim, adicione suas bibliotecas ao ld.so.conf (ou você receberá "erro ao carregar as bibliotecas compartilhadas: libwine.so.1: não é possível abrir o arquivo de objeto compartilhado: não existe esse arquivo ou diretório"):

eco / opt / cxoffice / lib / | sudo tee /etc/ld.so.conf.d/crossover.conf
sudo / sbin / ldconfig
ish
fonte
Eu acho que está sendo chamado de bug porque o ptrace estava funcionando bem na versão 10.10 depois que o Wine foi corrigido para suportá-lo. Ele está trabalhando com 10.10-11.10, mas regrediu em 12.04.
Trailrider
Obrigado pela aceitação @TrailRider; Eu estava me referindo à sua afirmação de que "é um bug no kernel " (o que não é); é certamente um tipo de bug para o Wine, e deve ser destruído :) As coisas certamente mudam no kernel algumas vezes, geralmente para melhor, e é deixado o software afetado se consertar em vez de dizer a Linus: vá se reverter ": P
ish
Entendo o que você está dizendo aqui e concordo, apenas disse que era um bug no kernel, pois vários sites de suporte e os Codeweavers o chamaram de bug do kernel. Aqui está a página dos tecelões de códigos. codeweavers.com/support/wiki/linux/faq/ubuntu1204
TrailRider
2
Eu estava definindo o ptrace global como 0 e, depois de alguns segundos, o aplicativo inicia; setcap é MUITO mais seguro e não é irritante porque tem que sudo o tempo todo .. thx vm!
Poder de Aquário
@ Izx: Obrigado por esta resposta. Seria interessante adicionar informações sobre o que "eip" se refere (explicado aqui: andy-pearce.com/blog/posts/2013/Mar/file-capabilities-in-linux ). Além disso, sugeri a recomendação desse método nos documentos reptyr, nos quais o autor respondeu que pode ser um problema de segurança: github.com/nelhage/reptyr/pull/27#issuecomment-29486673 - seria ótimo se você pudesse elaborar naquilo.
blueyed
4

No ubuntuforums.org , recebi uma resposta com o seguinte link

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

aqui está o colar do link (com minha ênfase adicionada)

À medida que o Linux cresce em popularidade, ele se torna um alvo crescente de malware. Uma fraqueza particularmente preocupante das interfaces de processo do Linux é que um único usuário é capaz de examinar a memória e o estado de execução de qualquer um de seus processos. Por exemplo, se um aplicativo (por exemplo, firefox) fosse comprometido, seria possível que um invasor se conectasse a outros processos em execução (por exemplo, gpg-agent) para extrair credenciais adicionais e continuar a expandir o escopo do ataque.

Este não é um problema teórico. O sequestro de sessão SSH e até a injeção arbitrária de código são totalmente possíveis se o ptrace for permitido normalmente .

Para uma solução, alguns aplicativos usam prctl () para desaprovar especificamente esse anexo ptrace (por exemplo, ssh-agent). Uma solução mais geral é permitir apenas o ptrace diretamente de um processo pai para um filho (por exemplo, gdb direto e strace ainda funcionam) ou como usuário root (por exemplo, gdb BIN PID e strace -p PID ainda funcionam como raiz).

Esse comportamento é controlado pelo valor / proc / sys / kernel / yama / ptrace_scope sysctl. O padrão é "1" para bloquear o ptrace não filho. Um valor de "0" restaura o comportamento anterior mais permissivo, que pode ser mais apropriado para alguns sistemas e servidores de desenvolvimento com apenas contas de administrador. O uso de "sudo" também pode conceder permissões ptrace temporariamente por meio do recurso CAP_SYS_PTRACE, embora esse método permita o ptrace de qualquer processo.

Portanto, acho que a resposta mais curta seria que é menos seguro, mas o provável capuz de um computador pessoal sujeito a esses tipos de ataques seria bem pequeno.

TrailRider
fonte
1

ATUALIZAÇÃO As instruções acima:

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

não funciona a partir de 15/09/2018 no Ubuntu 18.04.1 e PlayOnLinux v.4.2.12 usando a versão estável mais recente do Wine, que é a v.3.0.1, libcap2 já estava instalada.

A mensagem de erro no Terminal Gnome é a seguinte:

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

Não tenho certeza do que isso significa ..... mas pensei em publicá-lo para alguém interpretar e talvez ter uma solução nova e viável.

Obrigado.

Danny Strickland
fonte