Me preguntaba si hay una herramienta o una técnica para ejecutar un ejecutable en un entorno aislado, tal vez en una máquina virtual. Mientras se ejecuta el programa, quiero poder auditar la aplicación, es decir, ver todo lo que está haciendo el ejecutable (acceso a archivos y red).
Al hacerlo, quiero poder verificar si el ejecutable es malicioso, es decir, realiza operaciones que no debería (leer / escribir en archivos, escuchar / conectarse a puertos de red, ...).
No me importaría algo con una interfaz gráfica.
sandbox somebinary
y elsandbox
programa imaginario registraría todos los archivossomebinary
leídos o escritos, todo IP / puertos conectados, datos transferidos, etc. Sería algo útil, también me gustaría saber si existe algo como esto (y, en realidad, sin esa herramienta, observar un programa que se ejecuta en una VM no tendría sentido No puedo decir lo que hace allí de todos modos). Buena pregunta.Respuestas:
Sí, esto se llama virtualización de aplicaciones .
LXC (Contenedores de Linux) es una herramienta de uso común para configurar esto. Le permite configurar una red completamente separada para esta aplicación y la "convierte" en una especie de máquina virtual, muy parecida a un chroot. Esto es principalmente para fines de seguridad (una "cárcel"), no realmente para auditoría.
Creo que está un poco fuera del alcance de la pregunta explicar los contenedores LXC completos y cómo auditarlos exactamente. Sin embargo, a continuación se muestra un poco sobre cómo comenzar.
Esto se puede lograr usando
strace
y he hecho la misma pregunta en Unix y Linux:Como se respondió allí, todo se reduce básicamente a
Importante: una vez que veas que sucede, el daño ya tuvo lugar.
Contenedor de aplicaciones LXC
De este artículo . Todo se reduce a:
lxc-macvlan.conf
archivo de configuración:Comience usando
lxc-execute
:Tenga en cuenta que LXC ofrece sistemas y tipos de contenedores de aplicaciones. Estás buscando contenedores de aplicaciones aquí.
fuente
/sys
no está virtualizado y los cambios realizados/sys
desde el contenedor se realizan desde/sys
el host. Haciendo una búsqueda rápida en la Web, hay algunos artículos que documentan cómo "escapar" de un contenedor. LXC será una buena solución al problema, pero actualmente no lo es, y no debe usarse como herramienta de seguridad.lxc.mount
opciones. Esto significa que el sistema ejecutable puede acceder a todo el sistema de archivos del usuario.Lo que está buscando es una herramienta que muestre cómo un programa interactúa con el sistema (más específicamente, con el núcleo). Los programas interactúan con el sistema usando syscalls. Ejemplos de syscalls son:
open
- Se utiliza para abrir un archivo;read
ywrite
- se usa para leer / escribir desde / a un descriptor de archivo;connect
- Se utiliza para conectar un zócalo a un par;man syscalls
).El punto es: las llamadas al sistema se pueden rastrear usando
ptrace(2)
. Entonces, básicamente, estás buscando herramientas construidas alrededorptrace
. Una de esas herramientas esstrace(1)
, que es una aplicación de terminal que toma un comando como argumento y genera:La salida está en forma de C. Aquí hay un ejemplo:
Allí verá que
cat test
está abriendo un archivo llamadotest
, leyendo su contenido (hello
) y colocándolo en la salida estándar.strace
puede producir mucha salida, así que asegúrese de leer su página de manual (man strace
), especialmente la documentación de la-e
salida que le permitirá ver solo las llamadas al sistema que le interesan.Desafortunadamente, no conozco alternativas gráficas o fáciles de usar. Si desea buscarlos,
ptrace
debe ser una de sus palabras clave de búsqueda.Sobre el aislamiento, hay muchas tecnologías por ahí. Chroots, contenedores de Linux (que están actualmente en desarrollo e incompletos), la virtualización de software y la paravirtualización son los más utilizados. Sin embargo, este es un tema demasiado grande para discutirlo. Sugeriría abrir una nueva pregunta si desea obtener más detalles.
fuente
Echa un vistazo a AppArmor . Puede agregar un perfil limitado para un ejecutable y ponerlo en modo de "queja", donde se permitirán acciones pero se registrarán, lo que creo que cumple con sus requisitos.
Pero tenga en cuenta que esto no es realmente suficiente. Un binario malicioso inteligente puede detectar que está bajo observación y no realizar acciones maliciosas, excepto cuando no se está observando.
AppArmor va más allá de esto y permite que una aplicación se restrinja para siempre solo a operaciones aprobadas. Las aplicaciones que terminan en el Centro de software de Ubuntu se entregan con los perfiles de AppArmor.
fuente
Como ha identificado, una máquina virtual sería mejor para proporcionar aislamiento, particularmente si tiene razones para creer que un ejecutable es malicioso en primer lugar. Pero incluso esto no es perfecto, ya que las vulnerabilidades en la plataforma de virtualización (tanto de hardware como de software) pueden ser explotadas por código malicioso con el fin de salir. Aquí hay un ejemplo de una vulnerabilidad de virtualización del mundo real: http://www.kb.cert.org/vuls/id/649219
fuente
Podrías crear un complemento .
Los snaps están "confinados del sistema operativo y otras aplicaciones a través de mecanismos de seguridad, pero pueden intercambiar contenido y funciones con otros snaps de acuerdo con políticas específicas controladas por el usuario y los valores predeterminados del sistema operativo". (de http://snapcraft.io/docs/snaps/intro )
Estos proporcionan un mayor aislamiento además de AppArmor, por ejemplo, también con seccomp .
Además, un complemento puede ser autónomo para una fácil distribución y actualizaciones atómicas en su sistema.
fuente
Gracias, las respuestas fueron muy útiles ...
También encontré esto: https://downloads.cuckoosandbox.org/docs/
Que es una herramienta muy interesante para analizar malware mientras se encuentra en una VM
fuente