Как мне проверить исполняемый файл, чтобы убедиться, что он не является вредоносным?

Мне было интересно, есть ли инструмент или метод для запуска исполняемого файла в изолированной среде, может быть, на виртуальной машине. Во время работы программы я хочу иметь возможность проверять приложение, то есть видеть все, что делает исполняемый файл (доступ к файлам и сети).

Таким образом, я хочу иметь возможность проверить, является ли исполняемый файл вредоносным, то есть выполняет ли операции, которые он не должен (чтение / запись в файлы, прослушивание / подключение к сетевым портам, ...).

Я бы не стал возражать против графического интерфейса.

10
задан 29 January 2013 в 15:27

6 ответов

Вы можете создать снимок .

Моментальные снимки «ограничены ОС и другими приложениями с помощью механизмов безопасности, но могут обмениваться контентом и функциями с другими моментальными снимками в соответствии с детальными политиками, контролируемыми пользователем и значениями по умолчанию ОС». (из http://snapcraft.io/docs/snaps/intro )

Они обеспечивают дополнительную изоляцию в дополнение к AppArmor, например, с использованием seccomp .

Кроме того, оснастка может быть автономной для легкого распространения и элементарных обновлений в вашей системе.

0
ответ дан 29 January 2013 в 15:27

То, что вы ищете, это инструмент, который показывает, как программа взаимодействует с системой (более конкретно, с ядром). Программы взаимодействуют с системой с помощью системных вызовов. Примеры системных вызовов:

  • 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 (которые в настоящее время находятся в стадии разработки и не завершены), виртуализация программного обеспечения и паравиртуализация являются наиболее используемыми. Однако эта тема слишком велика для обсуждения. Я бы предложил открыть новый вопрос, если вы хотите узнать больше.

0
ответ дан 29 January 2013 в 15:27

Спасибо, ответы были очень полезны ...

Я также нашел это: https://downloads.cuckoosandbox.org/docs/

. Это очень интересный инструмент для анализа вредоносных программ, когда они находятся в виртуальной машине

.
0
ответ дан 29 January 2013 в 15:27

Как вы определили, виртуальную машину лучше обеспечить изоляцией, особенно если у вас есть основания полагать, что исполняемый файл является вредоносным в первую очередь. Но даже это не идеально, поскольку уязвимости в платформе виртуализации (как аппаратные, так и программные) могут быть использованы злонамеренным кодом для их устранения. Вот пример уязвимости виртуализации реального мира: http://www.kb.cert.org/vuls/id/649219

0
ответ дан 29 January 2013 в 15:27

Взгляните на AppArmor . Вы можете добавить ограниченный профиль для исполняемого файла и перевести его в режим «жалоб», где действия будут разрешены, но будут зарегистрированы, что, я думаю, соответствует вашим требованиям.

Но учтите, что этого не достаточно. Умный злонамеренный двоичный файл может обнаружить, что он находится под наблюдением, и не выполнять злонамеренных действий, за исключением случаев, когда он не наблюдается.

AppArmor идет дальше этого и позволяет приложению навсегда ограничиться только одобренными операциями. Приложения, которые попадают в Ubuntu Software Center , поставляются с профилями AppArmor.

0
ответ дан 29 January 2013 в 15:27

- это инструмент или, возможно, виртуальная машина для запуска исполняемого файла внутри него

Да, это называется Виртуализация приложений .

LXC (Linux Containers) - это часто используемый инструмент для настройки этого. Это позволяет вам настроить полностью разделенную сеть для этого приложения и «помещать» ее в «виртуальную машину», почти как chroot. Это в основном для целей безопасности («тюрьма»), а не для аудита.

Я думаю, что это немного выходит за рамки вопроса, чтобы объяснить полные контейнеры LXC, а также как точно их проверять. Ниже немного о том, как начать работу.

Во время работы программы я хочу видеть все, что делает исполняемый файл (доступ к файлам и сети).

Это можно сделать с помощью strace, и я задал тот же вопрос по Unix и Linux:

Как ответил там, это сводится к в основном

strace -t -e trace=open,close,read,getdents,write,connect,accept command-here

Важно: как только вы видите, что это происходит, ущерб уже имел место.


LXC контейнер приложений

Из этой статьи . Это сводится к:

  1. 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
    
  2. Запустите его, используя lxc-execute:

    sudo lxc-execute -n bash-test2 -f lxc-macvlan.conf /bin/bash
    

Обратите внимание, что LXC предлагает контейнеры как системного, так и прикладного типа. Вы ищете контейнеры для приложений здесь.

0
ответ дан 29 January 2013 в 15:27

Другие вопросы по тегам:

Похожие вопросы: