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

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

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

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

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

答案1

是一个工具或者是一个虚拟机,用于运行其中的可执行文件

是的,这叫做应用程序虚拟化

LXC(Linux 容器)是一种常用的工具。它允许您为该应用程序设置完全独立的网络,并将其“沙盒化”到某种虚拟机中,就像 chroot 一样。这主要是为了安全目的(“监狱”),而不是为了审计。

我认为解释完整的 LXC 容器以及如何准确审计它有点超出了问题的范围。不过,下面是关于如何入门的一点介绍。

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

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

作为已回答基本上可以归结为

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

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


龙芯应用程序容器

本文。归结为:

  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 提供系统和应用程序两种类型的容器。您在这里寻找的是应用程序容器。

答案2

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

  • 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
/* ... */

您可以看到正在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 可以是独立的,以便在您的系统上轻松分发和进行原子更新。

相关内容