Como posso executar um script bash sem afetar o sistema de arquivos?

1

Eu estou tentando criar alguns soft de uma sandbox para sistemas Linux (Ubuntu). Meu objetivo principal é descobrir quais arquivos são executados por um script bash de minha escolha, sem realmente deixá-los executá-los. Eu também quero evitar alterações no sistema, então o script em execução vai pensar que ele tem a capacidade de gravar em arquivos, mas na verdade não. Eu não quero executar o script bash sob permissões baixas, porque eles não funcionarão se ele tentar mudar alguma coisa. Por favor, não sugira executá-lo através de um método virtual, é muito lento para mim.

A única coisa que me vem à mente é ligar qualquer gravação syscall assim quando ele tenta gravar em um arquivo, o sistema retornará sucesso, mas não fazer nada. Também conectando qualquer syscall de execução para capturar todos os programas executados pelo script e impedir a execução de outros arquivos enquanto retorna o sucesso para o script. Mas eu tenho que fazer uma pista sobre como fazer isso.

Alguma ideia? Agradecemos antecipadamente.

    
por Shtut 12.11.2014 / 09:34

2 respostas

3

Tente usar uma sobreposição , com um chroot . Primeiro, decida o caminho que você quer fazer o chroot, e certifique-se de que ele existe, e da mesma forma para o caminho que você irá sobrepor em / (que é onde as modificações irão):

mkdir -p /chroot
mkdir -p /tmp/tmproot

Eu escolhi um diretório em /tmp/ , pois é um tmpfs no meu sistema (possivelmente não recomendável, mas OK para mim), portanto, nenhuma alteração deve atingir o disco. Você pode usar um squashfs e montá-lo em algum lugar, e usar isso como a sobreposição, mas isso tem o problema de ser somente leitura, eu acho.

Agora:

$ mount -t overlayfs -o lowerdir=/,upperdir=/tmp/tmproot overlayfs /chroot/
$ chroot /chroot/ /bin/bash -l
root:/$ touch test
root:/$ ls
...  sys  test  tmp  ...
root:/$ logout
$ ls /
...  sys  tmp  ...
$ ls /tmp/tmproot/
root  test

Se você tornar o upperdir independente de um disco físico (talvez usando tmpfs ), isso deve proteger o lowerdir .

Observe a criação de uma pasta root - que é para meu .bash_history . Uma cópia foi feita do original .bash_history e, em seguida, anexada a.

    
por muru 12.11.2014 / 12:37
2

Aqui está um resultado de impossibilidade: O comportamento de um script pode depender de informações que ele escreveu em um arquivo anteriormente. Se você realmente não permitir que ele grave no arquivo (mas faça o script acreditar que ele gravou no arquivo), você poderá influenciar o comportamento do script de uma maneira que não aconteceria se você o executasse "de verdade" .

Por exemplo:

#!/bin/bash

write_bit_to_file () {
    # write a random bit to a file
    echo $((RANDOM % 2)) >> file.txt
}

get_bit_from_file () {
    # read the random bit from the file
    tail -1 file.txt
}

# MAIN SCRIPT
#############

# ... do some stuff, save some info for later ...
write_bit_to_file
# ... do more stuff, retrieve info from file ...
if (( $(get_bit_from_file) )); then
    # access foo.txt and do something
    echo "I'm going to access foo.txt"
else
    # access bar.txt and do something
    echo "I'm going to access bar.txt"
fi

Este é obviamente um script muito artificial, mas espero que você entenda: se o script realmente não grava em file.txt , mas acredita que sim, você receberá um erro (por exemplo, se file.txt não inexistente) ou comportamento inesperado (por exemplo, se file.txt existir, mas contiver outras informações que não as esperadas, porque write_bit_to_file na verdade não gravou no arquivo). No entanto, se você executasse o script como real, ele se comportaria como esperado (por exemplo, acessar aleatoriamente foo.txt ou bar.txt ).

O que pode ser possível é escrever um monitor que execute seu script, observe os arquivos aos quais ele grava, faça um backup desses arquivos antes que isso aconteça e, no final do script, restaure esses arquivos ao estado original. Mas isso seria bem desagradável;)

Edit: Em esta resposta , o muru sugere uma maneira muito boa de implementar algo parecido com isso monitorar, e melhor ainda, uma vez que ele nunca afeta seu sistema de arquivos raiz real e preserva a modificação de arquivos feitos por scripts para serem reutilizados posteriormente. Esse é o caminho a percorrer! : -)

    
por Malte Skoruppa 12.11.2014 / 10:45