第5章 结束渗透测试的工作

如果在自己的实验环境里,用树莓派测试内网渗透,那确实很好玩。但有些情况下,可能要在真实环境中发挥它的作用。这个时候,把工作做得有始有终就非常关键了。对提供渗透测试服务的人来说,必须展示足够的证据,证明找到的漏洞,如果做不到,将来所做的渗透测试价值就堪忧了。这意味着一切都要有文档,不能因为渗透服务而遗留下各种问题。作为攻击者来说,还需要尽量抹除自己的痕迹,这样相关的机构就没法再通过一些取证手段反查到攻击者了。

渗透测试作为一种给网络系统挑毛病的付费服务,显然犯了类似说别人孩子长得丑的忌,客户对所找出的问题可能会反跳。所以要对整个过程做好文档记录,保证漏洞是可重复的,确保网络状态与刚开始准备做渗透测试时是一致的。文档需要对技术和非技术人员分别定制裁剪,因为这两种人都可能对是否购买这项服务有决定权。另外,也务必多留意渗透任务开始时的系统状态,包括客户提供的各种信息。还可以利用白盒、黑盒和灰盒测试等手段,深入了解渗透测试初始阶段的用户环境。

结束渗透测试时,格外多关注在执行任务时留下的痕迹是另一个要点。很多攻击工具都会对系统功能有影响,甚至可能造成宕机,绝大多数客户可不会愿意碰到这种事情。上述及其他类型的问题,可能会惊动系统管理员调整自己的安全策略。这会使得要完成渗透比原来更加艰难,而且这就和真正的渗透测试模拟有差异了,真正的攻击者不会收尾这么不干净并被发现。管理员可能会在漏洞被上报之前修复各种已知的漏洞,这会使得最后的报告的价值降低。所以除非服务的提供方式是非常明确的,也就是涉及的各方都知道要对特定的系统进行渗透服务,否则,做的所有事情希望对目标应该是隐蔽的。

本章讲解了以下内容:

提示.tif

在执行任何渗透测试任务前,必须获得相关方面的同意。双方同意后应以书面形式确认,并由法律代表复核并以书面形式签字为证,以规避在授权的渗透测试中因为负面结果而带来的风险。如果你是个没有获得授权的黑客,那请自求多福,千万别被抓到。

对渗透测试人员或网络犯罪者来说,最后马脚败露的关键原因往往就是攻进系统后没有清理干净自己的痕迹。可以取证的证据包括数字网络痕迹(IP地址、在网络出入口上的网络流量类型等,不一而足),以及被攻击终端上的各种日志。使用的工具也会留下证据,包括从树莓派发起某些恶意行为的工具也会如此。比如,在树莓派上执行more~/.bash_history命令,就能看到曾经用过的历史命令列表。

对树莓派黑客来说,好消息是不用考虑ROM这样的存储设备,因为树莓派唯一的存储方式就是microSD卡,这也意味着攻击者重写一下microSD卡就可以毁灭树莓派上的证据。在这么做之前,从攻破系统开始到最后重新创建树莓派的新映像,一步步看下清理的过程。

提示.tif

要达到这个目的,可以使用在第1章介绍过的格式化SD卡工具。也可以根据第1章里介绍的步骤,在执行渗透之前,先备份系统的映像,在完成任务后,再把树莓派上的系统恢复成之前的样子,这样之前的操作就被彻底掩藏起来了。

要执行的第一步,就是清理所入侵系统的事件日志,用以掩藏操作痕迹。如果入侵的是Windows系统,Kali Linux在Metasploit里有个叫clearev的工具可以自动实现这个功能。clearev可以访问Windows系统并清除日志。对系统特别关注的管理员,有可能会留意到日志被清理过这一变化。然而,大部分的管理员都不会注意到其中的差异。另外,因为日志被清除了,最多也不过是管理员知道自己的系统被入侵过,而入侵期间做过什么的记录,也随着日志消失了。

clearev是Metasploit的一个组成部分。如果用Meterpreter入侵到Windows系统了,可以使用clearev清理日志,方法是在meterpreter > 提示后输入clearev。无需其他配置即可运行,也就是一旦执行,日志就全被删除了。

图5-1展示了这条命令执行时的场景。

Picture 123824

图5-1

图5-2则是日志删除前后的对比效果。

index-135_1.jpg

图5-2

删除入侵的Windows系统日志的另一种方式是安装Windows日志清理工具。可以下载到各种日志清理工具,如ClearLogs下载地址在http://ntsecurity.nu/toolbox/clearlogs/ 。这类程序的使用很简单,基本上就是在已完成渗透测试的系统上安装和运行一下即可。也可以手工执行命令来删除日志C:\ del %WINDR%* .log /a/s/q/f。命令里使用 /a参数意味着包括所有日志文件,/s是包括子目录,/f是跳过删除确认提示,直接强制删除。

技巧.tif

不管用哪种程序,一旦清理完日志文件后,也要确保删除该工具,以免以后系统检查时被发现。

对于Linux系统,需要对/var/log目录有权限才能看到系统日志文件。如果确实有这些日志文件的操作权限,只要浏览并删除这些条目即可。图5-3展示了我的树莓派上的/var/log日志目录。

index-136_1.png

图5-3

可以用删除命令rm来删除这些文件,如执行rm文件名.txt或删除整个目录;然而这样删除文件来清除痕迹还不够隐秘。另一种做法是用Bash。只需要输入“> /文件完整路径”就能清空文件的内容但又不需要删除文件。这种做法更隐秘一些。

Kali Linux没有图形界面的文本编辑器,可以安装简单易用的此类工具gedit,使用apt-get install gedit命令下载安装即可。安装完成后,可以在application类别菜单中找到它,或者直接在终端窗口里输入gedit。如图5-4所示,界面和许多常规的文本文件编辑器很相似。点击File菜单,从/var/log目录里选择需要修改的文件。

Picture 123484

图5-4

另外,还需要清理命令历史纪录,因为bash shell自动保存了最后500条命令的记录,取证时只要输入more ~/.bash_history就能看到。图5-5显示了我在树莓派上执行的最开始几百条命令。

Picture 123485

图5-5

要确认存储在历史记录文件里的命令条数,可以输入echo $HISTSIZE。要删除这些记录也只要输入export HISTSIZE=0。从这时候开始,shell就不会再保存任何命令记录了,此时即使按上翻键,也不会显示上一条命令了。

技巧.tif

设置历史记录条数的命令也可以加在Linux主机的.bashrc文件中。

图5-6所示为系统存储着最近执行的500条命令时的状态,也显示了清除历史日志之后的情况。

Picture 123486

图5-6

提示.tif

在入侵的系统上,最好一开始就执行这条命令,这样以后也不会存储任何历史纪录了。只要执行了export HISTSIZE=0命令清除了历史纪录,即使退出登录,再次登录回来这条设置仍然有效。如果担心会被检查牵连,在完成渗透测试之后,在你的C&C服务器上也应该这么设置。

在Linux系统上,更激进更快捷地删除历史文件的方法,如图5-7所示,使用shred -zu /root/.bash_history命令彻底清除历史记录,这样会完全重置历史文件的内容。这个命令会用空字符重写整个历史纪录文件然后再删除日志文件。要确认这点,可以执行less /root/.bash_history看看历史纪录文件中的内容。

index-138_1.png

图5-7

除非不介意自己的举动被查到,否则千万不要从自己的家庭网络里直接发起攻击,因为这样会被追踪到。最常见的做法是在攻击者和被攻击者之间,使用代理或多层代理,以隐藏真实的源IP地址。简单来说,代理是客户端获取另一个系统资源时的中间媒介。目标端只知道流量来自中介系统,而不知道真正的源在哪里。层级的代理就像洋葱,用常规的取证监察方式很难找出真正的源。

网络上有诸多免费的代理。可以在谷歌搜索Free Anonymous Web Proxy Server(免费匿名Web代理服务器),就能找到各种风格的代理,如Proxify、Anonymouse、Anonymizer和Ninja Cloak等,图5-8展示了Anonymouse的页面,以及介绍如何通过代理匿名上网的信息。要使用它们的服务,只需要在图5-8的网址搜索框中,输入希望访问的网页地址即可。

index-138_2.png

图5-8

提示.tif

代理服务器的管理员可以看到来往的流量,也能定位出经过代理的攻击目标和受害者,所以强烈建议在使用代理前,先搜一下这家代理服务器的口碑,由于代理有可能未经允许滥用流经的数据,包括在取证时,把这些证据提交给权威机构或出卖你的敏感信息。

要隐藏源IP地址的另一个做法是使用代理链(proxychains)。Proxychains可以利用代理服务器做通道转发Kali命令。需要使用sudo apt-get install proxychains命令来安装该程序,因为默认的Kali Linux ARM映像中没有这个软件。

装完后,需要在etc/proxychains.conf配置文件新增一个代理IP地址,如图5-9所示。

Picture 129

图5-9

HideMyAss Internet security提供了一些免费可用的代理服务器,可以设置在Proxychains程序中。页面的地址为http://proxylist.hidemyass.com 。但请记住,这个方法并非绝对很可靠,代理服务器的管理员仍然可以看到全部的流量数据,在未告知的情况下还是可能滥用你的数据。

Proxychains配置文件的语法是proxychains <需要通过代理转发的命令> <可选参数>。在以下的例子中,希望通过proxychains隐藏扫描的源地址,然后用nmap命令来扫描192.168.1.0/24网段。请注意,在执行nmap命令之前,需要如下编辑Proxychains的.conf配置文件。


proxychains nmap 192.168.1.0/24




在终端和网络层面掩蔽好自己的痕迹后,最后一步就是从使用的工具里移除取证证据。要清除树莓派上的系统,只要重新刻录一遍SD上的映像即可。可以根据本书第1章的内容,用SD Card Formatter或Apple公司的Disk Utility重新格式化SD卡。然后根据第1章的步骤,继续安装新的映像文件如原版NOOBS程序,以掩盖树莓派曾经运行过Kali Linux。还可以在启动渗透测试之前,先备份好自己的定制版本Kali Linux映像,这样恢复以后就不会含有上次渗透测试时的数据了。

另一种做法是直接取出并毁坏microSD卡。图5-10所示为一块被掰断的microSD卡,这样就不会被追查到了。

index-140_1.jpg

图5-10

有时候碰到的情况是,你已经无法物理地接触到这台树莓派了,但又想确保它不会被客户没收,供以后的取证调查所用。当你把树莓派安插进网络做卧底,通过远程访问渗透进系统后需要做个收尾时,要毁掉树莓派。在这种场景,就无法擦除重写microSD卡里的内容,所以退而求其次的是破坏Kali Linux使得取证调查无法进行,别人不会知道在网络渗透期间这台树莓派做了什么。让我们看看怎样远程干掉树莓派上运行的Kali Linux吧。

通常,第一反应往往是删除所有的内容。要达到目标可以执行rm –rf /命令,rm就是删除的意思,-rf就是无需提示地强制递归删除所有文件和目录,而 / 告诉命令是从根目录开始删除。如果运行这个命令的时候参数是.*,也就是rm -rf .*,会删除所有的文件。这么做实际上不太好,因为删除只是告知系统把这部分空间腾出来可以重新使用了,但并没有重写数据,使用一些取证工具依然可以把数据恢复过来。更好的做法是执行dd if=/dev/zero of=/dev/sda1,这样才会彻底覆盖microSD卡,使数据难以恢复。

另一个做法是用mkfs.ext4 /dev/sda1命令格式化整个磁盘。mkfs.ext4命令用于创建一个新的.ext4文件系统,而/dev/sda1指定的是第一个磁盘上的第一个分区,也就是运行Kali Linux的空间。

提示.tif

运行这些命令会彻底干掉你的Kali Linux。如果有人让你执行这些命令,请千万小心,网上经常有人拿这些命令来捉弄人。

渗透测试服务中,最重要的就是提交给客户的文档质量。作者见过许多很有才的测试人员败给了品质较低但更职业化的服务提供商,仅仅是因为客户对最后报告的观感不同。这与报告提交给目标读者的方式、用户对坏消息有多上心,以及报告里细节有多丰富都有关系。最好的做法是,综合标准的渗透测试报告模式再加上对用户会如何解读报告内容的理解来写。例如,把客户公司里某个人圈定为系统的薄弱环节之一,可能就不太合适,因为那人也许恰好对是否需要购买安全服务具有影响力。

编写报告并不只是把找到的问题汇总进去即可,还需要记录整个使用场景,包括在渗透测试之前的环境:预先提供了什么信息,对当前条件的假设,当展开渗透测试时使用了哪些步骤,每一步执行的结果等。可能会碰到还没完成报告,管理员就补上漏洞的情况,所以记下每一步的时间和日期很关键。关于怎么写渗透测试报告可以参考一些比较受到认可的标准,如参考OWASP的安全测试指南,地址为https://www.owasp.org/index.php/Testing_Guide_Introduction

下面介绍可以帮助创建更专业的渗透测试报告的工具。

Kali Linux ARM为了保持轻量,功能较为有限。为了做报告,其中一项尽管简单但执行起来有点烦的工作就是截图。以下介绍以命令行方式和图形界面工具能怎样简化这个过程。

ImageMagick

既可以在终端窗口下载ImageMagick,也可以在终端窗口执行该工具来截图。要下载该工具可以输入sudo apt-get install imagemagick命令。

安装好以后,可以输入import screenshot.png命令来截图。ImageMagick会把鼠标图标变成一个小盒子状,这就代表可以做截图了。点击屏幕上希望截屏的位置,截屏就会在根目录下生成该 .png文件。如果点击了某个窗体,ImageMagick就会只截取该特定窗体内的图片。可以输入eog screenshot.png命令来查看刚才的截图。

如果希望在若干延时后,自动截取树莓派的整个屏幕显示,可以输入sleep 10; import -window root screenshot.png命令。延时截图在有互动的情况下特别管用,如打开某个菜单,然后需要做屏幕截图。sleep后面跟的数字,就是希望过多少秒后开始截屏。import -window root部分的命令就是让ImageMagick对整个屏幕进行截图。命令的最后一个参数是截图要保存成哪个文件名。图5-11展示了该命令的使用。

Picture 133

图5-11

Shutter

另一款截图工具是Shutter。这款工具也需要用apt-get install shutter下载安装这个程序。装好后,可以在系统的应用分类下拉菜单里找到它,也可以直接在终端窗口里输入shutter。在第一次启动时,Shutter会提示需要先更新插件,才能使用完整功能。

图5-12展示了一个Shutter的会话窗口。

index-143_1.jpg

图5-12

Shutter的窗口中有各种选项。要想截图,可以根据版本的不同,点击箭头或剪刀的图标。这时候屏幕的颜色会有所变化,并提示画一个长方形的截图区域。在希望截图的位置画出长方形截图区,截下来的图就自动出现在Shutter程序的窗口中。这时候就可以对截图进行编辑和保存,供后面写报告时使用。

图5-13就是我对公司站点www.thesecurityblogger.com 页面的局部截图。

Picture 134

图5-13

另一种做法是对整个桌面进行截图,方式是点击快捷操作中方形的Desktop按钮。如果只想捕获窗口的部分图像,可以点击快捷操作中Desktop右面那个Window按钮。截图后,可以点击Paintbrush(画笔),调出各种编辑图片相关的功能,如图5-14所示。在保存最后的图像前,可以对截图进行切割、调整大小等操作。也可以点击快捷栏里电脑图标的按钮上传图片,点击画笔形状的按钮进行图像编辑。

Picture 123483

图5-14

如果成功入侵了一套系统或者网络,有时候可能要在系统上添加或者删除数据。数据量可能很大,在网络上传输会颇为费时。如果在被入侵系统上操作的时间也很有限,那就更是个问题了。另外,在网络中移动大文件还可能会触动安全防护系统,如一些安防公司的数据泄漏防护(Data Loss Prevention,DLP)技术。

最好的方法是压缩文件,将文件分成小份,既可以加快下载/上传处理,发送/接收的动作也更隐秘。下面介绍在命令行和图形界面下,怎样实现这个目标。

Zip/Unzip

其中一种简单的命令行方式就是Zip。可以先用Zip在树莓派上压缩文件,以便把压缩文件传回C&C服务器,后续再解压回原来的样子。由于Zip在ARM版Kali里默认没有安装,所以需要执行apt-get install zip命令安装。

装完后,使用zip “压缩后的文件名”“需要被压缩的文件”命令,其中“压缩后的文件名”是压缩后产生的文件名,而“需要被压缩的文件”是有待压缩的文件。“压缩后的文件名”会自动添加.zip的文件后缀。所以在图5-15所示的例子里,这条命令会把VictimData文件压缩为Stolen.zip文件。

Picture 123487

图5-15

使用unzip Stolen.zip命令即可解压ZIP文件,将压缩文件还原为原始形式,也就是VictimData。也可以明确设定解压出来的文件叫什么名字,如unzip Stolen.zip VictimData.doc。图5-16显示了解压Stolen.zip的命令行。

Picture 123792

图5-16

File Roller

如果需要具有图形化界面的软件处理各种格式的压缩软件,那File Roller就能满足需求。其功能和Zip类似,它可以在简单的图形界面里解压和压缩文件。File Roller也没有默认包括Kali Linux ARM映像里,所以需要执行apt-get install file-roller先安装。装完后,在终端窗口输入file-roller,就会出现程序的图形界面。在图5-17中,把Stolen.zip文件拖进File Roller界面后,就显示出原文件VictimData,然后点击Open按钮即可解压文件。

Picture 123793

图5-17

要压缩文件,可以把文件拖进程序窗口中,File Roller会询问是否需要创建一个新的压缩文件。图5-18展示了把文件VictimData拖到File Roller中,创建了新的压缩文件VictimDataNew.tar.gz的场景。在文件命名提示界面中,设定File Roller压缩后的文件名为VictimDataNew,一旦压缩完成,会自动添加.tar.gz后缀。

Picture 123794

图5-18

split

为了进一步把文件变小,可以在传输之前,将文件拆分为几个小份。一个实现这个功能的简单程序就是split。要分割一个文件,只要输入split“每个文件的大小” “需要被分割的文件名” “分割后文件名”即可。图5-19里的例子展示的就是把文件VictimData分成不超过50M的若干份名为Breakup的小文件。每个50 MB文件的文件名规律是以Breakup开头,后面再跟两个字母,顺序从aa开始。例如,我们的例子最后产生了3个文件,分别为Breakupaa、Breakupab和Breakupac。

Picture 123795

图5-19

要还原这3个文件,可以执行cat "fileaa fileab fileac" >“合并后的文件名”。因此对上述例子来说,要组装回VictimData文件,就要使用Breakupaa、Breakupab和Breakupa文件名。也可以用cat Breakupa[a-c] > VictimData达到一样的结果,如图5-20所示,因为这3个文件首位字母是一样的,所以这条命令只需要表示第2位字母的顺序。

Picture 123796

图5-20

本章重点讲述渗透测试和攻击练习之后的收尾工作。内容包括从攻入的系统清理痕迹、掩藏网络通信的蛛丝马迹,以及最后清除渗透测试所用树莓派里的证据。本章最后谈到如何为潜在客户创建专业的漏洞提交文档的方法。

下一章介绍除了Kali Linux外,其他适用于树莓派的系统平台。