查看原文
其他

收藏 | 一文读懂:网络攻击

计算机与网络安全 计算机与网络安全 2022-06-01

一次性进群,长期免费索取教程,没有付费教程。

教程列表见微信公众号底部菜单

进微信群回复公众号:微信群;QQ群:460500587



微信公众号:计算机与网络安全

ID:Computer-network

网络攻击指的是破坏网络系统运行的安全、信息内容的安全、信息通信与传播安全的行为。通常网络攻击行为破坏的目标是计算机与网络运行的可靠性、可用性和互操作性,在网络中传输、交换和存储信息的机密性、完整性和真实性,信息传播及内容的不可抵赖性、可核查性,信息传递的可控性等。


一、网络攻击概述


(一)网络攻击的定义


计算机网络的发展使信息共享与信息传播日益广泛与深入,但是,企业的信息在公共网络上传输,可能会被非法窃听、截取、篡改或破坏而造成不可估量的损失。通常意义上的网络安全是指网络信息系统的硬件、软件及其系统中的数据受到保护,不因偶然的或者恶意的原因而遭到破坏、更改、泄露,系统能连续可靠地运行,服务不中断。实际上,除了以上方面外,网络安全还包括了在网络环境下能够识别和消除不安全因素的能力。


20世纪90年代,网络攻击还仅限于破解口令和利用操作系统已知漏洞等有限的几种方法,目前,网络攻击技术已经随着计算机和网络技术的发展逐步成为一门完整的科学,它囊括了信息收集拒绝服务、密码及口令破解、非法获取及提升权限、网络窃听、漏洞扫描及利用以及攻击痕迹清除等各项技术。围绕计算机网络和系统安全问题进行的网络攻击与防范也受到了人们的广泛重视。


近年来,网络攻击行为的几点变化需要特别的警惕。首先,攻击技术手段在快速改变,攻击工具更加成熟,攻击工具已经发展到可以通过升级或更换工具的一部分迅速变化自身,进而发动迅速变化的攻击,且在每一次攻击中会出现多种不同形态的攻击工具;其次,安全漏洞被利用的速度越来越快,新发现的各种系统与网络安全漏洞每年都要增加一倍,每年都会发现安全漏洞的新类型,黑客经常能够抢在厂商修补这些漏洞前发现这些漏洞并发起攻击,令人防不胜防;再次,有组织的攻击越来越多,技术交流不断,网络攻击已经从个人的单独行为到有组织的技术交流、培训、协作;最后,攻击行为越来越来越隐蔽,攻击的数量不断增加,破坏效果越来越大,由于用户越来越多地依赖计算机网络提供各种服务,完成日常业务,黑客攻击网络基础设施造成的破坏影响越来越大。


网络攻击的这种发展变化趋势,使各个单位的网络信息安全面临越来越大的风险。只有加深对网络攻击技术的了解,才能尽早采取相应的防护措施。本文从具体的原理和技术分析出发,介绍目前流行在互联网的各种攻击方法和攻击软件。


(二)网络攻击原因解析


造成网络攻击的原因主要有四点:信息系统自身安全的脆弱性、操作系统与应用程序漏洞、安全管理问题、黑色产业链利益诱惑。


1、信息系统自身安全的脆弱性


信息系统脆弱性主要是指信息系统的硬件资源、通信资源、软件及信息资源等,因可预见或不可预见甚至恶意的原因而可能导致系统受到破坏、更改、泄露和功能失效,从而使系统处于异常状态甚至崩溃瘫痪等。通常,信息系统自身的安全脆弱性主要包括硬件组件的安全隐患、软件组件的安全隐患、网络和通信协议的安全隐患。


信息系统的硬件组件安全隐患多源于设计方面的缺陷,主要表现为物理安全方面的问题。硬件组件的安全隐患除了在管理上强化人工弥补措施外,采用软件程序的方法见效不大,一般只能通过在设计、选购硬件时,尽可能地考虑周全,以减少或消除硬件组件的安全隐患。


信息系统的软件组件安全隐患来源于软件设计和软件工程实施中遗留的问题,包括软件设计中的疏忽、软件设计中不必要的功能冗余、软件设计没有按信息系统安全等级要求进行模块化设计、软件工程实现中造成的软件系统内部逻辑混乱等。软件组件安全隐患经常会被利用,导致系统受到破坏或状态异常。


网络和通信协议的安全隐患主要来源于通信协议设计的不合理或对安全问题缺乏考虑。例如,TCP/IP簇是目前使用最广泛的网络通信协议,但已经暴露出许多安全问题,包括TCP序列猜测、路由协议缺陷、数据传输加密问题等。导致TCP/IP簇脆弱性的原因,主要是TCP/IP栈最初设计的运行环境Internet是假设相互信任的,其设计原则简单、可扩展、尽力而为,只考虑互联互通和资源共享问题,未考虑也无法兼顾解决网络中的安全问题,由于基于TCP/IP的Internet是在可信任网络环境中开发出来的成果,所以,针对TCP/IP的设计本身,基本未考虑安全问题,也没有考虑提供人们所需的安全性和保密性。


2、操作系统与应用程序漏洞


漏洞是一个抽象的概念,指的是可以导致系统运行不正常的关键脆弱点。在传统的科学领域和工程实践中,分析复杂系统的漏洞(又称脆弱性分析)已经拥有很长的历史。例如,航空业从飞机事故记录中提取信息,对这些信息进行分析研究,从中发现规律,确定漏洞所在的位置,并把发现的漏洞信息用于产品系统的改进之中。可见,对漏洞的研究和挖掘并非是网络安全学科的独有,对于所有人工开发的复杂系统,都会存在一定的漏洞


操作系统是用户和硬件设备的中间层,操作系统一般都自带一些应用程序或者安装一些其他厂商的软件工具。操作系统或应用软件在程序实现时的错误,往往会给系统带来漏洞。而漏洞一旦被攻击者发现,就可以被攻击者用来在未授权的情况下随意访问数据或破坏系统,从而危害计算机系统安全。


漏洞并不可怕,可怕的是不知道漏洞,或者知道漏洞也修补不了。自2000年以来,漏洞数量急剧增长,每年发现的漏洞数量都在几千的数量级,并且不断增长。然而,多种原因导致漏洞修复的周期较长、进程缓慢,发现却来不及修补的漏洞就成为了存量漏洞。日益增多的存量漏洞和每日新增漏洞已经成为基础信息网络和重要信息系统的主要安全隐患。


除了日益增多的漏洞之外,目前,漏洞修复中面临的困境还有:无法确定哪些机器没有安装漏洞补丁;知道哪些机器有漏洞但是找不到机器在哪里;甚至还有的单位由于机器太多,完全管理不过来,对漏洞放任自流。


3、安全管理问题


俗话说“三分技术,七分管理”,很多情况下的网络安全问题主要是由管理薄弱所引起。主要表现如下。


在制度层面上,有的组织机构相关规定不够健全,管理策略不完善,管理上权责不分,规章制度有漏洞或者可操作性不强,导致相关规定成为一纸空文。


在人员层面上,有的单位管理人员素质低下,用户安全意识淡薄,缺乏保密意识,系统密码随意传播,出现问题时相互推卸责任。


在管理层面上,有的单位管理上不够严格,缺乏培训意识;只注重安全产品和安全设备的投入,忽略了对设备的正确管理、维护、跟踪和审核,安全设备发挥不出应有的效果。


4、黑色产业链利益诱惑


网络攻击的实施者主要是黑客黑客一词源于英语动词 hack,意为“劈、砍”,引申为“干了件漂亮事”。在早期的计算机俚语中,“黑客”特指手法巧妙、技术高明的电脑高手,他们通常具有硬件和软件的高级知识,并有能力通过创新的方法剖析系统,在精神上注重对技术的渴求和对自由的渴求。绝大部分的黑客并不是以破坏者的形象出现。通常国外称以“创新者”形象出现的黑客为“白帽子”,他们善于打破常规,通过精研技术和设计新系统来改变世界、改变生活,勇于创新是他们的标签。“白帽子”与那些进行恶意破坏、随意散播病毒或充当商业间谍的“黑帽子”形成了鲜明的对比。介于两者之间的是俗称“灰帽子”的破解者黑客,他们喜欢展现自我,通过破解已有系统显示自己在技术能力上的过人之处。“灰帽子”通过发现漏洞来实现突破系统边界和限制的能力在技术上是中性的,但如果这种技术能力被恶意的人用金钱所收买,则会造成非常严重的问题。


近几年,网络黑色产业链已经从过去的黑客攻击模式转化成为犯罪分子的敛财工具和商业竞争手段,呈现出明显的集团化、产业化趋势。通过盗取多个网站数据库,获取网民重要的个人信息和银行卡资料已成为黑产人员的惯用招数。另外,网络黑色产业链人员更倾向于对手机进行攻击,这是因为手机与用户的关系更为紧密,里面所存储的重要信息更多。


随着大量的网民信息被盗取和非法贩卖,越来越多的网络犯罪分子倾向于在掌握网民个人信息后,以冒充熟人或博取同情等精准式诈骗场景对受害人进行欺诈。这种犯罪方式通常比传统的盗号、敲诈、贩卖病毒等方式所获得的利益更大,造成的危害也更加严重。


(三)网络攻击防护措施


针对层出不穷的网络攻击手段,采用一些被实践证明为行之有效的防护措施是十分重要的。


对个人用户而言,最常见的防护措施就是安装杀毒软件,并做到定期升级和杀毒。定期升级操作系统和应用软件或打补丁也是非常重要的习惯,可以帮助个人用户堵住尽可能多的漏洞。养成定期备份系统或重要文件的习惯和上网时不轻易点开别人发来的链接也是非常重要的防护手段。很多人并不重视这些习惯的养成,研究表明,好的习惯可以用最小的代价避免被攻击的危险。


加密重要的文件也是非常有效的防护措施。对于很多黑客来说,实施网络攻击的目的就是为了获得用户的重要文件,如果这些重要的文件能通过比较强的加密方式(如很长的安全口令、对称密钥加密等)被保护起来,可以大大降低被攻击后造成的损失。


安装防火墙也是非常重要的避免被黑客攻击的防护手段,通过防火墙过滤进出网络的数据,可以对进出网络的访问行为进行控制和阻断,封堵某些禁止的业务。通过一些限制规则,可以令用户只能访问到某些特定的网络资源,如WWW服务、FTP服务、TELNET服务等,从而避免接触到不安全网络资源的可能。另外,防火墙本身具有较强的抗攻击能力,可以作为一个比较好的防护外壳。


对单位而言,除了以上针对个人用户的防护手段以外,还应该制定完善的安全管理制度,采用访问控制措施保护数据,对于重要的机密数据还需要采用加密措施进行保护,并定时进行数据的备份与恢复。


另外一个很重要的工作就是进行风险评估,识别风险,并采取步骤降低风险到可接受范围。采取风险评估措施的目的是防止或降低破坏行为发生的可能性,以及降低或限制系统破坏后的后续威胁到一个可以接受的范围。比如,企业在进行风险评估的过程中,需要对资产、面临的安全威胁、目前的弱点、造成的风险和最坏的影响进行逐一的罗列。如果经过风险评估,认为最终的影响结果是“服务中断20 min”,并且该影响在企业可以接受的范围之内,则无需进行进一步的风险管理措施;如果经过风险评估,认为产生的最坏影响是“企业客户数据被窃取”或“导致企业停业一周”,并且该影响在企业可以接受的范围之外,则必须进行风险管理措施,采取步骤降低风险。

二、攻击的一般流程


(一)准备阶段


1、确定攻击目标


攻击者在进行一次完整的攻击之前,首先要确定攻击要达到的目的,即给受侵者造成什么样的后果。


常见的攻击目的有破坏型和入侵型2种。破坏型攻击是指只破坏攻击目标,使之不能正常工作,而不能随意控制目标上的系统运行;入侵型攻击要获得一定的权限才能达到控制攻击目标的目的,应该说这种攻击比破坏型攻击更普遍,威胁性也更大,因为攻击者一旦掌握了一定的权限就可以对目标做任何动作,包括破坏性质的攻击。


2、信息收集


需要收集的信息主要包括攻击目标的操作系统类型及版本、相关软件的类型、版本及相关的社会信息等。收集目标系统相关信息所需要用到的协议和工具包括Whois协议、Finger协议、SNMP、Ping程序、Trace Route、Tracert、X-firewalk程序等。例如,选定192.168.0.101这台主机为攻击目标,使用ping命令可以探测目标主机是否连接在Internet中。


3、服务分析


服务分析是指探测目标主机所提供的服务、相应端口是否开放、各服务所使用的软件版本类型,通常可以利用Telnet、haktek等工具或借助Super Scan、Nmap等工具的端口扫描或服务扫描功能。例如,在安装了 Nmap 工具的机器上,可以在命令行中输入:nmap-s V 192.168.209.148,然后回车。返回的结果会告知,在192.168.209.148这台主机上运行了哪些服务以及相应的服务软件版本类型。


4、系统分析


系统分析是确定目标主机采用何种操作系统。例如,在安装了Nmap工具的机器上,通过使用-O选项可以使用Nmap包含的OS Detection功能。


5、漏洞分析


漏洞分析是分析确认目标主机中可以被利用的漏洞。由于对漏洞的手动分析过程复杂、技术含量高、效率较低,因此,通常都是借助软件自动分析,这样需要的人为干预过程少、效率高。常用Nessus、X-Scan等综合型漏洞检测工具或e Eye等专用型漏洞检测工具。


(二)实施阶段


作为破坏性攻击,可以利用工具发动攻击即可。


作为入侵性攻击,往往需要利用收集到的信息找到系统漏洞,然后利用漏洞获取尽可能高的权限。


在攻击的实施阶段,需要进行的操作主要如下。


1、预攻击探测:攻击者需要通过预攻击探测,为进一步入侵提供有用信息,包括根据已经获得的可能有漏洞的服务等信息,判断最简便的攻击方式。


2、口令破解与攻击提升权限:攻击者通常选择最简方式入侵,首先获取系统一定权限,然后逐步尝试提升为最高权限。


3、可供实施攻击的技术方法主要包括缓冲区溢出拒绝服务后门木马病毒等。这些方法各有所长,攻击者需要根据自己的目标进行选择。


(三)善后阶段


在善后阶段,攻击者的主要工作包括2个方面:留下后门和清除入侵脚印。


留下后门是为了入侵成功后攻击者还能长时间地保留和巩固他对系统的控制权。通常情况下,较高明的攻击者还会安装多个不同类型的系统后门,以确保再次访问时不会被拒之门外。


清除入侵脚印是攻击者为了自身的隐蔽性而必须进行的善后工作。由于攻击者在获得系统最高管理员权限之后就可以任意修改系统上的文件,所以,一般黑客如果想隐匿自己的踪迹,最简单的方法就是删除日志文件。但这也准确无误地告诉了管理员系统已经被入侵,高明的攻击者更常用的办法是只对日志文件中有关自己的那部分做修改,关于修改方法的细节根据不同的操作系统有所区别,网络上有许多此类功能的程序。


三、攻击的技术方法


(一)端口扫描


端口扫描是对网络信息搜集和判断的开始,是实施网络攻击必不可少的一个步骤。攻击者可以通过端口扫描了解从哪里可探寻到攻击弱点。通常,人工的端口扫描是向每个端口发送消息,一次只发送一个消息,根据接收到的回应类型表示该端口是否在使用并且由此探寻弱点。但这种方式比较慢,为此有黑客编写了专门的扫描器软件,使用扫描器可以自动检测远程或本地主机的安全性弱点。


需要看到,端口扫描使用的网络扫描器是一把双刃剑,既可以作为安全评估工具,是系统管理员保障系统安全的有效工具;同时也是网络漏洞的扫描器,是网络入侵者收集信息的重要手段。扫描器的重要性在于把繁琐的安全检测,通过程序自动完成,这不仅减轻了网络管理员的工作,而且也缩短了检测时间。同时,扫描器也是一种网络安全性评估软件,可以快速、深入地对目标网络进行安全评估。网络安全扫描技术与防火墙、安全监控系统互相配合能够为网络提供很高的安全性。


网络扫描器的主要功能包括扫描目标主机并识别其工作状态(开机/关机)、识别目标主机端口的状态(监听/关闭)、识别目标主机操作系统的类型和版本、识别目标主机服务程序的类型和版本、分析目标主机、目标网络的漏洞,最终通过集合以上信息,生成扫描结果报告。对攻击者来说,根据扫描结果报告,即可了解系统软、硬件是否存在安全方面的脆弱性,是否存在安全漏洞可供利用进行入侵或未经授权获得访问权限,进而实施信息篡改、拒绝服务或造成系统崩溃。对于系统管理员来说,通过查看扫描结果报告可以对计算机网络系统或网络设备进行安全相关的检测,以找出安全隐患和可能被黑客利用的漏洞


一个完整的网络扫描过程分为3个阶段:第一阶段是发现目标主机或网络;第二阶段是发现目标后进一步搜集目标信息,包括操作系统类型、运行的服务以及服务软件的版本等,如果目标是一个网络,还可以进一步发现该网络的拓扑结构、路由设备以及各主机的信息;第三阶段则根据收集到的信息判断或者进一步测试系统是否存在安全漏洞


网络扫描的不同阶段,根据扫描的目标不同,通常会采用不同的扫描技术,如Ping扫描主要用于扫描的第一阶段,用于识别系统是否活动;OS探测、穿透防火墙探测、端口扫描等主要用于扫描第二阶段,OS探测是对目标主机运行的OS进行识别,穿透防火墙探测用于获取被防火墙保护的网络信息,端口扫描是通过与目标系统的TCP/IP端口连接,查看该系统处于监听或运行状态的服务;漏洞扫描技术主要用于安全扫描的第三阶段,通常是在端口扫描的基础上,检测出目标系统存在的安全漏洞


1、Ping扫描技术


Ping扫描是发现目标主机并识别系统是否活动的主要技术手段,常用的PING命令使用的是ICMP echo数据分组,因此也称为ICMP echo扫描。除了ICMP echo扫描以外,其他可供扫描的方法包括ICMP Sweep扫描、Broadcast ICMP扫描、Non-Echo ICMP扫描等。


ICMP echo扫描的实现原理是Ping命令的实现机制,通过向目标主机发送ICMP Echo Request(type 8)数据分组,等待回复的ICMP Echo Reply分组(type 0)。如果能收到,则表明目标系统可达;否则表明目标系统已经不可达或发送的分组被对方的设备过滤掉。这种手段在判断在网络上主机是否开机时非常简单有效,而且在安装了TCP/IP协议的系统上都可使用。ICMP echo扫描的缺点在于很容易被防火墙限制,并且每次只能探测一个目标。


为了同时探测多个目标主机,可以通过并行发送的方法,以提高探测效率,这种使用ICMP ECHO轮询多个主机的方法称为ICMP Sweep扫描(或者Ping Sweep)。对于小的或者中等网络使用这种方法来探测主机是一种比较可接受的行为,但对于一些大的网络,这种方法就显的比较慢,原因是 Ping 在处理下一个之前将会等待正在探测主机的回应。扫描工具Nmap实现了ICMP sweep的功能。


还有一种进行大范围探测的方法,Broadcast ICMP扫描,该方法的实现原理是将ICMP请求分组的目标地址设为广播地址或网络地址,则可以探测广播域或整个网络范围内的主机。但是该方法的缺点在于只适合于UNIX/Linux系统,Windows 会忽略这种请求分组;并且这种扫描方式容易引起广播风暴。


除了以上基于ICMP Echo的扫描方式,一些其他的ICMP类型分组也可以用于对主机或网络设备的探测,被统称为Non-Echo ICMP扫描,如Stamp Request (Type 13)和它对应的应答Reply (Type 14)、Information Request (Type 15)和它对应的应答Reply (Type 16)、Address Mask Request (Type 17) 和它对应的应答Reply (Type 18)。由于不同操作系统对这些类型分组的反应是不一样的,因此,可以通过发送不同的类型分组,来辨别远程主机的操作系统及其版本。某些扫描器程序如XProbe可以利用发送4个数据分组来辨别一个操作系统,这就使基于ICMP的探测过程可以非常快速。


2、穿透防火墙探测


ICMP echo扫描的缺点在于很容易被防火墙限制,防火墙和其他网络过滤设备的存在常常导致传统的探测手段无效。为了突破这种限制,必须采用一些非常规手段,利用ICMP提供网络间传送错误信息的手段,往往可以更有效地达到目的。这些传送错误信息的手段主要包括设置异常的IP分组头、在IP头中设置无效的字段值、错误的数据分片、通过超长分组探测内部路由器、反向映射探测等。


设置异常的IP分组头是指向目标主机发送分组头错误的IP分组,目标主机或过滤设备会反馈ICMP Parameter Problem Error信息,常见的伪造错误字段为Header Length字段和IP Options字段。由于不同厂家的路由器操作系统对这些错误的处理方式不同,返回的结果也不同,如果结合其他手段,可以初步判断目标主机的类型和网络过滤设备的ACL。


在向目标主机发送的 IP 分组中填充错误的字段值,目标主机或过滤设备会反馈 ICMP Destination Unreachable,这种方法同样可以探测目标主机和网络设备。


当目标主机接收到错误的数据分片(如某些分片丢失),并且在规定的时间间隔内得不到更正时,将丢弃这些错误数据分组,并向发送主机反馈ICMP Fragment Reassembly Time Exceeded错误分组,利用这种方法同样可以探测目标主机和网络设备。


可以构造超长分组探测内部路由器,若构造的数据分组长度超过目标系统所在路由器的路径最大传输单元PMTU且设置禁止分片标志,该路由器会反馈一个差错分组,其内容表示“需要分片但是设置了不分片标志位”,从而可以获得目标系统的网络拓扑结构。


如果目标主机是在防火墙内部,可以利用反向探测技术探测被过滤设备或防火墙保护的网络和主机,利用目标系统的路由设备进行有效的探测。例如,可以构造可能的内部IP地址列表,并向这些地址发送数据分组。当对方路由器接收到这些数据分组时,会进行IP识别并路由,对不在其服务范围的IP分组发送ICMP Host Unreachable或ICMP Time Exceeded错误分组,没有接收到相应错误分组的IP地址可被认为是在该网络中的。


3、端口扫描技术


在确定目标主机可达后,可以使用端口扫描技术,发现目标主机的开放端口,包括网络协议和各种应用监听的端口。TCP/IP 提出的端口概念是网络通信进程与外界通信交流的出口,可被命名和寻址,可以认为是网络通信进程的一种标识符。通信进程通过系统调用与某端口建立连接绑定后,便会监听这个端口,传输层传给该端口的数据都被相应进程所接收,而相应进程发给传输层的数据都从该端口输出。因此,互联网上的通信双方不仅需要知道对方的IP地址,还需要知道通信程序的端口号。


目前,IPv4支持16bit的端口,端口号范围是0~65 535。其中,0~1 023号端口称为熟知端口,被提供给特定的服务使用;1 024~49 151号端口称为注册端口,由IANA记录和追踪;49 152~65 535号端口称为动态端口或专用端口,提供给专用应用程序使用。


许多常用服务使用的是标准的端口,只要扫描到相应的端口,就能知道目标主机上运行着什么服务。端口扫描技术就是利用这一点向目标系统的TCP/UDP端口发送探测数据分组,记录目标系统的响应,通过分析响应来查看该系统有哪些处于监听或运行状态的服务。


端口扫描技术主要包括全扫描、半扫描、秘密扫描、认证(Ident)扫描和FTP代理扫描。各种扫描方法有各自的特点,全扫描可靠性高,但会产生大量的审计数据,容易被对方发现;秘密扫描能有效地避免对方入侵检测系统防火墙的检测,但使用的数据分组在通过网络时容易被丢弃从而产生错误的探测信息;半扫描的隐蔽性和可靠性介于全扫描和秘密扫描之间;认证扫描需要先建立一个完整的TCP连接;FTP代理扫描的隐蔽性好,难以追踪,但受到服务器设置的限制。


(1)全扫描


全TCP连接是TCP端口全扫描的基础。扫描主机尝试使用完整的三次握手与目标主机的某个端口建立正规的连接。连接由系统调用connect()开始。如果端口开放,则连接将建立成功;否则,返回−1,表示端口关闭。


对于目标端口开放的情况,扫描主机(Client)与目标主机(Server)建立连接成功的过程为:Client端发送SYN;Server端返回SYN/ACK,表明端口开放;Client端返回ACK,表明连接已建立;Client端主动断开连接。


而对于目标端口关闭的情况,扫描主机与目标主机未建立连接成功的过程为:Client 端发送SYN;Server端返回RST/ACK,表明端口未开放。


全扫描的优点是实现简单,对操作者的权限没有严格要求(有些类型的端口扫描需要操作者具有root权限),系统中的任何用户都有权力使用这个调用。另外,全扫描的扫描速度快。如果对每个目标端口以线性的方式,使用单独的connect()调用,可以通过同时打开多个套接字来加速扫描。但是,全扫描的扫描方式不隐蔽,服务器日志会记录下大量密集的连接和错误记录,并容易被防火墙发现和屏蔽。


(2)半扫描


在TCP连接的开始,扫描主机向目标主机的选择端口发送SYN数据段,如果目标主机的应答是RST,说明端口是关闭的,扫描主机可以按照设定继续探听其他端口;如果应答中包含SYN和ACK,说明目标端口处于监听状态。由于SYN扫描时,全连接尚未建立,所以,这种技术通常被称为“半连接”扫描。


SYN扫描的优点在于隐蔽性比全扫描要好,一般系统对于半连接很少记录,即使日志中有记录,但是尝试进行连接的记录也要比全扫描的记录少的多。


SYN扫描缺点是在大部分操作系统中,发送主机需要构造适用于这种扫描的IP分组,通常情况下,构造SYN数据分组需要超级用户或者得到授权的用户,才能访问专门的系统调用。


(3)秘密扫描


比较常见和典型的秘密扫描方式是FIN扫描及其变种。TCP FIN扫描技术使用FIN数据分组探测端口:当一个FIN数据分组到达一个关闭的端口,数据分组会被丢掉,且返回一个RST数据分组;而当一个FIN数据分组到达一个打开的端口,数据分组只是简单丢掉,并不返回RST数据分组。由于这种技术不分组含标准的TCP三次握手协议的任何部分,所以无法被记录下来,从而比SYN扫描隐蔽的多。


秘密扫描能躲避IDS、防火墙、分组过滤器和日志审计,从而获取目标端口的开放或关闭的信息。和SYN扫描类似,秘密扫描也需要构造自己的IP分组。TCP FIN扫描通常适用于UNIX目标主机,在Windows NT环境下,该方法无效,因为不论目标端口是否打开,操作系统都发送RST。这一特点在区分UNIX和NT时,是十分有用的。


有时,为了通过对FIN标记数据分组的过滤,经常会采用FIN扫描的2个变种Null扫描和Xmas扫描。


Null扫描的原理是扫描主机将TCP数据分组中的ACK(确认)、FIN(结束连接)、RST (重新设定连接)、SYN(连接同步化要求)、URG(紧急)、PSH(接收端将数据转由应用处理)标志位置空后发送给目标主机。若目标端口开放,目标主机将不返回任何信息;若目标主机返回RST信息,则表示端口关闭。


Xmas扫描原理和Null扫描类似,将TCP数据分组中的ACK、FIN、RST、SYN、URG、PSH标志位置1后发送给目标主机。若目标端口开放,目标主机将不返回任何信息;若目标主机返回RST信息,则表示端口关闭。


(4)认证扫描


认证扫描是利用认证协议允许查询通过TCP连接的任何进程拥有者的用户名来进行扫描的。认证协议一般用于网络连接过程中被连接的机器验证发起端的身份,因而监听TCP 113端口的ident服务是安装在发起端的。当发起端向某台机器发送某个TCP连接请求后,由被连接端向发起端的113号端口发起认证连接,询问发起端该进程拥有者的用户名,在确认用户名并认证成功之后,被连接端会记录下“某年某月某日某机器的某用户连到我的机器上”,再建立连接进行通信。


在认证扫描中,利用这一协议,扫描程序先主动尝试与目标主机建立起一个TCP连接(如HTTP连接等),连接成功之后,它再向目标主机的TCP 113端口建立另一连接,并通过该连接向目标主机的ident服务发送第一个TCP连接所对应的2个端口号。如果目标主机安装并运行了ident服务,那么该服务进程将向扫描程序返回相关联进程的用户属性等信息。


由于在此过程中,扫描程序先以Client身份与目标主机建立连接,后又以被连接端的身份对目标主机进行认证,因此,这种扫描方式也被称为反向认证扫描。不过,这种方法只能在和目标端口建立了一个完整的TCP连接后才能发挥作用。


(5)FTP代理扫描


文件传输协议(FTP)允许数据连接与控制连接位于不同的机器上,并支持代理FTP连接。FTP代理扫描正是利用这个缺陷,使用支持代理的FTP服务器来扫描TCP端口。这种扫描方式又被称为FTP反弹扫描(FTP Bounce Attack)。


扫描程序先在本地与一个支持代理的FTP服务器建立控制连接,然后使用PORT命令向FTP服务器声明欲扫描的目标机器的IP地址和端口号,其中,IP地址为代理传输的目的地址,而端口号则为传输时所需的被动端口,并发送LIST命令。这时,FTP服务器会尝试向目标主机指定端口发起数据连接请求。


如果目标主机对应端口确实处于监听状态,FTP服务器就会向扫描程序返回成功信息,返回码为150和226。否则,返回错误信息:“425 Can’t build data connection: Connection refused”(或类似这样的)。扫描程序持续使用PORT和LIST命令,直到目标机器上所有的选择端口扫描完毕。


FTP代理扫描的隐藏性很好,难以跟踪,能轻而易举地绕过防火墙。不过对所有需扫描的端口都要逐一进行上述步骤,速度比较慢。而且,现在许多FTP服务器都禁止了代理这一特性。


4、OS探测


操作系统的识别是入侵或安全检测需要收集的重要信息,是分析漏洞和各种安全隐患的基础。只有确定远程主机的操作系统类型、版本,才能对其安全状况做进一步的评估。由于TCP/IP栈只是在RFC文档中描述,各个公司在编写应用于自己OS的TCP/IP栈的时候,对RFC文档做出了不尽相同的诠释,因此,可以根据各个OS在TCP/IP栈实现上的不同特点,采用黑盒测试的方法,通过研究其对各种探测的响应形成特殊的识别“指纹”,进而确定目标主机运行的OS。根据采集信息方式的不同,又可以分为主动探测和被动探测2种。


(1)主动探测


主动探测采用向目标系统发送特殊构造的分组,并监控其应答的方式来识别操作系统类型。主动探测具有速度快、可靠性高的优点,但需要依赖于目标系统网络拓扑结构和过滤规则。


典型的主动OS探测识别有以下9种。


①FIN探测,通过向目标主机上的一个打开的端口发送一个FIN分组,然后等待回应;许多系统如WINNT、CISCO i OS、HP/UX、IRIX的TCP/IP协议栈实现将返回一个Reset。


②ISN采样探测,这是寻找初始化序列长度模板与特定的OS匹配的方法,可以区分一些OS,如早些的UNIX系统是64 K长度;而一些新的UNIX系统则是随机增加长度,如Solaris、IRIX、Free BSD、Digital Unix、Cray等。


③Don’t Fragment位探测,一些操作系统会设置IP头部“Don’t Fragment位”(不分片)以改善性能,监视这个位就可以判定区分远程OS。


④TCP初始窗口大小探测,通过检查返回的分组里包含的窗口大小进行识别,某些OS在TCP/IP栈的实现中,这个值是独特的,如AIX是0x3F25、NT和BSD是0x402E,可以增加指纹鉴别的准确度。


⑤ACK值探测,不同的OS对TCP/IP协议栈实现在ACK分组的序列号的值的选择上存在差异,有些OS发回所确认的TCP分组的序列号,另外一些则发回所确认的TCP分组的序列号加1。


⑥ICMP出错信息抑制,有些OS限制ICMP出错消息的速率,通过某个随机选定的高端口发送UDP分组,可以统计出在某个给定时间段内接受的不可达出错消息的数目。


⑦ICMP 出错消息回射完整性,某些 OS 的TCP/IP协议栈实现在返回ICMP出错消息的时候会修改所引用的IP头,检测对IP头的改动的类型可以粗略判断OS。


⑧TOS服务类型,检测ICMP端口不可到达消息的TOS字段,多数OS会是0,而另一些则不是。


⑨片断处理,不同的TCP/IP协议栈实现对重叠的片断处理上有差异,有些在重组时会用到后到达的新数据覆盖旧数据,有些则相反。


(2)被动探测


主动探测由于需要主动往目标发送数据分组,而且这些数据分组在网络流量中比较惹人注意,因为正常使用网络不会按这样的顺序出现分组,因此,比较容易被IDS捕获。为了隐蔽的识别远程OS,需要使用被动探测的方法。


被动探测在原理上和主动探测相似,但是它从不主动发送数据分组,只是被动的捕获远程主机返回的分组来分析其OS类型版本,分析可以从以下4个方面着手。


①TTL值,这个数据是操作系统对出协议栈的信息包设置的存活时间。


②TCP窗口Size,操作系统设置的TCP窗口大小,这个窗口大小是在发送FIN信息分组时包含的选项,某些OS在TCP/IP栈的实现中,这个值是独特的,如AIX是0x3F25、NT和BSD是0x402E,可以增加指纹鉴别的准确度。


③DF,可以查看操作系统是否设置了Don’t Fragment(不分片)位。


④TOS,检测操作系统是否设置了ICMP端口不可到达消息的TOS字段,多数OS会是0,而另一些则不是。


被动探测基本不具备攻击特征,因此,不会被IDS等发现,但其实现严格,依赖于扫描主机所在的网络拓扑结构,与主动探测相比速度慢、可靠性不高。


5、漏洞扫描


漏洞扫描主要通过以下2种方法来检查目标主机是否存在漏洞


(1)基于漏洞库的特征匹配,通过端口扫描得知目标主机开启的端口以及端口上的网络服务后,将这些相关信息与网络漏洞扫描系统提供的漏洞库进行匹配,查看是否有满足匹配条件的漏洞存在。


(2)基于模拟攻击的方式,通过模拟黑客的攻击手段,编写攻击模块,对目标主机系统进行攻击性的安全漏洞扫描,如测试弱口令等,若模拟攻击成功,则表明目标主机系统存在安全漏洞


基于漏洞库的漏洞扫描大体包括CGI漏洞扫描、POP3漏洞扫描、FTP漏洞扫描、SSH漏洞扫描、HTTP漏洞扫描等。这些漏洞扫描是基于漏洞库,将扫描结果与漏洞库相关数据匹配比较得到漏洞信息;没有相应漏洞库的各种扫描,大体包括Unicode遍历目录漏洞探测、FTP弱势密码探测、OPENRelay邮件转发漏洞探测等,这些扫描通过使用插件(功能模块技术)进行模拟攻击,测试出目标主机的漏洞信息。


(1)基于漏洞库的扫描


基于网络系统漏洞库的漏洞扫描的关键部分就是它所使用的漏洞库。通过采用基于规则的匹配技术,即根据安全专家对网络系统安全漏洞黑客攻击案例的分析和系统管理员对网络系统安全配置的实际经验,可以形成一套标准的网络系统漏洞库,然后在此基础之上构成相应的匹配规则,由扫描程序自动地进行漏洞扫描的工作。


(2)基于模拟攻击的扫描


该方式将模拟攻击的模块做成插件的形式,插件是由脚本语言编写的子程序,扫描程序可以通过调用它来执行漏洞扫描,检测出系统中存在的一个或多个漏洞。添加新的插件就可以使漏洞扫描软件增加新的功能,扫描出更多的漏洞。插件编写规范化后,甚至用户自己都可以用perl、c或自行设计的脚本语言编写的插件来扩充漏洞扫描软件的功能。


这种技术使漏洞扫描软件的升级维护变得相对简单,而专用脚本语言的使用也简化了编写新插件的编程工作,使漏洞扫描软件具有强扩展性。

(二)口令破解


口令的作用就是向系统提供唯一标识个体身份的机制,只赋予知道口令的个体访问权,从而达到保护敏感信息和个人隐私的目的。口令是一种非常简便易用的系统登录与身份鉴别方式,但又产生一个很大的问题:如果口令过于简单,容易被人猜解出来;如果过于复杂,用户往往需要把它写下来以防忘记,这种做法也会增加口令的不安全性。所以,通常计算机用户使用的口令都是不安全的。


另一个和口令有关的严重问题是多数系统和软件中可能存在内建账号和对应的默认口令,而且很少有人能去改动它们,主要是因为:①很多用户不知道有默认口令和账号的存在,并不能禁用它们;②出于防止故障以防万一的观点,希望在产生重大问题时,商家能访问系统,因此不想改口令而将商家拒之门外。与内建账号类似,多数管理员想保证他们自己不被锁在系统之外;因而会创建一个口令非常容易记忆的账号,或者和别人共享口令,或者把它写下来。以上这些行为都会给系统带来重大安全漏洞


口令破解是入侵一个系统比较常用的方法,获得用户口令的思路主要有3种:①穷举尝试;②设法找到存放口令的文件并破解;③通过其他途径,如网络嗅探、键盘记录器等获取口令。口令破解一般有2种方式:手工破解和自动破解。


手工破解是最常见的一种方式,很多人在忘记自己的口令之后,也会试图采用该种方式找回遗忘的口令。手工破解的步骤一般为:首先,产生可能的口令列表,并按口令的可能性从高到低排序;然后,依次手动输入每个口令,如果系统允许访问,则成功,如果没有成功,则重试,在重试的过程中,需要注意不要超过口令的限制次数。这种方式需要攻击者知道用户的user ID,并能进入被攻击系统的登录界面。需要先拟出所有可能的口令列表,并手动输入尝试。思路简单,但是费时间、效率低。


自动破解是只要得到了加密口令的副本,就可以离线破解。这种破解的方法是需要一定前提的,因为要得到加密口令的副本就必须得到系统访问权。但是一旦得到口令文件,口令的破解就会非常的快,而且由于是在脱机的情况下完成的,不易被察觉出来。自动破解的步骤一般是:首先,找到可用的userID,找到所用的加密算法,创建可能的口令名单;然后,对口令名单中每个单词加密,对所有的userID观察是否匹配,重复以上过程,直到找出所有口令为止。


具体到口令破解过程中选择口令名单中口令的方式,则有很多方法可以使用。常见的有词典攻击、强行攻击、组合攻击等。


1、词典攻击


词典,实际上是一个单词列表文件。这些单词有的纯粹来自于普通词典中的英文单词,有的则是根据用户的各种信息建立起来的,如用户名字、生日、街道名字、喜欢的动物等。简而言之,词典是根据人们设置自己账号口令的习惯总结出来的常用口令列表文件。


使用一个或多个词典文件,利用里面的单词列表进行口令猜测的过程,就是词典攻击。因为多数用户都会根据自己的喜好或自己所熟知的事物来设置口令,因此,口令在词典文件中的可能性很大。而且词典条目相对较少,在破解速度上也远快于穷举法口令攻击。在大多数系统中,和穷举尝试所有的组合相比,词典攻击能在很短的时间内完成。


用词典攻击检查系统安全性的一个好处是能针对特定的用户或公司。例如,在公司里有很多体育迷,那么就可以在核心词典中添加一部关于体育名词的词典。另外,如果有一个词很多人都用来作为口令,就可以把它添加到词典中。在Internet上,有许多已经编好的词典可以用,包括外文词典和针对特定类型公司的词典。通过仔细研究了解周围的环境,成功破解口令的可能性就会大大增加。因此,从安全的角度来讲,要求用户不要从周围环境中派生口令是很重要的。


2、强行攻击


很多人误认为,如果使用足够长的口令或者使用足够完善的加密模式,就能有一个攻不破的口令。事实上,是没有攻不破的口令的,攻破只是时间问题,哪怕是花上100年才能破解一个高级加密方式,但是起码它是可以破解的,而且破解的时间会随着计算机处理速度的提高而减少。10年前需要花100年才能破解的口令可能现在只要花一星期就可以了。因此,如果利用速度足够快的计算机尝试字母、数字、特殊字符所有的组合,将最终能破解所有的口令。这种攻击方式叫做强行攻击(也叫做暴力破解)。使用强行攻击,先从字母a开始,尝试aa、ab、ac等,然后尝试aaa、aab、aac等。


此外,系统的一些限定条件也将大大有助于强行攻击破解口令。比如攻击者知道系统规定口令长度在6~32 bit,那么强行攻击就可以从6 bit字符串开始破解,并不再尝试大于32 bit的字符串。


使用强行攻击,基本上是CPU的速度和破解口令的时间上的矛盾。随着台式机性能迅速增长,口令的破解会随着内存价格的下降和处理器速度的上升而变得越来越容易了。还有一种强行攻击方式叫做分布式暴力破解,如果攻击者希望在尽量短的时间内破解口令,它不必购买大批昂贵的计算机,而是把一个大的破解任务分解成许多小任务,然后,利用互联网上的计算机资源来完成这些小任务,就可以加快口令破解的进程。


3、组合攻击


词典攻击虽然速度快,但是只能发现词典中的单词口令;强行攻击能发现所有口令,但是破解时间长。很多情况下,管理员会要求用户的口令是字母和数字的组合,而这个时候,许多用户就仅仅会在他们的口令后面添加几个数字,例如,把口令从 Computer-network 改成Computer-network2324,针对这样的口令组合攻击很有效。


组合攻击是在使用词典单词的基础上在单词的后面串接几个字母和数字进行攻击的攻击方式。组合攻击是基于词典中的单词,但是对单词进行了重组,它的速度也介于词典攻击和强行攻击之间。


4、其他的攻击方式


口令安全最容易想到的一个威胁就是口令破解,许多公司因此花费大量工夫加强口令的安全性、牢固性、不可破解性,但即使是看似坚不可摧很难破解的口令,还是有一些其他手段可以获取的,类似大开着的“后门”。最常见的就是“偷窥”。比如观察别人敲口令,这是一种简单又可行的得到口令的社会工程学方法。在开放的三维空间,这一点不难。一个陌生人可以很容易地通过偷窥获得系统管理员的口令,也就获得了系统的管理员权限。


除了物理空间中的偷窥,攻击者还可以利用潜伏在电脑中的特洛伊木马程序,任意地窥视用户整个硬盘中的内容,监听键盘敲击行为等,从而悄无声息地盗走用户的口令。


如果口令在网络上明文传输,那么很容易通过网络监听得到网络上传输的口令。如果是在共享式局域网内,用普通的Sniffer工具就可以嗅探到整个局域网内的数据分组。如果是在交换式局域网中,可以用ARP欺骗来监听整个局域网内的数据。还可以在网关或者路由器上安装监听软件,从而监听通过网关或者路由器的所有数据分组。


某些用户为了防止传输过程中口令被监听,可能会对口令进行加密,防止黑客监听到口令明文。但是黑客可以把截取到的认证信息重放,从而完成用户登录。


(三)缓冲区溢出


缓冲区是包含相同数据类型实例的一个连续的计算机内存块,是程序运行期间在内存中分配的一个连续的区域,用于保存包括字符数组在内的各种数据类型。所谓溢出,就是所填充的数据超出了原有的缓冲区边界。缓冲区溢出,就是向固定长度的缓冲区中写入超出其预告分配长度的内容,造成缓冲区中数据的溢出,从而覆盖了缓冲区周围的内存空间。黑客借此精心构造填充数据,导致原有流程的改变,让程序转而执行特殊的代码,最终获取控制权。


利用缓冲区溢出漏洞进行攻击最早可追溯到1988年Morris蠕虫,它利用的就是fingerd程序的缓冲区溢出漏洞。1989年,Spafford提交了一份分析报告,描述了VAX机上BSD版Unix的Fingerd的缓冲区溢出程序的技术细节,引起了一部分安全人士对这个研究领域的重视。


目前,利用缓冲区溢出漏洞进行的攻击已经占所有系统攻击总数的80%以上。利用缓冲区溢出攻击之所以如此普遍,是因为缓冲区溢出攻击并不需要太多的先决条件,但这种攻击方式的杀伤力很强,且具有很强的技术性,很难被立刻发现。缓冲区溢出的破坏力,不仅可以导致程序运行失败、系统崩溃以及重新启动等后果,甚至可以利用缓冲区溢出执行非授权指令,取得系统特权,进而进行各种非法操作。因此,缓冲区溢出比其他一些黑客攻击手段更具有破坏力和隐蔽性。


1、缓冲区溢出原理


当程序运行时,计算机会在内存区域中开辟一段连续的内存块,包括代码段、数据段和堆栈段三部分,如图1所示。

图1  程序数据在内存中的存放形式

代码段(.text)也称文本段(Text Segment),存放着程序的机器码和只读数据,可执行指令就是从这里取得的。如果可能,系统会安排好相同程序的多个运行实体共享这些实例代码。这个段在内存中一般被标记为只读,任何对该区的写操作都会导致段错误(Segmentation Fault)。


数据段包括已初始化的数据段(.data)和未初始化的数据段(.bss),前者用来存放保存全局的和静态的已初始化变量,后者用来保存全局的和静态的未初始化变量。数据段在编译时分配。


堆栈段分为堆和栈。


堆(Heap):位于BSS内存段的上边,用来存储程序运行时分配的变量。堆的大小并不固定,可动态扩张或缩减。堆的分配由malloc()、new()等实时内存分配函数来实现。当进程调用malloc等函数分配内存时,新分配的内存就被动态添加到堆上(堆被扩张);当利用free等函数释放内存时,被释放的内存从堆中被剔除(堆被缩减)。堆的内存释放由应用程序去控制,通常一个new()就要对应一个delete(),如果程序员没有释放掉,那么在程序结束后操作系统会自动回收。


栈(Stack):是一种用来存储函数调用时的临时信息的结构,如函数调用所传递的参数、函数的返回地址、函数的局部变量等。栈在程序运行时由编译器在需要的时候分配,在不需要的时候自动清除。栈的特性在于:最后一个放入栈中的物体总是被最先拿出来,这个特性通常称为先进后出(FILO)队列。


栈的基本操作有2种:PUSH操作,向栈中添加数据,称为压栈,数据将放置在栈顶;POP操作,与PUSH操作相反,在栈顶部移去一个元素,并将栈的大小减1,称为弹栈或出栈。


栈由编译器自动管理。栈有2种分配方式:静态分配和动态分配。静态分配由编译器完成,如局部变量的分配。动态分配由 alloca()函数进行分配,但是栈的动态分配和堆是不同的,它的动态分配由编译器释放,无需手工控制。


假设现在有一个程序,它的函数调用顺序是:main()->func_1()->func_2()->func_3(),即主函数main调用函数func_1; 函数func_1调用函数func_2; 函数func_2调用函数func_3。


程序数据的详细结构如图2所示。

图2  程序数据在内存中的详细结构

从图2中可以看到,随着函数调用层数的增加,函数栈帧一块块地向内存低地址方向延伸;而随着进程中函数调用层数的减少,即各函数调用的返回,栈帧会一块块地被遗弃而向内存的高址方向回缩。各函数的栈帧大小随着函数性质的不同而不等,由函数的局部变量的数目决定。在缓冲区溢出中,主要关注数据区和堆栈区。


在使用栈时,引用栈帧需要借助2个指针寄存器。一个是SP(ESP),即栈顶指针,它随着数据入栈出栈而发生变化;另一个是BP(EBP),即基地址指针,它用于标识栈中一个相对稳定的位置,通过BP,再加上偏移地址,可以方便地引用函数参数以及局部变量。


函数被调用的时候,栈中压入数据的顺序如下:首先,压入栈的(位于内存高地址)是“传递给Func的实参”;然后,依次是“退出Func函数后的返回地址”、“调用Func函数前的EBP”;最后,压入栈的数据是“Func函数中的局部变量”,位于内存的低地址。因此,在Func函数局部变量的栈顶方向,是前一个调用函数的EBP,接下来是退出Func函数后返回地址。如果局部变量发生溢出,很有可能会覆盖掉EBP甚至RET(返回地址),这就是缓冲区溢出攻击的“奥秘”所在。


2、缓冲区溢出的过程


缓冲区溢出攻击的目的在于扰乱某些工作在特殊权限状态下的程序,使攻击者取得程序的控制权,借机提高自己的权限,控制整个主机。一般来说,攻击者要实现缓冲区溢出攻击,必须完成2个任务:一是在程序的地址空间里安排适当的代码;二是通过适当的初始化寄存器和存储器,让程序跳转到安排好的地址空间执行。其中,第一步安排代码的任务也称为代码植入,将在下一部分进行介绍。


当代码已经安排好后,缓冲区溢出最关键的步骤就是寻求改变程序执行流程的方法,通过适当地初始化寄存器和存储器,扰乱程序的正常执行次序,使之跳转到攻击代码。原则上来讲,攻击时所针对的缓冲区溢出的程序空间可以为任意空间,但因不同地方程序空间的突破方式和内存空间的定位差异,产生了多种转移方式。常见的包括函数指针方式、激活记录方式和长跳转缓冲区方式。


(1)函数指针方式


函数指针void (* foo)()声明了一个返回值为void 类型的函数指针变量foo。


函数指针可以用来定位任意地址空间,攻击时只需要在任意空间里的函数指针邻近处找到一个能够溢出的缓冲区,然后用溢出来的数据改变函数指针的值。当程序使用函数指针调用函数时,程序的流程就会指向攻击者定义的指令序列。用函数指针控制程序的流程如图3所示。

图3  函数指针改变程序流程

(2)激活记录


当一个函数调用发生时,堆栈中会留驻一个激活记录Activation Record,它包含了函数结束时返回的地址。溢出这一记录,使这个返回地址指向攻击代码,当函数调用结束时,程序就会跳转到所设定的地址,而不是原来的地址。这样的溢出方式比较常见。


(3)长跳转缓冲区


在C语言中包含了一个简单的检验/恢复系统,称为setjmp/longjmp,在检验点设定setjmp (buffer),用longjmp(buffer)来恢复检验点。和函数指针一样,longjmp(buffer)能够跳转到buffer中信息所指向的任何地方。如果攻击者能够修改buffer的内容,使用longjmp(buffer)就可以跳转到攻击代码。使用这种方法,需要先找到一个可供溢出的缓冲区。


3、代码植入技术


代码植入就是在程序的地址空间里安排适当代码。代码植入过程有时候不是必须的,因为如果所需要的代码在被攻击程序中已经存在,那么攻击者所要做的只是向代码传递一些参数,使程序跳转到目标即可。如攻击代码要求执行“exec(‘/bin/sh’)”,而在libc库中存在这样的代码“exec(arg)”,其中,arg是一个指向字符串的指针参数,那么,攻击者只要把传入的参数指针指向字符串“/bin/sh”,然后,跳转到libc库中的相应的指令序列就大功告成了。


而很多时候所需要的代码并不能从被攻击程序中找到,这就得用“代码植入法”来完成了。此时需要构造一个字符串,它包含的数据是可以在被攻击程序的硬件平台上运行的指令序列,在被攻击程序的缓冲区如栈、堆或静态数据区等地方找到足够的空间存放这个字符串。然后,再寻找适当的机会使程序跳转到安排的这个地址空间中。


所植入的代码一般由shellcode、返回地址、填充数据这3种元素按照一定的结构和构造类型组成。其中,shellcode是植入代码的核心组成部分,是一段能完成特殊任务的自包含的二进制代码。由于它最初是用来生成一个高权限的shell,因而得名“shellcode”。虽然现在人们已经远远不满足于生成一个shell,但shellcode的“美名”一直沿用至今。攻击者通过巧妙的编写和设置,利用系统的漏洞将shellcode送入系统中使其得以执行,从而获取特殊权限的执行环境,或给自己设立有特权的账户,取得目标机器的控制权。


在Linux中,为了获得一个交互式shell,一般需要执行代码execve(“/bin/sh”,“/bin/sh”, NULL);对此代码进行编译后得到机器码shellcode:char shellcode[] =“\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xd b\x89\xd8\x40\xcd\x80\xe8\xdc\xff\xff\xff/bin/sh”。


需注意的是,不同的操作系统、不同的机器硬件产生系统调用的方法和参数传递的方法不同,因此,产生的shellcode也不尽相同。


返回地址是指shellcode的入口地址。攻击者如果希望目标程序改变其原来的执行流程,转而执行shellcode,则必须设法用shellcode的入口地址覆盖某个跳转指令。由于所植入的代码是被复制到目标机器的缓冲区中,攻击者无法知道其进入到缓冲区后的确切地址。不过,内存的分配是有规律的,如Linux系统,当用户程序运行时,栈是从0xbfffffff开始向内存低端生长的。如果攻击者想通过改写函数返回地址的方式使程序指令发生跳转,则程序指令跳转后的指向也应该在0xbfffffff附近。


事实上,虽然不同的缓冲区溢出漏洞植入代码的返回地址都不同,但均处于某个较小的地址区间内。另外,为了提高覆盖函数返回地址的成功率,往往在植入代码中安排一段由重复的返回地址组成的内容。


由于攻击者不能准确地判断shellcode的入口地址,为了提高shellcode的命中率,往往在 shellcode 的前面安排一定数量的填充数据。填充数据必须对植入代码的功能完全没有影响,这样只要返回地址指向填充数据中的任何一个位置,均可以确保shellcode顺利执行。填充数据还可以起到一个作用,就是当植入代码的长度够不着覆盖目标,如函数返回地址时,可以通过增加填充数据的数量,使植入代码的返回地址能够覆盖函数返回地址。


对Intel CPU来说,填充数据实质上是一种单字节指令,使用最多的是空操作指令NOP,值为0x90,该指令什么也不做,仅跳过一个CPU周期。除此之外,还有其他的单字节指令可以作为填充数据使用,如调整计算结果的AAA和AAS、操作标志位的CLC和CLD等。


在植入代码中,往往安排比较长甚至几百上千的填充数据,而一个有效的指令长度实际最大也不过10 byte左右,因此,也可以根据这一特点来判断是否发生了缓冲区溢出攻击


(四)拒绝服务攻击


拒绝服务(DoS, Denial of Service)是一种简单的破坏性攻击,通常是利用传输协议中的某个弱点、系统存在的漏洞,或服务的漏洞,对目标系统发起大规模的进攻,用超出目标处理能力的海量数据分组消耗可用系统资源、带宽资源等或造成程序缓冲区溢出错误,使其无法处理合法用户的正常请求,无法提供正常服务,最终致使网络服务瘫痪,甚至系统死机。


简单地说,拒绝服务攻击就是让攻击目标瘫痪的一种“损人不利己”的攻击手段。


拒绝服务攻击可能是蓄意的,也可能是偶然的。当未被授权的用户过量使用资源时,攻击是蓄意的;当合法用户无意的操作使资源不可用时,则是偶然的。对2种拒绝服务攻击都应该采取预防措施。拒绝服务攻击问题一直得不到合理的解决,是由网络构造本身的安全缺陷造成的。无论计算机的处理速度多么快、内存容量多么大、互联网带宽多么大都无法避免这种攻击带来的后果。


1、拒绝服务攻击的类型


拒绝服务攻击类型的划分有多种方法,依据不同的标准,可以有不同的划分思路。


从实施DoS攻击所用的思路来看,DoS攻击有以下划分。


(1)滥用合理的服务请求:过度地请求系统的正常服务,占用过多服务资源,致使系统超载。这些服务资源通常包括网络带宽、文件系统空间容量、开放的进程或连接数等。


(2)制造高流量无用数据:恶意地制造和发送大量各种随机无用的数据分组,用这种高流量的无用数据占据网络带宽,造成网络拥塞。


(3)利用传输协议缺陷:构造畸形的数据分组并发送,导致目标主机无法处理,出现错误或崩溃而拒绝服务。


(4)利用服务程序的漏洞:针对主机上的服务程序的特定漏洞,发送一些有针对性的特殊格式的数据,导致服务处理错误而拒绝服务。


按漏洞的利用方式分类,DoS攻击可以分为特定资源消耗类和暴力攻击类。


(1)特定资源消耗类:主要利用TCP/IP栈、操作系统或应用程序设计上的缺陷,通过构造并发送特定类型的数据分组,使目标系统的协议栈空间饱和、操作系统或应用程序资源耗尽或崩溃,从而达到DoS的目的。


(2)暴力攻击类:依靠发送大量的数据分组占据目标系统有限的网络带宽或应用程序处理能力来达到攻击的目的。通常暴力攻击需要比特定资源消耗攻击使用更大的数据流量才能达到目的。


按攻击数据分组发送速率变化方式分类,DoS攻击可分为固定速率和可变速率。可变速率中根据数据分组发送速率变化模式,又可以分为震荡变化型和持续增加型。震荡变化型变速率发送方式间歇性地发送数据分组,使入侵检测系统难以发现持续的异常;持续增加型变速率发送方式可以使攻击目标的性能缓慢下降,并可以误导基于学习的检测系统产生错误的检测规则。


按攻击可能产生的影响,DoS攻击有以下分类。


(1)系统或程序崩溃类:根据可恢复的程度,系统或程序崩溃类又可以分为自我恢复类、人工恢复类、不可恢复类等。自我恢复类是指当攻击停止后系统功能可自动恢复正常;人工恢复类是指系统或服务程序需要人工重新启动才能恢复;不可恢复类是指攻击给目标系统的硬件设备、文件系统等造成了不可修复性的损坏。


(2)服务降级类:攻击会导致系统对外提供服务的能力下降。


2、典型拒绝服务攻击技术


(1)Ping of Death


Ping是一个非常著名的程序,这个程序的目的是为了测试另一台主机是否可达。现在所有的操作系统上几乎都有这个程序,它已经成为系统的一部分。Ping程序的目的是为了查看网络上的主机是否处于活动状态,通过发送一份ICMP回显请求分组给目的主机,并等待返回ICMP回显应答,根据回显应答的内容判断目的主机的状况。


Ping之所以会造成伤害是源于早期操作系统在处理ICMP数据分组时存在漏洞。ICMP的分组长度是固定的,大小为64 k B,早期很多操作系统在接收ICMP数据分组的时候,只开辟64 k B的缓存区用于存放接收到的数据分组。一旦发送过来的ICMP数据分组的实际尺寸超过64 k B(65 536 B),操作系统将收到的数据分组向缓存区填写时,分组长度大于64 k B,就会产生一个缓存溢出,结果将导致TCP/IP堆栈的崩溃,造成主机的重启动或死机。


Ping程序有一个“−l”参数可指定发送数据分组的尺寸,因此,使用Ping这个常用小程序就可以简单地实现这种攻击。例如,通过命令Ping −l 65540 192.168.1.140,如果对方主机存在这样一个漏洞,就会形成一次拒绝服务攻击。这种攻击被称为“死亡之Ping”。


现在的操作系统都已对这一漏洞进行了修补。对可发送的数据分组大小进行限制。如在Windows xp sp2操作系统中输入命令Ping −l 65540 192.168.1.140,系统会返回信息Bad value for option −l, valid range is from 0 to 65500。


Ping of Death攻击的攻击特征、检测方法和反攻击方法总结如下。


攻击特征:该攻击数据分组大于65 535个字节。由于部分操作系统接收到长度大于65 535字节的数据分组时,就会造成内存溢出、系统崩溃、重启、内核失败等后果,从而达到攻击的目的。


检测方法:判断数据分组的大小是否大于65 535个字节。


反攻击方法:使用新的补丁程序,当收到大于65 535个字节的数据分组时,丢弃该数据分组,并进行系统审计。


(2)泪滴(Teardrop)


“泪滴”也被称为分片攻击,它是一种典型的利用TCP/IP的问题进行拒绝服务攻击的方式,由于第一个实现这种攻击的程序名称为Teardrop,所以这种攻击也被称为“泪滴”。


两台计算机在进行通信时,如果传输的数据量较大,无法在一个数据分组中传输完成,就会将数据拆分成多个分片,传送到目的计算机后再到堆栈中进行重组,这一过程称为“分片”。


为了能在到达目标主机后进行数据重组,IP分组的TCP首部中包含分片识别号、偏移量、数据长度、标志位,说明该分段是原数据的哪一段,这样,目标主机在收到数据后,就能根据首部中的信息将各分片重新组合还原为数据。


下面3条是正常的分组重组的信息。


PSH 1:1025(1024) ack 1, win 4096

PSH 1025:2049(1024) ack 1, win 4096

PSH 2049:3073(1024) ack 1, win 4096


可以看到在这3个分组中,第一个发送的数据分组中是原数据的1~1 025 byte内容,第二个发送的分组包含的是第1 025~2 048 byte,第三个数据分组是2 049~3 073 byte,后面接着是继续发送的分片和服务器的确认。当这些分片数据被发送到目标主机后,目标主机就能够根据分组中的信息将分片重组,还原出数据。


如果入侵者伪造数据分组,向服务器发送含有重叠偏移信息的分段分组到目标主机,如下所示。


PSH 1:1025(1024) ack1, win4096

PSH 1000:2049(1024) ack1, win4096

PSH 2049:3073(1024) ack1, win4096


这样的信息被目的主机收到后,在堆栈中重组时,由于畸形分片的存在,会导致重组出错,这个错误不仅仅影响到重组的数据,而且,由于协议重组算法会导致内存错误,将会引起协议栈的崩溃。


泪滴攻击的攻击特征、检测方法和反攻击方法总结如下。


攻击特征:Teardrop工作原理是向被攻击者发送多个分片的IP分组,某些操作系统收到含有重叠偏移的伪造分片数据分组时将会出现系统崩溃、重启等现象。


检测方法:对接收到的分片数据分组进行分析,计算数据分组的片偏移量(Offset)是否有误。


反攻击方法:添加系统补丁程序,丢弃收到的病态分片数据分组并对这种攻击进行审计。


(3)IP欺骗Do S攻击


IP欺骗DoS攻击利用RST位来实现。


假设现在有一个合法用户(61.61.61.61)已经同服务器建立了正常的连接,攻击者构造攻击的TCP数据,伪装自己的IP为61.61.61.61,并向服务器发送一个带有RST位的TCP数据段。服务器接收到这样的数据后,认为61.61.61.61发送的连接有错误,就会清空缓冲区中建立好的连接。这时,如果合法用户61.61.61.61再发送合法数据,服务器就已经没有这样的连接了,该用户就必须重新开始建立连接。


攻击时,攻击者会伪造大量的IP地址,向目标发送RST数据,使服务器不对合法用户服务,从而实现了对受害服务器的拒绝服务攻击。


(4)UDP洪水


UDP洪水(UDP Flood)主要是利用主机能自动进行回复的服务(如UDP的chargen服务和echo服务)来进行攻击。


很多提供WWW和Mail等服务设备通常是使用Unix的服务器,它们默认会打开一些可能被黑客恶意利用的UDP服务。如echo服务会显示接收到的每一个数据分组,而原本作为测试功能的chargen服务会在收到每一个数据分组时随机反馈一些字符。


当向 echo 服务的端口发送一个数据时,echo 服务会将同样的数据返回给发送方,而chargen服务则会随机返回字符。当2个或2个以上系统存在这样的服务时,攻击者利用其中一台主机向另一台主机的echo或chargen服务端口发送数据,echo和chargen服务会自动进行回复,这样,开启echo和chargen服务的主机就会相互回复数据。由于这种做法使一方的输出成为另一方的输入,两台主机间会形成大量的UDP数据分组。当多个系统之间互相产生UDP数据分组时,最终将导致整个网络瘫痪。


(5)SYN洪水


SYN Flood是当前最流行的拒绝服务攻击方式之一,这是一种利用TCP协议缺陷,发送大量伪造的TCP连接请求,使被攻击方资源耗尽(CPU满负荷或内存不足)的攻击方式。


SYN Flood是利用TCP连接的三次握手过程特性实现的。在TCP连接的三次握手过程中,假设一个客户端向服务器发送了 SYN 分组后突然死机或掉线,那么,服务器在发出SYN/ACK应答分组后是无法收到客户端的ACK分组的,这种情况下服务器端一般会重试,并等待一段时间后丢弃这个未完成的连接。这段时间的长度称为SYN Timeout。一般来说这个时间是min的数量级。


一个用户出现异常导致服务器的一个线程等待1 min并不是什么很大的问题,但如果有一个恶意的攻击者大量模拟这种情况(伪造IP地址),服务器端将为了维护一个非常大的半连接列表而消耗非常多的资源。


即使是简单的保存并遍历半连接列表也会消耗非常多的CPU时间和内存,何况还要不断对这个列表中的IP进行SYN+ACK的重试。实际上,如果服务器的TCP/IP栈不够强大,最后的结果往往是堆栈溢出崩溃——即使服务器端的系统足够强大,服务器端也将忙于处理攻击者伪造的TCP连接请求而无暇理睬客户的正常请求,此时从正常客户的角度来看,服务器失去了服务响应。


(6)Land攻击


Land是因特网上最常见的拒绝服务攻击类型,它是由著名黑客组织rootshell发现的。


Land攻击原理很简单,向目标机发送大量的源地址和目标地址相同的分组,造成目标机解析Land分组时占用大量的系统资源,从而使网络功能完全瘫痪。


Land攻击也是利用TCP的三次握手过程的缺陷进行攻击。Land攻击是向目标主机发送一个特殊的SYN分组,分组中的源地址和目标地址都是目标主机的地址。目标主机收到这样的连接请求时会向自己发送SYN/ACK数据分组,结果导致目标主机向自己发回ACK数据分组并创建一个连接。大量这样的数据分组将使目标主机建立很多无效的连接,系统资源被大量的占用。


(7)Smurf攻击


Smurf攻击是利用IP欺骗和ICMP回应分组引起目标主机网络阻塞,实现DoS攻击。


Smurf攻击原理是:在构造数据分组时将源地址设置为被攻击主机的地址,而将目的地址设置为广播地址,于是,大量的ICMP echo回应分组被发送给被攻击主机,使其因网络阻塞而无法提供服务。Smurf攻击比Ping of Death洪水的流量高出1或2个数量级。


如果目标网络是一个很大的以太网,有200台主机,在这种情况下,入侵者每发送一个ICMP数据分组,目标主机就会收到200个数据分组,这样,目标主机很快就会被大量的回复信息吞没,无法处理其他的任何网络传输。这种攻击不仅影响目标主机,还能影响目标主机的整个网络系统。


(8)Fraggle攻击


Fraggle攻击原理与Smurf一样,也是采用向广播地址发送数据分组,利用广播地址的特性将攻击放大以使目标主机拒绝服务。不同的是,Fraggle使用的是UDP应答消息而非ICMP。


(9)电子邮件炸弹


电子邮件炸弹是最古老的匿名攻击之一,由于这种攻击方式简单易用,互联网上也很容易找到这些发送匿名邮件的工具,并且入侵者只需要知道对方的电子邮件地址就可以进行攻击。传统的电子邮件炸弹只是简单地往你的邮箱里发送大量的邮件,入侵者的目的是要用垃圾邮件填满你的邮箱,这样,正常的邮件就会因空间不够而被服务器拒收。


如果用户的邮箱使用空间不受限制,那么电子邮件炸弹攻击就有可能影响服务器的正常工作。最有可能的情况是入侵者不断发送大量的电子邮件,由于用户的邮箱空间不受限制,服务器会接收全部的邮件并保存在硬盘上。大量到来的邮件将不断吞噬服务器上的硬盘空间,最终将耗尽服务器上的所有硬盘空间,使服务器无法再对外服务。还有一种可能是通过设置一台机器不断向同一地址大量发送电子邮件,入侵者能够耗尽接收者网络的带宽。


能随意发送匿名邮件的原因在于电子邮件是通过SMTP进行发送的,最初的SMTP服务是不需要进行身份认证的,在发送电子邮件的过程中不对用户进行身份认证。因此,邮件的发送人可以伪造任何邮件地址,甚至可以不写发件人的信息。针对SMTP的问题,新的SMTP协议规范新增了2个命令,对发送邮件的发件人进行身份认证,在一定程度上降低了匿名电子邮件的风险。


(10)Win Nuke攻击


Win Nuke 攻击又称“带外传输攻击”,它的特征是攻击目标端口,被攻击的目标端口通常是139、138、137、113、53。


TCP中使用带外(Out of Band)数据通道来传送一些比较特殊(如比较紧急)的数据。在紧急模式下,发送的每个TCP数据分组都包含URG标志和16 bit URG指针,直至将要发送的带外数据发送完为止。16 bit URG指针指向分组内数据段的某个字节数据,表示从第一字节到指针所指字节的数据就是紧急数据,不进入接收缓冲就直接交给上层进程。Win Nuke攻击就是制造这种特殊的分组,但这些攻击分组与正常携带OOB数据分组不同的是:指针字段与数据的实际位置不符,即存在重合,这样Windows操作系统在处理这些数据的时候就会崩溃。


3、分布式拒绝服务攻击


分布式拒绝服务(DDoS, Distributed Denial of Service)攻击指借助于客户端/服务器技术,将多个计算机联合起来作为攻击平台,对一个或多个目标发动DoS攻击,从而成倍地提高拒绝服务攻击的威力。分散在互联网各处的机器可以共同完成对一台主机攻击的操作,使主机看起来好像是遭到了不同位置的许多主机的攻击。并且这些分散的机器可以分别进行不同类型的攻击。


在进行分布式拒绝服务攻击前,入侵者必须先控制大量的无关主机,并在这些机器上安装进行拒绝服务攻击的软件。互联网上充斥着安全措施较差的主机,这些主机存在系统漏洞或配置上的错误,可能是一些没有足够安全技术能力的小站点或者一些企业的服务器,入侵者轻易就能进入这些系统。


由于攻击者来自范围广泛的IP地址,且来自每台主机的少量数据分组有可能从入侵检测系统的眼皮下溜掉,这使防御变得困难。


分布式拒绝服务攻击的软件一般分为客户端、服务端与守护程序,这些程序可以协调分散在互联网各处的机器共同完成对一台主机攻击的操作,从而使主机遭到来自不同地方的许多主机的攻击。客户端也称攻击控制台,是发起攻击的主机;服务端也称攻击服务器,接受客户端发来的控制命令;守护程序也称攻击器、攻击代理,它直接(如SYN Flooding)或者间接(如反射式DDoS)与攻击目标进行通信。


入侵者通过客户端软件向服务端软件发出攻击指令,服务端在接收到攻击指令后,控制守护进程向目标主机发动攻击。采用三层结构的做法以确保入侵者的安全,一旦客户端发出指令后,客户端就能断开连接,由服务端指挥守护进程攻击。客户端连接和发送指令的时间很短,隐蔽性极强。通常情况下,服务端与守护进程(代理程序)间并不是一一对应的关系,而是多对多的关系。也就是说,一个安装了守护进程的主机可以被多个服务端控制,一个服务端软件也同时控制多个守护进程。


当主机被DDoS攻击时,有如下现象:被攻击主机上有大量等待的TCP连接;网络中充斥着大量的无用的数据分组,源地址为假;制造高流量无用数据,造成网络拥塞,使受害主机无法正常和外界通信;利用受害主机提供的服务或传输协议上的缺陷,反复高速地发出特定的服务请求,使受害主机无法及时处理所有正常请求;严重时会造成系统死机。


一个Web站点遭到DDoS攻击时,这个站点的一个或多个Web服务会接到非常多的请求,最终使它无法再正常使用。在一个DDoS攻击期间,如果有一个不知情的用户发出了正常的页面请求,这个请求会完全失败,或者是页面下载速度变得极其缓慢,即站点无法使用。


对分布式拒绝服务攻击的防御是十分困难的。因为Internet上绝大多数网络都不限制源地址,即伪造源地址非常容易,很难溯源找到攻击控制端的位置,另外,还有各种反射式攻击,无法定位源攻击者。


完全阻止分布式拒绝服务攻击是不可能的,但是,适当的防范工作可以减少被攻击的机会。首先,要有完善的网络设计,理想情况下,公司不仅要有多条与Internet的连接,最好有不同地理区域的连接,公司的服务位置越分散,IP地址越分散,攻击同时寻找与定位所有计算机的难度就越大。另外,当DoS攻击发生时,针对单个协议的攻击会损耗公司的带宽,以致拒绝合法用户的服务,例如,如果攻击者向端口25发送洪水般的数据,攻击者会消耗掉所有带宽,所以,试图连接端口80的用户被拒绝服务。一种防范方法是限制基于协议的带宽,例如,端口25只能使用25%的带宽,端口80只能使用50%的带宽。运行尽可能少的服务也可以减少被攻击成功的机会,如果一台计算机开了20个端口,这就使攻击者可以在大范围内尝试对每个端口进行不同的攻击,相反,如果系统只开了2个端口,这就限制了攻击者攻击站点的攻击类型。


(五)社会工程学


社会工程学是一种让人们顺从你的意愿、满足你的欲望的一门艺术与学问。社会工程学并不直接运用技术手段,而是一种利用人性的弱点、结合心理学知识,通过对人性的理解和人心理的了解获得目标系统敏感信息的技术。简单来说,就是欺骗人们去获得本来正常情况下无法访问的信息。


事实上,在多数的公司里,如果得到信任,就会被允许拥有访问这个公司信息的特权,如某些重要系统的口令。如果攻击者能通过一些方式使公司内部的某个人确信他是被信任的实体,并且得到系统可用的访问账号,那他就很可能会获得对应的口令,并获得系统的访问权限。


所有社会工程学攻击都建立在使人的决断产生认知偏差的基础上。有时候这些偏差被称为“人性漏洞”,足以产生众多攻击方式,比较常见的攻击方式如下。


(1)假托。是一种制造虚假情形,以迫使针对受害人吐露平时不愿泄露的信息的手段。该方法通常预含对特殊情景专用术语的研究,以建立合情合理的假象。


(2)调虎离山。是一种利用假造的借口或突发事件制造看守人不在场的情形,以方便攻击者实施窃取等行为的手段。对于以窃取为目的的攻击者来说,这种方式的成功率非常高。


(3)伪装。是冒充某种身份的人(如技术支持人员、上司、朋友等),令受害人放松警惕,从而对受害人进行后续攻击的手段。在很多场景下,伪装和假托2种方式经常组合出现。


(4)利益交换。是通过给予物品或者给予帮助的方式,获取对方信任甚至交换物品的手段。例如,在2003年信息安全调查中,90%的办公室人员答应给出自己的口令以换取调查人员声称提供的一支钢笔。后续的一些调查中也发现用巧克力和诸如其他一些小诱惑可以得到同样的结果(得到的口令有效性未检验)。


(5)尾随。是利用前面行进的人的松懈心理,通过紧跟的手段获得某些地方出入权的手段。


(6)搜索垃圾箱。很多情况下,搜索垃圾箱是非常有效的信息收集手段。许多人在丢弃垃圾的时候甚至不把电子邮件、文档、计划和口令撕成两半就丢弃了,更别说粉碎后再丢弃。而且许多公司的垃圾都是丢到一个垃圾箱里,大多数清洁工都是在晚上打扫办公室,如果凌晨2点到一些垃圾箱去找,会很容易就找出一些相当有用的资料。如公司领导的名字、电话、部门的设置等。


绝大部分情况下,有威力的社会工程学攻击都是利用了以上多种方式的组合,以达到攻击者的目的。


一种最常用的组合是伪装+假托+利益交换。具体场景如下。


攻击者:喂,我是大为。我在技术支持中心工作,现在我要对你的系统进行例行维护。

受骗者:是吗?我从来没有听说支持中心要对我们的系统进行例行维护。

攻击者:嗯,是这样,上个季度我们才开始做这个工作。我们正在为所有远程用户做例行维护。我刚刚做完北区的所有计算机的维护。实际上,绝大多数用户都说,经过这次维护之后,他们的计算机的速度明显加快了。

受骗者:是吗?那好,如果其他人的机器速度都加快了,那么我也这样做一下。现在我需要做些什么?

攻击者:嗯,你不需要做什么。我可以远程地把一切都为你做好,但为了能够这样做,我需要知道你的VPN用户名和口令。

受骗者:你真的能够远程地做好这一切?真是太好了。嗯,我的用户名是 abc,口令是chaodong。

攻击者:太好了。谢谢你的协助。我将以VPN方式登录到你的计算机,并进行例行维护。这只需要几分钟的时间。

至此,攻击者已完成了获得用户名和口令的攻击。

另一种非常有效的组合是尾随+伪装+搜索垃圾箱。具体场景如下。

数据存储服务部的员工小张正忙着登记取出数据的客户,这时内线突然响起。

小张:你好,数据存储服务部。

攻击者:我是XX业务部的小王,我们前台计算机出现故障,呃,我需要你们的帮助。

小张:我可以知道你的员工ID吗?

攻击者:嗯,ID是97845。

小张:我能帮助你什么?

攻击者:我们网络出现故障,我需要你把XX业务数据复印一份,然后放在二楼客户接待柜台,我们的人会取的。

小张:好的,忙完以后,我马上给你送去。

小张送到二楼客户接待柜台之后,攻击者即如愿拿到XX业务数据。


该企业在丢失重要业务数据后报案。然而,没有任何线索,经过分析,电话是企业的内线电话,打电话者是带着帽子、口罩,提着一个似乎很重的箱子,尾随在一个正要进入大楼的员工的身后进来的。员工ID和企业的部门信息是付了费用给垃圾处理公司,允许他从中寻找一些东西,而攻击者寻找到的是一份扔掉的员工联系名单,旁边附了内线号码。


社会工程学定位在计算机信息安全工作链路的最脆弱环节上,这个环节就是“人”。很多人误以为,最安全的计算机就是已经拔去了网线插头的那一台,但事实上,你可以用某种理由(比如“可以给你很快修好”)去说服某人(比如使用者或者网管)把这台非正常工作状态下的、容易受到攻击的有漏洞的机器连上网线插头并启动。


可以看出,“人”这个环节在整个安全体系中是非常重要的,人有自己的主观思维,由此意味着这种由人所带来的网络安全的脆弱性是普遍存在的,它不会因为系统平台、软件、网络、位置、防御手段等因素不相同而有所差异。


理解了这一点,无论是在物理上还是在虚拟的电子信息上,任何一个可以访问系统某个部分的人都有可能构成潜在的安全风险与威胁。任何细微的信息都可能会被社会工程学使用者拿来运用,使其得到其他信息。因此,在考虑安全的时候,必须要把“人”这个因素放进企业安全管理策略中进行考察。


(六)信息窃密


目前,对网络系统进行入侵和信息窃密的重要工具和手段就是特洛伊木马。特洛伊木马简称木马。如今,黑客程序借用其名,有“一经潜入,后患无穷”之意。木马可以利用自身所具有的植入功能,或依附其他具有传播能力的程序等多种途径,进驻目标机器,搜集其中各种敏感信息,并通过网络与外界通信,发回所搜集到的各种敏感信息,或者接受植入者指令,完成其他各种操作,如拷贝指定文件、窃密用户口令等。因此,感染了木马的计算机将面临数据丢失和机密泄露的危险。


木马往往又被用作后门,植入被攻破的系统,以便为入侵者再次访问系统提供方便;或者利用被入侵的系统,通过欺骗合法用户的某种方式暗中散发木马,以便进一步扩大入侵成果和入侵范围,为进行其他入侵活动,如分布式拒绝服务攻击等提供可能。


一个典型的木马程序通常具有以下4个特点:有效性、隐蔽性、顽固性、易植入性,一个木马的危害大小和清除难易程度可以从这4个方面来加以评估。


(1)有效性:由于木马常常构成网络入侵方法中的一个重要内容,它运行在目标机器上就必须能够实现入侵者的某些企图。因此,有效性就是指入侵的木马能够与其控制端(入侵者)建立某种有效联系,从而能够充分控制目标机器并窃取其中的敏感信息。有效性是木马的一个最重要特点。


(2)隐蔽性:木马必须有能力长期潜伏在目标机器中而不被发现。一个隐蔽性差的木马往往会很容易暴露自己,进而被杀毒(或杀马)软件,甚至用户手工检查出来,这样会使这类木马变得毫无价值。因此,隐蔽性是木马的生命。


(3)顽固性:当木马被检查出来(失去隐蔽性)之后,为继续确保其入侵有效性,木马往往还具有另一个重要特性——顽固性。木马顽固性是指有效清除木马的难易程度。若一个木马在检查出来之后,仍然无法将其一次性有效清除,那么该木马就具有较强的顽固性。


(4)易植入性:任何木马首先必须能够进入目标机器,因此,易植入性是木马有效性的先决条件。欺骗是自木马诞生起最常见的植入手段,因此,各种好用的小功能软件就成为木马常用的栖息地。利用系统漏洞进行木马植入也是木马入侵的一类重要途径。目前,木马技术与蠕虫技术的结合使木马具有类似蠕虫的传播性,这极大提高了木马的易植入性。


窃密木马的实现原理比较简单,本质上说,大多都是网络客户/服务(Client/Server)程序的组合,由一个攻击者控制的客户端程序和一个运行在被控计算机端的服务端程序组成。当攻击者利用“木马”进行网络入侵时,一般都需完成如下环节:向目标主机植入木马、启动和隐藏木马、服务器端(目标主机)和客户端建立连接、进行远程控制。因此,一个木马在实现信息窃密的过程中,最重要的就是木马植入技术、自动加载技术、隐藏技术、连接技术和监控技术。这5个最基本的方面构成了一个整体,缺一不可。


1、植入技术


木马植入技术大概分为主动植入与被动植入两类。


(1)主动植入


主动植入是攻击者主动将木马程序种到本地或远程主机上,这个行为过程完全由攻击者主动掌握。


主动植入,一般需要通过某种方法获取目标主机的一定权限,然后,由攻击者自己动手进行安装。在一个系统植入木马,不仅需要将木马程序上传到目标系统,还需要在目标系统运行木马程序,所以,主动植入不仅需要具有目标系统的写权限,还需要可执行权限。如果仅仅具有写权限,只能将木马程序上传但不能执行,这种情况属于被动植入,因为木马仍然需要被动等待以某种方式被执行。


按照目标系统是本地还是远程,这种方法又有本地安装与远程安装之分。本地安装就是直接在本地主机上进行安装。试想一下,有多少人的计算机能确保除了自己之外不会被任何人使用。而在经常更换使用者的网吧计算机上,这种安装木马的方法更是非常普遍,也非常有效。


远程安装就是通过前期的攻击手段获得目标主机的一定权限后,将木马上传到目标主机上,并使其运行起来。远程安装从实现方式上,主要分为利用系统自身漏洞植入和利用第三方软件漏洞植入。利用系统自身漏洞植入是攻击者利用所了解的系统的安全漏洞及其特性主动出击。如IIS服务器的溢出漏洞,通过一个“IISHack”的攻击程序就可使IIS服务器崩溃,并同时在被攻击服务器执行“木马”程序。利用第三方软件漏洞植入则是因为每台主机上都会安装一些第三方软件或者提供服务,但是这些软件可能存在可被利用的漏洞,如果被恶意者利用,主机就可以成为木马的“栖息地”。例如,AT-TFTP Server在处理带有超长文件名参数的请求时存在漏洞,当某台主机中运行了该FTP服务器,远程攻击者就可能利用此漏洞在服务器上执行任意指令。


(2)被动植入


被动植入是指攻击者预先设置某种环境,然后被动等待目标系统用户的某种可能的操作,只有这种操作获得执行,木马程序才有可能植入目标系统。目前,被动植入技术主要是利用以下方式将木马程序植入目标系统:通过网页浏览植入,利用电子邮件、网络下载、即时通信工具等植入,通过与其他程序捆绑植入,以及利用移动存储设备植入。


2、自动加载技术


木马程序在被植入目标主机后,不可能寄希望于用户双击其图标来运行启动,只能不动声色地自动启动和运行,攻击才能以此为依据侵入被侵主机,完成控制。


在Windows系统中木马程序的自动加载技术主要有以下几种。


(1)修改系统文件


木马程序一般会在第一次运行时,修改目标系统文件以达到自动加载的目的。这种比较古老的自启动方法,目前很多已被修改系统注册表的方法替代。


(2)修改系统注册表


系统注册表保存着系统的软件、硬件及其他与系统配置有关的重要信息。通过设置一些启动加载项目,也可以使木马程序达到自动加载运行的目的,而且这种方法更加隐蔽。


(3)添加系统服务


Windows NT内核操作系统大量使用服务来实现关键的系统功能。服务程序是一类长期运行的应用程序,它不需要界面或可视化输出,能够设置成在操作系统启动时自动开始运行,不需要用户登录来运行。


除了操作系统内置的服务程序外,用户也可以注册自己的服务程序。木马程序就是利用了这一点,将自己注册为系统的一个服务并设置为自动运行,这样每当Windows系统启动时,即使没有用户登录,木马也会自动开始工作。


(4)修改文件打开关联属性


通常,对于一些常用的文件,如.txt 文件,只要双击文件图标就能打开这个文件。这是因为在系统注册表中,已经把这类文件与某个程序关联起来,只要用户双击该类文件,系统就自动启动相关联的程序来打开文件。


(5)修改任务计划


在默认情况下,任务计划程序随Windows一起启动并在后台运行。如果把某个程序添加到计划任务文件夹,并将计划任务设置为“系统启动时”或“登录时”,这样也可以实现程序自启动。


(6)修改组策略


组策略也是非常隐蔽的实现程序自启动的方式。


在“开始”→“运行”中输入“gpedit.msc" 。按回车,打开系统组策略窗口,选择“计算机配置”→“管理模板”→“系统”→“登录”,双击右边的“在用户登录时运行这些程序”项。打开其属性对话框,选择“已启用”,再单击“显示”,会弹出“显示内容”对话框,列表中显示的便是藏身于此的自启动程序。


(7)修改启动文件夹


当前登录用户的“启动”文件夹是许多应用软件自启动的常用位置。不管用户用什么身份登录系统,放入“对所有用户有效的启动文件夹”的快捷方式总是自动启动——这是它与用户专有的启动文件夹的区别所在。该文件夹一般在C:\Documents and Settings\All Users\「开始」菜单\程序\启动\。


(8)利用系统自动运行的程序


在Windows系统中,有很多程序是可以自动运行的。例如,在对磁盘进行格式化后,总是要运行“磁盘扫描”程序(Scandisk.exe)等。


这些都为窃密程序提供了机会,通过覆盖相应文件就可获得自动启动的机会,而不必修改系统任何设置。


(9)替换系统DLL


这种方法通过API HOOK启动,也称为DLL陷阱技术。它通过替换Windows系统中正常的DLL文件(动态链接文件)实现加载,如kernel32.dll和user32.dll这些随系统一起启动的dll。启动之后,如果是系统正常的调用请求,它就把请求转到原先的DLL进行处理;如果是约定的木马操作,则该DLL文件就实现木马服务器端的功能。


3、隐藏技术


窃密木马要想在目标主机上存活下来,还需注意隐藏自己、潜伏下来,使自身不被主机合法用户所发现,所以,隐蔽性是木马程序与其他程序的重要区别。


想要隐藏木马的服务端,可以是伪隐藏,也可以是真隐藏。伪隐藏是指程序的进程仍然存在,只不过是让它消失在进程列表里;真隐藏则是让程序彻底地消失,不以一个进程或者服务的方式工作。这些程序隐藏技术如下。


(1)设置窗口不可见


这是最基本的隐藏方式。如果在Windows的任务栏里出现一个莫名其妙的图标,窃密木马是不可能在目标主机上存活下来的。要实现在任务栏中隐藏,在编程时是很容易实现的。以VB为例,只要把from的Visible属性设置为False,Show In Task Bar设为False,程序就不会出现在任务栏里。


(2)把木马程序注册为服务


让木马从进程列表中消失,是木马最基本的技术。在Windows系统下,把木马服务端程序注册为一个服务就可以,因为系统不认为它是一个进程,在任务管理器中就看不到这个程序的进程。但是,这种方法对于细心的用户来说,通过服务管理器,同样会发现在系统中注册过的服务。


(3)欺骗查看进程的函数


在Windows中有多种方法可以看到进程的存在,例如PSAPI(Process Status API)、PDH (Performance Data Helper)等。如果能够欺骗查看进程的函数(如截获相应的API调用,替换返回的数据),就可以实现进程隐藏。


(4)使用可变的高端口


一台机器有65536个端口,1024以下是系统服务端口,占用这些端口可能造成系统不正常,木马就会很容易暴露。大多数木马使用的端口在1024以上,且呈越来越大的趋势。另外,现在的木马都提供端口修改功能。


(5)使用系统服务端口


木马除了在1024以上的高端口上驻留,也会选择一些常用的端口,如80、23。有些木马可以做到在占领80HTTP端口后,收到正常的HTTP请求仍然把它交与Web服务器处理,只有收到一些特殊约定的数据分组后,才调用木马程序。


(6)替换系统驱动或系统DLL


攻击者使用自己的DLL文件替换 Windows系统中正常的DLL文件。这种方法利用Windows系统的驱动或DLL,既可以启动木马,也可以隐藏木马。由于这种方法不使用进程,属于真隐藏技术。


这种方法与一般方法不同,它基本上摆脱了木马原有的监听端口模式,而采用替代系统功能的方法(改写虚拟设备驱动程序vxd或动态链接库DLL文件),木马会用修改后的DLL替换系统已知的DLL,并对所有的函数调用进行过滤。因为DLL文件不能独立运行,所以,在进程列表中并不会出现DLL。DLL木马通过别的进程来运行它,如果这个进程是可信进程,就没有人会怀疑它是木马。


(7)动态嵌入技术


另一种利用DLL隐藏木马的方法是动态嵌入技术,即将木马程序的代码嵌入到正在运行的进程中。Windows系统中的每个进程都有自己的私有内存空间,一般不允许别的进程对其进行操作。但可以通过窗口hook(钩子函数)、挂接API、远程线程等方法进入并操作进程的私有空间,使木马的核心代码运行在其他进程的内存空间。这种方法比DLL替换技术有更好的隐藏性。


4、连接技术


在网络客户端/服务器工作模式中,必须具有一台主机提供服务(服务器),另一台主机接受服务(客户端),这是最起码的硬件必需,也是“木马”入侵的基础。建立连接时,木马的服务端会在目标主机上打开一个默认的端口进行侦听(Listen),如果有客户机向服务器的这一端口提出连接请求(Connect Request),服务器上的相关程序(木马服务器端)就会自动运行,并启动一个守护进程来应答客户机的各种请求。


其实现原理可以在VB中用Winsock控件来模仿实现(G_Server和G_Client均为Winsock控件)。


服务器端:


G_Server.Local Port = 7626(木马计划打开的默认端口,可以按需改为别的值)

G_Server.Listen(等待连接)


客户端:


G_Client.Remote Host = Server IP(设置远端地址为服务器地址)

G_Client.Remote Port = 7626(设置远程端口为前面所设置的默认端口,在这里可以分配一个本地端口,如果不分配,计算机将会自动分配一个)

G_Client.Connect(调用Winsock控件的连接方法)

一旦服务端接到客户的连接请求Connection Request,就接收连接:

Public Sub G_Server_Connection Request(By Valrequest ID As Long)

G_Server.Accept requested

End Sub


客户机端用G_Client.Send Data发送命令,而服务器在G_Server_Data Arrive事件中连接并执行命令(很多木马功能都在这个事件处理程序中实现)。


可以看到,在建立连接过程中,对目标主机空闲端口的侦听是木马赖于建立连接的根本。目前所知的木马程序,基本都要用到侦听主机端口这一技术。在计算机的6万多个端口中,通常把端口号1024以内的端口称为熟知端口(Well Known Ports),它们紧密绑定于一些系统服务,木马程序很少应用到此类端口进行连接。而对于端口号为1025~49151的注册端口(Registered Ports)和端口号为49152~65535的动态或私有端口(Dynamic or Private Ports)则常常被木马程序相中,用于建立与木马客户端的连接,从而实现网络入侵。


传统木马采用的由客户端(控制端)向服务端(被控制端)发起连接的方式会遇到防火墙的阻碍,已经不具有很强的可用性了。目前,很多新开发的窃密程序大多使用的都是反弹端口的连接技术。反弹端口的连接是由服务端主动向客户端发起连接。这种连接技术与传统的连接技术相比,更容易通过防火墙,因为它是由内向外发起连接。


5、监控技术


木马连接建立后,客户端端口和服务器端口之间会出现一条通道,客户端程序可由这条通道与服务器上的木马程序取得联系,并对其进行远程控制。通过利用木马的远程监控功能,可以实现很多目标,如获取目标机器文件、记录用户事件、远程操作等。


(1)获取目标机器信息


窃密木马的一个主要功能就是窃取被控端计算机的信息,再把这些信息通过网络连接传送到控制端。一般来讲,获取目标机器信息的方法就是调用相关API,通过函数返回值,进行分解和分析有关成分,进而得到相关信息。


(2)记录用户事件


木马程序为了达到控制目标主机的目的,通常想知道目标主机用户目前在干什么,于是记录用户事件成了木马的又一主要功能。记录用户事件通常有2种方式:一是记录被控端计算机的键盘和鼠标事件,形成一个文本文件,然后把该文件发送到控制端,控制端用户通过查看文件的方式了解被控端用户打开了哪些程序,敲了那些键;二是在被控端抓取当前屏幕,形成一个位图文件,然后把该文件发送到控制端显示,从而通过抓取的屏幕知道目标用户的操作行为。


(3)远程操作


木马程序的远程操作功能如远程关机、重启、鼠标与键盘的控制、远程的文件管理等。木马程序有时需要重新启动被控制端计算机,或强制关闭远程计算机,当被控制计算机重新启动时,木马程序重新获得控制权。在木马程序中,木马使用者还可以通过网络控制被控端计算机的鼠标和键盘,也可以通过这种方式启动或停止被控端的应用程序。对远程的文件进行管理,如共享被控端的硬盘,之后就可以进行任意的文件操作和拷贝。


四、网络攻击软件


(一)远程控制软件


最初,远程控制软件的出现是为了方便系统管理员对系统实施有效的管理,管理员使用这些软件可以获得远程系统的虚拟操作平台,远程执行计算任务或解决技术问题。但技术的两面性决定了远程控制软件的优秀特性也可以被用来从事恶意的活动。例如,某些远程控制软件可以远程控制并记录每台员工机所有正在打开的窗口、运行的程序,以饼状图的形式统计每天员工机各软件使用时长;可以远程监视员工文件操作,记录U盘插拔时间以及文件复制、粘贴、删除的记录等。更有一些黑客利用远程控制软件,在获得目标系统的访问权限后,窃取敏感信息,或使用目标系统发起对网络中其他主机的攻击行为。


为了让您了解攻击者如何利用远程控制软件进行远程控制和隐蔽操作,以及如何利用屏幕跟踪、模拟键盘及鼠标输入、注册表编辑、远程文件操作、记录各种口令信息、消息发送、远程重新启动、远程锁定等功能进行攻击,下面以冰河为例,介绍其远程控制的基本功能,其他的远程控制软件功能与该款软件基本类似,只是运行环境和操作界面有所不同。


冰河是一个非常有名的用于远程控制的木马工具,它包括 2 个可运行的程序 G_Server和G_Client,前者是服务器端,用来植入目标主机的程序;后者是客户端,也就是用户操作的控制台。运行客户端后其界面如图4所示。

图4  冰河客户端界面

服务器端运行后,可以在控制台上进行连接。单击工具栏上的快捷按钮“添加主机”,弹出对话框后,输入远程主机的相关信息即可。连接成功后,会显示远程主机上的信息如硬盘盘符等,如图5所示。

图5  连接成功后的界面

从界面中可以看到,冰河的功能非常强大,它有“文件管理器”和“命令控制台”2个选项卡。单击“文件管理器”可以管理被入侵的电脑的硬盘。可以查看文件或者将感兴趣的文件下载到本地的机器上。通过冰河的命令控制台,可以实现获得系统信息和口令(如图6所示)、捕获对方屏幕、管理对方的进程(如图7所示)等。从这些命令可以看出,冰河的远程管理功能非常强大,几乎可以对入侵的计算机进行完全的控制。

图6  系统信息和口令获取

图7  管理对方的进程

(二)系统攻击实例


目前,对于系统进行攻击的一般方法主要是基于漏洞的,特别是由人工开发的复杂的操作系统,通常都会存在一定的漏洞。而操作系统的漏洞一旦被攻击者发现,就可以被攻击者用来在未授权的情况下随意攻击系统,访问机密数据,甚至危害系统安全。对Windows系统的攻击就是一个非常典型的例子。接下来会介绍的IIS远程溢出漏洞ida就是来自IIS(Internet Information Services),一个由微软公司提供的内置在系统中一起发行的互联网信息服务组件产品。


对于有计划的攻击行为来说,第一步是对目标主机进行探测,如果发现目标主机的135和139端口开放,那么该计算机应该是运行了Windows系统。第二步是开始尝试远程的口令猜测,连接到系统的共享资源后,通过不断尝试用户名和口令的组合发现可以登录系统的账号。但是,如果系统管理员在口令设置方面比较注意,攻击者就无法很轻易地猜测出用户的口令,此时攻击者就要利用应用服务或者Windows系统框架的漏洞来获取系统权限。在各种漏洞利用工具中,最有效也是杀伤力最强的方式就是远程缓冲区溢出的方式。在此,将使用IIS远程溢出漏洞扫描工具ofscan和ida漏洞利用工具Idahack以及nc命令实现远程溢出攻击,并获得系统管理员权限。


首先,通过用ofscan扫描存在ida漏洞的主机,如图8所示,共扫描到6台可能有漏洞的主机。

图8  ofscan扫描

接下来,通过idahack采用命令行的方式对6台主机逐一进行攻击,图9为远程溢出攻击成功后的结果。

图9  远程溢出攻击

用nc命令获得一个shell后,如图10所示,就可以查看对方主机的信息。最后,通过在shell中运行net user命令添加用户,并获得系统管理员权限,如图11所示。

图10  用nc命令获得shell

图11  添加用户,获得系统管理员权限

(三)口令破解软件


以L0phtcrack为例,介绍口令破解软件的功能,其他的破解软件功能与该款软件基本类似,只是运行环境有所不同,有些Unix/Linux系统上破解口令的工具只能在命令行方式下运行。


L0phtcrack 是一个 Windows 口令破解工具,能根据操作系统中存储的加密散列来计算Windows口令,功能非常强大、丰富,是目前市面上最好的Windows口令破解程序之一。它可以从本地系统、其他文件系统、系统备份中获取SAM文件,从而破解密码。它有4种方式可以破解口令:快速口令破解、普通口令破解、复杂口令破解、自定义口令破解。


(1)快速口令破解:仅仅把字典中的每个单词和口令进行简单地对照尝试破解。只有字典中包含的密码才能被破解。


(2)普通口令破解:使用字典中的单词进行普通的破解,并把字典中的单词进行修正破解。


(3)复杂口令破解:使用字典中的单词进行普通的破解,还把字典中的单词进行修正破解,并且执行暴力破解,把字典中的字、数字、符号进行尽可能的组合。


(4)自定义口令破解:自定义的口令破解可以自己设置口令破解方式,可以选择字典列表进行破解,可以把单词数字或符号进行混合破解,可以利用预先生成的口令散列值与SAM中的散列值进行匹配,还可以用设置“字母+数字”、“字母+数字+普通符号”、“字母+数字+全部符号”,进行暴力破解。


为了直观展示L0pht Crack的破解能力,事先在一台Window 系统主机内建立一个用户名challenger,密码依次设置为空密码、security、security123,再用L0pht Crack V5.02(LC5)破解计算机内challenger用户的口令。


首先,在初始界面中选择导入加密口令的办法——从本地导入。接下来,在破解方式的选择界面中选择破解办法为快速口令破解。系统口令为空情况下的破解结果如图12所示。

图12  口令为空情况下的破解结果

接下来,更改破解方法为普通口令破解,对口令为security的情况进行破解,破解的结果如图13所示。本次破解成功的时间很快,因为security正好是字典中的一项。但普通口令破解方式对于口令为security123的情况则无能为力,显示破解结果为无法破解。

图13  口令为security情况下的破解结果

为此,更改破解方法为复杂口令破解,对口令为security123的情况进行破解,并破解成功,最终破解的结果如图14所示。

图14  口令为security123情况下的破解结果

(四)网络监听软件


常用的网络监听软件包括Tcpdump/Windump、Ngrep、Ethereal/Wireshark、Sniffer Pro、Net Xray等,目前,技术发展都已比较成熟,可以协助网络管理员测试网络数据通信流量、实时监控网络状况。然而,事情往往都有两面性,由于网络监听软件只是“被动”地接收数据,所以在传输数据的过程中,根本无法察觉到有人在监听,网络监听给网络维护提供便利的同时,也给网络安全带来了很大隐患,用户很有可能在不知情的情况下就已经被盗取了信息。


网络监听工具的主要功能大都相似,下面以Wireshark为例进行介绍。


Wireshark是一个免费的开源网络数据分组分析工具,可以在Linux、Solaris、Windows等多种平台运行。它允许用户从一个活动的网络中捕捉数据分组并进行分析,详细探究数据分组的协议字段信息和会话过程,帮助网络管理员解决网络问题,开发人员可以用它来测试协议执行情况。Wireshark具有很好的可扩展性,用户能自由地增加插件以实现额外功能。


Wireshark支持Capture Filter(捕获前过滤)和Display Filter(捕获后过滤)功能帮助用户筛选想要的数据分组。


下面通过设置Capture Filter对tcp分组进行监测,如图15所示,开始抓取数据分组,观察局域网内有ftp登录的情况。

图15  设置Capture Filter对tcp分组进行监测

停止抓包后,设置Display Filter,只查看21端口与ftp主机相关的数据分组,如图16所示,选定某一封包内容后,执行Follow TCP Stream功能重组数据分组,即可对与被选中封包相关的所有封包内容进行重组,可更清楚地看到封包中的Data,可以查看完整的ftp登录过程,如图17所示。

图16  设置Display Filter

图17  封包重组

下面通过Wireshark的抓包和对协议字段信息的分析功能,开始实施嗅探BBS用户名和登录口令的过程。


首先,设置Capture Filter,对tcp分组进行监测,然后开始抓取数据分组,观察所有HTTP POST方法的封包内容。对其中关于logging.php的封包内容进行分析,可以获得本次BBS登录的用户名和口令,如图18所示。

图18  通过监听获得BBS用户登录权限

五、高级持续性威胁


高级持续性威胁(APT,Advanced Persistent Threat)通常是指在某个组织(如国家或财团)的支持下针对一个特定的目标使用比较高级的技术进行持续性攻击,它通常具有很强的破坏性,手段比较隐蔽,持续时间较长,攻击造成的后果极其严重。


(一)高级持续性威胁概述


1、APT的定义


APT不仅是一个技术名词,它更依托于在国家博弈中的政治和经济背景。从传统恶意代码与攻击定义的角度出发,“高级”是对技术能力的概括,“持续”则代表时间概念,正因为APT的“持续”特点,时间是确定APT的关键元素。


高级持续性定义的“高级”与“持续性”不是新概念。从攻击者的角度出发,需要从微观和宏观角度重新解读传统恶意代码与攻击定义的“高级”与“持续性”。如表1所示。

表1  从微观和宏观角度解读“高级”与“持续性”

解读APT,需要把握方寸,既不能过度外延也不能过于量化,过度外延会将APT视为网络战争,过于量化则会陷入应对APT中的技术盲区。


2、APT特征


APT是以商业和政治为目的的,通常不会追求短期的经济收益和单纯的系统破坏,而是专注于步步为营的攻击系统,每一步都要达到一个目标而不会打草惊蛇。APT的特征是需要长期经营和策划,在高度隐蔽的情况下才可能取得成功。从高级(Advanced)、持续性(Persistent)和威胁(Threat)3个方面详细解读APT的特征如下。


(1)高级


发动高级持续性攻击的攻击者能够全方位收集情报,他们不仅掌握计算机攻击技术和技巧,还具备收集传统领域情报的能力和技术(如电话拦截和卫星成像等技术)。


如果从每次攻击分解的角度出发,每个部分不“高级”,但是将工具组合后“因地制宜”的使用就较为“高级”。APT 结合了多种攻击方法、各类工具和各种手段,在达到访问、破坏拟定目标的目的的同时,还能够保护对既定目标的控制权。


(2)持续性


高级持续攻击行动都经过精心策划。为了达到最大化经济和其他方面的利益,攻击者不会出于侥幸想法而轻率地发起攻击。高级持续威胁不仅代表攻击者的主观意图,而且证明了攻击背后必然存在幕后操纵者。


为了达到不可告人的目的,攻击者会不断地监测、试探、选择要进攻的目标,这并不代表攻击者会“进行持续不断的攻击”或者“不断更新恶意软件来发动攻势”。事实上,“低频率慢更新”的攻击方式更见成效。一旦攻击者发现目标系统脱离控制,就会尝试重新发起进攻。


(3)威胁、攻击


高级持续性攻击称作“威胁”的原因是它兼备攻击的能力和意图,攻击者绝不是通过单击几次鼠标就能够自动完成攻击,必须经过多方组织和协调才能开展高级持续性攻击。攻击者的目的明确、技术熟练、动机充分、组织分工得当,且有幕后操作者提供充足的资金支持。


(二)APT与传统恶意代码攻击的对比


APT有时会被认为是一种新出现的恶意代码、安全漏洞或其他新技术,但APT并不是像以往单纯利用编码、技术或威胁隐藏机制那样的简单威胁,它可以利用常见的恶意代码、零日漏洞等进行攻击。APT和传统恶意代码攻击存在2种主要区别:一是可控性区别,从传播方式角度出发,两者较为不同,APT的传播方式可控,目标明确,以接近攻击目标为主要目的,而传统恶意代码的传播方式以大面积的传播为主,以扩大非法获取经济利益所得;二是长期潜伏性区别,APT会持续潜伏,直到锁定目标或接收到攻击指令后才发起下一阶段的攻击,而传统恶意代码攻击通常在攻击成功后会立即进行后续操作。


处于APT时代,面对具有国家背景的攻击,通过横向比较发生APT和传统恶意代码安全事件的基本要素(“时间”“地点”“人物”等),可以进一步发现二者的不同之处,如表2所示。

表2  APT和传统恶意代码攻击对比

(三)APT攻击手段


APT攻击与传统的恶意代码攻击不同,其主要是针对目标组织而实施的特定攻击,并会使用不同类型的恶意软件进行攻击(如DDoS攻击、网络钓鱼等)。目前,APT常用的攻击手段如下。


1、路过式下载攻击


路过式下载(Drive-by Download)是指用户在访问网站或打开文件时,被利用系统或软件的漏洞,在不知情的情况下,下载恶意代码或文件。


路过式下载描述了一种网络行为。路过式下载被启动时,如果用户计算机的安全设置不严密,就有可能发生路过式下载攻击。


2、水坑式攻击


水坑攻击(Watering Hole)是指攻击者通过分析被攻击者的网络活动规律,寻找被攻击者经常访问的网站弱点,在攻击该网站并植入攻击代码后,等待被攻击者访问时攻击。


水坑攻击利用合法网站的弱点,隐蔽性比较强。相对于通过社会工程方式引诱用户访问恶意网站的攻击方式,水坑攻击更具欺骗性,其攻击效率也更高。


以IE的零日漏洞为例,当被攻击者受感染成为僵尸电脑(Bot)后,通常会自动连接僵尸网络(Botnet)控制端下载和更新恶意软件,以避免防病毒软件进行检测,提高其存活率。


3、社会工程学攻击


APT通常使用社会工程学(Social Engineering)方式进行攻击。社会工程学通过利用人的薄弱点,进而使用欺骗手段进行攻击。


一些组织或企业可能采取了完备的技术安全措施,但由于员工无意之间泄露组织的机密信息,就可能严重损害组织的信息安全。


随着社会工程学的攻击手段日趋成熟,其技术含量也越来越高。社会工程学的典型攻击手段如下。


(1)地址欺骗:攻击者伪装或伪造各种URL地址、隐藏真实地址,以达到欺骗被攻击者的目的。


(2)邮件欺骗:攻击者通过发送垃圾邮件说服被攻击者相信某一事件或引诱目标访问某一链接,或者将附件替换成木马程序,或者直接在附件中捆绑木马程序并诱使被攻击者运行,以达到某种不可告人的目的。


(3)消息欺骗:攻击者伪装成被攻击者好友,向被攻击者发送欺骗信息。


(4)软件欺骗:攻击者将包含有恶意代码的软件发布到网络,一旦被攻击者下载并安装了该软件,包含在其中的恶意代码就会发挥作用。


(5)窗口欺骗:主要指网页弹出窗口欺骗。攻击者往往利用被攻击者贪婪的心理,诱使被攻击者按照攻击者预先指定的方式访问网页或进行相关操作,达到攻击者的目的。


4、一般网络钓鱼攻击


网络钓鱼(Phishing)是指仿造现有合法网页,以蒙骗用户提供个人资料、账号和口令的攻击方式。


一般网络钓鱼攻击具有广泛的对象。攻击者通过散布大量恶意软件,能够既快速又便宜地达到目的。一般网络钓鱼被用来窃取数据和构建僵尸网络,而这又被用来发送更多垃圾邮件,不断进行网络钓鱼攻击。


典型的一般网络钓鱼攻击手段如下。


(1)假冒网站:这类网站的URL域名和正式网站的差别很小,通常在假冒网站中留下木马或其他陷阱等待被攻击者登录。


(2)伪装网站:这类网站通过技术手段修改浏览器显示,让用户误以为进入了正确的网站。


(3)传播病毒:这种情况可能是网站管理人员的电脑被恶意代码感染后,又将含有恶意代码的文件上传到服务器。


(4)偷梁换柱:很多正常网站中经常夹杂一些恶意代码,可能是网站被攻陷或者网站管理人员监守自盗。这类手段通常表现为网页正常,但其中夹杂着盗取被攻击者账户、密码等敏感信息的恶意代码。


5、重点网络钓鱼攻击


重点网络钓鱼攻击又称为鱼叉式网络钓鱼(Spear Phishing),工作原理与一般网络钓鱼攻击类似,只是潜在受害者范围较小。鱼叉式网络钓鱼通过锁定特定公司、组织的成员后窃取高度敏感性资料,如知识产权及商业机密。


大部分APT攻击都使用了鱼叉式网络钓鱼攻击,在完成情报收集后,根据被攻击者的行业、爱好、性格等相关信息,攻击者直接向被攻击者发送其可能感兴趣的电子邮件。鱼叉式网络钓鱼活动很难被发现,它之所以获得成功是因为被攻击者相信邮件中所包含的信息,而且大多数被攻击者都认为反垃圾邮件保护会抵御鱼叉式网络钓鱼攻击的威胁。


(四)APT检测和防御


在应对APT攻击时,传统的恶意代码检测手段已显得力不从心。这是因为传统的恶意代码检测手段主要是针对已知威胁进行检测,而对于未知的漏洞利用、木马程序、攻击手法,无法进行检测和定位,同时也没有足够的专业人员对检测设备的告警信息进行关联分析。目前,APT攻击的主要步骤如表3所示。

表3  APT攻击步骤

针对现有APT攻击面临的问题,结合现有APT攻击步骤的关键阶段,国内外厂商基本制订以下四类检测和防御方案。


(1)恶意代码检测类方案:主要覆盖 APT 的单点突破攻击和恶意代码检测阶段。APT大多通过恶意代码来攻击电脑从而突破目标网络和系统防御措施,因此,恶意代码检测对于检测和防御高级持续性攻击至关重要。


针对反APT恶意代码检测类方案的同类产品主要包括国外厂商Fire Eye MPS(Malware protection System)、CMS(Central Management System)产品,国内厂商安天追影威胁分析系统产品。


(2)主机应用保护类方案:方案主要覆盖APT的单点突破攻击和数据收集上传阶段。该方案通过加强系统内各主机节点的安全措施来保证电脑以及服务器的安全,以防御APT。


针对反APT主机应用保护类方案的同类产品主要包括国外厂商Bit9 Trust-based security Platform、国内金山私有云安全系统、安天智甲终端防御系统。


(3)网络入侵检测类方案:方案主要覆盖APT的控制通道构建阶段。采用传统网络入侵检测方法能够及时获取各APT命令控制通道的检测特征。


针对反 APT 网络入侵检测类方案的同类产品主要包括国外厂商 Trend Micro Deep Discovery,国内安天探海威胁检测系统和镇关威胁阻断系统。


(4)大数据分析检测类方案:方案覆盖APT的全部攻击过程,通过全面分析日志等海量数据来回溯高级持续性攻击场景。


针对APT的大数据分析检测类方案的同类产品主要包括国外RSA Net Witness。


(五)APT分析实例


1、震网(Stuxnet):首个针对工业控制系统的APT攻击


震网是APT的代表,2010年6月被发现,它的传播时间可以追溯到2009年6月或更早。震网是首个针对工业控制系统的蠕虫,它利用西门子公司控制系统存在的漏洞,感染数据采集与监控系统(SCADA),向可编程逻辑控制器(PLC)写入代码并将代码隐藏。


国内较早捕获震网的变种时间为2010年7月15日,震网样本的相关行为分析如下。


(1)运行环境:震网能够在Windows 2000/XP/Vista/7,Windows Server 2000/2003/2008的操作系统中激活运行,当它发现自己运行在非Windows NT系列操作系统后立刻退出。震网能够攻击SIMATIC Win CC 6.2/7.0版本软件系统(不排除其他版本被攻击的可能)。


(2)本地行为:震网样本被激活后的运行流程如图19所示。

图19  震网样本典型运行流程

(3)传播方式:震网采取多种手段进行持续渗透和传播,以达到攻击目的。震网传播示意如图20所示。

图20  震网传播方式示意

(4)攻击行为:震网在使用RPC远程执行漏洞(MS08−067)、提升权限漏洞、打印机后台程序服务漏洞(MS10−061)后,通过查询主机中的注册表键值判断主机是否安装Win CC系统。进一步攻击行为如图21所示。

图21  震网攻击行为示意

根据震网样本行为,可以发现震网的4个攻击特点,具体如下。


(1)专门攻击工业系统。震网针对SIMATIC Win CC系统攻击,此系统是一款数据采集与监视控制(SCADA)系统,被广泛用于国家基础设施工程,它运行于Windows平台,常被部署在与外界隔离的专用局域网中。


(2)利用多个零日漏洞。震网利用Windows操作系统的4个漏洞,分别为RPC远程执行漏洞(MS08−067)、快捷方式文件解析漏洞(MS10−046)、打印机后台程序服务漏洞(MS10−061)和尚未公开的一个提升权限漏洞。其中,后3个漏洞都是被震网首次使用。震网使用大规模多种零日漏洞的攻击事件并不多见。


(3)使用有效的数字签名。震网运行后释放的驱动文件使用Real Tek的数字签名以躲避防病毒软件查杀。


(4)攻击目标明确。


2、APT−TOCS:使用商业平台进行的APT攻击


APT−TOCS使用具备商业性质的自动化攻击测试平台进行攻击。APT−TOCS的核心攻击步骤如图22所示。

图22  APT−TOCS攻击核心步骤

APT−TOCS的攻击者掌握多种脚本加载权限的远程注入手段,如利用安全缺陷或漏洞直接在主机上执行脚本,其中,攻击核心部分依托Power Shell加载的加密数据脚本,其脚本与各模块的功能与衍生关系如图23所示。

图23  数据脚本与各模块的功能与衍生关系

经推断,APT-TOCS攻击者使用商业攻击平台进行攻击,此方法不仅降低了攻击成本,而且商业攻击平台为攻击者提供了大量可选注入手段,使类似APT-TOCS等攻击事件轻易达到了APT攻击水准。


随着移动互联网、云计算的快速发展,安全威胁不断涌现,对社会的影响也越来越大。病毒变种的增加、跨平台的蔓延传播、自身行为的隐蔽性,都给病毒的查杀工作带来挑战。在巨大经济利益的驱使下,流氓软件产业迅速发展,流氓行为层出不穷,侵害用户的利益。当恶意行为上升成为高级持续性威胁,乃至国家力量支持下的博弈时,国家和企业会蒙受重大的经济损失,同时各国之间的政治、军事安全也受到威胁。对抗网络恶意威胁已成为迫切需要解决的问题。当前,随着网络的扩张和功能的丰富,用户随时都可能面临新的恶意威胁和安全隐患。只有对其深入了解并掌握其重要性,才能采取有效的防范策略,更好地保护网络的安全。随着国家相关政策的完善、公众安全意识的普遍提高、安全厂商自身产品技术的不断创新,相信一定会创造一个愈加安全的互联网环境。

微信公众号:计算机与网络安全

ID:Computer-network

【推荐书籍】

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存