来源: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
3)在Limon中运行ELF二进制文件,在沙箱模式下运行40秒,使用未过滤的调用跟踪
# python limon.py
4)在Limon中运行perl脚本25秒,并过滤系统监视
# python limon.py –p