Мне было интересно, есть ли инструмент или метод для запуска исполняемого файла в изолированной среде, может быть, на виртуальной машине. Во время работы программы я хочу иметь возможность проверять приложение, то есть видеть все, что делает исполняемый файл (доступ к файлам и сети).
Таким образом, я хочу иметь возможность проверить, является ли исполняемый файл вредоносным, то есть выполняет ли операции, которые он не должен (чтение / запись в файлы, прослушивание / подключение к сетевым портам, ...).
Я бы не стал возражать против графического интерфейса.
Вы можете создать снимок .
Моментальные снимки «ограничены ОС и другими приложениями с помощью механизмов безопасности, но могут обмениваться контентом и функциями с другими моментальными снимками в соответствии с детальными политиками, контролируемыми пользователем и значениями по умолчанию ОС». (из http://snapcraft.io/docs/snaps/intro )
Они обеспечивают дополнительную изоляцию в дополнение к AppArmor, например, с использованием seccomp .
Кроме того, оснастка может быть автономной для легкого распространения и элементарных обновлений в вашей системе.
То, что вы ищете, это инструмент, который показывает, как программа взаимодействует с системой (более конкретно, с ядром). Программы взаимодействуют с системой с помощью системных вызовов. Примеры системных вызовов:
open
- используется для открытия файла; read
и write
- используется для чтения / записи из / в файл дескриптор; connect
- используется для подключения сокета к одноранговому узлу; man syscalls
). Дело в том, что системные вызовы можно отследить с помощью ptrace(2)
. Итак, в основном, вы ищете инструменты, построенные вокруг ptrace
. Одним из таких инструментов является strace(1)
, который является терминальным приложением, которое принимает команду в качестве аргумента и выдает:
Вывод выполнен в C-стиле. Вот пример:
$ strace cat test
execve("/bin/cat", ["cat", "test"], [/* 55 vars */]) = 0
/* ... */
open("test", O_RDONLY) = 3
/* ... */
read(3, "hello\n", 32768) = 6
write(1, "hello\n", 6) = 6
read(3, "", 32768) = 0
/* ... */
Там вы видите, что cat test
открывает файл с именем test
, читает его содержимое (hello
) и помещает его в стандартный вывод.
strace
может выдавать много информации, поэтому обязательно прочитайте его справочную страницу (man strace
), особенно документацию к выходу -e
, которая позволит вам увидеть только те системные вызовы, которые вас интересуют.
К сожалению, я не знаю графических или простых в использовании альтернатив. Если вы хотите найти их, ptrace
должно быть одним из ваших ключевых слов поиска.
Что касается изоляции, существует много технологий. Chroots, контейнеры Linux (которые в настоящее время находятся в стадии разработки и не завершены), виртуализация программного обеспечения и паравиртуализация являются наиболее используемыми. Однако эта тема слишком велика для обсуждения. Я бы предложил открыть новый вопрос, если вы хотите узнать больше.
Спасибо, ответы были очень полезны ...
Я также нашел это: https://downloads.cuckoosandbox.org/docs/
. Это очень интересный инструмент для анализа вредоносных программ, когда они находятся в виртуальной машине
.Как вы определили, виртуальную машину лучше обеспечить изоляцией, особенно если у вас есть основания полагать, что исполняемый файл является вредоносным в первую очередь. Но даже это не идеально, поскольку уязвимости в платформе виртуализации (как аппаратные, так и программные) могут быть использованы злонамеренным кодом для их устранения. Вот пример уязвимости виртуализации реального мира: http://www.kb.cert.org/vuls/id/649219
Взгляните на AppArmor . Вы можете добавить ограниченный профиль для исполняемого файла и перевести его в режим «жалоб», где действия будут разрешены, но будут зарегистрированы, что, я думаю, соответствует вашим требованиям.
Но учтите, что этого не достаточно. Умный злонамеренный двоичный файл может обнаружить, что он находится под наблюдением, и не выполнять злонамеренных действий, за исключением случаев, когда он не наблюдается.
AppArmor идет дальше этого и позволяет приложению навсегда ограничиться только одобренными операциями. Приложения, которые попадают в Ubuntu Software Center , поставляются с профилями AppArmor.
- это инструмент или, возможно, виртуальная машина для запуска исполняемого файла внутри него
Да, это называется Виртуализация приложений .
LXC (Linux Containers) - это часто используемый инструмент для настройки этого. Это позволяет вам настроить полностью разделенную сеть для этого приложения и «помещать» ее в «виртуальную машину», почти как chroot. Это в основном для целей безопасности («тюрьма»), а не для аудита.
Я думаю, что это немного выходит за рамки вопроса, чтобы объяснить полные контейнеры LXC, а также как точно их проверять. Ниже немного о том, как начать работу.
Во время работы программы я хочу видеть все, что делает исполняемый файл (доступ к файлам и сети).
Это можно сделать с помощью strace
, и я задал тот же вопрос по Unix и Linux:
Как ответил там, это сводится к в основном
strace -t -e trace=open,close,read,getdents,write,connect,accept command-here
Из этой статьи . Это сводится к:
lxc-macvlan.conf
конфигурационный файл:
# example as found on /usr/share/doc/lxc/examples/lxc-macvlan.conf
# Container with network virtualized using the macvlan device driver
lxc.utsname = alpha
lxc.network.type = macvlan
lxc.network.flags = up
lxc.network.link = eth0 # or eth2 or any of your NICs
lxc.network.hwaddr = 4a:49:43:49:79:bd
lxc.network.ipv4 = 0.0.0.0/24
Запустите его, используя lxc-execute
:
sudo lxc-execute -n bash-test2 -f lxc-macvlan.conf /bin/bash
Обратите внимание, что LXC предлагает контейнеры как системного, так и прикладного типа. Вы ищете контейнеры для приложений здесь.