Gostaria de saber se existe uma ferramenta ou técnica para executar um executável em um ambiente isolado, talvez em uma máquina virtual. Enquanto o programa estiver sendo executado, desejo poder auditar o aplicativo, ou seja, ver tudo o que o executável está fazendo (acesso a arquivos e rede).
Ao fazer isso, quero poder verificar se o executável é malicioso, ou seja, executa operações que não deveriam (leitura / gravação em arquivos, escuta / conexão às portas de rede, ...).
Eu não me importaria de algo com uma interface gráfica.
sandbox somebinary
e osandbox
programa imaginário registraria todos os arquivossomebinary
lidos ou gravados, todos IPs / portas conectados, dados transferidos etc. Isso seria útil, também gostaria de saber se existe algo assim (e, na verdade, sem essa ferramenta, observar um programa em execução em uma VM não faria sentido. não posso dizer o que faz lá de qualquer maneira). Boa pergunta.Respostas:
Sim, isso é chamado de virtualização de aplicativos .
O LXC (Linux Containers) é uma ferramenta comumente usada para configurar isso. Ele permite que você configure uma rede completamente separada para esse aplicativo e o coloca em uma espécie de máquina virtual, como um chroot. Isso é principalmente para fins de segurança (uma "prisão"), não para auditoria.
Acho que está um pouco fora do escopo da pergunta explicar os contêineres completos do LXC e também como auditá-lo exatamente. Abaixo está um pouco sobre como começar, no entanto.
Isso pode ser feito usando
strace
e eu fiz a mesma pergunta no Unix e Linux:Como respondido lá, tudo se resume a basicamente
Importante: quando você vê isso acontecendo, o dano já ocorreu.
Contêiner de aplicativo LXC
Deste artigo . Tudo se resume a:
lxc-macvlan.conf
arquivo de configuração:Inicie usando
lxc-execute
:Observe que o LXC oferece o tipo de sistema e aplicativo de contêineres. Você está procurando por contêineres de aplicativos aqui.
fonte
/sys
não é virtualizado e as alterações feitas/sys
no contêiner são feitas/sys
no host. Fazendo uma pesquisa rápida na Web, existem alguns artigos que documentam como "escapar" de um contêiner. O LXC será uma boa solução para o problema, mas atualmente não é, e não deve ser usado como uma ferramenta de segurança.lxc.mount
opções. Isso significa que o sistema de arquivos do usuário inteiro é acessível pela execução executável.O que você está procurando é uma ferramenta que mostre como um programa interage com o sistema (mais especificamente, com o kernel). Os programas interagem com o sistema usando syscalls. Exemplos de syscalls são:
open
- usado para abrir um arquivo;read
ewrite
- usado para ler / gravar de / para um descritor de arquivo;connect
- usado para conectar um soquete a um par;man syscalls
).O ponto é: syscalls podem ser rastreados usando
ptrace(2)
. Então, basicamente, você está procurando ferramentas construídasptrace
. Uma dessas ferramentas éstrace(1)
, que é um aplicativo de terminal que assume um comando como argumento e gera:A saída é do tipo C. Aqui está um exemplo:
Lá você vê que
cat test
está abrindo um arquivo chamadotest
, lendo seu conteúdo (hello
) e colocando-o na saída padrão.strace
pode produzir muita saída, portanto, leia sua página de manual (man strace
), especialmente a documentação da-e
saída que permitirá ver apenas os syscalls nos quais você está interessado.Infelizmente, não conheço alternativas gráficas ou fáceis de usar. Se você deseja procurá-los,
ptrace
deve ser uma das suas palavras-chave de pesquisa.Sobre o isolamento, existem muitas tecnologias por aí. Chroots, contêineres Linux (atualmente em desenvolvimento e incompletos), virtualização de software e paravirtualização são os mais utilizados. No entanto, este é um tópico muito grande para discutir. Sugiro que você abra uma nova pergunta se desejar obter mais detalhes.
fonte
Dê uma olhada no AppArmor . Você pode adicionar um perfil limitado para um executável e colocá-lo no modo "reclamar", onde as ações serão permitidas, mas registradas, o que acho que atende aos seus requisitos.
Mas observe que isso não é realmente suficiente. Um binário malicioso inteligente pode ser capaz de detectar que está sob observação e não executar ações maliciosas, exceto quando não está sendo observado.
O AppArmor vai além disso e permite que um aplicativo seja restringido para sempre apenas às operações aprovadas. Os aplicativos que terminam no Centro de Software Ubuntu são fornecidos com perfis do AppArmor.
fonte
Como você identificou, uma máquina virtual seria melhor para fornecer isolamento, principalmente se você tiver motivos para acreditar que um executável é malicioso em primeiro lugar. Mas mesmo isso não é perfeito, já que as vulnerabilidades na plataforma de virtualização (hardware e software) podem ser exploradas por códigos maliciosos para ocorrer. Aqui está um exemplo de uma vulnerabilidade de virtualização do mundo real: http://www.kb.cert.org/vuls/id/649219
fonte
Você pode criar um snap .
Os snaps são "confinados ao sistema operacional e outros aplicativos por meio de mecanismos de segurança, mas podem trocar conteúdo e funções com outros snaps de acordo com políticas refinadas controladas pelo usuário e pelos padrões do sistema operacional". (em http://snapcraft.io/docs/snaps/intro )
Eles fornecem um isolamento adicional além do AppArmor, por exemplo, usando o seccomp também.
Além disso, um snap pode ser independente para facilitar a distribuição e atualizações atômicas em seu sistema.
fonte
Obrigado, as respostas foram muito úteis ...
Também encontrei o seguinte: https://downloads.cuckoosandbox.org/docs/
O que é uma ferramenta muito interessante para analisar malware enquanto ele fica em uma VM
fonte