3.1 远程攻击的步骤和手段
远程攻击的攻击对象是攻击者还无法控制的计算机,或者说,远程攻击是指专门攻击除攻击者自己计算机以外的计算机,无论被攻击的计算机与攻击者是处于同一子网还是千里之遥。攻击者的目标各不相同,有的是政府和军队,有的是银行,还有的是企业的信息中心,但他们攻击的过程及攻击的手段却有着一定的共同性。
3.1.1 远程攻击的一般步骤
进行网络攻击是一件步骤性很强的工作,也是很耗费时间的事情。有些攻击者为了攻破某个目标,会连续几十小时甚至上百小时对其进行攻击。不要以为黑客轻轻松松地就把一个网站的主页给换掉了,其实在这之前和这个过程中有许多事情要做。
1. 准备攻击
(1)确定攻击目的
在进行一次完整的攻击之前,首先要确定攻击要达到什么样的目的,即给对方造成什么样的后果。常见的攻击目的有破坏型和入侵型两种。
破坏型攻击指的只是破坏攻击目标,使其不能正常工作,而不能随意控制目标系统的运行。破坏型攻击的主要的手段是DOS(Denial Of Service)攻击,即拒绝服务攻击。DOS攻击有很多实现方法,一般是利用操作系统、应用软件或网络协议存在的漏洞,导致其不能正常工作。但有的DOS攻击不利用任何系统漏洞,只是发出超大量的服务请求,使攻击目标忙于应付,无法再接受正常的服务请求。
另一类常见的攻击目的是入侵型攻击。这种攻击是要获得一定的权限来达到控制攻击目标的目的。应该说,这种攻击比破坏型攻击更普遍,威胁性也更大。因为黑客一旦获得攻击目标的管理员权限就可以对此目标主机做任意动作,包括进行破坏性质的攻击。此类攻击一般也是利用目标主机操作系统、应用软件或网络协议存在的漏洞进行。当然还有另一种造成此种攻击的原因就是密码泄露,攻击者靠猜测或不停地试验来得到目标主机的密码,然后用和真正的管理员一样的方式对目标主机进行访问。
(2)收集信息
除了确定攻击目的之外,攻击前的最主要工作就是收集尽量多的关于攻击目标的信息。这些信息主要包括目标的操作系统类型及版本、目标提供哪些服务、各服务器程序的类型与版本及相关的社会信息。
要攻击一台机器,首先要确定它正在运行的操作系统是什么,因为对于不同类型的操作系统,其系统漏洞有很大区别,攻击的方法也完全不同,甚至同一种操作系统的不同版本的系统漏洞也是不同的。要确定一台机器的操作系统一般是靠经验,但有些机器的某些服务显示信息会泄露其操作系统的类型和版本。例如,通过使用软件GetOS可以获得这类信息,如图3.1所示。
图3.1 利用软件GetOS获取操作系统信息
那么根据经验就可以确定这个机器上运行的操作系统为Windows Server 2003,但这样确定操作系统类型是不准确的,因为有些网站管理员为了迷惑攻击者会故意更改显示信息,造成假象。
还有一种不是很有效的方法,诸如查询DNS的主机信息(不是很可靠)来看登记域名时的申请机器类型和操作系统类型,或者使用社会工程学的方法来获得,或者利用某些主机开放的SNMP公共组来查询。
另外一种相对比较准确的方法是利用网络操作系统里的TCP/IP堆栈作为特殊的“指纹”来确定系统的真正身份。因为不同的操作系统在网络底层协议的各种实现细节上略有不同,可以通过远程向目标发送特殊的信息包,然后通过返回的信息包来确定操作系统类型。还有就是检查返回包里包含的窗口长度,这项技术根据各个操作系统的不同的初始化窗口大小来唯一确定它们。利用这种技术进行信息收集的工具很多,比较著名的有Nmap,X-Scan等。
获知目标提供哪些服务及各服务程序的类型、版本同样非常重要,因为已知的漏洞一般都是针对某一服务的,这里所说的提供服务是指我们通常提到的端口。例如,一般TELNET在23端口,FTP在21端口,WWW在80端口,这只是一般情况,网站管理员完全可以按自己的意愿修改服务所监听的端口号。
另外需要获得的信息就是一些与计算机本身没有关系的社会信息,如该网站所属公司的名称、规模,网络管理员的生活习惯、电话号码等。这些信息看起来与攻击一个网站没有关系,实际上很多黑客都是利用了这类信息攻破网站的。
进行信息收集可以用手工进行,也可以利用工具来完成,完成信息收集的工具叫做扫描器。用扫描器收集信息的优点是速度快,可以一次对多个目标进行扫描。
这里介绍一款国内很优秀的由著名的网络安全组织“安全焦点”(http://www.xfocus.net)出品的扫描工具X-Scan,目前其最高版本为V3.3。它采用多线程方式对指定IP地址段(或单机)进行安全漏洞检测,支持插件功能。扫描内容包括远程服务类型、操作系统类型及版本、各种弱口令漏洞、后门、应用服务漏洞、网络设备漏洞、拒绝服务漏洞等20多个大类。图3.2为其操作界面。
图3.2 X-Scan的操作界面
2. 实施攻击
(1)获得权限
当收集到足够的信息之后,攻击者就开始实施攻击。破坏型攻击,只需要利用工具发动攻击即可。而入侵型攻击,往往要利用收集到的信息,找到其系统漏洞,然后利用该漏洞获取一定的权限。有时获得了一般用户的权限就足以达到修改主页等目的了,但作为一次完整的攻击必须要获得系统最高权限。
能够被攻击者所利用的漏洞不仅包括系统软件设计上的安全漏洞,也包括由于管理员配置不当而造成的漏洞。大多数攻击成功的范例还是利用了系统软件本身的漏洞。造成软件漏洞的主要原因在于编制该软件的程序员缺乏安全意识。当攻击者对软件进行非正常的调用请求时,会造成缓冲区溢出或对文件的非法访问。其中利用缓冲区溢出进行的攻击最为普遍,据统计80%以上成功的攻击都是利用了缓冲区溢出漏洞来获得非法权限的。
无论作为一个黑客还是一个网络管理员,都需要掌握尽量多的系统漏洞。黑客需要用它来完成攻击,而管理员需要根据不同的漏洞来实施不同的防御措施。最多、最新的漏洞信息可以在一些知名的黑客站点和网络安全站点中找到。
(2)扩大权限
系统漏洞分为远程漏洞和本地漏洞两种,远程漏洞是指黑客可以在别的机器上直接利用该漏洞进行攻击并获取一定的权限。这种漏洞的威胁性相当大,黑客的攻击一般都是从远程漏洞开始的。但是利用远程漏洞获取的不一定是最高权限,而往往只是一个普通用户的权限,也就没有办法达到攻击目的。这时就需要配合本地漏洞来扩大获得的权限,常常是扩大到系统管理员的权限。
只有获得了最高的管理员权限之后,才可以做诸如网络监听、消除痕迹之类的事情。要完成权限的扩大,不但可以利用已获得的权限在系统上执行利用本地漏洞的程序来得到,还可以放一些木马之类的欺骗程序来获取管理员密码。
3. 善后工作
(1)修改日志
如果攻击者完成攻击后立刻离开系统而不做任何善后工作,那么他的行踪将很快被细心的系统管理员发现,因为所有的网络操作系统一般都提供日志记录功能,会把系统上发生的动作记录下来。所以为了自身的隐蔽性,黑客一般都会把自己在日志中留下的痕迹抹掉。
要想了解黑客抹掉痕迹的方法,首先要了解常见的操作系统的日志结构、工作方式及存放位置。攻击者在获得系统最高管理员权限之后就可以随意修改系统上的文件了,包括日志文件,所以一般黑客想要隐藏自己的踪迹的话,就会对日志进行修改。最简单的方法当然就是删除日志文件了,但这样做虽然避免了真正的系统管理员根据IP追踪到自己,但也明确无误地告诉了管理员,系统已经被入侵了。所以最常用的办法是只对日志文件中有关自己的那一部分进行修改。
管理员想要避免日志系统被修改,应该采取一定的措施,例如,用打印机实时记录网络日志信息。但这样做也有弊端,黑客一旦了解到你的做法就会不停地向日志里写入无用的信息,使得打印机不停地打印日志,直到所有的纸用光为止。所以比较好的避免日志被修改的方法是把所有日志文件发送到一台比较安全的主机上,即使用Loghost。即使这样也不能完全避免日志被修改,因为黑客既然能攻入这台主机,也很可能攻入Loghost。
只修改日志是不够的,因为百密必有一疏,即使自认为修改了所有的日志,仍然可能会留下一些蛛丝马迹。例如,安装了某些后门程序,运行后也可能被管理员发现。所以黑客高手可以通过替换一些系统程序的方法来进一步隐藏踪迹。
(2)留下后门
一般黑客都会在攻入系统后为了下次再进入系统时方便而留下一个后门。后门程序一般是指那些绕过安全性控制而获取对程序或系统访问权的程序方法。在软件开发阶段,程序员常常会在软件内创建后门程序以便可以修改程序设计中的缺陷。但是,如果这些后门被其他人知道,或是在发布软件之前没有删除后门程序,那么它就成了安全风险,容易被黑客当成漏洞进行攻击。在这里,后门是指攻击者入侵之后为了以后能方便地进入该计算机而安装的一类软件,它强调的是隐蔽性。
3.1.2 远程攻击的主要手段
网络攻击的主要手段也是随着计算机及网络技术的发展而不断发展的,主要有缓冲区溢出、口令破解、网络侦听、拒绝服务攻击、欺骗攻击等。下面介绍几种特定类型的攻击。
1. 缓冲区溢出攻击
缓冲区溢出(Buffer Overflow)是一个非常普遍和严重的程序设计错误或漏洞(Bug),存在于各种操作系统、协议软件和应用软件中。缓冲区溢出攻击是指一种系统攻击的手段,通过向程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,使程序转而执行其他指令,以达到攻击的目的。
缓冲区是内存中存放数据的地方。在程序试图将数据放到计算机内存中的某一位置,但没有足够空间时会发生缓冲区溢出。缓冲区是程序运行时计算机内存中的一个连续的块,它保存了给定类型的数据。问题随着动态分配变量而出现,为了不用太多的内存,一个有动态分配变量的程序在程序运行时才决定给变量分配多少内存。如果程序在动态分配缓冲区放入太多的数据就会发生缓冲区溢出。一个缓冲区溢出应用程序使用这个溢出的数据将汇编语言代码放到计算机的内存中,通常是产生System权限的地方。单单的缓冲区溢出,并不会产生安全问题。只有将溢出送到能够以System权限运行命令的区域才行。这样,一个缓冲区溢出利用程序将能运行的指令放在了有System权限的内存中,从而一旦运行这些指令,就是以System权限控制了计算机。
缓冲区溢出攻击最常见的方法是通过使某个特殊程序的缓冲区溢出转而执行一个Shell,通过Shell的权限可以执行高级的命令。如果这个特殊程序具有System权限,攻击成功者就能获得一个具有System权限的Shell,就可以对系统为所欲为了。如图3.3所示为使用溢出程序后,得到的远程主机的一个Shell。
图3.3 溢出得到的远程主机的Shell
缓冲区溢出攻击的最终目的是为了获得系统的最高权限。
2. 口令破解
口令破解又称口令攻击,是指运用各种软件工具和安全漏洞,破解网络合法用户的口令或避开系统口令验证过程,然后冒充合法用户潜入网络系统,夺取系统的控制权。
口令破解是远程攻击的重要手段之一,口令是网络安全防护的第一道防线,绝大部分网络入侵事实上都要突破这一关。黑客攻击目标时常常把破译普通用户的口令作为攻击的开始。由于网络上的用户习惯于采用一些英语单词或自己的姓名作为口令,攻击者首先设法找到主机上的用户账号,然后就采用字典穷举法来破解密码。这种方法的原理是,通过一些程序自动地从计算机字典中取出一个单词,作为用户的口令输入给远端的主机,尝试进入系统。如果口令错误,则按顺序取出下一个单词进行下一次尝试,并且一直循环执行下去,直到找到正确的口令,或者字典的全部单词试完为止。因为整个过程由计算机程序来自动完成,在较短的时间内就可以把字典内的所有单词都试一遍。例如,LetMeIn是这类程序的典型代表,还有一些综合扫描工具也具备这个功能。
如果上述方法不能奏效,攻击者就会仔细寻找目标的薄弱环节和漏洞,伺机夺取目标中存放口令的文件,一旦取得了口令文件,黑客就会用专门破解加密算法的程序来破解口令。这类程序的典型代表是由@Stake公司出品的LC5。其运行后的界面如图3.4所示。
图3.4 LC5的运行界面
此外,攻击者还可以针对口令的传输进行攻击。在网络环境中,往往需要远程对用户进行身份认证,此时需要被验证方提供用户名和口令等认证信息,在验证程序将用户的输入通过网络传送给远程服务器的过程中,攻击者可能通过网络截获到相应数据,从而获取目标系统的账号和口令。此类攻击的典型代表主要有“网络钓鱼”攻击、嗅探攻击、键盘记录攻击、重放攻击等。
3. 网络侦听
网络侦听是指在计算机网络接口处截获网上计算机之间通信的数据。它常能轻易地获得用其他方法很难获得的信息,如用户口令、金融账号(信用卡号、账号、身份证号等)、敏感数据、低级协议信息(IP地址、路由信息、TCP套接字号)等。
网络侦听一般都采用Sniffer这种工具来进行,可以监视网络的状态、数据流动情况及网络上传输的信息。当信息以明文形式在网络上传输时,就可以使用网络监听方式来进行攻击了。将网络接口设置在监听模式,便可以将网上传输的源源不断的信息截获。黑客们常常用它来截获用户的口令。
由于数据在网络上是以帧为单位传输的,帧通过特定的称为网络驱动程序的软件进行成型,然后通过网卡发送到网线上,在网络上的所有计算机都可以通过网卡捕获到这些帧,一般情况下,如果不是属于自己的数据就放弃掉,如果是则存储并通知系统已经接收到数据。Sniffer就是根据这个原理来进行侦听的,它把网卡的属性设置为混杂(Promiscuous)模式,这时就可以接收在网络上传输的每一个信息包。基于Sniffer这样的模式,可以分析各种信息包并描述网络的结构和使用的机器,由于它接收任何一个在同一网段上传输的数据包,因此就存在着捕获密码、秘密文档等一些没有加密的各种信息的可能性。因此当一个黑客成功地攻陷了一台主机并拿到系统权限后,往往会在这台机器上安装Sniffer软件,对以太网设备上传送的数据包进行侦听,从而发现感兴趣的数据包。如果发现符合条件的包,就把它存到一个Log文件中去。通常设置的条件是包含字“usename”或“password”的包,这样的包里面常有黑客感兴趣的东西。
4. 拒绝服务攻击
拒绝服务攻击是一种简单的破坏型攻击,通常是利用TCP/IP协议的某个弱点,或者是系统及应用软件存在的某些漏洞,通过一系列动作,使目标主机(服务器)不能提供正常的网络服务,即阻止系统合法用户及时得到应得的服务或系统资源。因此,拒绝服务攻击又称为服务阻断攻击。拒绝服务攻击可降低网络系统服务和资源的可用性,已成为一种常用的主动式攻击方法。其攻击的对象是各种网络服务器,攻击的结果是使服务器降低或失去服务能力,严重时会使系统死机或网络瘫痪。但是,拒绝服务攻击并不会破坏目标网络系统数据的完整性或获得未经授权的访问权限,其目的只是干扰而非入侵和破坏系统。常用的拒绝服务攻击手段主要有服务端口攻击、电子邮件轰炸和分布式拒绝服务攻击等。
服务端口攻击属于服务请求过载攻击,是指不断地向目标主机的TCP/IP服务端口发出连接请求,使该端口来不及响应新的连接请求,从而不能提供正常的网络服务而崩溃。它相当于不停地打某人的电话,使其线路始终处于忙状态,以致连正常的电话也打不进去。
电子邮件轰炸实质上就是自动地、不停地向目标电子邮件信箱发送地址不详、信息量庞大、充满了乱码或根本没有意义的恶意电子邮件,一方面使目标电子邮件信箱挤爆,同时消耗目标电子邮件服务器大量的处理器时间,占用大量的网络带宽,导致网络阻塞,严重时甚至造成目标电子邮件服务器死机。
分布式拒绝服务攻击是目前破坏型网络攻击的主要表现形式之一,一般采用三层客户-服务器结构,这种结构常被称为僵尸网络(BotNet)。与其他分布式概念类似,在分布式拒绝服务攻击中,攻击者利用成千上万个被“控制”节点,向受害节点发动大规模的协同式拒绝服务攻击,同时用一股拒绝服务洪流冲击受害节点,使其因过载而崩溃。
5. 欺骗攻击
欺骗包括社会工程学的欺骗和技术欺骗,社会工程学利用受害者的心理弱点、本能反应、好奇心、信任、贪婪等进行欺骗和攻击,令人防不胜防。美国著名黑客凯文·米特尼克写了一本如何利用社会工程学进行网络攻击的书——《欺骗的艺术》,社会工程学并不等同于一般的欺骗,可以说即使是最警惕、最小心的人也难免遭受高明的社会工程学手段的伤害。
在这里主要介绍技术上的欺骗。欺骗攻击就是将一台计算机假冒为另一台被信任的计算机进行信息欺骗。欺骗可发生在TCP/IP网络的所有层次上,几乎所有的欺骗都破坏网络中计算机之间的信任关系。欺骗作为一种主动攻击,不是进攻的结果,而是进攻的手段,进攻的结果实际上就是信任关系的破坏。通过欺骗建立虚假的信任关系后,可破坏通信连接中正常的数据流,或者插入假数据,或者骗取对方的敏感数据。欺骗攻击的方法主要有IP欺骗、DNS欺骗和Web欺骗三种。
(1)IP欺骗是利用主机之间基于IP地址的信任关系来进行的,一个合法的TCP连接还需要有一个客户-服务器双方共享的唯一序列号作为标识和鉴别。初始序列号一般由随机数发生器产生,但问题出在很多操作系统在实现TCP连接初始序列号的方法中,所产生的序列号并不是真正随机的,而是一个具有一定规律、可猜测或计算的数字。这里简要介绍它的过程。首先假定已经找到攻击目标主机及被其信任的主机。攻击者为了进行IP欺骗,要做以下工作:使得被信任主机丧失工作能力(如通过拒绝服务攻击),同时采样目标主机发出的TCP序列号,猜测出它的数据序列号。然后伪装成被信任主机,同时建立起与目标主机基于地址验证的应用连接。如果成功,攻击者就可以放置一个系统后门,以后就可以按正常的方法再次登录该主机。
(2)DNS欺骗相对IP欺骗而言要简单一些,DNS(Domain Name Server)即域名服务器,网络中提供的各种服务都是基于TCP/IP协议的,要进行通信必须获得对方的IP地址,而这是通过DNS来实现的。可以说,DNS是互联网上其他服务的基础。DNS欺骗是这样一个过程:假定用户user1想要访问域名为sacrifice.com的网站,他会向DNS请求解析sacrifice.com,也就是向sacrifice.com的DNS询问sacrifice.com的IP地址。如果黑客冒充sacrifice.com的DNS给user1一个虚假的IP地址,那么user1就连接不上sacrifice.com,对于sacrifice.com而言,它遭到了DNS欺骗攻击,因为用户根本连接不上它的域名。
(3)Web欺骗是一种电子信息欺骗,攻击者在其中创造了整个Web世界的一个令人信服但完全是假的副本。假的Web看起来十分逼真,它拥有相同的网页和链接。然而,攻击者控制着假的Web站点,这样受攻击者浏览器和Web之间的所有网络信息完全被攻击者所截获,其工作原理就好像是一个过滤器。攻击者可以观察或修改任何从受攻击者到Web服务器的信息,同样地,也控制着从Web服务器至受攻击者的返回数据,攻击者能够监视受攻击者的网络信息,记录他们访问的网页和内容。当受攻击者填写完一个表单并发送后,这些数据将被传送到Web服务器,Web服务器将返回必要的信息,但攻击者完全可以截获并加以使用。这意味着攻击者可以获得用户的账户和密码。在得到必要的数据后,攻击者可以通过修改被攻击者和Web服务器之间任何一个方向上的数据,来进行某些破坏活动。