¿Cómo sandbox aplicaciones?

66

Quiero ejecutar pequeños programas no confiables, pero restringirles el acceso a cualquier archivo fuera de su carpeta, acceso a la red y todo lo que realmente no necesitan. ¿Cuál es la forma más sencilla de lograr esto?

michel
fuente
Nunca lo he usado, así que no puedo dar una respuesta completa, pero AFAIK, AppArmor ( wiki.ubuntu.com/AppArmor ) debería poder hacerlo.
Javier Rivera
Echa un vistazo a Vagrant, un contenedor para VirtualBox. vagrantup.com y [en Wikipedia] ( en.wikipedia.org/wiki/Vagrant_(software%29) y en github
Janus Troelsen
@JavierRivera FWIW, SELinux también. Sin embargo, no tengo idea de lo fácil que sería ejecutar Ubuntu.
TC1
Apparmor ya está instalado por defecto en Ubuntu, por lo que debería ser más fácil.
Javier Rivera
1
Parece que son múltiples posibilidades: virtualización usando algo como Virtualbox (como Vagrant), chroot, LXC, App Armor y SE Linux.
Flimm

Respuestas:

26

Si realmente no son de confianza, y desea estar seguro, debería configurar una caja separada. Realmente o virtualmente.

Además, no quieres que esa caja esté en la misma red que tus cosas importantes, si eres lo suficientemente paranoico. En todas las soluciones, configuraría un usuario separado sin derechos, de modo que no abra demasiadas herramientas al posible comprometido.

  • Por lo tanto, la opción más segura sería una casilla separada eliminada físicamente de su red.
  • Podría ceder un poco agregándolo a la red física, pero en una subred diferente: no hay conexión 'real' dentro
  • Una máquina virtual sería una opción, pero podría tener que renunciar a algo de rendimiento.

Si está obligado a ejecutarlo en el mismo cuadro, tiene, por ejemplo, esta opción

  • chroot. Esta es una opción predeterminada para hacerlo para muchas personas, y para amenazas no específicas, incluso podría funcionar. Pero NO es una opción de seguridad, y se puede romper fácilmente. Sugeriría usar esto según lo previsto, es decir, no por seguridad.

Al final, es posible que deba configurar un modelo de sandboxing específico sin la molestia de la virtualización o cajas separadas, o la situación de riesgo chroot. Dudo que esto sea lo que quisiste decir, pero mira este enlace para obtener información más detallada.

Nanne
fuente
¿Cuán seguro sería prudente ejecutar una aplicación no confiable en una máquina virtual? He oído hablar de exploits teóricos que pueden acceder al sistema operativo host a través del hipervisor e infectarlo.
zuallauz
Podría ser, aunque actualmente no estoy al tanto de amenazas reales como esa, ciertamente no son amenazas no específicas. Debes considerar que el atacante que escribe malware en un juego no iría tan lejos. Ahora, por supuesto, un ataque de lanza contra usted solo podría, si conocen su diseño, pero aún así no creo que sea su primera preocupación. Si está seguro de que son maliciosos, debería configurar una caja aislada de todos modos, en cuanto a la red.
Nanne
14

Firejail es bastante nuevo y está en constante desarrollo. Fácil de usar.

Puedes simplemente:

sudo apt-get install firejail
firejail app
penguinforsupper
fuente
Bienvenido a Ask Ubuntu! Si bien esto puede responder teóricamente la pregunta, sería preferible incluir aquí las partes esenciales de la respuesta y proporcionar el enlace para referencia.
Mark Kirby
12

Docker lo ayudará a configurar contenedores que puede ejecutar desde su núcleo actual, pero a la vez mantenerse alejado del resto de su sistema. Parece bastante innovador, pero hay un enfoque de Ubuntu y una buena documentación.

N. Thomas Kor
fuente
44
Creo que esta es una buena opción para la mayoría de los casos. Sin embargo, la parte "no confiable" de la pregunta original me preocuparía un poco. Hay hacks demostrados disponibles que pueden permitir que una aplicación "salga" de su contenedor. Y dado que los contenedores Docker se ejecutan en el acceso raíz, esto podría ser peligroso, si su objetivo era proteger las aplicaciones entre sí.
Cris Holdorph
@CrisHoldorph es correcto, aunque Docker está mejorando e incluso creo que hoy en día es posible ejecutar un docker sin privilegios (no como root). Esto es ciertamente cierto ahora para LXC y LXD (el a veces llamado demonio LXC) puede simplificar enormemente la creación de dichos contenedores. Por lo tanto, los contenedores modernos sin privilegios se pueden considerar como una mejora en términos de seguridad sobre chroot. ¡Pero no son una barrera impenetrable!
Huygens
Docker no es una herramienta de seguridad!
Federico
10

Virtualización / emulación completa (VirtualBox)

Una posible solución es el software de virtualización como VirtualBox, que puede encontrar en el centro de software.

  • Instalar caja virtual
  • Cree una máquina virtual con redes habilitadas
  • Instale Ubuntu o quizás un escritorio más ligero como Lubuntu
  • Actualice completamente el sistema operativo instalado (dentro de la caja virtual)
  • Deshabilitar redes en la máquina virtual
  • Toma una foto

Ahora puede instalar el software en el que no confía para ver qué hace. No puede alterar el mundo exterior o aloja el sistema operativo ya que no tiene acceso.

Sin embargo, puede destruir su máquina virtual, pero si lo hace, puede restaurar desde su instantánea.

Puede haber otros métodos para limitar el poder destructivo del software no confiable, pero este es el método más robusto que se me ocurre.

Virtualización basada en contenedores (Docker / LXC)

Otra opción puede ser LXC más información aquí

LXC es el paquete de control de espacio de usuario para Linux Containers, un mecanismo de sistema virtual liviano que a veces se describe como "chroot con esteroides".

LXC se acumula desde chroot para implementar sistemas virtuales completos, agregando mecanismos de gestión de recursos y aislamiento a la infraestructura de gestión de procesos existente de Linux.

Está disponible en el centro de software. Sin embargo, no tengo experiencia.

Warren Hill
fuente
1
Eso es solo un inconveniente. ¿Crear una máquina virtual completa solo para ejecutar juegos? Esa no es una muy buena solución. ¿No crees que configurar el GID y el UID del proceso sería MUCHO más fácil que esto?
Jack Mayerz
En realidad, creo que configurar una caja virtual es lo suficientemente fácil como para que probablemente no me moleste en tomar una instantánea. Si destruye mi máquina virtual, puedo descartarla.
emory
Voto negativo: razonamiento incorrecto real incluso si la solución es correcta. Los programas no necesitan tener los mismos privilegios que el usuario que los ejecuta. Linux y Ubuntu han sido compatibles con MAC desde hace años. Ubuntu usa AppArmos para esto, y puede contener un programa en un directorio fácilmente.
Javier Rivera
@JavierRivera "fácilmente" no es la palabra correcta, o un perfil de AppArmor y una política SELinux para Firefox se enviarían por defecto con cada distribución y ese no es el caso. Ubuntu incluye dicho perfil pero no está activo por defecto, ya que rompe algunas características "populares" de Firefox. Tampoco hay muchas políticas de SELinux para la mayoría de las aplicaciones GUI, tales aplicaciones requieren demasiados permisos para seguir siendo llamadas sandbox. Si no está de acuerdo, publique aquí enlaces a Sandbox Firefox de forma segura con AppArmor o SELinux. Si puedes, sería realmente feliz :-)
Huygens
Probablemente deberías definir "seguro" para una respuesta significativa, pero la política predeterminada de Firefox en Ubuntu es bastante razonable para mí. Por supuesto, rompe las cosas, ya que no es tan fácil de usar como no usar nada, pero sigue siendo mucho más fácil de usar que una máquina virtual completa para mí (eso también rompe las características populares de Firefox).
Javier Rivera
9

mbox

Mbox es un mecanismo de sandbox ligero que cualquier usuario puede usar sin privilegios especiales en los sistemas operativos básicos.

Lo he usado para un par de cosas de manera confiable.

0x78
fuente
4

subusuario

Puede usar el subusuario para proteger sus aplicaciones con Docker. Esto le permite hacer cosas como aplicaciones GUI de sandbox, que no es fácil de hacer con Docker directamente.

sudo apt install subuser
timthelion
fuente
1

Creo que una posible solución es crear un usuario separado para fines de prueba y limitar sus privilegios. De esta manera, no perderá rendimiento, lo que definitivamente sucedería en la máquina virtual, pero creo que esto es menos seguro, si no se configura de manera muy adecuada, lo que no puedo aconsejar sobre cómo hacerlo.

Phlya
fuente
2
Esto no protege el sistema del software malicioso que aún puede instalarse o ejecutarse; tampoco es un entorno limitado de la manera en que esta pregunta significa
Thomas Ward
1

DoSH - Docker SHell

En caso de que simplemente desee proteger la actividad de los usuarios, puede usar "DoSH"

DoSH (que significa Docker SHell) es un desarrollo para crear contenedores Docker cuando los usuarios inician sesión en el sistema Linux y ejecutan un shell en ellos, en lugar de crear el shell de manera simple.

ubuser
fuente