Ps: 从ThreatHunter.org搬来一份做备份 :)

穷人的虚拟化实验室方案

相信各位渗透师比较头疼的问题,就是模拟环境的搭建。在某些极端的渗透环境下,只允许有较少次数的尝试机会,如何尽可能的快复刻渗透环境,达到一出手便能优雅打倒目标的目的是本文将要讨论的。当然,这只是应用虚拟化实验的一种比较极端的情况,大多数时候,我们需要的是一个更快速更方便的一键实验环境,很多人可能会说为何不使用Docker,在针对单一应用做测试时,Docker确实有他很多的优势,但我在很多时候是想复盘一些大型网络的渗透轨迹

硬件选型

在这方面,各位可能是仁者见仁智者见智了,我比较推崇的方案是准系统,一来这些设备在性能的要求上能够达到预期,二来在便携性上也有优势。笔者现在所使用的型号为 Intel NUC6i7KYK 也就是外形带着骷髅图样的Intel NUC, 其主要配置可以参考如下链接:

http://www.intel.cn/content/www/cn/zh/nuc/nuc-kit-nuc6i7kyk-features-configurations.html

同时在做硬件选型的情况下,需要注意某些主机的硬件兼容性问题,比如是否对应某套虚拟化系统要求特殊的驱动。通常来说,主机厂商会对Windows系列系统有良好的驱动支持,如果是需要使用Linux系统作为宿主的话,建议优先参考 ArchLinux 的Wiki(如 https://wiki.archlinux.org/index.php/Intel_NUC );如果是使用VMWare ESXi作为宿主系统的话,可以通过其兼容性搜索来查询( https://www.vmware.com/resources/compatibility/search.php ),某些没有官方声称支持的设备,也能够使用。

如果你有足够的资金,当然还能有更多的选择,参考链接中罗列了几位国外安全大拿的家庭实验室方案,亦可拿来比较。我这里还使用了另外一台Gen8作为NFS的存储,以扩充某些情况下需要大量磁盘空间的场景。

如果你只有一台笔记本,也不想补充其他硬件设备,可以在参考链接中找到 AVATAR-Project ,这个项目提到使用各类常见虚拟化架构(如桌面级的VirtualBox\VMWare Worksation等)来搭建家庭实验室的方案。

所以我的最终方案是 Intel NUC + VMWare vSphere Hypervisor(ESXi) 6.5

网络架构

我使用pfSense( https://www.pfsense.org )作为所有虚拟网络的最终出口,这样在本地局域网中,也可以模拟从外网到内网的环境。你也可以像国内某些做信息安全教育的企业虚拟化方案中那样,使用m0n0wall( http://m0n0.ch )来充当这个网关的角色。要求是所有虚拟机可以通过PfSense这层再划分Vlan,语言描述可能不太清楚我们来看一个图:

ESXi中的VLan划分方式有三种:

  1. EST - External Switch Tagging

这种方式就是直接通过交换机的VLan划分来对接ESXi上的VLan划分,基本上就和直接在交换管理Vlan差不多了,ESXi本身无需再做其他设置

  1. VST - Virtual Switch Tagging

这种方式可以在虚拟交换配置多个端口组来对应多个不同的Vlan,需要启用虚拟交换的Trunk模式,如果不额外安装Vsphere Server来进行管理的话,配置较为繁琐

  1. VGT - Vitual Guest Tagging

这种方式是通过虚拟机本身来标识不同的VLan,也就是说可以通过虚拟机来安装一个类似路由的固件等进行VLan的管理

这里我们为了简便,选择了最简单的一种方式来满足我们的要求:

实际上这就是上面的第三种方式了,将VLan ID设置为4095之后,在虚拟交换这层做任何Vlan划分之后,都可以直接联通ID为4095区域下的虚拟机了(这里为pfSense),换到这里来说就是从家庭路由之后,先接入pfSense,再通过pfSense做规则来访问相对应的不同Vlan,这也就保证隔离了家庭路由与虚拟机直接的网络访问,能够很好的在家庭路由下(你自己的内网中)模拟内外网的情况。

主机规划

安装pfSense时,我们需要先设置两张网卡,一张用于WAN口接入,一张用于LAN口(assign VLAN用)。快速安装完成之后,需要首先确认Interface是否正确,我们的目标是需要能通过Wan口访问到pfSense的Web管理界面。在ESXi的pfSense虚拟机控制台中,我们按8得到Shell,使用pfctl -d临时禁用防火墙规则,以便从Wan访问到pfSense的Web管理端,随后我们可以在 Firewall/Rules/WAN 添加对应规则:

使用pfctl -e重新启用pfSense的防火墙规则,确保Web界面可以通过Wan口正常访问。 同时我们需要在 vSwitch 下的 PortGroup 中新建一个端口组,我这里定为Vlan10且其VLAN ID为10在后面安装虚拟机时候,我们的网卡设定可以关联VLan10即可。同时在pfSense中的 Interfaces/VLANs 也新建一个VLan如下,Tag与vSwitch中新建的端口组VLanID相对应

同时在 Interfaces/Vlan10 我们需要设定对应对应的IPv4静态地址,完成后在 Services/DHCP Server/VLAN10 中开启DHCP Server,以便后续安装完虚拟机时能正确获取IP地址。需要注意的是,在pfSense中防火墙默认的NAT模式是Auto,在你添加完Interface之后会自动配置NAT转发规则,如果你想隔离Vlan10下的虚拟机对家庭内网中的其他机器访问(我这里是 192.168.199.0/24),需要将NAT的自动产生规则模式禁用。 我这里只出于介绍的目的并没将完整的虚拟化环境的主机规划放上来,后面在一些渗透过程的取证和检测过程中,我们再具体来聊一聊。

自动化

自动化这里分为两个部分,第一个部分为日常虚拟机的管理,如批量开机、快照等;第二个部分为如何快速依据配置部署新的测试环境。

第一部分的日常管理,由于前面我们说过这是穷人的方案,所以尽量也不适用VMWare vSphere Server(VCenter)这样的集中管理重型玩意儿,我们只与ESXi打交道就好。此部分,VMWare官方提供了自己的Python语言Bindings ( https://github.com/vmware/pyvmomi ),并且提供了大量示例( https://github.com/vmware/pyvmomi-community-samples ),所以这部分就不再过多赘述。

第二部分为虚拟机的部署与配置管理,如果你使用了vSphere Server的话,可以看参考5中的链接,直接使用其自动化部署的方案。在最开始的时候,我其实是想自己手动架设PXE Server来自动化安装系统,但是在ESXi的Web端中安装系统,并不像WorkStation中那样设定好参数之后,会实现自动化安装。所以这里回到了传统的老路子,使用OVA模板制作母机,同时借鉴自动化运维的思路,为了方便在虚拟机系统安装完成后,能方便的进行配置,我们使用ansible来实现( https://github.com/ansible/ansible )。同时由于pfSense目前的版本没有单独的API,我们只能通过SSH连接执行命令的方式来自动化添加规则,结合VMWare ESXi的API就能完成80%的自动化工作了。

写在最后

感谢 @imbeee 为本文章提供的帮助和建议。同时强烈推荐 VMware Front Experience ,站点上有大量关于VMWare虚拟化的使用技巧及驱动Patch。 关于虚拟化实验室方面的实际应用,我觉得有两个很好的项目以作参考:

  1. HackingTeam的 test-av2 https://github.com/hackedteam/test-av2
  2. Irma https://github.com/quarkslab/irma

两个项目介是关于自动化杀软查杀的,虽然目的不一样(一个是为了测试免杀,一个是为了分析样本),但是实现方式确有很多相似之处。如果后面有机会能邀请到以前一起做渗透的小伙伴,分享他的自动化恶意代码特征码定位系统,还可以再继续深入的探讨这方面的应用。 留一个讨论: PXE Server 中有无自动化的方案,比如拷贝ISO到指定目录后,自动从ISO中解压启动项,自动更新CFG文件等?

参考

  1. https://doc.pfsense.org/index.php/PfSense_on_VMware_vSphere_/_ESXi
  2. https://www.darkoperator.com/blog/2017/1/28/home-lab-design?rq=home%20lab (搜索 home lab可以找到作者的其他系列文章)
  3. https://www.vmware.com/pdf/virtual_lab_automation_whitepaper.pdf
  4. https://blindseeker.com/AVATAR/ (版权原因作者已经停止了Pdf的下载)
  5. https://docs.vmware.com/en/VMware-vSphere/6.5/com.vmware.vsphere.install.doc/GUID-21FF3053-F77C-49E6-81A2-9369B85F5D52.html
  6. https://michael.lustfield.net/misc/completely-automated-esxi-deployment

更穷的方案

感谢开源的力量!

硬件方面可以选择任意低廉的方案。 主要来说说软件方面,将采用:

  1. Alpine Linux - https://github.com/alpinelinux
  2. QEMU - https://github.com/qemu/qemu
  3. m0noWall - http://svn.m0n0.ch/wall/

操作方法:

  1. 使用 Alpine 的Extened镜像在宿主机进行安装
  2. 安装Qemu并且 apk add qemu-system-x8664 qemu-gtk
  3. 使用Qemu安装m0n0Wall
  4. 使用Python Requests + PyQuery 构建 m0n0Wall 的自动化规则添加
  5. 使用Python + LibVirt 构建Qemu管理API

OpenStack

更新一个 OpenStack 方案 https://github.com/Sliim/pentest-lab

Vagrant

主要是使用 Packer (https://www.packer.io/) 来构建镜像,用Vagrant (https://www.vagrantup.com/) 完成配置并使用。这样做的一个好处是快速的开箱即用 :)

https://medium.com/@clong/introducing-detection-lab-61db34bed6ae