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


10

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

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

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


2
@EliahKagan:如果我理解正确的问题,那么OP会要求“一个(工具),我可以在其中查看可执行文件正在执行的所有操作”-想象您是否可以运行sandbox somebinary,并且假想sandbox程序将记录所有somebinary读取或写入的文件, IP /端口连接,数据传输等。这将是一件有用的事,我也想知道是否存在类似的东西(并且,实际上,如果没有这种工具,观察VM中运行的程序对您来说毫无意义。无论如何也无法说出它在做什么。好问题。
谢尔盖(Sergey)2013年

2
我之前问过有关UL.SE的相关问题:如何实时监视进程的打开文件?(不仅涉及文件,还涉及网络)请记住,一旦看到它发生,损坏已经发生。
gertvdijk

2
我在meta上问了一个有关关闭此问题的问题:meta.askubuntu.com/questions/5871/…-我不认为应该关闭它。
谢尔盖

Answers:


10

是工具或虚拟机,可在其中运行可执行文件

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

LXC(Linux容器)是设置此功能的常用工具。它允许您为此应用程序建立完全独立的网络,并将其“沙盒化”到某种虚拟机中,就像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提供了容器的系统类型和应用程序类型。您正在这里寻找应用程序容器。


1
LXC尚未准备就绪,目前不安全。例如,/sys未虚拟化,而是/sys从容器/sys对主机进行了更改。在Web上进行快速搜索时,有一些文章记录了如何从容器中“退出”。LXC将是解决该问题的一个很好的方法,但是目前还不是,并且不应该用作安全工具。
Andrea Corbellini 2013年

1
顺便说一句,发布的示例配置不使用lxc.mount选项。这意味着可执行运行可访问整个用户的文件系统。
Andrea Corbellini 2013年

10

您正在寻找的是一种工具,该工具显示程序如何与系统(尤其是内核)交互。程序使用syscall与系统交互。系统调用的示例包括:

  • open -用于打开文件;
  • readwrite-用于读/从/到一个文件描述符写入;
  • connect -用于将套接字连接到对等方;
  • 许多很多(请参阅参考资料man syscalls)。

重点是:可以使用跟踪系统调用ptrace(2)。因此,基本上,您正在寻找围绕构建的工具ptrace。其中一种工具是strace(1),这是一个终端应用程序,它将命令作为参数并输出:

  • 系统调用程序正在调用;
  • 用于进行系统调用的参数;
  • syscall的结果。

输出以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容器(目前正在开发中且不完整),软件虚拟化和半虚拟化是最常用的。但是,这是一个太大的话题,无法讨论。如果您想了解更多详细信息,建议您打开一个新问题。


5

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

但是请注意,这还远远不够。聪明的恶意二进制文件可能能够检测到它正在观察中,并且除非未观察到,否则不执行恶意操作。

AppArmor的作用远不止于此,它允许永远将应用程序限制为仅允许批准的操作。最终在Ubuntu Software Center中出现的应用附带AppArmor配置文件。


5

正如您已经确定的那样,虚拟机最好提供隔离,尤其是如果您有理由认为可执行文件最初是恶意的。但是,即使这样也不是完美的,因为虚拟化平台(硬件和软件)中的漏洞可能会被恶意代码利用以进行爆发。这是现实世界中虚拟化漏洞的示例:http : //www.kb.cert.org/vuls/id/649219


1

您可以创建一个快照

快照“通过安全机制从操作系统和其他应用程序中受到限制,但是可以根据用户控制的细粒度策略和操作系统默认值与其他快照交换内容和功能。” (来自http://snapcraft.io/docs/snaps/intro

除了AppArmor外,这些还提供了进一步的隔离,例如也使用seccomp

此外,快照可以是独立的,以便在您的系统上轻松分发和原子更新。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.