我想知道是否有一种工具或技术可以在隔离环境中(例如在虚拟机中)运行可执行文件。在程序运行时,我希望能够审核该应用程序,即查看可执行文件正在执行的所有操作(文件和网络访问)。
通过这样做,我希望能够检查可执行文件是否是恶意的,即执行不应该执行的操作(读取/写入文件,监听/连接网络端口,...)。
我不会介意有图形界面的东西。
答案1
是一个工具或者是一个虚拟机,用于运行其中的可执行文件
是的,这叫做应用程序虚拟化。
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 提供系统和应用程序两种类型的容器。您在这里寻找的是应用程序容器。
答案2
您正在寻找的是一个可以显示程序如何与系统(更具体地说,与内核)交互的工具。程序使用系统调用与系统交互。系统调用的示例如下:
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
应该是你的搜索关键词之一。
关于隔离,目前有很多技术。最常用的是 Chroot、Linux 容器(目前正在开发中且不完整)、软件虚拟化和半虚拟化。但这个话题太大了,无法讨论。如果你想了解更多细节,我建议你提出一个新问题。
答案3
看一眼应用装甲。您可以为可执行文件添加有限的配置文件,并将其置于“投诉”模式,在该模式下,操作将被允许但会被记录,我认为这可以满足您的要求。
但请注意,这还不够。一个聪明的恶意二进制文件可能能够检测到它正在被观察,并且除非它没有被观察,否则不会执行恶意操作。
AppArmor 比这更进一步,它允许应用程序永远被限制在仅允许的操作范围内。最终进入Ubuntu 软件中心附带 AppArmor 配置文件。
答案4
您可以创建一个折断。
Snap“通过安全机制与操作系统和其他应用程序隔离,但可以根据用户控制的细粒度策略和操作系统默认设置与其他 Snap 交换内容和功能。”(来自http://snapcraft.io/docs/snaps/intro)
除了 AppArmor 之外,它们还提供进一步的隔离,例如使用安全计算也一样。
此外,Snap 可以是独立的,以便在您的系统上轻松分发和进行原子更新。