社会工程:安全体系中的人性漏洞
上QQ阅读APP看书,第一时间看更新

收集信息就如同盖房子一般。如果想从房顶盖起,肯定是必败无疑。一栋坚固的房子必定是在打下坚实的地基后,从地面往上盖的。收集信息时不要总想着怎么组织和运用这些数据,创建一个文件或信息收集服务来收集信息才是当务之急。

事实上,有很多工具可以帮助我们收集和运用这些数据。在渗透测试和社会工程审计中,我使用Linux BackTrack发行版,BackTrack是专为这一目的而设计的。BackTrackBackTrack是基于Ubuntu的自启动运行光盘,它包含了一套安全及计算机取证工具,简称BT,目前最新与最好用的版本是BT5。——译者注和大部分Linux发行版一样,是免费、开源的,也许它最大的优点便是集成了300多款安全审计工具。

BackTrack中的工具也是开源和免费的。特别吸引人的一点在于这些工具的质量都很高,其中很多都能与同类商业软件媲美,甚至是有所超越。这其中就有两个特别适用于信息收集和存储的工具,一个是Dradis,另一个为BasKet。接下来将分别简要介绍这两款工具。

BasKet从功能上看有点像记事本,但是比记事本要强大得多。这款软件现在由王凯文(Kelvie Wong)维护更新,你可以从BackTrack中找到,或者到http://basket.kde.org/网站上免费下载。该网站有详细的介绍,教你如何安装。这款软件易于使用,界面也并不复杂。

如图2-1所示,界面很简单,很容易上手。在屏幕左侧单击鼠标右键,选择“New BasKet”,会添加一个新的“BasKet”,用以保存数据。

图2-1 信息收集阶段,使用BasKet轻松组织收集到的数据

BasKet新建好以后,便可以往里面复制/粘贴数据,添加屏幕截图,甚至可以添加OpenOffice办公软件或者其他类型的图表数据。

添加屏幕截图的方式有好几种,最简便的方法是复制图片,在新“BasKet”中单击鼠标右键,选择“粘贴”。如图2-1所示,添加图片的操作简单、快捷,同时可以通过输入、粘贴等各种方式为图片添加文字备注。

在通常的安全审计中,BasKet组织和展示数据的方式是它的优势之一。我通常为不同类型的数据建立不同的BasKet,例如域名查询信息、社交媒体信息等。然后,使用谷歌地图或谷歌地球获取目标客户的建筑和设施图片,保存到BasKet中。信息收集完成后,快速提取和使用这些信息也很简单。图2-2展示了一个接近完工的BasKet,其中有很多有用的信息和标签。

如图2-2所示,使用BasKet来存储和组织信息很简单。我尽可能多地往里面存放信息,因为再小的信息也可能是有用的。我收集的信息包括目标客户的网站内容、域名查询信息、社交网络、图片、员工联系方式、简历、论坛、爱好等一切可能与目标公司相关的信息。

图2-2 包括很多有价值信息的几近完整的BasKet截图

信息收集完成之后,直接单击“BasKet”菜单,然后单击“Export”,将整个BasKet导出为HTML网页文件。这对生成报告和共享信息非常有用。

对于一名社会工程人员来说,接下来要详细讨论的数据收集是每次行动的核心。然而,如果信息不能得到及时的重现和运用,将会毫无价值。BasKet及其类似工具使得信息收集和使用工作更加简单。一旦你尝试使用,便会爱不释手。

尽管BasKet是款非常好用的工具,但是如果要收集的信息很多,或者需要一组人共同完成信息收集、存储和调用操作,那么就需要一款能够供多用户共享数据的工具——Dradis。根据Dradis工具开发者的描述,Dradis是可以提供信息中央存储的独立Web应用,可以统一管理需要收集的信息。

和BasKet一样,Dradis也是一款免费的开源工具,你可以在http://dradisframework.org/网站上免费下载。Dradis可以安装于Linux、Windows和Mac等不同操作系统,http://dradisframework.org/install.html网页上有详细的安装和配置说明。

Dradis安装并设置好以后,就可以浏览你分配的本地主机和端口,或者使用标准端口号3004。只要打开浏览器,在地址栏中输入http://localhost:3004/即可登录使用。

登录进去以后的欢迎界面如图2-3所示。注意左上角的添加分支(Add Branch)按钮,添加分支以后就可以像BasKet一样添加信息,如备注、图片等,甚至可以导入笔记数据。

图2-3 Dradis简洁而易用的界面

Dradis和BasKet只是用来收集和存储数据的两款小工具,二者的网站上都有很好的设置说明和使用介绍。

不论操作系统是Mac、Windows还是Linux,你都能找到相对应的工具。重要的是工具用起来顺手,并能处理大规模数据。

基于上面提到的因素,我建议社会工程人员放弃使用Windows或Mac操作系统自带的记事本和文本编辑器。它们无法满足你对于数据格式和相关区域高亮显示的需求。图2-3显示的是我使用的Dradis服务器端,有一部分我专门用来保存电话交谈记录。这个功能很好用,可以记录我根据所收集的信息产生的想法。

这些工具表明了社会工程人员是怎样利用收集到的信息的。利用信息的第一步便是要像社会工程人员一样思考。

拥有几百兆的图片和数据固然很好,但是当你回过头来浏览这些信息时,如何能够保证最大限度地挑出有用的信息呢?

当然,你可以打开浏览器,随机输入冗长的词语进行关键词搜索,这样做可以找到某种形式的信息,其中一些甚至是有用的。然而,在肚子很饿的情况下,你才不会跑到厨房,不管三七二十一地往锅里随便扔食材,然后就开始翻炒呢。计划、准备并考虑各种会影响菜肴好坏的因素才可能烹饪出佳肴。同理,社会工程人员也要做好计划和安排,想好将要收集的信息和收集的方式才可能成功。

信息收集的关键一步是要转换自己的思维方式。在信息大爆炸的世界,我们必须改变平常的思维方式,学会质疑一切,看到信息时就按照社会工程人员的思维方式来思考。利用网络等方式进行搜索的方式要改变,对于网页上返回的信息,也要学会从社会工程的角度去思考、审视。无意中听到的谈话、论坛上看似无聊的帖子,抑或是一袋垃圾,都应该以不同的方式来对待。我的导师马蒂看到程序崩溃就异常兴奋。为什么?他是渗透测试员,同时也是漏洞编写人员,崩溃是找到软件漏洞的第一步。因此,当遇到程序崩溃时,他感到异常兴奋,而不是为数据丢失而烦躁焦虑。作为社会工程人员,也必须要对信息抱有同样的态度。每当发现目标人物使用多个社交网站时,便将它们之间的联系和信息数据收集起来综合分析,争取得到完整的目标人员档案。

举个例子来说,有一次我要去遥远的另一个州办事,便租了一辆车。我和同事将行李统统装到了后备箱。我们刚要上车,就发现后座上有一小袋垃圾。同事说:“如今的服务真差,我们付钱租车,他们至少应该将车子打扫干净吧。”

诚然,大家都希望车子里是干干净净的,同伴想把它扔到旁边的垃圾桶里,我阻止了他,说道:“让我看看那个袋子。”我打开袋子,拨开里面的快餐纸袋以后,映入眼帘的物品让我大吃一惊——里面是半张撕碎的支票。我赶紧倒空袋子,从里面找到一张银行收据还有另外半张支票。这是一张面值几千美元的支票,虽然被撕开了,但撕得不是很碎,仅撕成了四大块,然后被扔到装有快餐纸袋的垃圾袋中。将这几片拼接到一起,可以看到这张支票的所有者的姓名、公司名称、地址、电话号码、银行账号及银行流水单号。再加上这张银行收据,我可以清楚地知道他的存款数字。他应该感到庆幸,我不是心存歹念的人,要不然只要再多几步,我就可以从他的账号中窃取存款。

这个故事向我们展示了人们是如何看待自己的重要信息的。这个家伙在我之前租了这辆车,他可能以为将支票撕碎扔掉就安全了,或者说至少当时他是这样认为的。无独有偶,通过www.social-engineer.org/wiki/archives/BlogPosts/LookWhatIFound.html,你可以看到最近发生的这样的故事:有人将非常贵重的物品随意扔掉,或者在旧货市场上廉价出售。

其中包括:

>>一幅被博物馆以120万美元收购的油画;

>>一辆1937年生产的、仅跑了24000英里的型号为57S Atalante的布加迪跑车布加迪公司在过去70多年时间里仅生产了3辆Atalante原型车,其中只有2辆存世至今,而57S型Atalante轿车在后来的限量生产试验中也仅生产了17辆。目前为止有4辆被保存在法国乡村的博物馆里,该车留存数量极少,找到的这辆57S Atalante布加迪跑车已经消失了半个世纪之久。——译者注,这辆车最终以300万美元出售;

>>《独立宣言》珍本。

如果人们能把《独立宣言》珍本随同一张油画扔掉,那么丢掉账单、医疗记录、旧发票或者信用卡账单又有什么大不了的。

懂得如何在公共场所和人打交道会产生令人意想不到的效果。接下来将讲述我对一家公司进行安全审计的经历。在审查之前,需要收集一些数据。下面就让我们看看,如何利用那些看似无用的信息找到突破口。

对于被审计公司的一位高管,我仅仅跟踪其一两天,便发现了他每天早上同一时间都会去当地一家咖啡馆喝咖啡。在发现他的这一习惯后,我便计划了一场“偶遇”。他一般早上7:30到咖啡店,每次会坐半小时到35分钟的样子,看看报纸,喝一杯中杯拿铁。在他进店3~5分钟后,我也进到店里,点了相同的咖啡,坐到他旁边的位子上。我看到他放在一旁已经看完的报纸,便向他借阅。路上我已经读过了这份报纸,知道第3页上有一篇关于附近一起谋杀案的报道。我装作刚看到这则消息一样,大声说道:“在这么小的一个镇子里,怎么会有如此骇人的事情发生,太可怕了!你是不是也住在这附近啊?”

此时此刻,有两种可能:一是他根本不理我,二是我的肢体语言、说话的语调和表现会让他感到放松。事态的发展证明是第二种情况,我成功了。他答道:“是啊,几年前我因为工作搬到这里。我喜欢小城镇,但正如你所说,这种可怕的事情越来越多。”

我接着说道:“我只是途经这里。我的工作是给大公司提供高品质的咨询服务,我经常在不同的小城镇之间跑来跑去。不过最近这种事情越来越多了,就连乡下也是如此。”之后,我用一种调侃的语气问道:“你不会碰巧是一个需要咨询服务的大公司的领导吧?”

他笑了起来,感觉我刚刚的话是在质疑他的高贵身份一般,说道:“我是XYZ公司的财务副总,不过我不负责那个部门。”

“嘿,我又不是在向你推销产品,喝咖啡而已。不过,不知你明天或者周三有没有空?我可以顺便访问贵公司并为你提供一些信息。”

从这里开始,故事变得有趣了。他说:“我很想应约,但是周三我必须要出去度假。要不你给我发份邮件,我回头给你电话。”并随手递上了他的名片。

“我猜想应该是去和煦而明媚的地方吧?”我问道,心想快达到目的了,是时候结束此次谈话了。

“和我妻子一起乘游艇去南方。”我想他是不会告诉我目的地的,不过这也没关系。我们握了握手,便分道扬镳了。

他会很快忘记我吗?也许吧。不过,我已经得到一些颇有价值的信息了:

>>他的直拨电话号码

>>他出发去度假的日期

>>度假的类型

>>他住在本地

>>他公司的名称

>>他在公司的头衔

>>他是近期搬过来的

当然,其中一些信息在我前期信息收集时就知道了,但是这次会面让我得到了更多信息。现在可以开始我的下一步攻击了,在他去度假的翌日,我拨通了他公司的直线电话,前台告诉我:“对不起,史密斯先生度假去了,请问需要留言吗?”

太好了。信息的真实性已被证实,我要开始计划的最后一步了。我穿上西装,带着价值9美元的名片来到他的公司。进去登记好之后,我告诉前台自己和史密斯先生约定10点钟会面。她答道:“史密斯先生在度假,你确定是今天吗?”

使用我的微表情技术(第5章会讨论到),我故作惊讶地问道:“什么?他的海上航游是在这周?我以为他下周才出发。”

刚刚的这句相当关键。为什么?

我想让前台相信我,相信这个会面是真实的。在我提到海上航游时,说明我和史密斯先生有过亲密的交谈,甚至于知道他的旅行计划。我流露出的无助和失落引发秘书想帮助我的冲动:“哦,亲爱的,真的很抱歉,要不我给他的助手打个电话吧?”

“哦,不。”我答道,“我只是想给他带来一些信息。这样吧,我把消息给你,在他回来时,你帮忙转告他。真的是太尴尬了,你可以不告诉他我来过吗?”

“我会保守秘密的。”

“谢谢你。真想快点离开这里,不过在我离开之前,可以用一下这里的洗手间吗?”通常情况下这种要求应该是不被允许的,但是借着刚才融洽的对话、我的无助以及她对我的一点同情,我还是有一些机会的——而且我确实成功了。

我把一个信封放在了洗手间的一个隔间里。信封上贴着“私人”的标签,信封里面是一个带有恶意攻击病毒的U盘。不仅是这里,我在大厅走廊旁的休息间里也放了一个,以增加成功的概率。希望有人会发现当中的一个,并好奇地将U盘插到他们的电脑里。

值得庆幸的是,这种方法百试不爽。可怕的是,如果没有那次咖啡店里看似无足轻重的对话,这次攻击不可能成功。

这个故事不仅是要说明微小的数据也会导致入侵事件,同时也展示了搜集数据的技巧。对待各种数据源必须充分理解、认真测试,直到你能熟练掌握每一种数据源及其收集方法。数据源有很多种,优秀的社会工程人员必须花费一定的时间来了解每一种的优缺点,以及利用它们的最佳方法。这也是下一节要讨论的内容。