译者:WisFree
预估稿费:200RMB
投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿
写在前面的话
今天给大家介绍一个名叫SecGen的项目,该项目允许用户创建一台包含随机漏洞的虚拟机系统。如果你对网络安全技术感兴趣的话,那么SecGen绝对会是一个让你爱不释手的工具,因为它不仅能够帮助我们合法地练习黑客技术,并测试我们的技术水平,而且它还能够锻炼我们解决问题的能力。
项目地址
SecGen:【GitHub主页】
SecGen简介
SecGen吸引我的另一个方面就是它的随机化功能。目前网络上能能够下载到的漏洞靶机基本上都是静态的,这也就意味着那些工具所生成的每个版本虚拟机都包含相同的漏洞,这就非常不符合实际情况了。而SecGen不同,因为它可以生成包含不同安全漏洞的测试靶机。
在SecGen的帮助下,你不用再去研究VulnHub上的内容或是Metasploit的漏洞清单,因为SecGen可以在几分钟之内生成包含不同漏洞集的虚拟机系统。除此之外,SecGen还支持用户的个性化定制,而这种功能非常适用于CTF比赛或个人用户的日常练习等场景。
在这篇文章中,我们将教会大家如何在Kali Linux平台上安装SecGen,并生成一个包含随机漏洞的靶机系统。
第一步:安装SecGen
跟往常一样,我们先得更新一次系统(运行命令“apt-get update”)以保证程序能够正常工作。更新完成之后,首先要做的就是使用git命令将SecGen项目代码克隆到本地。运行下列命令:
git clone https://github.com/SecGen/SecGen
获取到项目源码之后,我们要确保所有的依赖组件都已正确安装,请在终端内运行下列命令完成依赖组件的安装:
sudo apt install ruby-dev zlib1g-dev liblzma-dev build-essential patch virtualbox ruby-bundler vagrant imagemagick libmagickwand-dev
当所有的依赖组件都已安装完毕之后,在终端内使用命令“cd SecGen”切换到SecGen的本地目录,然后运行下列命令:
bundle install
之所以这条命令之前不用加上“sudo”,是因为运行bundle是不需要特殊权限的,如果你要以root权限运行bundle的话,很可能会引发不必要的错误异常并导致系统出现问题。
如果你看到了如上图所示的信息,那么你需要使用下列命令检查你的Ruby版本号:
ruby --version
接下来你有可能需要处理有关Ruby版本的东西,不过就我的实验环境来说我没有遇到任何的问题。
第二步:设置你的第一个虚拟机
我们只需要打开终端,然后输入下列命令就可以轻松地创建出一台包含随机漏洞的虚拟机靶机系统:
ruby secgen.rb run
不幸的是,我测试环境的Kali库中Vagrant的版本以及Ruby gems都有一点问题,如果你在安装过程中也遇到了类似的问题,我建议你可以先尝试降级Vagrant的版本。降级Vagrant版本的命令如下:
apt purge vagrant
接下来,从Vagrant网站下载Debian包。我们可以使用dpkg命令来安装vagrant.deb文件,命令如下:
dpkg -i vagrant1.9.7x86_64.deb
现在,返回你的SecGen目录,然后运行下列命令:
ruby secgen.rb run
如果上面这条命令能够正确执行并且不报错的话,你就不需要清理你的Ruby gems了。如果你遇到了问题,那肯定就是Ruby gems导致的了,你可以使用下列命令解决其中的部分问题:
sudo gem cleanup
我在自己的系统中安装SecGen时上面那两个命令我都使用到了,不过你也有可能不会使用到其中的任意一个。完成上面这两步操作之后,我们就可以开始使用下列命令构建我们的漏洞靶机了:
ruby secgen.rb run
整个构建过程需要一定的时间才能完成,不过也不会让你等太久:
你可以从上图中看到,我们的构建过程似乎一切顺利。至此,我们已经得到了一台包含随机漏洞的虚拟机了。接下来,我们一起看一看这台虚拟机的部分详细信息:
配置靶机的网络环境
可能有些同学会知道,VirtualBox默认会将虚拟机系统的网络模式设置为NAT,但这个模式并不适用于我们的实验目的,因为NAT模式下虽然虚拟机系统能够直接访问互联网,但是我们的主机操作系统或其他虚拟机就无法直接与其通信了。
因此,我们需要将虚拟机的网络模式从NAT更改为一种能够允许我们的主机与虚拟机交互的模式,即host-only或桥接模式。桥接模式将会使我们的漏洞靶机暴露在我们的内网之中,这就不太合适了,因此我们这里选择使用host-only模式。在VirtualBox中,选择我们的漏洞靶机,然后在“设置”中选择“网络”标签,然后将网络模式从NAT修改为host-only Adapter。
对于一个包含各种安全漏洞的虚拟机系统来说,这样的设置是最安全的了。最后,我们需要在网络中找到这台靶机。一般来说,我们需要登录进系统然后查看IP地址,在终端内运行下列命令:
sudo ifconfig
如果你在运行ifconfig命令时遇到了问题,你可以先运行命令“apt-get install net-tools”:
ifconfig命令可以给我们提供vboxnet0适配器的状态信息,并告诉我们去哪里寻找这台漏洞靶机。在我们的实验环境下,IP地址空间为172.28.128.0/24。接下来,我们可以运行下列命令:
nmap 172.28.128.0/24 -sn
一切正常的话,Nmap将会返回两个结果:你的主机信息以及访客系统信息。而此时,你就可以开始对靶机发动攻击了。
深入分析
如果你发现虚拟机系统存在问题或者无法安装我们的教程正常操作的话,请检查一下靶机系统的生成操作是否正确。切换到SecGen项目的本地目录,然后运行下列命令:
cd projects
这个目录中包含之前所生成的靶机系统,我电脑中只有一台虚拟机,所以我可以直接进入虚拟机目录,然后在这个目录中会有一个scenario.XML文件,使用下列命令查看该文件:
cat scenario.xml | less
或者你也可以使用Vim之类的编辑器来直接打开该文件,命令如下:
vim scenario.xml
就我个人而言,我还是比较喜欢使用Vim的:
如果你想了解更多关于随机漏洞靶机的配置信息,你可以在终端内使用下列命令来查看marker.xml文件:
cat marker.xml | less
第三步:生成其他的场景
如果你想自己开发测试场景,这个话题已经超出本文所要讨论的范围了,不过SecGen的GitHub主页给大家提供了非常详细的开发文档了,感兴趣的同学可以自行查看【传送门】。
除此之外,SecGen也给各位同学提供了一些预先定义好的测试场景。比如说,下列命令能够创建一台包含随机远程漏洞的靶机,而且漏洞的利用不需要高级权限:
ruby secgen.rb --scenario scenarios/examples/remotely_exploitable_user_vulnerability.xml run
下面这行命令可以生成多台包含随机漏洞的靶机系统,并模拟最小架构的企业环境。SecGen将会创建一台内网服务器、桌面设备和一台Web服务器,而这些系统经过配置之后可以组成一个小型的企业内部网络,并允许测试人员进行模拟入侵。创建命令如下:
ruby secgen.rb --scenario scenarios/security_audit/team_project_scenario.xml run
关于更多例子,请查看SecGen的本地目录“./SecGen/scenarios/examples”
总结
SecGen是一款非常棒的安全工具,它不仅可以生成随机的漏洞靶机,而且它的运行速度和多样性也使它成为了一款绝佳的学习工具。因此,我希望安全社区中的研究人员能够创建出更好的测试场景并将它们贡献到SecGen的GitHub代码库中。