如何审核可执行文件以确保它不是恶意的?

Ous*_*ama 10 security tools antivirus

我想知道是否有一种工具或技术可以在隔离的环境中运行可执行文件,也许是在虚拟机中。在程序运行时,我希望能够审核应用程序,即查看可执行文件正在执行的所有操作(文件和网络访问)。

通过这样做,我希望能够检查可执行文件是否是恶意的,即执行它不应该执行的操作(读/写文件,侦听/连接到网络端口,...)。

我不介意图形界面的东西。

And*_*ini 10

您正在寻找的是一个显示程序如何与系统(更具体地说,与内核)交互的工具。程序使用系统调用与系统交互。系统调用的例子是:

  • open -- 用于打开文件;
  • readwrite-- 用于从/向文件描述符读取/写入;
  • 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
/* ... */
Run Code Online (Sandbox Code Playgroud)

您会看到,cat test它打开了一个名为 的文件test,读取其内容 ( hello) 并将其放置在标准输出上。

strace可以产生很多输出,所以一定要阅读它的手册页 ( man strace),尤其是-e输出的文档,它会让你只看到你感兴趣的系统调用。

不幸的是,我不知道图形或易于使用的替代方案。如果你想寻找它们,ptrace应该是你的搜索关键词之一。


关于隔离,有很多技术。Chroots、Linux 容器(目前正在开发且不完整)、软件虚拟化和半虚拟化是最常用的。然而,这是一个太大的话题,无法讨论。如果您想了解更多详细信息,我建议您提出一个新问题。


ger*_*ijk 10

是一个工具,也可能是一个虚拟机,可以在其中运行可执行文件

是的,这称为应用程序虚拟化

LXC(Linux Containers)是一种常用的设置工具。它允许您为此应用程序设置完全独立的网络,并将其“沙箱”到一种虚拟机中,很像 chroot。这主要是出于安全目的(“监狱”),而不是真正用于审计。

我认为解释完整的 LXC 容器以及如何准确审核它有点超出了问题的范围。不过,下面是关于如何开始的一些内容。

在程序运行时,我希望能够看到可执行文件正在执行的所有操作(文件和网络访问)。

这可以通过使用来完成strace,我在 Unix&Linux 上问过同样的问题:

正如在那里回答的那样,基本上归结为

strace -t -e trace=open,close,read,getdents,write,connect,accept command-here
Run Code Online (Sandbox Code Playgroud)

重要提示:一旦你看到它发生,损害就已经发生了。


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
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用lxc-execute以下命令启动它:

    sudo lxc-execute -n bash-test2 -f lxc-macvlan.conf /bin/bash
    
    Run Code Online (Sandbox Code Playgroud)

请注意,LXC 提供系统和应用程序类型的容器。您正在此处寻找应用程序容器。


Rob*_*sak 5

看看AppArmor。您可以为可执行文件添加一个有限的配置文件并将其置于“投诉”模式,在该模式下将允许但记录操作,我认为这满足您的要求。

但请注意,这还不够。一个聪明的恶意二进制文件可能能够检测到它正在被观察并且不会执行恶意操作,除非它没有被观察到。

AppArmor 比这更进一步,它允许应用程序永远被限制为仅允许操作。最终出现在Ubuntu 软件中心的应用程序附带 AppArmor 配置文件。


Rob*_*sak 5

正如您所确定的,虚拟机最好提供隔离,特别是如果您有理由首先相信可执行文件是恶意的。但即使这样也不是完美的,因为虚拟化平台(硬件和软件)中的漏洞可能会被恶意代码利用以突破。以下是真实世界虚拟化漏洞的示例:http : //www.kb.cert.org/vuls/id/649219