¿Cuál es la solución alternativa 'ptrace_scope' para los programas de Wine y existen riesgos?

37

Para ejecutar ciertos programas de Windows en WINE, necesita esta solución:

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

Según los sitios web de soporte, esto se debe a un error en el kernel de Ubuntu que impide que ptrace y WINE se reproduzcan bien juntos.

Usando el comando anterior, establece el ptrace en 0 que, según la investigación que he realizado (no me pregunte qué sitios web, me parecen muchos), ptrace tiene que ver con las interacciones entre los programas. El ajuste 0 es más permisivo que el 1.

Tengo que suponer que había una buena razón por la que Ubuntu quería el ptrace = 1, por lo que esto me lleva de vuelta a la forma breve de la pregunta.

¿Existe algún riesgo al establecer ptrace = 0? Baja seguridad? problemas de depuración? ¿Alguna otra en la que no haya pensado?

PD: para cualquiera que lea esto y se pregunte qué causa el error, los programas de Windows no se abrirán en absoluto, en el Monitor del sistema verá muchas instancias del programa que intenta abrirse y luego todos se cerrarán y si ejecuta el programa para el terminal, recibirá un error que le indica que se ha alcanzado el número máximo de instancias de programa.

TrailRider
fuente
Aquí hay una descripción vinculada desde un mensaje de error emergente de PlayOnLinux que cancela la instalación de .Net 4.5 a menos que ptrace_scope esté configurado en 0: playonlinux.com/en/…
pabouk

Respuestas:

41

Respuesta corta: no hay peligro práctico todavía, pero sigue leyendo para una mejor manera ...


¿Qué es esta cosa de Ptrace de todos modos?

Esto se debe a un error en el kernel de Ubuntu que impide que ptrace y WINE se reproduzcan bien juntos.

  • No, la protección de ptrace es una medida deliberada de seguridad del núcleo que se introdujo por primera vez alrededor de Ubuntu 10.10. No es un error , por lo que no se va a "arreglar".

  • En términos simples, el ptrace_scopevalor predeterminado de 1bloquea un proceso para que no examine y modifique otro proceso a menos que el segundo proceso (secundario) haya sido iniciado por el primer proceso (primario).

  • Esto puede causar problemas con algunos programas en Wine debido a la forma en que wineserverproporciona "Servicios de Windows" a estos programas.

¿Cuáles son los riesgos de plantear ptrace_scopea 0?

  • Esto restaura el comportamiento anterior en el que un proceso puede "rastrear" otro proceso, incluso si no hay una relación padre-hijo.

  • En teoría, una pieza de malware puede usar esto para dañarlo a usted / su computadora; por ejemplo, se puede conectar a Firefox y registrar todas sus URL / contraseñas, etc. En la práctica, esto es extremadamente improbable a menos que instale ciegamente debs binarios desde sitios aleatorios, etc.

  • En lo que respecta a la depuración, la 0configuración es, de hecho, necesaria para gdb, straceetc., adjuntar a personas que no son niños a menos que las ejecute con privilegios elevados (sudo).

¿Cuáles son los problemas con la solución?

  • La solución alternativa es algo problemática porque ptrace_scopees un valor global y, aunque está configurado como 0, todos los procesos en su sistema están exentos de la restricción no secundaria.
  • Si usa la solución alternativa, colóquela en un script de bash simple que lo habilite, ejecute su programa de Windows y luego desactive (establece en 1) al salir.
    • NO haga ptrace_scopeque se pueda escribir en el mundo (666) como recomienda la publicación del foro, ¡eso es un gran riesgo de seguridad porque ahora cualquier proceso puede cambiarlo a voluntad!

¿Hay una mejor solución?

  • Una mejor solución que es más segura y no requiere la modificación repetitiva de ptrace_scope es otorgar capacidades de WtraServer ptrace .

    • En una 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
      
    • Exime al wineserver y vino preloader binarios de la restricción ptrace no infantil, y les permite PTRACE cualquier proceso.

    • Solo debe hacerse una vez, y es más seguro porque estos archivos binarios generalmente provienen de una fuente confiable: los repositorios oficiales o el PPA oficial de Wine, por lo que no serán malware.

Si estás usando Crossover

Instala libcap2:

sudo apt-get install libcap2-bin;

Luego, agregue una excepción para Crossover:

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

Finalmente, agregue sus bibliotecas a ld.so.conf (o obtendrá "error al cargar las bibliotecas compartidas: libwine.so.1: no se puede abrir el archivo de objeto compartido: No existe tal archivo o directorio"):

echo / opt / cxoffice / lib / | sudo tee /etc/ld.so.conf.d/crossover.conf
sudo / sbin / ldconfig
ish
fuente
Creo que se llama un error porque ptrace funcionaba bien en 10.10 después de que Wine fue parcheado para admitirlo. Ha estado trabajando con 10.10-11.10 pero ha retrocedido en 12.04.
TrailRider
Gracias por aceptar @TrailRider; Me refería a su declaración de que "es un error en el núcleo " (que no lo es); es sin duda un tipo de error para Wine, y debería ser aplastado :) Las cosas ciertamente cambian en el núcleo a veces, generalmente para mejor, y depende del software que se ve afectado para solucionarse en lugar de decirle a Linus "yo man, ve a revertirte ": P
ish
Entiendo lo que está diciendo aquí y estoy de acuerdo, solo dije que era un error en el kernel, ya que varios sitios web de soporte, así como Codeweavers, lo llamaron un error del kernel. Aquí hay una página de codeweavers. codeweavers.com/support/wiki/linux/faq/ubuntu1204
TrailRider
2
Estaba configurando el ptrace global en 0, y nuevamente en 1 después de unos segundos, se inicia la aplicación; setcap es MUCHO más seguro y no molesto como tener que sudo todo el tiempo ... ¡gracias vm!
Acuario Power
@izx: Gracias por esta respuesta. Sería interesante agregar información sobre a qué se refiere "eip" (explicado aquí: andy-pearce.com/blog/posts/2013/Mar/file-capabilities-in-linux ). Además, he sugerido recomendar este método en los documentos de reptyr, donde el autor respondió que puede ser un problema de seguridad: github.com/nelhage/reptyr/pull/27#issuecomment-29486673 , sería genial, si pudiera explicarlo en ese.
azulada el
4

En ubuntuforums.org obtuve una respuesta con el siguiente enlace

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

Aquí está la pasta del enlace (con mi énfasis agregado)

A medida que Linux crezca en popularidad, se convertirá en un objetivo creciente para el malware. Una debilidad particularmente preocupante de las interfaces de proceso de Linux es que un solo usuario puede examinar la memoria y el estado de ejecución de cualquiera de sus procesos. Por ejemplo, si una aplicación (por ejemplo, Firefox) se vio comprometida, un atacante podría conectarse a otros procesos en ejecución (por ejemplo, gpg-agent) para extraer credenciales adicionales y continuar expandiendo el alcance de su ataque.

Este no es un problema teórico. El secuestro de sesión SSH e incluso la inyección de código arbitrario es totalmente posible si ptrace se permite normalmente .

Para una solución, algunas aplicaciones usan prctl () para deshabilitar específicamente dicho archivo adjunto ptrace (por ejemplo, ssh-agent). Una solución más general es permitir solo ptrace directamente de un proceso padre a uno secundario (es decir, gdb directo y strace todavía funcionan), o como el usuario root (es decir, gdb BIN PID y strace -p PID todavía funcionan como root).

Este comportamiento se controla mediante el valor sysctl / proc / sys / kernel / yama / ptrace_scope. El valor predeterminado es "1" para bloquear la traza no secundaria. Un valor de "0" restaura el comportamiento anterior más permisivo, que puede ser más apropiado para algunos sistemas de desarrollo y servidores con solo cuentas de administrador. El uso de "sudo" también puede otorgar permisos temporales de traza mediante la capacidad CAP_SYS_PTRACE, aunque este método permite la traza de cualquier proceso.

Entonces, supongo que la respuesta corta sería que es menos seguro, pero la capucha de una computadora personal que se enfrenta a este tipo de ataques sería bastante delgada.

TrailRider
fuente
1

ACTUALIZAR Las instrucciones anteriores:

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

no funciona a partir del 15/09/2018 en Ubuntu 18.04.1 y PlayOnLinux v.4.2.12 usando la última versión estable Wine que es v.3.0.1 libcap2 ya estaba instalada.

El mensaje de error en Gnome Terminal es el siguiente:

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

No estoy seguro de lo que eso significa ... pero pensé en ponerlo a disposición de cualquiera para que lo interprete y tal vez tenga una solución nueva y viable.

Gracias.

Danny Strickland
fuente