我想知道是否有工具或技术在隔离的环境(例如虚拟机)中运行可执行文件。程序运行时,我希望能够审核应用程序,即查看可执行文件正在执行的所有操作(文件和网络访问)。
这样,我希望能够检查该可执行文件是否是恶意的,即执行它不应该执行的操作(读取/写入文件,侦听/连接到网络端口等)。
我不介意带有图形界面的东西。
我想知道是否有工具或技术在隔离的环境(例如虚拟机)中运行可执行文件。程序运行时,我希望能够审核应用程序,即查看可执行文件正在执行的所有操作(文件和网络访问)。
这样,我希望能够检查该可执行文件是否是恶意的,即执行它不应该执行的操作(读取/写入文件,侦听/连接到网络端口等)。
我不介意带有图形界面的东西。
Answers:
是工具或虚拟机,可在其中运行可执行文件
是的,这称为应用程序虚拟化。
LXC(Linux容器)是设置此功能的常用工具。它允许您为此应用程序建立完全独立的网络,并将其“沙盒化”到某种虚拟机中,就像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提供了容器的系统类型和应用程序类型。您正在这里寻找应用程序容器。
/sys
未虚拟化,而是/sys
从容器/sys
对主机进行了更改。在Web上进行快速搜索时,有一些文章记录了如何从容器中“退出”。LXC将是解决该问题的一个很好的方法,但是目前还不是,并且不应该用作安全工具。
lxc.mount
选项。这意味着可执行运行可访问整个用户的文件系统。
您正在寻找的是一种工具,该工具显示程序如何与系统(尤其是内核)交互。程序使用syscall与系统交互。系统调用的示例包括:
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
输出文档,该文档将使您仅查看您感兴趣的syscall。
不幸的是,我不知道图形或易于使用的替代方案。如果要查找它们,ptrace
应将其作为搜索关键字之一。
关于隔离,有很多技术。Chroots,Linux容器(目前正在开发中且不完整),软件虚拟化和半虚拟化是最常用的。但是,这是一个太大的话题,无法讨论。如果您想了解更多详细信息,建议您打开一个新问题。
看看AppArmor。您可以为可执行文件添加一个有限的配置文件,然后将其置于“投诉”模式,在该模式下,将允许但记录操作,我认为这可以满足您的要求。
但是请注意,这还远远不够。聪明的恶意二进制文件可能能够检测到它正在观察中,并且除非未观察到,否则不执行恶意操作。
AppArmor的作用远不止于此,它允许永远将应用程序限制为仅允许批准的操作。最终在Ubuntu Software Center中出现的应用附带AppArmor配置文件。
正如您已经确定的那样,虚拟机最好提供隔离,尤其是如果您有理由认为可执行文件最初是恶意的。但是,即使这样也不是完美的,因为虚拟化平台(硬件和软件)中的漏洞可能会被恶意代码利用以进行爆发。这是现实世界中虚拟化漏洞的示例:http : //www.kb.cert.org/vuls/id/649219
您可以创建一个快照。
快照“通过安全机制从操作系统和其他应用程序中受到限制,但是可以根据用户控制的细粒度策略和操作系统默认值与其他快照交换内容和功能。” (来自http://snapcraft.io/docs/snaps/intro)
除了AppArmor外,这些还提供了进一步的隔离,例如也使用seccomp。
此外,快照可以是独立的,以便在您的系统上轻松分发和原子更新。
sandbox somebinary
,并且假想sandbox
程序将记录所有somebinary
读取或写入的文件, IP /端口连接,数据传输等。这将是一件有用的事,我也想知道是否存在类似的东西(并且,实际上,如果没有这种工具,观察VM中运行的程序对您来说毫无意义。无论如何也无法说出它在做什么。好问题。