本文讲的是用VirtualBox、INetSim和Burp配置一个恶意软件分析实验室,在这篇文章中,我们将创建一个与主机操作系统和互联网隔离的隔离虚拟网络,我们将在其中设置两个受害虚拟机(Ubuntu和Windows 7)以及分析服务器,以模拟常见的Internet服务,如HTTP或DNS。然后,我们将能够记录和分析任何Linux或Windows恶意软件的网络通信,不知不觉中连接到我们的服务器而不是Internet。我们分析了臭名昭着的TeslaCrypt ransomware的流量,ransomware从2015年到2016年中感染了大量的系统。
1.创建虚拟机
这里有两个链接可用于下载Ubuntu和Windows 7虚拟机镜像。
Ubuntu(受害机1和分析机):从OsBoxes (直接链接)下载Ubuntu 16.10 64位
Windows 7(受害者机器2):从Microsoft开发人员网站下载 (选择 Win 7(x86)上的IE 11和 VirtualBox)
Ubuntu机器
OsBoxes为我们提供了一个即用的虚拟磁盘,我们可以简单地插入虚拟机并立即开始使用。首先提取你刚才下载的档案。
$7za e Ubuntu_16.10_Yakkety-VB-64bit.7z
您将获得一个代表机器的虚拟磁盘的VDI文件。我们将从设置基本的Ubuntu镜像开始,然后克隆我们的两个Ubuntu虚拟机。
在VirtualBox中,创建一个新的机器(新建按钮),并称之为Ubuntu 分析。然后,选择要给它多少RAM。此时,VirtualBox会询问您是否要创建新的虚拟硬盘或使用已经退出的虚拟硬盘。选择 使用现有的虚拟硬盘文件,单击下拉列表右侧的目录图标,然后选择VDI文件。然后您可以启动机器。默认密码是 osboxes.org。
基本设置
默认键盘使用QWERTY布局。如果像我一样,你不熟悉它,首先改变它(设置>文本输入)。
或者,您也可以使用以下方式更改默认密码:
$ passwd osboxes
选择设备>在虚拟机运行的窗口的菜单中插入客户添加CD映像。然后会询问您是否要运行安装程序; 回答是,并输入默认密码(默认为 osboxes.org)。安装完成后,关闭虚拟机电源。
克隆
现在你有一个基本的Ubuntu VM准备好了,克隆它(在VirtualBox主界面> 克隆中右键点击它)。命名克隆Ubuntu的受害者, 并选中该复选框以重新初始化其MAC地址。选择克隆类型的完整克隆。
Windows 7机器
之前提供的下载链接指向包含OVA文件的ZIP存档。与VDI文件不同,它不仅是虚拟磁盘,而且是对虚拟机(包括其虚拟磁盘)的完整描述,因此,您从中创建虚拟机所需的唯一工作就是选择“文件”>“导入设备”VirtualBox的主窗口。如果你负担得起,最好给它至少1024 MB的RAM。
导入过程完成后(可能需要几分钟),重命名VM Windows 7受害者并启动它。
2.设置分析机:INetSim,Burp
INetSim
INetSim是一个非常方便和强大的实用程序,允许在机器上模拟一堆标准Internet服务。默认情况下,它将模拟一个可以轻松调整的DNS,HTTP和SMTP。由于我们稍后将受害者机器配置为没有Internet访问,因此我们将需要INetSim进行模拟。
$ sudo su $ echo "deb http://www.inetsim.org/debian/ binary/" > /etc/apt/sources.list.d/inetsim.list $ wget -O - http://www.inetsim.org/inetsim-archive-signing-key.asc | apt-key add - $ apt update $ apt install inetsim
为了能够在分析计算机中复制粘贴这些命令,请选择设备>共享剪贴板>双向。
稍后我们将介绍如何使用INetSim。
Burpsuite
INetSim对SSL支持相当有限:它提供了一个单一主机(inetsim.org)的证书,并且不支持即时生成SSL证书。这是一个问题,因为大多数恶意软件现在通过SSL加密他们的通信。我们将使用Burp作为透明的SSL代理,这将代表受害机器和INetSim进行SSL连接。如果您现在不需要拦截SSL流量,则不一定需要Burp
Burp支持为任何我们的受害者机器生成即时SSL证书,将连接到。它还创建单个根CA证书,我们稍后将在我们的受害者计算机中导入。这样我们就可以拦截恶意软件发送的加密通讯。
您可以从官方网站下载Burpsuite。下载是一个bash安装脚本,运行它来安装Burp:
$ bash〜/ Downloads / burpsuite_free_linux_v1_7_23.sh
默认情况下,Burp可执行文件将为 〜/ BurpSuiteFree / BurpSuiteFree。
3.建立隔离的虚拟网络
作为提醒,我们希望建立一个包含三个虚拟机的隔离网络。该网络将无法访问Internet。此外,我们希望分析机器充当到受害机器的网络网关,以便轻松地拦截网络流量并模拟各种服务,如DNS或HTTP。
为了实现这一点,我们将使用VirtualBox内部网络。对于熟悉VirtualBox的用户,内部网络与主机网络不同,内部网络根本无法访问主机。
对于每个三个虚拟机,请执行以下操作:
打开其设置
· 转到网络部分
· 将“附加到”字段更改为“内部网络”
· 输入恶意软件分析网络作为网络名称
分析机
打开分析计算机,打开终端并运行ifconfig命令。你应该有一个名为enp0s3的界面。如果名称不同,请按照说明进行调整。
以root身份打开/etc/network/nterfaces文件,最后添加以下内容:
auto enp0s3 iface enp0s3 inet static address 10.0.0.1 netmask 255.255.255.0
这将在我们的虚拟网络上为机器分配静态IP10.0.0.1。现在我们已经配置了网络接口,我们需要启动它:
sudo ifup enp0s3
Ubuntu的受害机器
该过程在这里非常相似,除了我们将它分配给静态IP10.0.0.2,并指示它使用10.0.0.1作为网关和DNS服务器。在文件/etc/network/interfaces的末尾附加以下内容:
auto enp0s3 iface enp0s3 inet static address 10.0.0.2 gateway 10.0.0.1 netmask 255.255.255.0 dns-nameservers 10.0.0.1
并运行:
$ sudo ifup enp0s3 $ sudo service networking restart
您现在应该可以ping分析机:
$ ping 10.0.0.1 PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data. 64 bytes from 10.0.0.1: icmp_seq=1 ttl=64 time=0.480 ms 64 bytes from 10.0.0.1: icmp_seq=2 ttl=64 time=0.526 ms
Windows 7受害机器
右键单击任务栏中的网络图标(或转到开始菜单>控制面板>网络和Internet>网络和共享中心),单击本地连接2>属性,在Internet协议版本4上选择,然后单击属性按钮。
我们将静态IP10.0.0.3分配给机器,其他的配置跟ubnutu受害机类似。
确保验证设置(单击 确定,应用等,直到所有设置窗口都消失)。您现在应该可以ping分析机:
ping 10.0.0.1 Pinging 10.0.0.1 with 32 bytes of data: Reply from 10.0.0.1: bytes=32 time<1ms TTL=64 Reply from 10.0.0.1: bytes=32 time<1ms TTL=64
完成设置
4.创建和恢复快照
现在我们的受害者虚拟机已正确配置并处于干净状态(即未被任何恶意软件感染),我们将对其当前状态进行快照。这样,我们就可以在任何时候轻松地将它们重置到这个干净的状态。
VirtualBox非常简单:在虚拟机运行的窗口中,只需选择“ 机器”>“拍摄快照”。 您可以将快照命名为 Clean状态。 确保做到这一点的都你的Ubuntu和Windows 7受感染计算机。分析机器也不会伤害它。
当您想要将机器重置为干净状态时,只需将其关闭,并选中复选“ 当前快照”清除状态。
5.在分析机上使用INetSim和Burp分析网络流量
INetSim
如前所述,INetSim使我们能够提供范围广泛的标准互联网服务,包括DNS,HTTP(S),SMTP等。它有一个默认的配置文件 /etc/inetsim/inetsim.conf,这是非常有说明力的。它还附带一个包含各种默认文件的数据目录(/ var / lib / inetsim)。
由于您每次进行新的分析时可能需要一个不同的INetSim配置,因此建议您创建一个目录 "analysis ",该"analysis "将包含每个分析的子目录。
$ mkdir analysis
为了举例,我们已经创建了一个子目录,并在其中复制默认的INetSim配置文件和数据文件夹。
$ mkdir analysis/test-analysis $ cp /etc/inetsim/inetsim.conf analysis/test-analysis $ sudo cp -r /var/lib/inetsim analysis/test-analysis/data $ sudo chmod -R 777 data $ cd analysis/test-analysis
缺省情况下,INetSim只侦听本地接口。要用于虚拟网络的所有计算机,请替换刚刚复制的配置文件中的以下行:
#service_bind_address 10.0.0.1
通过:
service_bind_address 0.0.0.0
现在,我们需要禁用systemd-resolved,这是一个本地DNS服务器,默认情况下随Ubuntu一起提供,并且会与INetSim的DNS服务器冲突。
$ sudo systemctl disable systemd-resolved.service $ sudo service systemd-resolved.service stop
默认情况下,INetSim的DNS服务器将所有域名解析为127.0.0.1。我们希望任何域名解析为10.0.0.1(分析机器IP); 取消注释以下行:
#dns_default_ip 10.0.0.1
我之前提到,INetSim的SSL支持不是最佳的,因为它只有单个主机名(inetsim.org)的单一证书,并且不允许即时生成每个主机证书。为了克服这个问题,我们将在端口443上运行Burp作为INetSim前面的透明代理。因此,我们需要将INetSim的HTTPS服务器绑定到其他端口,例如端口8443.替换以下行:
#https_bind_port 443
通过:
https_bind_port 8443
现在,我们来运行INetSim!
$ sudo inetsim --data data --conf inetsim.confINetSim 1.2.6 (2016-08-29) by Matthias Eckert & Thomas Hungenberg [...] === INetSim main process started (PID 3605) === Session ID: 3605 Listening on: 0.0.0.0 Real Date/Time: 2017-06-04 12:58:07 Fake Date/Time: 2017-06-04 12:58:07 (Delta: 0 seconds) Forking services... * dns_53_tcp_udp - started (PID 3621) * irc_6667_tcp - started (PID 3631) * daytime_13_tcp - started (PID 3638) * discard_9_tcp - started (PID 3642) * discard_9_udp - started (PID 3643) * ident_113_tcp - started (PID 3634) * syslog_514_udp - started (PID 3635) [...]
如您所见,INetSim已经推出了一系列网络服务。这些都是可配置的,可以在配置文件中禁用。这个配置文件有很好的记录,并解释了INetSim的所有选项; 我建议你花几分钟阅读。
现在,您的受害者VM打开电源,打开Web浏览器,并浏览到任何地址(例如github.com)。您应该看到以下内容:
(请注意,此默认文件对应于HTML文件数据/ http / fakefiles / sample.html。)
回到分析机上,关闭INetSim(CTRL + C)。
* dns_53_tcp_udp - stopped (PID 3621) * irc_6667_tcp - stopped (PID 3631) * daytime_13_tcp - stopped (PID 3638) [...] Simulation stopped. Report written to '/var/log/inetsim/report/report.3877.txt' (24 lines)
如您所见,INetSim已经为我们创建了一个总结报告。它包含我们受害机器与INetSim服务的所有互动。
=== Report for session '3877' === Real start date : 2017-06-04 13:18:27 Simulated start date : 2017-06-04 13:18:27 Time difference on startup : none 2017-06-04 13:18:38 First simulated date in log file 2017-06-04 13:18:40 DNS connection, type: A, class: IN, requested name: github.com 2017-06-04 13:18:40 HTTP connection, method: GET, URL: http://github.com/, file name: data/http/fakefiles/sample.html 2017-06-04 13:18:40 HTTP connection, method: GET, URL: http://github.com/favicon.ico, file name: data/http/fakefiles/sample.html 2017-06-04 13:18:40 Last simulated date in log file
窃取SSL拦截
为了能够分析SSL流量,我们还需要运行Burp。我们将作为INetSim前面的透明代理运行它。当受害者机器将启动SSL连接时,它将首先进入Burp,然后将其委托给INetSim。此部分不是强制性的:如果您现在不需要拦截SSL流量,请跳到下一部分。
以下是Burp在中间的样子:
以root身份启动Burp:
$ sudo /home/osboxes/BurpSuiteFree/BurpSuiteFree
(我们需要以root身份运行,否则将无法绑定端口443,这是一个特权端口,还有其他方法可以做到这一点,但是我们不用在这里)
创建一个临时项目(您还没有任何其他选项与免费版本),然后转到 代理选项卡,然后到 选项子选项卡。您将看到Burp的默认侦听器侦听端口8080。
单击与默认侦听器相对应的行,然后编辑它(编辑)按钮。配置如下:
· 绑定选项卡
绑定到港口:443
绑定地址:所有接口
· 请求处理选项卡:
重定向到主机:localhost
重定向到端口:8443
检查 支持隐形代理
验证设置,你应该得到一个类似于:
默认情况下,Burp拦截传入的请求,并等待您明确地让它们通过。为了避免这种情况,请转到“截取”选项卡,然后单击“截取”按钮以禁用它。
由于Burp Free不允许您保存项目,因此您可以导出我们刚刚创建的设置,以便在下次启动Burp时导入它们。为此,请使用Burp> Project选项>保存项目选项。
让我们确保我们的设置正确工作。启动INetSim,并运行:
$ curl --insecure https//localhost
你应该得到:
<html> <head> <title>INetSim default HTML page</title> </head> <body> <p></p> <p align="center">This is the default HTML page for INetSim HTTP server fake mode.</p> <p align="center">This file is an HTML document.</p> </body> </html>
在我们的受害者机器上导入Burp的CA证书
打开Windows 7受影响的计算机电源,并尝试浏览到HTTPS URL(例如https://github.com),您会看到类似于以下内容的警告:
这是因为Burp生成由其自己的CA证书签署的SSL证书,我们的受害者机器现在不信任。
在Burp中,在端口8080上添加新的代理监听器,监听所有接口(选项卡 代理>选项>按钮 添加):
然后,从受害机器,浏览到 http://10.0.0.1:8080。
点击CA证书的右上角下载打嗝的CA证书。
在Windows 7受影响的计算机上:打开文件,单击 安装证书> 下一步>将所有证书放在以下存储中:受信任的根证书颁发机构 >下一步
在Ubuntu的受害机器上:
将证书转换为适当的格式(.crt)
$ openssl x509 -in〜/ Downloads / cacert.der -inform DER -out burp.cr
复制到/ usr / local / share / ca-certificates
$ sudo cp burp.crt / usr / local / share / ca-certificates / $ sudo update-ca-certificates
默认情况下,Firefox不使用系统的证书存储。如果您希望SSL连接在Firefox中正常工作,请将Firefox设置转到“ 高级”>“证书”>“导入”。选择 burp.crt,检查 信任此CA以识别网站
可以了,好了!
在受影响的计算机中导入Burp的CA证书后,请确保创建新的快照(例如,安装了Burp的CA证书的Clean状态)。
6.在分析计算机和主机操作系统之间设置共享文件夹
在某些时候,您显然会将一些文件传输到分析机器或受害机器之一; 我们将设置一个文件共享来实现它。
在运行分析计算机的VirtualBox中,转到 设备>共享文件夹>共享文件夹设置。创建一个新的共享文件夹,选择要映射到的主机操作系统的本地文件夹,然后选择一个名称。选中该复选框以使其成为永久性。
现在在分析机上安装共享文件夹:
$ mkdir〜/ malware-analysis-share $ sudo mount -t vboxsf -o uid = $ UID,gid = $(id -g)malware-analysis-share〜/ malware-analysis-share
你很好去在我的情况下,位于/home/christophetd/malware-analysis-share中的我的主机的所有文件也将在分析机器中的〜/ malware-analysis-share中结束。
将文件传输到受害计算机
在某些时候,您最有可能需要将一些文件(例如恶意软件样本)传输到其中一个受害机器。为他们设置文件共享是一个坏主意,因为它意味着受害者机器(并且在一定程度上,您运行的恶意软件样本)可以访问它。
实现文件传输到Ubuntu受害者机器的最简单的方法是使用netcat。这是一个简单的例子。
# Receiving machine having IP 10.0.0.2 $ nc -lvp 4444 > file.exe # Analysis machine (sender) $ cat file_to_transfer.exe | nc 10.0.0.2 4444
对于Window的受害者,我们遗憾的是没有netcat可用。可能存在替代方案,但是默认情况下它们可能不会运送。一个选择是使用INetSim将文件提供给受害机器。
# inetsim.conf # Remove the default line: http_fakefile exe sample_gui.exe x-msdos-program # Replace it by http_fakefile exe file_to_transfer.exe x-msdos-program # And put file_to_transfer.exe in ./data/http/fakefiles
使用此配置,只需浏览以“.exe”结尾的任何URL(例如http://github.com/file.exe)。
7.演示时间:TeslaCrypt ransomware
时间快速演示!我下载了勒索软件样本TeslaCrypt,它传递给我们的Windows 7受害机器,并执行它。几秒钟后,虚拟机的所有文件都已加密,弹出如下窗口。
检查INetSim的日志后,我们可以看到ransomware进行了以下DNS查找:
- 7tno4hib47vlep5o.tor2web.org
- 7tno4hib47vlep5o.tor2web.blutmagie.de
- 7tno4hib47vlep5o.tor2web.fi
- bitcoin.toshi.io
并向这些域发送了多个HTTP请求。
HTTPS connection, method: GET, URL: https://7tno4hib47vlep5o.tor2web.org/state.php?U3ViamVjdD1QaW5nJmtleT0xNUIzOEIxOEFGMjBDMERCMkE3Qzc3MUUwMTQzNjNGMkNCODc4MUIxNTZENTE5Q0M1RjIyMDMzNUQ0NzE0QUEzJmFkZHI9MUxOVUYzQnFMM29iMUNUMmFWcDNjVzROYjh6a2tWaVZ3VCZmaWxlcz0wJnNpemU9MCZ2ZXJzaW9uPTAuMi42YSZkYXRlPTE0OTY2NDg2NzUmT1M9NzYwMSZJRD0xNiZzdWJpZD0wJmdhdGU9RzA= HTTPS connection, method: GET, URL: https://7tno4hib47vlep5o.tor2web.blutmagie.de/state.php?U3ViamVjdD1QaW5nJmtleT0xNUIzOEIxOEFGMjBDMERCMkE3Qzc3MUUwMTQzNjNGMkNCODc4MUIxNTZENTE5Q0M1RjIyMDMzNUQ0NzE0QUEzJmFkZHI9MUxOVUYzQnFMM29iMUNUMmFWcDNjVzROYjh6a2tWaVZ3VCZmaWxlcz0wJnNpemU9MCZ2ZXJzaW9uPTAuMi42YSZkYXRlPTE0OTY2NDg2NzUmT1M9NzYwMSZJRD0xNiZzdWJpZD0wJmdhdGU9RzE= HTTPS connection, method: GET, URL: https://7tno4hib47vlep5o.tor2web.fi/state.php?U3ViamVjdD1QaW5nJmtleT0xNUIzOEIxOEFGMjBDMERCMkE3Qzc3MUUwMTQzNjNGMkNCODc4MUIxNTZENTE5Q0M1RjIyMDMzNUQ0NzE0QUEzJmFkZHI9MUxOVUYzQnFMM29iMUNUMmFWcDNjVzROYjh6a2tWaVZ3VCZmaWxlcz0wJnNpemU9MCZ2ZXJzaW9uPTAuMi42YSZkYXRlPTE0OTY2NDg2NzUmT1M9NzYwMSZJRD0xNiZzdWJpZD0wJmdhdGU9RzI= HTTPS connection, method: GET, URL: https://bitcoin.toshi.io/api/v0/addresses/1LNUF3BqL3ob1CT2aVp3cW4Nb8zkkViVwT
我们看到类似的请求是tor2web.org ,tor2web.blutmagie.de和tor2web.fi。这些服务允许访问Tor网络,而无需安装Tor浏览器或类似的工具。
恶意软件联系到Tor隐藏服务 7tno4hib47vlep5o.onion,这可能是某种C&C服务器。请求的有效内容是一个base64编码的字符串,解码为:
Subject=Ping &key=15B38B18AF20C0DB2A7C771E014363F2CB8781B156D519CC5F220335D4714AA3 &addr=1LNUF3BqL3ob1CT2aVp3cW4Nb8zkkViVwT &files=0 &size=0 &version=0.2.6a &date=1496648675 &OS=7601 &ID=16 &subid=0 &gate=G1
它也对bitcoin.toshio.io(不再存在)进行API调用 ,最有可能检查赎金是否已经支付给比特币地址 1LNUF3BqL3ob1CT2aVp3cW4Nb8zkkViVwT。似乎恶意软件为每个受感染的计算机生成唯一的比特币地址,因为地址没有收到或发送任何钱。
结论
希望本指南将有所帮助。有有一些恶意软件会检测虚拟机行为(例如什么都不做)。这是MalwareBytes关于这个问题的一篇文章。
另外,请记住,分析恶意软件的网络流量可能非常有用,只是一种动态分析。其他包括监控注册表,系统调用,打开/创建的文件等。Open Security Training提供了一个关于该主题的完整实践课程,免费。
原文发布时间为:2017年7月18日
本文作者:愣娃
本文来自合作伙伴嘶吼,了解相关信息可以关注嘶吼网站。