2.1 准备阶段
金融行业与交易、资金直接相关,金融系统的安全防御等级普遍较高,攻击者在启动攻击前会做好充分的准备工作,通常会对攻击的目标进行选择定位,收集并了解目标的相关信息,包括其组织架构、安全体系、资产及系统架构等信息。通过社会工程等技术手段描绘出目标弱点清单,编写或挖掘操作系统、数据库的零日恶意代码、溢出代码等,寻找路径跳板,进行预入侵,为攻击阶段提供有力素材。
2.1.1 情报收集
情报收集[4]是信息安全的基础,必须熟悉掌握各种情报收集手段,并从中整理提取出有价值的情报,历史上有很多因为情报收集失误而导致失败的案例,例如9·11事件、伊拉克战争等,都可以从中看到情报收集的影子。
在如今信息大爆炸的时代,情报收集工作可以说是攻防中最重要且最繁复的工作,各种数据及服务层出不穷,真正有价值的东西埋藏在大量无用数据之中,从而变得越来越隐秘。
既然情报收集如此重要,那么究竟什么是情报收集?情报收集一般有哪些内容?如何准确地收集到有价值的情报?下面将会阐述此类信息。
情报收集的本质是从目标处获取对需求存在价值的信息及线索。在情报收集工作中如果没有一套完整的体系,往往会漏掉很多有价值的信息。信息安全情报收集通常可划分为4个阶段,如图2-1所示:
图2-1 信息安全情报收集的4个阶段
1. 确定目标
当对一个攻击目标开展情报收集工作时,攻击者首先会勘定它的攻击范围,既有可能对目标单位进行广义的信息收集,也有可能只针对某个具体的信息资产进行信息收集。范围具体体现在目标信息资产中,其中包括资产目标地理位置、IP地址、域名、各类服务资源或工作人员社交信息[5]。
确认目标及需求是贯穿攻击者攻击思路的核心框架。所谓目标是指网络、服务器、数据库、应用系统、终端、相关管理人员这些载体;需求是指攻击者通过这些目标所能获取到的权限、信息、破坏行为。
银行网络及系统种类繁多,作为国之重器,其安全之重要性非一般的企业单位可以相提并论,在确认目标这个环节往往会耗费攻击者大量时间和精力。这里将大致从网络和应用系统的角度对银行目标进行划分。网络层面包括广域网骨干网络、机构总部局域网骨干网络、分支机构局域网骨干网络。这些骨干网络也是由网络设备、安全设备、前置中间件设备、后置中间件设备、计算机终端等基础单元组成。应用系统大致可以分为网上银行系统、重要支撑系统、重要交易系统、重要管理系统及其他运行关键业务或涉及客户身份、资产、交易记录等敏感信息的重要信息系统。
2. 制订计划
攻击者会对目标制订一个具体的收集计划,以时间为单位,规划每个时间段的收集任务。
3. 实施收集
这个阶段将会是情报收集阶段最繁复的一项,大约要占到70%的工作量。攻击者根据收集计划,灵活运用各类技术与社交手段,逐一进行信息的收集。
4. 分析处理
收集阶段结束后,进入分析处理阶段。攻击者将对收集到的数据进行分类挖掘,对有价值的情报进行提取。
在情报收集阶段,攻击者常用的情报收集工具有以下三种:互联网搜索引擎、whois查询以及端口扫描,下面将一一举例描述。
(1)互联网搜索引擎。谷歌互联网搜索引擎无疑是全球最强大的搜索引擎之一,除了可以搜索出日常所需之外,它还有令人意想不到的功能。在攻击者手中,它可以轻而易举地搜索出某些目标网站的漏洞,为攻击者完成情报收集任务。
(2)whois查询。whois(读作“whois”,非缩写)是用来查询域名的IP以及所有者等信息的传输协议。简单说,whois就是一个用来查询域名是否已经被注册,以及注册域名的详细信息的数据库。
通过使用whois命令,攻击者可以收集到非常丰富的有用信息,如域名注册人姓名、注册人E-mail,甚至是电话号、传真、注册机构、通信地址、邮编,注册有效时间、失效时间等。
(3)端口扫描。通常网络中的端口是和服务一一对应的,例如22、25、3389端口分别对应着SSH、SMTP、RDP服务。攻击者需要获取目标服务所对应的端口号,才能发起入侵攻击。为了获取到端口号,攻击者通常会使用端口扫描工具进行嗅探扫描。常用的端口扫描工具有很多,例如Nmap、Zenmap等,如图2-2所示,利用图形化的Zenmap端口扫描工具,成功收集到了目标系统的开放端口(443、22、80、21),为进一步入侵提供了有价值信息。
图2-2 图形化的Zenmap端口扫描工具(示意图)
5. 分析处理
收集阶段结束后,进入分析处理阶段。攻击者将对收集到的数据进行分类挖掘,对有价值的情报进行提取。主要包括分析相关信息与目标是直接关联还是间接关联?关联程度如何?目标与未来设置的跳板主机是否存在敌对或同盟关系?目标的网络防御处于何种级别?目标的主机群的防护等级如何?目标与其所信任的关联人员之间的通信关系等。
2.1.2 社会工程学
社会工程学(Social Engineering)是指“通过心理弱点、本能反应、好奇心、信任、贪婪等一些心理陷阱进行的诸如欺骗、伤害、信息盗取、利益谋取等对社会及人类带来危害的行为”。高明的社会工程学攻击者都有自己独有的社工体系,本书将其划分三个部分,已知信息准备、伪装获取未知信息和心理弱点分析[6]。
1. 已知信息准备
已知信息准备是社会工程学开始的基础。在进行攻击之前,攻击者会精心准备目标的公开信息,如目标行业信息、内部公开信息。众所周知,大多地区及行业都有自己的规则约定,比如某种产品售价都基本一致,如果刻意低价销售就容易遭到其他公司及人员的抵制打压。作为银行职员就必须要知道压缩贷款、反担保、关联企业等内部公开术语。了解这些规则约定对攻击者后续的情报收集具有不可忽视的作用。
2. 伪装获取未知信息
在准备好这些内外部可获取的公开信息后,接下来就是通过伪装来获取更加机密的信息。比如攻击者可能会冒充某银行内部人员,了解他们内部的术语、行业术语等,然后再自制一张企业名片或者员工卡,如此一来,一般人都会相信其是内部人员。任何社会工程学攻击者都会想办法让目标感觉自己是可信任的、友好的、可交流的。
3. 心理弱点分析
心理弱点分析是社会工程学的最重要部分,现阶段各企业金融机构都有自己的员工安全意识培训、安全演练等,相对以前来说已不太容易受骗了。所以攻击者会根据目标传送的信息来判断对方的性格、感觉类型、心理特点等,再通过某种方式打消对方的疑虑。
攻击者利用社会工程学进行攻击的目的是获取诸如账号、密码、密钥、ID、身份证号、电话名单、具有访问权限的名单、社会关系、非公开的网络资源信息等情报信息。利用社会工程学的手段一般有网络钓鱼、第三方冒名、物理环境渗透、反向社会工程等。
(1)网络钓鱼。网络钓鱼(Phishing,音同fishing)是通过仿造来自于银行或其他机构的邮件、短信等,诱使收信人主动给出敏感信息的一种攻击方式。网络钓鱼具有隐蔽性、低成本、传播范围广等特点,因此成为攻击者最常用的攻击工具之一。在网络钓鱼盛行的今天,攻击者进行的网络钓鱼一般可分类为以下三种:正规网站钓鱼、邮件钓鱼、短信钓鱼。
1)正规网站钓鱼。攻击者利用网站漏洞入侵网站后,将钓鱼网站源码嵌入至正规网站目录中,以此逃脱网盾等安全软件的检测。攻击者将此页面在网络上进行传播,并以此盗用正规网站流量、欺诈用户,导致用户遭受不必要的损失。
2)邮件钓鱼。邮件钓鱼是目前互联网中比较常见的钓鱼方式之一,很多公司组织及个人都遭遇过此类攻击。邮件钓鱼相对来说目标性较强,一般是攻击者进行精心准备后的一种社工形式。通常的邮件钓鱼可以通过普通的恶意钓鱼网站或者基于某个应用程序漏洞进行攻击,前者以获取用户信息为主,后者以获取用户设备权限为主。
3)短信钓鱼。短信钓鱼表现为攻击者通过恐吓、欺骗手段向受害者发送虚假信息、链接从而获取不正当利益的行为。攻击者通过伪基站等设备将短信发送号码伪装成亲朋好友、10086等官方服务号码,尝试向目标用户发送短信,以此诱使用户上当受骗,又或者是以威胁手段恐吓用户,从而获取不正当利益。
(2)第三方冒名。第三方冒名是指犯罪分子通过电话、网络和短信等方式,编造虚假信息,设置骗局,对受害人实施远程、非接触式诈骗,诱使受害人给犯罪分子打款或告知敏感信息的犯罪行为。在计算机应用程序中也存在类似漏洞,攻击者通过某种方式伪装成其他用户,从而获取其操作权限。
(3)物理环境渗透。物理环境渗透是一种简单直接且暴力的社工方式,其核心在于渗透进目标的可控安全边界,我们经常在电视、电影中看到主人公为了得到敌人的某个敏感信息,伪装潜入敌人内部,买通内部人员或通过高科技手段等方式到达目标的可控范围,从而一举突破堡垒取得成功的情节。这些情节不仅仅会在电视、电影中出现,在真实生活中也时有发生。
物理环境渗透的对象及方法一般有以下几种:
1)个人电脑。诸如经常无人看守、未设置密码或者使用弱口令、授权经由他人操作过的个人电脑。大多数时候,当用户忙于其他的事情,个人电脑通常不会带在身边,甚至有些还会放置在可以被其他人接触到的公共场所内;在工作期间,用户离开座位的时候往往会忘记锁屏;个人电脑出现问题后往往随意丢给陌生人维修。诸如此类的行为,用户可能会认为这没什么影响,但一旦别有用心的攻击者接触到电脑,只需要一个U盘,通过一次插拔或者其他更高明的手段,就能轻松控制电脑,获取到个人信息。
2)数据中心机房。诸如无严格的审批流程可以进入的、闲杂人员可以进入的、网络区域划分不严的数据中心机房。有些机构或企业的数据中心机房管理不到位、管理制度不完善、管理人员纪律松散以及管理水平低下等,都会给攻击者留下可乘之机。攻击者可利用各类身份伪装,随意进入到这些管理松散的数据中心机房中,部署后门程序、窃取数据,甚至肆意破坏,危害极大。
3)无线网。覆盖范围大、无线设备暴露的网络环境。有时候无线网的辐射范围广也不是一件好事。假如在一个涉密的网络环境中使用无线网络,范围辐射广,外部人员只需要密码便可随意接入网络,那么很可能造成严重的泄密事故。例如现在有很多企业员工在企业网环境中使用第三方的无线网接入软件,比如WiFi万能钥匙等,WiFi万能钥匙是一个共享性的WiFi软件,它将用户的无线网络密钥保存并上传至云端,共享给每一个使用WiFi万能钥匙的用户。攻击者可以使用这个软件轻而易举地接入某个敏感的内网环境中,这是非常危险的。
4)外置设备。诸如NFC以及ATM、摄像头等内联公共设施。如果信用卡或借记卡支持RFID无线支付功能,比如银联的云闪付或者万事达的PayPass,它的信息有可能会被一个擦身而过的恶意黑客读取到。正如前段时间被大众所关注的“隔窗盗刷ETC卡事件”,一名男子利用移动POS设备靠近一辆轿车的ETC卡所在位置,几秒钟后便完成了交易,打印出了消费小票。虽然该事件随后被各大银行相继辟谣,但辟谣的论点也仅仅是证明了ETC卡片的独特性,其不具备“闪付”功能。倘若攻击者利用此类案例中的手段,将目标定位在具有“闪付”功能的银行卡上,那么被盗刷的风险仍旧不可避免。
(4)反向社会工程。反向社会工程学是一种比较巧妙的攻击方式,它是指攻击者通过技术或非技术手段给目标网络或者系统制造故障,迫使目标系统维护人员相信问题的存在,从而攻击者可扮演“支持角色”套取所需要的情报信息。
反向社会工程学包括三个部分:暗中破坏、自我推销和进行帮助。攻击者首先是对目标网络系统进行暗中破坏,让目标网络出现明显的问题。然后攻击者伪装成“支持角色”来对网络进行维修,并顺理成章地从内部员工那里获得他真正需要的信息,而雇员根本不会意识到攻击者的真实身份。
2.1.3 技术试探
在攻击准备阶段,技术试探也是必不可少的,攻击者会通过技术手段侦听、扫描出目标系统存在的弱点以及突破口,建立目标弱点清单,识别出保护目标所设置的安全屏障。这一环节俗称“踩点”。
1. 主动探测
主动探测过程为脆弱性评估过程,其性质是攻击者利用系统及应用程序的已知漏洞对目标系统进行扫描,从而判断是否存在漏洞。通常情况下,主动探测会被系统管理员用来发现网络和主机中可能会被利用的薄弱点,从而想方设法对这些薄弱点进行修复,以加强网络和主机的安全性。但另一方面,攻击者也可以利用主动探测来探查目标网络和主机系统的入侵点。当然了,这也许并不都是坏事,攻击者的行为同样有利于加强网络和主机的安全性,因为漏洞是客观存在的,只是未被发现而已,而只要一个漏洞被攻击者发现并加以利用,那么人们最终也会发现该漏洞。
常见的主动探测有两种方式,即端口服务探测、业务系统漏洞探测。
主机及其应用程序探测常用的工具有Nessus、Hscan、X-scan等工具,Web应用程序探测主流工具有Appscan、Awvs、HPwebinspect、Burpsuite、安恒明鉴、bugscan、metasploit等。另外,目前网络上还涌现出一些商用的扫描探测工具。下面分别列举目前主流的两种类型的工具来加以说明。
Nessus是一个功能强大而又易于使用的远程安全扫描器。安全扫描器的功能是对指定网络进行安全检查,找出该网络是否存在安全漏洞。网络漏洞扫描器(Web Vulnerability Scanner,WVS)是一个自动化的Web应用程序安全测试工具。它可以扫描任何可通过Web浏览器访问的和遵循HTTP、HTTPS规则的Web站点和Web应用程序。攻击者经常会利用主动探测对目标金融系统进行泛公式化扫描,扫描会针对系统的端口、服务以及应用层漏洞,进行诸如端口扫描、SNMP探查、DNS递归、目录枚举、暴力破解和旗标掠夺等各式的主动探测。这样的探测扫描可以借助应用程序自动完成,因此几乎是每时每刻都在发生,在企业的边界防火墙上经常可以看到这类的告警信息。虽然攻击者不能直接入侵或是获取什么权限,但这类探测在获取情报的准备阶段通常都会卓有成效。
2. 识别防御机制
经过多年的建设,金融机构已经建立起一套符合监管规范要求的信息安全架构,涵盖多重攻击防御机制。攻击者在实施攻击行动前会充分侦测、识别这些防御机制的存在与特点,尽可能绕开这些防御机制,以便在行动时不被阻碍。常见的防御机制有网络防御机制、系统防御机制和应用防御机制。
(1)网络防御机制。
1)识别网络线路、带宽。当攻击者知道目标网络的线路后可以通过多线对网络进行攻击,在知道带宽的情况下可以有效准备攻击资源,比如要进行DDoS攻击时,可精确准备攻击流量。
2)识别网络边界。有效识别网络边界有助于攻击者确定攻击的入口点,从而进行下一步攻击。
3)识别访问控制机制。攻击者会试图摸清整个网络中的用户访问机制,比如每个网络之间的访问控制列表、VLAN划分情况、VPN用户列表等,都将有助于攻击者后续扩散获取整个内网权限。
4)识别网络设备部署机制。攻击者想要在内网进行渗透,必须了解当前网络中的路由器、交换机等网络设备的部署情况,当攻击者在网络中进行攻击时,此网络若已经被攻陷,需要进入其他的内部网络时就必须在路由器或者三层交换机中配置其他网络访问路径。
5)识别安全设备。安全设备策略的有效识别能够大大提高攻击者攻击的成功率,很多安全设备将攻击者的攻击流量阻断,大大降低了攻击效率,这时攻击者就会对安全设备策略进行识别或者绕过,比如查询安全设备厂商及版本、默认安全策略、安全设备相关漏洞等。
(2)系统防御机制。
- 识别操作系统版本、管理员用户名、系统登录方式、系统登录失败次数限制
- 识别操作系统是否设置了指定IP登录
- 识别操作系统开放的端口及服务
- 识别操作系统补丁安装情况
(3)应用防御机制。
- 识别用户名、密码登录尝试登录次数(针对IP还是针对用户名)
- 识别错误信息
- 识别应用程序性能
- 识别应用程序业务逻辑
3. 绘制弱点清单
经过前期的信息收集、主动性探测与防御机制识别后,可以得到一部分敏感信息,攻击者便会在文档中对目标系统绘制出一张弱点清单,后续攻击将根据绘制的清单进行放大,清单信息可能包括以下几类:
(1)网络清单。包括网络拓扑、网络设备、安全设备、版本信息、地理位置信息、错误信息、管理人员信息、漏洞信息。
(2)服务器清单。包括操作系统版本信息、补丁信息、端口及服务信息、管理人员信息、IP地址、漏洞信息。
(3)应用程序清单。包括应用程序版本信息、补丁信息、漏洞信息、用户信息、业务逻辑信息、管理人员信息。
(4)人员清单。包括目标人员基本信息、目标人员性格特点。
2.1.4 预入侵
当攻击情报与技术试探结果全部汇总完毕,绘制出目标系统的弱点清单后,攻击者便会开始入侵行动。攻击者通常会针对目标系统的系统、应用等细节信息开发木马工具,或是寻找针对性的已知漏洞或未公开漏洞,例如零日漏洞。利用上述工具和攻击方法,攻击者可以针对已发现弱点进行一系列入侵尝试。
1. 零日漏洞
零日漏洞(Zero-day/0-day Vulnerability,0day),从信息安全意义上理解,指的是在系统开发商知晓并发布修复补丁之前的漏洞。此前这类零日漏洞经常被用于软件和游戏的破解之中,基本属于非营利应用。随着信息的飞速增值,越来越多的零日漏洞变成了“市场”的货品。攻击者可以自行挖掘零日漏洞,也可以在这些“市场”中购买到适合的零日漏洞。
背后的危险才是真正的危险,零日漏洞由于没有公布,系统的开发商不会及时修复,安全防御体系不能识别,因此对目标系统的入侵将是最有效的手段。一些未公布的操作系统零日漏洞价值巨大,常常被军方作为网络作战中的撒手锏武器而进行极高级别的保密。
2. Fuzz技术
攻击者挖掘零日漏洞时,常用的技术就是Fuzzing。模糊测试(Fuzz Testing)是一类安全性测试的方法。模糊测试是一种介于完全的手工渗透测试与完全的自动化测试之间的安全性测试类型。它充分利用了机器的能力:随机生成和发送数据;同时也尝试将安全专家在安全性方面的经验引入进来。一般模糊测试的流程如图2-3所示。
图2-3 一般模糊测试的流程
银行业使用的部分软件与IT通用软件有一定区别,挖掘漏洞者较为稀少,故而公布的漏洞较少。但是攻击者一旦获得银行使用的软件C/S端,可以搭建响应的环境,挖掘银行系统的零日漏洞,危害非常巨大。
假设攻击者要测试的是一个C/S架构的银行使用的服务端程序,此应用运行在Linux平台上名叫bankserver。攻击者可以知道客户端和bankserver之间使用TCP协议进行通信。在这种情况下,攻击者可以尝试以下两种方式找到应用系统中可能的漏洞。
传统办法:如果有bankserver的源代码,通过代码审计的静态方法可以发现漏洞。可是如果没有源代码,那只能采用逆向一个位于TCP/IP协议栈中工程反编译出源代码,再使用代码审计的方法去发现漏洞。可是,当前银行使用的系统非常复杂,通过阅读代码的方式发现漏洞的工作量非常大,很难在短时间内发现漏洞。
Fuzz技术:采用Fuzz技术就不一样了,攻击者只需要抓取网络通信的数据包,对数据包的网络协议的格式定义进行分析,修改部分字段重放给服务端来尝试发现bankserver服务端漏洞。由于这种模糊测试的工作量较大,人工手工触发漏洞的概率非常低,因此攻击者可以写出自动化Fuzz测试工具,由程序自动生成测试样本,对服务端bankserver进行模糊测试,攻击者只要测试是否可以让服务端崩溃即可找到零日漏洞。模糊测试使用的测试数据需要攻击者有一定的经验,用最为快速的方式找到漏洞。
常见的Fuzz工具包括:
- 网络协议Fuzz:backFuzz
- Web应用漏洞Fuzz:FuzzDB、Sulley、teenage-mutant-ninja-turtles
- PHP Fuzz:PHP Fuzzer
- XSS Fuzz:Xenotix
- 动态浏览器Fuzz:X-Fuzzer
- 应用程序Fuzz:Basic Fuzzing Framework
- Android Fuzz:Monkey
Fuzz测试示例(见图2-4):
从执行过程来说,模糊测试的执行过程非常简单。backFuzz是一款在blackhat上面发布的Fuzz测试工具,代码使用python语言编写,非常容易使用。以backFuzz为例:
(1)使用backFuzz以随机或是半随机的方式生成大量超长数据。例如在FTP测试中,可以设定登录时USER长度为随机方式生成,当USER长度超长时会触发FTP服务器崩溃。
(2)backFuzz将生成的数据发送给被测试的服务端。
(3)backFuzz检测被测服务端的状态是否有异常。
图2-4 Fuzz测试示例
(4)根据被测服务端的状态异常来判断是否存在漏洞。例如对HTTP服务器进行Fuzz测试时,如图2-5所示,对HTTP协议中的HEAD、OPTIONS、PUT、HOST等字段进行随机测试,当HOST字段超长的情况下,会导致HTTP服务器崩溃,我们如果检测到HTTP服务器崩溃,那么就说明Fuzz的payload是可以成功触发漏洞的。
图2-5 对HTTP协议中的字段进行随机测试
3. 设计攻击路径
攻击路径是指在目标系统上存在的所有威胁弱点的概念图,又称攻击树。攻击树中包含所有可能的攻击方法,以试图成功获取目标系统弱点。攻击者会根据攻击树进行预入侵测试,试探并分析出攻击树中每一个节点上标注的弱点的有效性,进行筛选过滤,选择出最佳攻击路径,实施攻击。
攻击路径设计的好坏很大程度上能够决定攻击是否能够成功并且高效,在基于情报信息及弱点清单绘制后,反击者根据相关弱点进行攻击路径规划,如表2-1所示。
表2-1 根据弱点信息进行的攻击路径规划