用于分析Linux恶意软件的沙箱

来源:https://github.com/monnappa22/Limon

Limon是一个用python编写开发沙箱的研究项目,它自动收集、分析和报告Linux恶意软件的运行时指示器。通过使用开源工具执行静态、动态和内存分析,可以在执行之前、执行期间和执行之后(事后分析)检查Linux恶意软件。Limon在受控环境中分析恶意软件,监控其活动和子进程,以确定恶意软件的性质和目的。它确定恶意软件的进程活动,与文件系统、网络的交互,它还执行内存分析,并存储分析后的工件供以后分析。

一、Limon的工作原理

Limon以恶意软件样本作为输入,执行静态分析、动态分析、内存分析并报告结果。

二、Limon使用的工具

Limon依赖于各种开源工具来执行静态、动态和内存分析,这意味着需要安装这些工具(有些工具需要安装在主机上,有些工具需要安装在分析机中,有些工具同时安装在分析机和分析机中)才能让Limon工作。其中一些工具是在默认的Linux安装中安装的。下面是Limon所依赖的工具列表:

• YARA and YARA-python (https://github.com/plusvic/yara/releases)

• VirusTotal Public API

(https://www.virustotal.com/en/documentation/public-api/)

• ssdeep (http://ssdeep.sourceforge.net/)

• strings utility (http://linux.die.net/man/1/strings)

• ldd (http://linux.die.net/man/1/ldd)

• readelf (https://sourceware.org/binutils/docs/binutils/readelf.html)

• Inetsim (http://www.inetsim.org/downloads.html)

• Tcpdump (http://www.tcpdump.org/)

• strace (http://linux.die.net/man/1/strace)

• Sysdig (http://www.sysdig.org)

• Volatility memory forensics framework

(http://www.volatilityfoundation.org/#!releases/component_7140)

三、建立Limon

要使Limon工作,需要适当的环境设置(这是一次性设置)。Limon应该适用于任何版本的Ubuntu(或其他Linux),但是它是在下面提到的这些版本的Ubuntu Linux上测试的。本节给出一个示例设置(ip地址可以不同,设置中使用了以下ip地址和网络配置)

该设置由一台运行Ubuntu 15.04(64位)的主机和一台运行Ubuntu 12.04或14.04(64位版本)的VMware Workstation组成,分析机在VMware Workstation中以bridge模式运行。分析机是运行恶意软件的地方,主机和分析机都以根权限运行。主机的ip地址设置为192.168.1.3和分析机器的ip地址设置为192.168.1.150和网关地址设置为192.168.1.3(主机的ip地址)和dns服务器地址设置为4.2.2.2。这种设置的目的是确保当恶意软件在分析机器中运行时,它的所有网络流量都经过主机,而主机将捕获数据包。

1)在主机上配置和安装工具

本节主要讨论需要安装在主机上的工具。安装之后请注意所有这些工具的路径,稍后需要更新Limon中的变量,以便Limon知道从何处调用这些工具。大多数时候,Linux上的“which”命令可以用来确定工具的路径。例如:如果您想确定“ls”实用程序的路径,可以使用下面的命令:

# which ls

a) VMware Workstation—在主机上安装用于Linux的VMware Workstation(在本例中,VMware Workstation 10.0.2安装在运行Ubuntu 15.04的主机上)。安装VMware工作站后,在VMware工作站中安装Ubuntu 12.04或Ubuntu 14.04,这将是您的分析机器,Limon将在其中运行恶意软件样本。

b) yara 1.7.2和yara - python

Limon依赖于YARA来检测包装程序,并使用YARA规则来确定恶意软件的能力。从下面的链接下载YARA

https://github.com/plusvic/yara/releases/tag/v1.7.2

安装YARA如下面的链接所述:

http://yara.readthedocs.org/en/v3.4.0/gettingstarted.html#compilingand-installing-yara

要安装YARA-python,在下载(.zip或.tar.gz)文件之后,提取它并按照yarapython目录中的README文件中提到的步骤进行。

c) Ssdeep - Limon使用Ssdeep进行模糊哈希。你可以通过执行以下命令来安装ssdeep:

# apt-get install ssdeep

d) Sysdig - Limon依赖Sysdig进行系统事件监控,您可以按照下面链接中提到的基本安装或高级安装过程安装Sysdig。在我的例子中,我必须遵循基于debian的高级安装:

http://www.sysdig.org/install/

e) INetSim—Limon依赖INetSim在沙箱模式下运行时模拟所有的服务。按照下面的步骤安装inetsim:

http://www.inetsim.org/documentation.html

f)Volatility- Limon使用Volatility高级内存取证框架进行内存分析。

Volatility取决于各种python模块,按照下面链接中提到的步骤安装所有依赖项:

https://github.com/volatilityfoundation/volatility/wiki/Installation#dependencies

安装了所有依赖项后,请从下面的链接下载Volatility 2.4

http://downloads.volatilityfoundation.org/releases/2.4/volatility-2.4.tar.gz

提取它并记录到vol.py的路径

g)创建一个目录来存储YARA规则——创建一个目录/root/yara_rules。此目录包含将由Limon使用的yara规则。在我的例子中,这个目录包含两个文件打包器。yara(用于封隔器检测的yara规则)和功能。yara (yara规则检测恶意软件的功能,如IRC功能)。您可以在这样的文件中添加自己的规则(请注意到这些文件的路径)

h)创建一个目录来存储分析结果——创建一个目录/root/linux_reports来存储分析结果。这是最终报告、pcap和其他工件在分析恶意软件后存储的目录。

2)在分析机上配置和安装工具

本节主要讨论需要安装在分析机器上的工具。安装之后请注意所有这些工具的路径,稍后需要更新Limon中的变量,以便Limon知道从何处调用这些工具在分析机器中的路径。

a)设置根密码并启用图形根登录-在分析机上设置根密码,并按照下面链接中提到的步骤启用图形根登录:

http://www.thegeekstuff.com/2009/09/ubuntu-tips-how-to-login-usingsu-command-su-gives-authentication-failure-error-message/

您也可以遵循以下步骤(在Ubuntu 12.04上运行)

1)设置root密码

sudo passwd根目录

运行下面的命令

# sudo sh -c 'echo " greeting -show- manu- login=true" >>

/etc/lightdm/lightdm.conf

3)重新启动

4)点击login

输入用户名根和密码

b) Sysdig - Limon依赖Sysdig进行系统事件监控,您可以按照下面链接中提到的基本安装或高级安装过程安装Sysdig。在我的例子中,我必须遵循基于debian的高级安装。

http://www.sysdig.org/install/

c) Strace - Limon依赖于Strace来跟踪系统调用,默认情况下Strace安装在标准Linux安装上。

注意:如果您在分析机器上运行Ubuntu 14.04,那么删除strace (apt-get remove strace),这是默认Ubuntu 14.04安装中附带的,strace有一个bug(主要是strace 4.8版本),因为它不能跟踪子进程。一旦删除strace,从该链接下载strace。

http://sourceforge.net/projects/strace/

并通过执行下面的命令从源代码安装strace。

# tar xvzf strace-4.10.tar.xz

# cd strace-4.10

#./configure

# make

# make install

d)要运行PHP脚本,请执行下面的命令安装PHP

# apt-get安装php5-cli

e)安装在64位Ubuntu系统上运行32位可执行文件的包

要在64位多架构Ubuntu系统上运行32位可执行文件,您必须添加i386架构,并安装三个库包libc6:i386、libncurses5:i386和libstdc++6:i386。这些包可以通过在Ubuntu 14.04上运行下面的命令来安装,上面运行下面的命令

# dpkg --add-architecture i386

# apt-get update

#apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386

在Ubuntu 12.04及以下运行以下命令

# echo“foreign architecture i386”> /etc/dpkg/dpkg.cfg.d/multiarch

# sudo apt-get update

# sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386

f)创建目录传输恶意软件样本

在分析机器上创建一个目录“/root/malware_analysis”和/root/logdir

按照以下步骤将/root/malware_analysis添加到PATH环境变量

使用文本编辑器编辑/etc/environment,然后在最后添加路径

/root/malware_analysis(所有路径都应该用冒号as分隔 如下所示)

ex: PATH=/usr/bin:/root/malware_analysis

g)创建Volatility概要——Limon依赖Volatility来执行内存分析。在分析机中执行恶意软件后,暂停分析机以捕获其内存映像并执行内存分析。要成功地为分析机器执行内存分析Volatility概要文件(在我们的例子中是Ubuntu 12.04或Ubuntu 14.04),需要创建。要为分析机创建概要文件,请遵循以下链接中提到的步骤:

https://github.com/volatilityfoundation/volatility/wiki/Linux

概要文件本质上是一个zip文件,包含关于内核数据结构和调试符号的信息。创建此zip之后,将此zip文件移动到主机上的“volatility/plugins/overlay /linux”(安装了volatility及其依赖项)下

h)清除Bash历史记录—通过运行下面的命令清除分析机器上的Bash历史记录

# history -c && history –w

i)获取一个cleansnapshot—一旦所有的工具都安装好了,关闭分析机器的电源,打开它,然后获取一个快照,在我的例子中,快照的名称是“cleansnapshot”(记下名称)

四、配置Limon

一旦所有必要的工具都安装到主机和分析机器上,下一步就是配置Limon

首先从下面的链接下载Limon:

https://github.com/monnappa22/Limon

解压缩Limon。配置Limon涉及使用conf.py文件中的适当值更新变量。这些变量大多是直接的,需要用适当的值设置这些变量。使用示例值更新conf.py中的变量以供参考。下面是conf.py中的一些变量,如果它与默认值不同(不要修改其他变量),那么可能需要修改这些变量。

1)py_path - >该变量包含python解释器的路径在主机上。您可以通过运行下面的命令来获得此路径。

# which python

Example: py_path = r'/usr/bin/python'

2)report_dir - >这是通往最终报告的目录将存储在我们的案例中是/root/linux_reports。

Example: report_dir = r'/root/linux_reports'

3) virustotal_key ->这个变量应该包含virustotal公共api密钥

Example: virustotal_key = "enter virustotal public key here"

4) host_analysis_vmpath ->这个变量应该包含到分析机器的.vmx文件的路径。在我们的示例中,.vmx位于/root/virtual_machines/Ubuntu12_04/Ubuntu12_04.vmx中

Example: host_analysis_vmpath = r'/root/virtual_machines/Ubuntu12_04/Ubuntu12_04.vmx'

5)host_vmrunpath - >这个变量应该包含vmrun utilitly的路径。这个路径可以通过运行命令来确定

# which vmrun

Example: host_vmrunpath = r'/usr/bin/vmrun'

6) host_vmtype ->这是VMware类型,在我们的例子中它是工作站,所以这个变量应该设置为值“ws”

Example: host_vmtype = r'ws'

7)analysis_username - >分析机器的用户名

Example: analysis_username = "enter username of the analysis machine"

8)analysis_password - >分析计算机的密码

Example: analysis_password = "enter password of the analysis machine"

9)analysis_clean_snapname - > cleansnapshot的名称。在我们的示例中,它是“cleansnapshot”

Example: analysis_clean_snapname = "cleansnapshot"

10) analysis_mal_dir ->这是分析机器上的路径,恶意软件样本将在这里传输。在我们的例子中就是这样:“/root/malware_analysis”

Example: analysis_mal_dir = r"/root/malware_analysis"

11)analysis_py_path - >分析机上的python解释器路径

Example: analysis_py_path = r'/usr/bin/python'

12)analysis_perl_path - >分析机上的perl解释器路径

Example: analysis_perl_path = r'/usr/bin/perl'

13)analysis_bash_path - > bash shell的路径

Example: analysis_bash_path = r'/bin/bash'

14) analysis_sh_path ->到shell的路径

Example: analysis_sh_path = r'/bin/sh'

15)analysis_insmod_path - > insmod路径

Example: analysis_insmod_path = r'/sbin/insmod'

16) analysis_php_path ->php解释器的路径

Example: analysis_php_path = r'/usr/bin/php'

17) yara_packer_rules ->到yara规则的路径以检测packers

Example: yara_packer_rules = r'/root/yara_rules/packer.yara'

18) yara_rules ->yara规则的路径,在我们的例子中,它包含检测恶意软件功能(如IRC功能)的规则

Example: yara_rules = r'/root/yara_rules/capabilities.yara'

19)analysis_ip - >分析机器的IP地址在我们的设置是192.168.1.150

Example: analysis_ip = "192.168.1.150"

20)host_iface_to_sniff - >这是接口在主机上的数据包将被捕获而恶意软件正在执行

Example: host_iface_to_sniff = "eth0"

21) host_tcpdumppath ->主机上的tcpdump路径,该路径可以使用命令“which tcpdump”来确定

Example: host_tcpdumppath = "/usr/sbin/tcpdump"

22)vol_path ->在主机上的volatile (vol.py)脚本的路径。

Example: vol_path = r'/root/Volatility/vol.py'

23)mem_image_profile ->分析机器的volatile 配置文件的名称。在我们的示例中,配置文件的名称是“LinuxUbuntu1204x64”。因此,变量的值设置如下:

Example: mem_image_profile = '--profile=LinuxUbuntu1204x64'

24) inetsim_path  ->到INetSim的路径

Example: inetsim_path = r"/usr/share/inetsim/inetsim"

25)inetsim_log_dir- > INetSim日志目录路径

Example: inetsim_log_dir = r"/usr/share/inetsim/log"

26)inetsim_report_dir- > INetSim报告目录路径

Example: inetsim_report_dir = r"/usr/share/inetsim/report"

27)analysis_sysdig_path - >分析机上的sysdig路径

Example: analysis_sysdig_path = r'/usr/bin/sysdig'

28)host_sysdig_path - >主机上sysdig的路径

Example: host_sysdig_path = r'/usr/bin/sysdig'

29 analysis_capture_out_file ->这是分析机器上保存sysdig事件的临时文件。不要修改这个值,并确保logdir存在于/root目录下。默认值如下所示:

Example: analysis_capture_out_file = r'/root/logdir/capture.scap'

30)analysis_strace_path - >分析机上的strace路径,例:/usr/bin/strace

Example: analysis_strace_path = r'/usr/bin/strace'

31)analysis_strace_out_file - >这是分析机器上的临时文件,保存调用跟踪事件。不要修改这个值,并确保logdir存在于/root目录下。默认值如下所示:

Example: analysis_strace_out_file = r'/root/logdir/trace.txt'

32) analysis_log_outpath ->这是将保存临时工件的分析机器上的目录。不要修改这个值,并确保logdir存在于/root. .之下。默认值如下所示

Example: analysis_log_outpath = r'/root/logdir'

四、选择Limon

Limon提供了各种选项,并支持分析各种文件类型。下面的截图显示了Limon中的选项,并运行一个Linux恶意软件样本“tsuna”40秒。使用-m选项Limon还可以执行内存分析:

Limon默认情况下使用带有过滤调用跟踪的strace来执行动态分析。在经过过滤的调用跟踪中,它只跟踪少数常被恶意软件(如进程、文件和与网络相关的系统调用)使用的系统调用。对于更详细的调用跟踪(例如:追踪所有系统调用)

-C(—ufctrace):可以使用-C(——ufctrace)选项,这将使用strace跟踪所有的系统调用。这将生成详细的输出:

Limon还可以使用Sysdig监控系统调用,Sysdig只支持对x64位文件的事件监控。

-e(—femonitor):这个选项使用Sysdig执行事件监视,在这种情况下,只监视恶意软件常用的系统调用。这样噪音就小了。

-E(—ufemonitor)这个选项使用Sysdig执行事件监视,在本例中监视所有系统调用。这是生成详细输出。

-m(—memfor)这个选项执行内存分析(以及静态和动态分析)。Limon依赖于挥发性内存取证框架来执行内存分析。这个选项运行大部分的易变插件,除了一些需要一些时间运行的插件。

-M(—vmemfor)这个选项使用Volatility执行详细的内存分析(以及静态和动态分析)。这个选项运行所有的Volatility插件,包括那些需要时间的插件。这可能有点慢。

-x(—printhexdump)这个选项在调用跟踪中打印十六进制转储。

五、例子

这里可以找到一些使用Limon的例子:

https://www.blackhat.com/docs/eu-15/materials/eu-15-KA-AutomatingLinux-Malware-Analysis-Using-Limon-Sandbox.pdf

下面的例子应该对运行Limon有一个概念

1)使用sanbox模式在Limon中运行ELF二进制文件(默认运行60秒),不进行内存分析(只执行静态和动态分析)

# python limon.py

2)使用internet模式在Limon中运行ELF二进制文件(默认运行60秒),不进行内存分析(只执行静态和动态分析)

# python limon.py -i

3)在Limon中运行ELF二进制文件,在沙箱模式下运行40秒,使用未过滤的调用跟踪

# python limon.py -t 40 -C

4)在Limon中运行perl脚本25秒,并过滤系统监视

# python limon.py –p -t 25 –e

你可能感兴趣的:(用于分析Linux恶意软件的沙箱)