第 2章 网络攻击
2.1 黑客
2.2 信息收集类攻击
2.3 入侵类攻击
2.4 欺骗类攻击
2.5 拒绝服务类攻击自从 20世纪 90年代以来,几乎每一个计算机信息系统都是在网络环境下运行的。在网络环境下工作的计算机,除了经常要受到病毒等恶意程序的侵害外,
还要受到黑客的攻击。这一章介绍黑客对于网络的一些主要攻击手段。
2.1 黑客返回
2.1.1 侠客,骇客和入侵者一般认为,,黑客,是一个精通计算机技术的特殊群体。
可以把,黑客,分为 3类:一类称为,侠客( Hackers) ‖,他们多是好奇者和爱出风头者;一类称为,骇客( Crackers) ‖,
他们是一些不负责的恶作剧者;一类称为,入侵者
( Intruder),他们是有目的的破坏者。随着 Internet的普及,
,黑客,的活动日益猖獗,造成了巨大的损失。下面略举几例。
1995年 8月 21日,设防严密的花旗银行 ( CITY BANK) 被前苏联克格勃人员通过 Internet侵入,损失现金高达 1 160万美元 。 而为了弄清真相并防止入侵者故伎重演,花旗银行又不得不出资 580万美元的现金让入侵者讲述入侵秘密和详细步骤 。
黑客们攻击的对象往往是要害部门。据美国五角大楼的一个研究小组称,美国国防部一年中遭受到的攻击就达 25万次之多。 1997年由于黑客入侵美国空军防务系统,迫使五角大楼把防务网络关闭 24小时。 1996年 8月 17日,黑客入侵美国司法部,将,美国司法部,的主页改成了,美国不公正部,,
将司法部部长的照片换成了阿道夫 ·希特勒,将司法部的徽章换成了纳粹党的党徽,并加上一张色情女郎的图片作为司法部长的助手。同年的 9月 18日,黑客们又将美国,中央情报局,
主页改成了,中央愚蠢局,。
1999年 4月 26日,台湾大同工学院资讯工程系学生陈盈豪制造的,CIH‖病毒发作,震撼了全球,据保守的估计至少有 6
000万部电脑受害 。
2000年 2月 5日夜晚,国际著名的 Yahoo,CNN( 电子港湾 ),
亚马逊,微软网络等五大网站在 DDoS( Distributed Denial of
Service,分布式拒绝服务 ) 有组织地攻击下相继落马 。
DDoS是一种让计算机或网络大量地超载使用 TCP,UDP或
ICMP的网络通信量从而使之崩溃的攻击 。 在 2月 7,8,9三天里,它使这些著名网站的损失高达 10亿美元,其中仅营业和广告收入一项就达 1亿美元 。
2000年 5月 4日,开始发作的,I Love You‖病毒如野火般地肆虐美国,进而袭击全球,至少造成 100亿美元的损失 。
2.1.2 黑客攻击的发展趋势目前,黑客攻击有如下发展趋势:
( 1) 攻击工具的简单化:目前,黑客工具的技术性越来越高,使用越来越简单,并且大多是图形化界面,容易操作 。
( 2) 攻击目标针对化:黑客攻击的目标越来越有针对性,并主要是针对意识形态和商业活动,如 Yahoo事件 。
( 3) 攻击方式系统化:黑客在攻击方式,时间,规模等方面一般都进行了长时间的准备和部署,系统地进行攻击 。
( 4)攻击时间持续化:由于网络协议的漏洞和追踪力量的薄弱,
黑客肆无忌惮地对目标进行长时间的攻击。例如,cnns.net网站曾承受过 DDoS长达 40余天的攻击。
2.1.3 黑客攻击的一般过程尽管黑客攻击目标偏好不同、技能有高低之分、手法多种多样,
但是他们对目标施行攻击的流程却大致相同,基本如图 2.1所示。
下面介绍各个步骤的基本内容 。
1,踩点黑客确定了攻击目标后,一般要收集被攻击者的信息:
目标机的类型,IP地址,所在网络的类型;
操作系统的类型,版本;
系统管理人员的名字,邮件地址;
…… 。
对攻击对象信息的分析,可找到被攻击对象的脆弱点 。 为了获得这些信息,黑客要利用一些技术 。 例如:
·运行一个 host命令,可以获得被攻击目标机的 IP地址信息,
还可以识别出目标机操作系统的类型;
·利用 whois查询,可以了解技术管理人员的名字;
·运行一些 Usernet和 Web查询,可以了解有关技术人员是否经常上 Usernet等;
· 利用 DNS区域传送工具 dig,nslookup及 Windows版本的
Sam Spade( 网址为 http://www.samspade.org),获取目标域中的所有主机信息;
·一个管理人员经常讨论的问题也可以表明其技术水平的高低等。
2,扫描
,苍蝇不叮无缝的蛋,。 系统的漏洞会为攻击提供机会和入口 。 在踩点获得的信息的基础上,黑客常编写或收集适当的工具,在较短的时间内对目标系统进行扫描,进一步确定攻击对象的漏洞 。
漏洞扫描就是自动检测计算机网络系统在安全方面存在的可能被黑客利用的脆弱点。漏洞扫描技术通过安全扫描程序实现。所谓扫描,包含了非破坏性原则,即不对网络造成任何破坏。在实施策略上可以采用被动式和主动式两种策略。
( 1) 被动式扫描策略被动式扫描策略主要检测系统中不合适的设置,脆弱的口令以及同安全规则相抵触的对象,具体还可以分为如下几类:
( a) 基于主机的扫描技术,通常它涉及系统的内核,文件的属性,操作系统的补丁等问题,能把一些简单的口令解密和剔除,能非常准确地定位系统存在的问题,发现漏洞 。 缺点是与平台相关,升级复杂 。
( b) 基于目标的扫描技术,基于目标的扫描技术的基本原理是基于消息加密算法和哈希函数,如果函数的输入有一点变化,输出就会发生很大变化 。 这样文件和数据流的细微变化就会被感知 。 基于目标的扫描技术通常用于检测系统属性和文件属性,如数据库,注册号等 。 由于这种技术的加密强度极大,不易受攻击,比较安全和可靠 。
( c) 基于应用的扫描技术,这种技术主要用于检查应用软件包的设置和安全漏洞 。
( 2) 主动式扫描策略主动式扫描策略是基于网络的扫描技术,主要通过一些脚本文件对系统进行攻击,记录系统的反应,从中发现漏洞。
( 3) 扫描工具目前,扫描程序已经发展到了几十种,有的小巧快捷,有的界面友好;有的功能单一,有的功能完善 。 被广泛使用的扫描程序有如下一些 。
( a) Ping扫射
Ping扫射可以判别主机是否,活动,。 Ping向目标主机发送
ICMP回射请求分组,并期待目标系统关于活动的回射应答分组 。 常用的 Ping扫射工具有:操作系统的 Ping命令和用于扫射网段的 fping和 WS_ping等 。
( b) 端口扫描扫描 TCP/UDP端口号,可以确定正在运行的服务及其版本号,以发现相应的服务程序的漏洞 。
在 UNIX系统上运行的重要扫描工具有:
· Netcat( http://www.statake.com/research/tools/network utilities)
·Nmap( http://www.insecure.org/nmao)
在 Windows系统上运行的重要扫描工具有:
·superscan( http://www.webattack.com/get/superscan.shtml)
·NetScan Tool Pro 2003( http://www.nwpsw.com)
( c) 旗标获取旗标获取是通过一个打开的端口,来联系和识别系统提供的服务及版本号 。 如连接到一个端口,按几次 Enter键,看返回的信息是什么 。
( d) 操作系统检测许多漏洞与操作系统有关。因此,黑客要首先确定操作系统的类型。如图 2.2所示,目前操作系统检测按技术原理可以分为:利用系统旗标信息和利用 TCP/IP堆栈指纹两种;按鉴别的主动性可以分为:主动鉴别和被动鉴别。
目前常用的操作系统检测工具有:
·Nmap
·Queso( http://www.spostools.org/projectz/gueso)
·Siphon( http://www.siphon.datanerds.net)
3,查点查点就是搜索特定系统上用户,用户组名,路由表,SNMP
信息,共享资源,服务程序及旗标等信息 。
查点采用的技术依操作系统而定:
( 1) Windows系统上的主要技术
·查点 NetBIOS线路
·空会话 ( Null Session)
·SNMP代理
·活动目录 ( Active Directory)
·其他
Windows系统上使用的主要工具:
( a) Windows系统命令,net view,nbtstat,nbtscan和 nltest。
( b) 第三方工具
·Netviewx( http://www.ibt.ku.dk/jesper/NetViewX/default.htm)
·Userdump( http://www.hammerofgod.com/downloadt.htm)
·User2sid( http://www.ntbugtrag.com)
·GetAcct( http://securityfriday.com)
·DumpSec( http://www.somarsoft.com)
·Legion( http://www.legionlan.com)
·NAT( http://www.hackingexposed.cotm
( 2) UNIX系统上的主要技术
·PRG查点
·NIS查点
·NFS查点
·SNMP查点
UNIX系统上常用的工具有,rpcinfo,rpcdump,shomount,finger、
rwho,ruser,nmap,telnet,nc和 snmpwalk等。
4,模拟攻击进行模拟攻击,测试对方反应,找出毁灭入侵证据的方法。
5,获取访问权获取访问权是入侵的正式开始 。
( 1) Windows系统上的主要技术
·NetBIOS-SMB密码猜测;
·窃听 LM及 NTLM认证散列
·攻击 IIS Web服务器
·远程缓冲区溢出
( 2) UNIX系统上的主要技术
·蛮力密码攻击
·密码窃听
·数据驱动式攻击 ( 如缓冲区溢出,输入验证,字典攻击等 )
·RPC攻击
·NFS攻击
·针对 X-Windows系统的攻击
·其他著名的密码窃听工具:
·sniffer pro( http://www.sniffer.com)
·TCPdump
·LC4( L0phtcrack version 4,http://www.atstake.com/reseach/lc)
·readsmb
著名的字典攻击工具:
·LC4
·John the RIPper( http://www.openwall.com/jiohn)
·NAT
·SMBGrind( http://www.nai.com)
·fgrind
6,权限提升黑客一旦获取了访问权,就会试图将自己的普通用户权限提升至超级用户权限,以对系统进行完全控制 。
权限提升主要的技术是口令破解 ‘ 利用漏洞以及不当配置等进行 。
常用口令破解工具有,John The RIPper。 可以得到管理员权限的工具有,lc_message,getadmin,sechole,Invisible,Keystroke、
Logger( http://www.amecisco.com/iksnt.htm)。
7,窃取窃取就是对一些敏感数据的篡改、添加、删除和复制,
以及通过对敏感数据的分析,为进一步攻击应用系统做准备。
8,掩盖踪迹掩盖踪迹,即清除自己所有的入侵痕迹。主要工作有:
禁止系统审计、隐藏作案工具、清空事件日志(使用 zap、
wzap,wted等)、替换系统常用操作命令等。
9,创建后门创建后门是为了以后的入侵打开一个缺口,使入侵者能卷土重来,以特权用户身份控制整个系统 。 主要工作有:
·创建具有特权用户权限的虚假用户账号;
·安装批处理或远程控制工具;
·使用木马程序替换系统程序;
·安装监控程序;
·感染启动文件 。
黑客常用的创建后门的工具有:
· rootkit,cron,at,secadmin,Invisible Keystoke,remove.exe、
rc( UNIX)
·Windows启动文件夹
·su7( http://www.sub7.net)
·Netcat( http://www.atstake.com/research/tools)
·VNC( http://www.alvnc.com)
·BO2K( http://www.sourceforge.net/projects/bo2k)
10,拒绝服务攻击拒绝服务是指利用协议或不同系统实现的漏洞,使目标服务器资源耗尽或过载、没有能力向外提供服务的攻击。
2.2 信息收集类攻击返回
2.2.1 Sniffer
Sniffer( 嗅觉器 ) 是一个用于捕获网络报文的软件 。 它可以用来进行网络流量分析,找出网络中潜在问题,确定在通信所使用的多个协议中,属于不同协议的流量大小,哪台主机承担主要协议的通信;哪台主机是主要的通信目的地,报文发送的时间是多少,主机间报文传送的时间间隔等,是网络管理员的一个常用工具 。 当一段网络运行不好,速度较慢而又找不出问题所在时,用 Sniffer往往可以做出精确判断 。
Sniffer可以捕获网络报文这一用处,也可以被黑客用来捕获网络中传输的用户口令、金融账号、机密或敏感数据、专用数据、低级协议信息等。
1,Sniffer的工作原理
( 1) 在共享网络中的嗅觉器共享信道是 Sniffer捕获信息的根本所在 。 这里,共享意味着一台计算机能够接收到其他计算机之间通信的信息,或者说同一网段的网络所有接口都有访问在物理媒体上传输数据的能力 。 以太网的特点就是这样的一种共享网络 。 在以太网中,
每个接口有一个与其他网络接口不同的硬件地址,同时网段还有一个向所有传输的广播地址 。 一个合法的网络接口应该只响应这两种地址 。
图 2.3为网卡对报文的处理过程。显然,当局域网中的某台计算机将网络接口配置成混杂( Promiscuous) 模式后,就可以接收网络上的所有报文和数据帧了。这台计算机上安装的用于处理捕获报文的软件,就是一个嗅觉器。
可见,Sniffer工作在网络环境中的底层,它会,嗅,到所有在网络上传输的数据。由于在一个以太网中,账号和口令都是以明文形式传输的,因此一旦入侵者获取了其中一台主机的管理员权限,并将其配置成混杂模式,它就有可能对网络中的其他所有计算机发起攻击。
( 2) 交换式网络上的 Sniffer
交换式网络不是共享网络,交换式设备可以准确地将数据报文发给目的主机 。 这样,安装了 Sniffer的主机可能收不到某些数据包,
Sniffer软件也就不能工作 。
但是,在交换环境中,Sniffer攻击也并非完全不可能 。 一个简单的方法,就是将安装有 Sniffer软件的计算机伪装成为网关 。 网关是一个网络与其他网络之间的接口,所有发往其他网络的数据包都必须经过网关转发,即一个局域网上发往其他网络的数据帧的目标地址都是指向网关的 。 如果把安装有 Sniffer软件的计算机伪装成为网关,Sniffer就能嗅到本地网中的数据 。 如图 2.4所示,一个交换网络中有三台主机:
A,IP地址为 202.113.240.1;
B,IP地址为 202.113.240.2,入侵者;
C,IP地址为 202.113.240.3,网关 。
在正常情形下,B无法收到 A与 C之间的通信报文的 。 但是,
若在 B上运行 ARP欺骗的软件 ARPredirect( dsniff软件的一部分 ),并发出一条命令
ARPredirect –t 202.113.240.2 202.113.240.3
就可以将该网络中主机发送的数据报文重定向:
ARPredirect就开始向 A发假冒的 ARP应答,说 B是网关; A就会刷新自己的缓存,将 B的硬件地址作为网关地址保存。这样,
当 A需要同其他网络中的主机进行通信时,就会依据缓存中的网关地址(现在是 B),先把数据包发往 B; B可以先窃取 A发出的数据包中的有关信息,再用 IP转发或其他软件将这些数据包转发到 C,发出去。对 A来说,一切都非常正常,但有关内容已经被窃去。
当然,如果在 A上用 ARP命令查看 ARP高速缓存,可以发现网关地址已经被换掉了。
因此,在交换环境中,一个 ARP( 地址解析 ——将 IP
地址解析为局域网中的 MAC地址)欺骗加上一个 Sniffer
软件,同样可以实现 Sniffer攻击。
2,Sniffer产品
( 1) Sniffer Pro
Sniffer Pro是 NAI公司开发的一种图形界面嗅觉器 。 它功能强大,能全面监视所有网络信息流量,识别和解决网络问题,
是目前唯一能够为七层 OSI网络模型提供全面性能管理的工具 。
( 2) Libpcap/Winpcap
Libpcap是 Packet Capture Library( 数据包捕获函数库)的缩写与重组。它不是一个 Sniffer,但是它提供的 C语言函数接口可用于对经过网络接口数据包的捕获,以支持 Sniffer产品的开发。
Winpcap是 Libpcap的 Win32版本。
( 3) Dsniff
Dsniff是 Dug Song编写的一个功能强大的工具软件包,它可以支持多种协议类型,包括 FTP,telnet,rlogin,Ldap、
SMTP,Pop,Imap,IRC,ICQ,MS-CHAP,Npster、
Citrix,ICA,PCAnywher,SNMP,OSPF,PPTP,X11、
NFS,RIP,RIP,VRRP,Oracle SQL *Net,Microsoft SQL
protocol,Postgre SQL等 。
( 4) Tcpdump/Windump
Tcpdump是一个传统的嗅觉器,通过将网卡设置为混杂模式截取帧进行工作。
3,Sniffer的防范
Sniffer攻击属第二层攻击,通常是入侵者进入目标系统后,为了获取更多的信息而采用的攻击手段 。 为了达到好的 攻击效果,它要被放置在下列位置:
·被攻击对象 ( 主机或网络 ) 附近;
·网关上 。
Sniffer的防范方法大体有如下一些。
( 1) 规划网络一般将网络分段划分得越细,Sniffer收集到的信息越少 。
( 2) 采用加密通信加密后,即使 Sniffer捕获了数据,也难于获得数据的原文。目前比较流行的做法是使用 SSL协议和 SSH( 下在地址为
http://www.openssh.com) 安全产品。
( 3) 监测 Sniffer
监测 Sniffer就是确定网络上有无 Sniffer在运行 。 当有 Sniffer运行时,
会观察到一些异常情况,如
( a) 用 ping命令等测试发现网络出现较高的丢包率,因为监听会使数据包不顺畅传送;
( b) 通过带宽控制器观察网络带宽反常;
( c) 使用 MD5 校验工具 ( 如 TripWare—— 下载地址为
http://www.tripware.com) 等,发现单机上的 Sniffer。
( d) 使用 Anti-Sniffer,promisc,cmp
( http://www.secritysoftwaretech.com/antisniff/) 等,发现大型网络上的 Sniffer。
( e) 测试网络接口有无被设置成混杂模式,因为虽然在非混杂模式下可以运行 Sniffer,但只有在混杂模式下才可以捕获共享网络中的所有会话 。 对于 SunOS,Linux和 BSD Unix可以采用命令:
ifconfig -a
2.2.2 扫描器扫描器是自动检测远程或本地主机安全性弱点的程序,它不仅是黑客们的作案工具,也是管理人员维护网络安全的有力工具。主要用于收集系统信息(远程操作系统的识别、网络结构的分析以及其他敏感信息的收集)和发现漏洞。常用的扫描器很多,如网络安全扫描器 NSS,超级优化 TCP端口检测程序 Strobe,安全管理员网络分析工具 SATAN等。
1,扫描类型具体地说,扫描是通过向目标主机发送数据报文,从响应中获得目标主机的有关信息。按照扫描方式,可以将扫描分为如下 3种主要类型。
( 1) 地址扫描地址扫描就是判断某个 IP地址上有无活动主机,以及某台主机是否在线 。
最简单的地址扫描方法是使用 ping命令,用 ping命令向目标主机发送 ICMP回显请求报文,并等待 ICMP回显应答 。 如果 ping不到某台主机,就表明它不在线 。
Ping命令的发送可以手工一条一条地进行,也可以用 Fping
等根据进行大范围的地址扫描,得到一个网段中的在线地址列表 。
但是,由于用户安全意识的提高,很多路由器和防火墙的规则中都增加了丢弃 ICMP回显请求数据包,或在主机中进行了禁止请求应答,使得地址扫描难于进行。
( 2) 端口扫描在 TCP/IP网络中,端口号是主机上提供的服务的标识。例如,FTP服务的端口号为 21,Telnet服务的端口号为 23,DNS
服务的端口号为 53,Http服务的端口号为 53等。入侵者知道了被攻击主机的地址后,还需要知道通信程序的端口号;只要扫描到相应的端口被打开着,就知道目标主机上运行着什么服务,以便采取针对这些服务的攻击手段。
( 3) 漏洞扫描漏洞是系统所存在的安全缺陷或薄弱环节 。 入侵者通过扫描可以发现可以利用的漏洞,并进一步通过漏洞收集有用信息或直接对系统实施威胁 。 管理人员可以通过扫描对所管理的系统和网络进行安全审计,检测系统中的安全脆弱环节 。
常用的扫描工具有 Xscan等。
2,扫描技术
( 1) 半开放扫描
TCP连接通过三次握手建立 。 图 2.5表示了一个建立 TCP连接的三次握手过程 。 若主机 B运行一个服务器进程,则它要首先发出一个被动打开命令,要求它的 TCP准备接收客户进程的连接请求,然后服务器进程就处于,听,状态,不断检测有无客户进程发起连接的请求 。
若主机 A中运行有客户进程 。 当它需要服务器的服务时,就要向它的 TCP发出主动连接命令,由其 TCP向主机 B的 TCP发出连接请求报文,在该连接请求报文中将同步比特位置 1,并选择一个将要传送的数据的序号 x。 主机 B收到 A的连接请求报文,就完成了第一次握手 。
主机 B如果同意连接,其 TCP就向 A发回确认报文 。 在该确认报文中,应将 SYN置 1,确认序号置 x+1,同时为自己选择一个序号 y。
主机 A接收到该确认报文,完成第二次握手 。
接着,主机 A的 TCP就还要向主机 B发出确认,并置确认序号为
y+1。 主机 B收到主机 A的确认报文,完成第三次握手过程。
完成这样一个三次握手,才算建立了可靠的 TCP连接,才能开始正式传输数据报文 。
攻击者进行端口扫描最常用的方法就是尝试与远程主机的端口建立一次正常的 TCP连接。连接成功,表示端口开放。这种扫描方式称为,TCP connect扫描,。但是,这种扫描往往会被远程系统记入日志。针对这一缺陷,便产生了半开放扫描 ——,TCP SYN扫描,。因为,当客户端发出一个 SYN连接请求报文后,如果收到了远程目标主机的 ACK/SYN确认,
就说明远程主机的该端口是打开的;而若没有收到程目标主机的 ACK/SYN确认,而是收到 RST数据报文,就说明远程主机的该端口没有打开。这样对于扫描要获得的信息已经足够了,也不会在目标主机的日志中留下记录。
( 2) FIN扫描半开放扫描广泛地应用,使得防火墙和路由器都采取了相应的措施,会对端口扫描进行完全记录 。 有些入侵扫描系统也能检测到这类扫描,许多过滤设备能过滤 SYN数据报文 。
于是端口扫描开始另辟溪径,采用 FIN扫描 。
FIN是中断连接的数据报文 。 很多日志不记录这类报文 。
,TCP FIN扫描,的原理是向目标端口发送 FIN报文,如果收到了 RST的回复,表明该端口没有开放;反之 ( 没有回复 ),
该端口是开放的,因为打开的端口往往忽略对 FIN的回复 。 这种方法还可以用来区别操作系统是 Windows,还是 Unix。
但是,有的系统不管端口打开与否,一律回复 RST。 这时,
FIN扫描就不适用了。
( 3) 反向扫描反向扫描是一种地址扫描技术,主要用于获得可到达网络和主机的地址列表,借以推断出一个网络的结构分布图。
其基本原理是利用了多数路由器只对报文中的地址进行检查,
而不分析报文的内容。具体方法是使用可以穿过防火墙的 RST
数据报文对网络地址进行扫描。向一个网络中的所有地址发送 RST报文后,路由器会对这些报文进行检查:当目标地址不可到达时,就送回 ICMP差错报文;没有返回的 ICMP差错报文的,就是主机在线。根据不在线的主机,进行求逆可以获得在线主机列表。
( 4) 慢速扫描慢速扫描就是使用非连续性端口进行时间间隔长且无定率的扫描,并使用不一致的源地址,使这些扫描记录无规律地分布在大量的日志中,被淹没,给日志分析造成困难。
( 5) 乱序扫描乱序扫描就是对扫描的端口号集合,随机地产生扫描顺序,并且每次的扫描顺序不同。这就给对入侵检测系统的发觉带来困难。
2.2.3 其他信息收集类攻击
1,利用信息获取命令举例
( 1) ping命令
ping命令的基本格式,ping <主机名 >
ping还有许多高级应用,如命令
ping –f <主机名 >
可以向指定主机发送大量数据,使该主机忙于回应而死机 。
( 2) tracert命令
tracert命令用来跟踪消息从一台主机到另一台主机的路径,并显示。
( 3) rusers
这个命令都是 Unix命令,用于收集目标计算机上的有关用户的信息 。
( 4) host/nslookup命令这两个命令都是 Unix命令,可以得到包括操作系统,机器和网络的许多信息 。
( 5) showmount命令
showmount命令可以列出一台机器上共享的所有目录及其相关信息 。
( 6) rpcinfo命令
rpcinfo命令报告关于一台主机上注册了的可供外部进程调用的过程服务的编号、版本、端口和名称。
2,利用信息服务
( 1) whois服务
whois是一个客户程序 。 通过它攻击者可以收集到下列信息:
·网络注册机构
·网络域名
·主机信息
·网络 IP地址分配
·网络管理人员信息,如电子邮件、电话号码等。
( 2) finger服务
finger服务同 rusers 命令一样,用于收集目标计算机上的有关用户的信息 。
( 3) DNS域名转换
DNS( Domain Name Service,域名服务系统 ) 提供域名与 IP地址之间的转换 。 攻击者只需实施一次转换,就能得到目标系统 ( 网络 )
的所有主机名称和内部 IP地址 。
( 4) LDAP服务攻击者可以使用 LDAP( Light Directory Access Protocol,简化目录访问协议 ) 服务窥探网络内部的系统及其用户信息 。
( 5) NIS服务
NIS( Network Information Service,网络信息服务)是为分布式网络环境设计的一个统一管理系统,它把公共的配置文件,如用户账号和口令文件、用户组文件、主机名与 IP对应文件,转变成一种映射数据结构。攻击者非法获取 NIS/NIS+的使用权后,就可以获取有关信息。
2.3 入侵类攻击返回
2.3.1 口令攻击口令机制是资源访问的第一道屏障 。 攻破了这到屏障,就获得了进入系统的第一道大门 。 所以口令攻击是入侵者最常用的攻击手段 。
口令攻击可以从破解口令和屏蔽口令保护两个方面进行。
下面主要介绍口令破解技术
1,口令破解的基本技术口令破解首先要获取口令文件,然后采取一定的攻击技术进行口令的破解 。 下面介绍口令破解的基本方法 。
( 1) 口令字典猜测破解法攻击者基于某些知识,编写出口令字典,然后对字典进行穷举或猜测攻击。表 2.1为口令字典的构造方法。
目前,Internet上已经提供了一些口令字典,从一万到几十万条,可以下载。此外,还有一些可以生成口令字典的程序。
利用口令字典可以以猜测方式进行口令破解攻击。
( 2) 穷举破解法有人认为使用足够长的口令或者使用足够完善的加密模式,
就会攻不破 。 事实上没有攻不破的口令,这只是个时间问题 。
如果有速度足够快的计算机能尝试字母,数字,特殊字符所有的组合,将最终能破解所有的口令 。 这种类型的攻击方式通过穷举口令空间获得用户口令称为穷举破解法或蛮力破解,
也叫强行攻击 。 如先从字母 a开始,尝试 aa,ab,ac等等,然后尝试 aaa,aab,aac…… 。
攻击者也可以利用分布式攻击。如果攻击者希望在尽量短的时间内破解口令,也可能会求助几个有大批计算机的公司并利用他们的资源破解口令。
( 3) 组合破解法词典破解法只能发现词典单词口令,但是速度快。穷举破解法能发现所有的口令,但是破解时间很长。鉴于很多管理员要求用户使用字母和数字,用户的对策是在口令后面添加几个数字,如把口令 computer变成 computer99。 使用强行破解法又非常费时间。由于实际的口令常常很弱(可以通过对字典或常用字符列表进行搜索或经过简单置换而发现的口令)。
这时可以基于词典单词而在单词尾部串接几个字母和数字。
这就是组合破解法。
( 4) 其他破解类型
·社会工程学:通过对目标系统的人员进行游说,欺骗,利诱,
获得口令或部分 。
·偷窥:观察别人敲口令 。
·搜索垃圾箱。
2,Unix系统的口令攻击
Unix系统用户的口令,本来是经加密后保存在一个文本文件
passwd中,一般存放在 /etc目录下 。 后来由于安全的需要,
把 passwd文件中与用户口令相关的域提取出来,组织成文件
shadow,并规定只有超级用户才能读取 。 这种分离工作也称为 shadow变换 。 因此,在破解口令时,需要作 UnShadow变换,将 /etc/passwd与 /etc/shadow合并起来 。 在此基础上才开始进行口令的破解 。
真正的加密口令一般是很难逆向破解的,黑客们常用的口令入侵工具所采用的技术是仿真对比,利用与原口令程序相同的方法,通过对比分析,用不同的加密口令去匹配原口令。下面是口令破解工具 Crack的主要工作流程。
它采用逆向比较法进行口令破解 。
1 准备:对口令文件作 UnShadow变换;
2 下载或自己生成一个字典文件;
3 穷举出口令字典中的每个条目,对每个单词运用一系列规则 。 典型的规则有:
·使用几个单词或数字的组合;
·大小写交替使用;
·把单词正向,反向拼写后,接在一起;
·在单词的开头或结尾加上一些数字;
规则可以多种多样 。 规则越多,破译时间越长;但成功率越高 。
4 调用 crypt( ) 函数对使用规则生成的字符串进行加密变换;
5 用一组子程序打开口令文件,取出密文口令,与 crypt( ) 函数的输出进行比较 。
循环 3,4两步,直到口令破解成功。
3,网络服务口令攻击网络服务口令攻击往往是一种远程在线攻击,攻击过程大致如下:
(1 )建立与目标网络服务的网络连接;
(2) 选取一个用户列表文件和一个字典文件;
(3) 在用户列表文件和一个字典文件中,选取一组用户和口令,按照网络服务协议规定,将用户名和口令发给目标网络服务端口 。
(4) 检测远程服务返回信息,确定口令尝试是否成功 。
循环 (2),(3),(4)步,直到口令破解成功。
4,增强口令安全性的措施口令攻击的成功与否,取决于多种因素,如口令长度,口令有效期,口令加密算法的加密强度,口令系统的安全机制等 。
此外,采用下面一些措施,也可以增强口令的安全性:
·除进行口令验证外,还应使口令完全不可读 ( 包括超级用户 ) 。
·在选择密码时,就对密码进行过滤 。
·对字典或字符列表进行扫描,剔除用户选择的弱口令 。
·采用口令与智能卡结合的方式登录系统 。
·使用一次性口令。
2.3.2 缓冲区溢出攻击
1,概述缓冲区是程序运行时在内存中为保存给定类型的数据而开辟的一个连续空间。这个空间是有限的。当程序运行过程中要放入缓冲区的数据太多时,就会产生缓冲区溢出。
早在 1988年,美国康奈尔大学的计算机科学系研究生,23
岁的莫里斯( Morris) 利用了 UNIX fingered程序不限制输入长度的漏洞使缓冲器溢出。 Morris又写了一段程序使他的恶意程序能以 root( 根)身份执行,并传播到其他机器上,结果造成
6000台 Internet上的服务器瘫痪,占当时总数的 10%。,SQL
Slammer‖蠕虫王的发作原理,就是利用未及时更新补丁的 MS
SQL Server数据库缓冲溢出漏洞。采用不正确的方式将数据发到 MS Sql Server的监听端口,这个错误可以引起缓冲溢出攻击。
目前新出现的 MSBLAST病毒正是利用了微软关于 RPC接口中远程任意可执行代码漏洞,,中招,的机器会反复重启,或者拷贝、粘贴功能不工作等现象。黑客如果成功利用缓冲漏洞,就有可能获得对远程计算机的完全控制,并以本地系统权限执行任意指令,如安装程序、查看或更改、删除数据、
格式化硬盘等,危害性不言而喻。
缓冲溢出漏洞是一种很普遍的漏洞 。 在 1998年 CERT的 13份建议中,有 9份是是与缓冲区溢出有关的,在 1999年,至少有半数的建议是和缓冲区溢出有关的 。 根据绿盟科技提供的漏洞报告 ( http://www.nsfocus.com),2002年共发现各种操作系统和应用程序的漏洞 1830个,其中缓冲区溢出漏洞有 432
个,占总数的 23.6%;而 2002年程度严重,影响范围最大的十个安全漏洞中,和缓冲区溢出相关的就有 6个 。
值得关注的是,缓冲器溢出攻击不是一种窃密和欺骗的手段,而是从计算机系统的最底层发起攻击,因此在它的攻击下系统的身份验证和访问权限等安全策略形同虚设;同时,
由于攻击者传输的数据分组并无异常特征,没有任何欺骗,
且用来实施缓存器溢出攻击的字符串非常多样化,无法与正常数据有效进行区分,因而传统安全工具(如防火墙)对这种攻击方式也无能为力。
2,缓冲溢出的基本原理缓冲区溢出的根本原因来自 C语言 ( 以及其后代 C++) 本质的不安全性:
·没有边界来检查数组和指针的引用;
·标准 C 库中还存在许多非安全字符串操作,如 strcpy(),sprintf(),
gets() 等 。
为了说明这个问题还必须看一看程序的内存映像 。
任何一个源程序通常都包括代码段和数据段,这些代码和数据本身都是静态的。为了运行程序,首先要由操作系统负责为其创建进程,并在进程的虚拟地址空间中为其代码段和数据段建立映射。
但是,光有静态的代码段和数据段是不够的,进程在运行过程中还要有其动态环境。一般说来,默认的动态存储环境通过堆栈(简称栈)机制建立。所有局部变量以及所有按值传递的函数参数都通过堆栈机制自动地进行内存空间的分配。分配同一数据类型相邻块的内存区域称为缓冲区。图 2.6为 Linux下进程的地址空间布局。当然,
C语言还允许程序员使用堆机制创建存储器,存储使用 malloc()获得的数据。不过,这与本节讨论的问题无关。
从逻辑上讲进程的堆栈是由多个堆栈帧构成的,其中每个堆栈帧都对应一个函数调用。当函数调用发生时,新的堆栈帧被压入堆栈;当函数返回时,相应的堆栈帧从堆栈中弹出。
尽管堆栈帧结构的引入为在高级语言中实现函数或过程这样的概念提供了直接的硬件支持,但是由于将函数返回地址这样的重要数据保存在程序员可见的堆栈中。当程序写入超过缓冲区的边界时,这就是所谓的,缓冲区溢出,。发生缓冲区溢出时,就会覆盖下一个相邻的内存块,导致一些不可预料的结果:也许程序可以继续,也许程序的执行出现奇怪现象,也许程序完全失败。
下面的程序是一个缓冲溢出的实例 。
例 2.3.1
#include <stdio.h>
int main(){
char name[5];
printf(―Please input your name:‖);
gets(name);
printf(―you are %s‖,name);
}
运行这个程序可以发现,当输入的字符数少时,程序运行正常;当输入的字符数太多时(超过 8),程序就不能正常结束。这就是缓冲区逸出所造成。
典型的堆栈帧结构如图 2.7所示。堆栈中存放的是与每个函数对应的堆栈帧。当函数调用发生时,新的堆栈帧被压入堆栈;当函数返回时,相应的堆栈帧从堆栈中弹出。
图 2.7 典型的堆栈帧结构堆栈帧的顶部为函数的实参,下面是函数的返回地址以及前一个堆栈帧的指针,最下面是分配给函数的局部变量使用的空间 。 一个堆栈帧通常都有两个指针,其中一个称为堆栈帧指针,另一个称为栈顶指针 。 前者所指向的位置是固定的,而后者所指向的位置在函数的运行过程中可变 。 因此,在函数中访问实参和局部变量时都是以堆栈帧指针为基址,再加上一个偏移 。 由图 2.7可知,实参的偏移为正,局部变量的偏移为负 。 当发生数据栈溢出时,多余的内容就会越过栈底,覆盖栈底后面的内容 。 通常,与栈底相邻的内存空间中存放着程序返回地址 。 因此,数据栈的溢出,会覆盖程序的返回地址,从而造成如下局面:要么程序会取到一个错误地址,要么将因程序无权访问该地址而产生一个错误 。
鉴此,C语言把这一艰巨任务交给了开发人员,要求他们进行边界检查,编写安全的程序。然而这一要求往往被人们忽视,从而给黑客有机可乘。
3,缓冲区溢出攻击如果当发生缓冲溢出时,能够准确地控制跳转地址,将程序流程引向预定的地址,CPU就会去执行这个指令。如果入侵者在预定的地址中放置代码用于产生一个 Shell,则当程序被溢出时,入侵者将获得一个 Shell。 该 Shell会继承被溢出的程序的权限(操作系统中,一个新产生的 Shell会继承生成该 Shell的程序的权限)。如果入侵者获得了某台服务器的一个普通权限账号,而服务器上某个以 root或 system权限运行的程序存在缓冲溢出漏洞,入侵者就可以利用该漏洞生成的
Shell去获得 root权限。而入侵者进行攻击的关键是修改以较高权限运行的程序跳转指令的地址。
入侵者为了修改以较高权限运行的程序跳转指令的地址,一般要经过如下 3步 。
( 1) 将需要执行的代码放到目标系统的内存 。 下面是两种常用方法:
·植入法:通过主机,将需要执行的代码 ( 目标平台上可执行的 ),
直接放到缓冲区 。
·利用已经有的代码:只要修改传入参数 。
( 2) 修改返回地址 。
( 3) 控制程序跳转,改变程序流程 。 下面是 3种常用方法 。
·修改程序返回地址:将预先设定好的地址替换程序原来的返回地址 。
·在缓冲区附近放一个函数指针,指向入侵者定义的指令 。
·使用 longjmp,C语言的 setjmp/longjmp是一个检验 /恢复系统,可以在检验点设定 setjmp( buffer),用 longjmp( buffer) 恢复检验点。
入侵者可以利用 longjmp( buffer) 跳转到预定代码。
4,缓冲区溢出防御措施
( 1) 安装安全补丁 。
( 2)编写安全的代码:缓冲区溢出攻击的根源在于编写程序的机制。因此,防范缓冲区溢出漏洞首先应该确保在 Linux
系统上运行的程序(包括系统软件和应用软件)代码的正确性,避免程序中有不检查变量、缓冲区大小及边界等情况存在。比如,使用 grep工具搜索源代码中容易产生漏洞的库调用,
检测变量的大小、数组的边界、对指针变量进行保护,以及使用具有边界、大小检测功能的 C编译器等。
( 3) 基于一定的安全策略设置系统:攻击者攻击某一个 Linux系统,
必须事先通过某些途径对要攻击的系统做必要的了解,如版本信息等,然后再利用系统的某些设置直接或间接地获取控制权 。 因此,
防范缓冲区溢出攻击就要对系统设置实施有效的安全策略 。 这些策略种类很多,下面只列举几个典型措施 。
·在装有 Telnet服务的情况下,通过手工改写,/etc/inetd.conf‖文件中的 Telnet设置,使得远程登录的用户无法看到系统的提示信息 。
具体方法是将 Telnet设置改写为:
telnet stream tcp nowait root /usr/sbin/tcpd/in.telnetd -h末尾加上
,-h‖参数可以让守护进程不显示任何系统信息,只显示登录提示 。
·改写,rc.local‖文件。默认情况下,当登录 Linux系统时系统运行
rc.local文件,显示该 Linux发行版本的名字、版本号、内核版本和服务器名称等信息,这使得大量系统信息被泄露。将,rc.local‖文件中显示这些信息的代码注释掉,可以使系统不显示这些信息。
一种方法是在显示这些信息的代码行前加,#”,
… # echo "">/etc/issue
# echo "$R">>/etc/issue
# echo "Kernel $ (uname -r)on $a $(uname -m)">>/etc/issue
#
# echo >>/etc/issue… 另一种方法是将保存有系统信息的文件
/etc/issue.net和 issue删除。这两个文件分别用于在远程登录和本地登录时向用户提供相关信息。删除这两个文件的同时,仍需要完成方法一中的注释工作,否则,系统在启动时将会自动重新生成这两个文件。
·禁止提供 finger服务 。 使用 finger命令可以显示本地或远程系统中目前已登录用户的详细信息 。 禁止提供 finger服务的有效方法是,
通过修改该文件属性,权限,使得只有 root用户才可以执行该命令 。
·处理,inetd.conf‖文件。该程序通过,/etc/inetd.conf‖文件获得
inetd在监听哪些网络端口,为每个端口启动哪些特定服务等信息,
会泄露大量的敏感信息。
( 4) 保护堆栈
·加入函数建立和销毁代码 。 前者在函数返回地址后增加一些附加字节,返回时要检查这些字节有无被改动 。
·使堆栈不可执行 ——非执行缓冲区技术,使入侵者无法利用缓冲区溢出漏洞。
2.3.3 格式化字符串攻击格式化字符串攻击也称为格式化字符串漏洞,同其他许多安全漏洞一样是由于程序员的疏漏造成的。不过,这种疏漏来自程序员使用格式化字符串函数的不严谨。
1,格式化字符串函数族
ANSI C定义了一系列的格式化字符串函数,如
·printf——输出到一个 stdout流 。
·fprintf——输出到一个文件流 。
·sprintf——输出到字符串 。
·snprintf——输出到字符串并检查长度 。
·vprintf——从 va_arg结构体输出到一个 stdout流 。
·vfprintf——从 va_arg结构体输出到一个文件流 。
·vsprintf——从 va_arg结构体输出到一个字符串 。
·vsnprintf——从 va_arg结构体输出到一个字符串并检查长度 。
·基于这些函数的复杂函数和非标准函数,包括 setproctitle,syslog、
err*,verr*,warm,*vwarm等 。
这些函数有一个共同的特点,就是都要使用一个格式化字符串。例如对于大家熟悉的 prontf函数,它的前一个参数,就是格式化字符串。
2,格式化字符串漏洞为了说明对格式化字符串使用不当而产生的格式化字符串漏洞,请先看下面的程序 。
例 2.3.2
#include <stdio.h>
int main()
{
char *name;
gets(s);
printf(s);
}
下面是该函数的两次运行结果。
abcde
abcde%08x,%08x,%08x
000002e2,0000ffe4,0000011d
也就是说,当输入,abcde‖时,输出仍然是,abcde‖。 而当输入,% 08x,%08x,%08x‖ 时,输出的却是
,000002e2,0000fe4,0000011d‖。 这就是格式化字符串漏洞所造成的问题 。 因为,在 printf函数中,s被解释成了格式化字符串 。 当调用该函数时,首先会解析格式化字符串,一次取一个字符进行分析:如果字符不是,%”,就将其原样输出;
若字符是,%”,则其后面的字符就要按照格式化参数进行解析 。 当输入,abcde‖时,由于没有包含,%”,所以每个字符都被原样输出了 。 而当输入,%08x,%08x,%08x‖时,就要将每个,%” 后面的,x‖都解释为一个十六进制的数据项,但函数没有这样 3个数据项 。 于是,就将堆栈中从当前堆栈指针向堆栈底部方向的 3个地址的内容按十六进制输出出来,这就是,000002e2,0000fe4,0000011d‖。
这就给人们一个启发:当格式化字符串中包含有许多,%” 时,
就会有机会访问到一个非法地址。
3,格式化字符串攻击的几种形式
( 1) 查看内存堆栈指针开始的一些地址的内容由例 2.3.1可知,使用类似于
printf (―%08x,%08x,%08x‖);
的语句,可以输出当前堆栈指针向栈底方向的一些地址的内容,甚至可以是超过栈底之外的内存地址的内容 。
( 2) 查看内存任何地址的内容所查看的内存地址内容,也可以从任何一个地址开始的内存内容 。 例如语句
printf (―\x20\02\x85\x08_%08x,%08x,%08x‖);
将会从地址 0x08850220开始,查看连续 3个地址的内容。
( 3) 修改内存任何地址的内容格式化字符串函数还可以使用一个格式字符,%n‖。 它的作用是将已经打印的字节数写入一个变量 。 请观察下面的程序 。
例 2.3.3
#include <stdio.h>
int main()
{
int i;
printf(―china \%n\n‖,(int*)&i);
printf(―i = %d\n‖,i);
}
程序运行的结果如下:
即 i的值为前面已经打印的字符串,china‖的长度 ——5。利用这一点,很容易改变某个内存变量的值。
例 2.3.4
#include <stdio.h>
int main()
{
int i = 5;
printf(―%108u%n\t‖,1,(int*)&i);printf(―i=%d\n‖,i);
printf(―%58s123%n\t‖,‖‖,&i);print(―i=%d\n‖,i);
}
程序执行结果如下:
语句
printf(―%108u%n\t‖,1,(int*)&i);
用数据,1” 的宽度 ——108来修改变量 i的值 。 而语句
printf(―%58s123%n\t‖,‖‖,&i);
是用字符串,” 加上字符串,123” 的存放宽度 ——23+3来修改变量 i的值 。
使用同样的办法,可以向进程空间中的任意地方写一个字节 。 以达到下面的目的:
·通过修改关键内存地址内容,实现对程序流程的控制;
·覆盖一个程序储存的 UID值,以降低和提升特权;
·覆盖一个执行命令;
·覆盖一个返回地址,将其重定向到包含 shell code的缓冲区中。
2.4 欺骗类攻击返回电子欺骗 ( spoofing) 是与认证 ( authentication) 和信任
( trust) 相联系的一个概念 。 认证是网络上的计算机相互间进行识别的过程 。 信任是经过认证获准连接的相互关系 。 信任有程度之分,有高度信任关系的两台计算机进行连接,一般不需要严格的认证;而信任程度较低的两台计算机之间进行连接,就需要进行严格的认证 。
电子欺骗就是在两台建立了信任关系的计算机之间,冒充其中一台,对另一台进行欺骗性连接,而后对其发起攻击。
这种欺骗可以通过不同的网络协议漏洞进行。电子欺骗的种类很多,下面仅举几个常见的例子加以介绍。
2.41 IP欺骗
1,IP欺骗原理
IP欺骗就是伪造别的机器的 IP地址用于欺骗第三者 。 假定有两台主机 S( 设 IP 地址为 201,15,192,01) 和 T( 设 IP 地址为
201.15.192.02),并且它们之间已经建立了信任关系 。 入侵者 X要对 T进行 IP欺骗攻击,就可以假冒 S与 T进行通信 。 下面介绍 IP欺骗的过程 。
( 1) 确认攻击目标施行 IP欺骗的第一步是确认攻击目标 。 为此要研究哪些系统容易被入侵 。 实际上,IP欺骗仅仅能对一些特定的服务进行 。 下面是容易受到电子欺骗攻击的服务类型:
·运行 Sun RPC( Sun Remote Procedure Call,Sun远程过程调用 )
的网络设备;
·基于 IP地址认证的任何网络服务;
·提供 R系列服务的机器,如提供 rlogin,rsh,rcp等服务的机器 。
其他没有这类服务的系统所受到的 IP欺骗攻击虽然有,但要少得多。
2) 使计划要冒充的主机无法响应目标主机的会话当 X要对 T实施 IP欺骗攻击时,就要假冒 S( 称为被利用者,现在地址为
201.15.192.01) 与目标主机 T进行通信 。 但是,X并不是地址 201.15.192.01的实际拥有者 。 因此,虽然 X可以用伪造的地址 201.15.192.01与 T进行通信时,但
201.15.192.02( T) 的所有回应信息都要发回到实际拥有 201.15.192.01的 S主机,
而不是 X。 也就是说,X的所有操作都是一种盲操作,它无法知道自己的操作是否被 T接受,也不知道 T发给自己的数据报文是什么内容,更糟糕的是会由于
201.15.192.01( S) 会对 201.15.192.02( T) 的数据报文产生反应而使自己的攻击露馅 。 为此,X一定要先设法使 201.15.192.01( S) 瘫痪,使之无法响应目标主机 201.15.192.02( T) 的数据报文 。
使 201.15.192.01( S) 瘫痪的办法是对其实施拒绝服务攻击,例如通过 SYN
Flood攻击使之连接请求被占满,暂时无法处理进入的其他连接请求 。
通常,黑客会用一个虚假的 IP地址(可能该合法 IP地址的服务器没有开机)向目标主机 TCP端口发送大量的 SYN请求。受攻击的服务器则会向该虚假的 IP地址发送响应。自然得不到回应,得到的是该服务器不可到达的消息。而目标主机的
TCP会认为这是暂时的不通,遂继续尝试连接,直到确信无法连接。不过这已经为黑客进行攻击提供了充足的时间
( 3) 精确地猜测来自目标请求的正确序列数
X为了使自己的攻击不露馅的另一个措施是取得被攻击目标
201.15.192.02( T) 主机的信任 。
由于 TCP是可靠传输协议,每台主机要对自己发送出的所有字节分配序列编号,供接收端确认并据此进行报文装配。
由图 2.5可以看出,在通过三次握手建立 TCP连接的过程中,
客户端首先要向服务器发送序列号 x; 服务器收到后通过确认要向客户端送回期待的序列号( x+1) 和自己的序列号。由于序列号的存在,给 IP欺骗攻击增加了不少难度,要求攻击者 X
必须能够精确地猜测出来自目标机的序列号,否则也会露馅。
那么,如何精确地猜测来自目标机的序列号呢?这就需要知道
TCP序列号的编排规律。如图 2.8所示,TCP序列号由 32位的字段提供,因此其值为 0~232-1,并且每一个 TCP连接交换的数据都是顺序编号的。
读者可能会认为,当服务器每次启动后会自动初始化 TCP的序列号为 0。但实际上并非如此。初始的 TCP序列号是由 tcp_init函数确定的,可以说是一个随机数,并且它每秒钟增加 128 000。这表明,在没有连接的情况下,TCP的序列号每 9.32小时会复位一次。而有连接时,每次连接把 TCP序列号增加 64 000。
此外,随机的初始序列号的产生也是有一定规律的 。 在
Berkeley系统中,初始序列号由一个常量每秒钟加 1产生 。
于是,TCP序列号的估计也并非绝对不可能。但是,为此攻击者还需要估计他的服务器与可信服务器之间的往返时间
( RTT)。 RTT一般是通过多次统计平均计算出来的。在没有连接的情况下,TCP序列号为 128 000*RTT; 如果目标服务器刚刚建立过一个连接,就还要加上 64 000。
根据估计的精确度的不同,可能出现以下 4中情形:
·估计的序列号是准确的:进入的数据将被放置在接收缓冲器供使用 。
·估计的序列号小于期待的数字:被放弃 。
·估计的序列号大于期待的数字,且在滑动窗口之内:被认为是一个未来的数据,TCP将等待中间缺少的数据 。
·估计的序列号大于期待的数字,但不在滑动窗口之内:被放弃,并返回一个期待的数据序列号。
上述分析是一种理论上的分析 。 黑客通常的做法是通过对目标主机的合法连接,来获得目标主机发送 IP数据包的序列记录 。 具体步骤为:
1 请求连接目标主机;
2 目标主机送回带序列号的回应;
3 记录序列号并断开连接 。
在一般情况下,通过对所记录的序列号的分析,可以猜测出认证要求序列号的规则 。
( 4) 冒充受信主机连接到目标主机 。
( 5) 根据猜出的正确序列号,向目标主机发送回应 IP包 。
( 6)进行系列会话。
2,IP欺骗的防范利用 IP欺骗进行的攻击比较普遍,而且产生的危害性很大 。
下面是 IP欺骗的一些预防策略:
( 1)放弃基于 IP地址的信任策略,IP欺骗是基于 IP地址信任的。而 IP地址很容易伪造。因此,阻止这类攻击的一种非常简单的方法是放弃以 IP地址为基础的验证。例如,不允许 r*
(rlogin,rsh,rcp等 )类远程调用命令的使用、删除,rhost文件、清空 /etc/hosts.eauiv文件等,迫使所有的用户使用其他远程通信手段(如 Telnet,SSH等)。
( 2) 使用随机化的初始序列号:序列号是接收方 TCP进行合法检查的一个重要依据 。 黑客攻击能够得逞的一个重要因素就是,序列号有一定的选择和增加规律 。 堵塞这一漏洞的方法就是让黑客无法计算或猜测出序列号 。 Bellovin提出了一个公式:
ISN = M + F(localhost,localport,remotehost,remoteport)
其中,M为 4微秒定时器,F为加密 Hash函数,localhost为本地主机,localport为本地端口,remotehost为远方主机,
remoteport为远方端口。 Bellovin建议 F是一个结合连接标识符和特殊矢量(随机数,基于启动试卷的密码)的 HASH函数,
它产生的序列号不能通过计算或猜测出。
( 3) 在路由器中加上一些附加条件:这些条件包括:不允许声称是内部包的外部包 ( 源地址和目标地址都是本地域地址 ) 进入 ——防止外部攻击者假冒内部主机的 IP欺骗;禁止带有内部资源地址的内部包出去 ——防止内部用户对外部站点的攻击 。 当然,
这一措施对于实施欺骗的主机和被攻击的主机处于同一子网络内部或欺骗主机假借被攻击主机的外部信任主机的攻击,是无效的 。
( 4) 配置服务器,降低 IP欺骗的可能:分析自己的服务器,看哪些服务容易遭受 IP欺骗攻击,并考虑这些服务有无保留的必要 。
( 5)使用防火墙和其他抗 IP欺骗的产品。
2.4.2 TCP会话劫持
1,关于 TCP会话劫持及其攻击原理会话劫持 (Session Hijack)与 IP欺骗有点相似 。 假设 A,B,C是一个网段上的三台主机,如图 2.4所示 。 其中,B是一台被入侵者控制了的主机,A,C是两台正在会话的主机 。 由于三台主机在一个
( 以太 ) 网段上,所以 B能收到 A与 B的所有数据包 。
如果当 A正等待 C的数据包时,C抢先给 A一个伪造的数据包,
A就会对这个数据包进行回应,B也再次响应 。 当 C的真正的数据包传送到 A时,由于 A所期待的序列号已经变化而不再认识 C的数据包,
遂将之丢弃,继续同 B( 冒充 A) 会话 。
C无法与 A进行会话,却不知道问题所在,会误 K数据报文认为是网络一时故障 。 于是不停向 A发送 ACK数据报文,试图重传 。 而 A却不断将这些数据报文丢弃 。 这样不停地重复,就会产生 ACK―风暴,。
这是一种结合了嗅探以及欺骗技术在内的攻击手段。广义上说,
会话劫持就是在一次正常的通信过程中,黑客作为第三方参与到其中,或者是在数据流(例如基于 TCP的会话)里注射额外的信息,
或者是将双方的通信模式暗中改变,即从直接联系变成有黑客联系。
2,TCP会话劫持攻击原理造成 TCP会话劫持的原因有 2点:
( 1) 传统的以太网以共享方式工作,每一个节点都可以接收到其他节点之间的通信 。
( 2) 主机只在连接时进行一次 IP地址的验证 。 在 TCP连接的过程中,TCP程序只跟踪序列号,而不检查 MAC地址 。 所以一旦有 MAC地址发生变化 ( 入侵者冒充信任者 ),计算机不会发现 。
因此,入侵者通过了解目标主机产生序列号的方式,猜测出 SYN/ACK包中的序列号,就可以冒充受信计算机与目标主机进行通话。
3,会话劫持攻击工具
( 1) Juggernaut
Juggernaut是由 Mike Schiffman开发的一个可以被用来进行 TCP会话攻击的网络 sniffer的开放的自由软件 。 可以运行于 Linux操作系统的终端机上,
安装和运行都很简单 。 可以设置值,暗号或标志这三种不同的方式来通知
Juggernaut程序是否对所有的网络流量进行观察 。 例如,一个典型的标记就是登录暗号 。 无论何时 Juggernaut发现这个暗号,就会捕获会话,这意味着黑客可以利用捕获到的用户密码再次进入系统 。
( 2) Hunt
Hunt是 Kra开发的一个用来听取,截取和劫持网络上的活动会话的程序 。
( 3) TTY Watcher
TTY Watcher是一个免费的程序,允许人们监视并且劫持一台单一主机上的连接 。
( 4) IP Watcher
IP Watcher是一个商用的会话劫持工具,它允许监视会话并且获得积极的反会话劫持方法。它基于 TTY Watcher此外还提供一些额外的功能,
IPWatcher可以监视整个网络。
2.4.3 ARP欺骗
1,ARP协议
ARP( Address Resolution Protocol,地址解析协议 ) 是一种将 IP
转化成以 IP对应的网卡的物理地址的一种协议,或者说 ARP协议是一种将 IP地址转化成 MAC地址的一种协议 。
为什么要将 IP转化成 MAC呢? 简单的说,这是因为在 TCP网络环境下,一个 IP包的走向靠路由表定义 。 但是,当 IP包到达该网络后,
哪台机器响应这个 IP包却是靠该 IP包中所包含的 MAC地址来识别 。
也就是说,只有机器的 MAC地址和该 IP包中的 MAC地址相同的机器才会应答这个 IP包 。 因为以太网在子网层上的传输需要靠 48位的
MAC地址决定 。
地址解析是通过软件实现的 。 地址解析软件要根据使用的协议和硬件编址方案来进行地址解析 。 对不同的物理网络,由于协议和编址方案不同,解析方法也不相同 。 例如,将 IP地址解析为以太网地址与解析为 ATM网地址的方法是不相同的 。 一般说来,大体上有三种地址解析方法 。
( 1) 查表 ( table lookup) 方法:将地址绑定信息存放在内存的一张表中,当要进行地址解析时,可以查表找到所需的结果 。 这种方法常用于 WAN。
( 2) 相似形式计算( close-form computation),网络中主机的 IP地址分配通过对硬件地址的简单逻辑运算和算术运算得到,因而在 IP地址与物理地址之间存在一种函数关系,可以直接运算求出。这种方法常用于可配置的网络。
( 3) 报文交换 ( message exchange) 法:前两种方法是集中式地址解析,而报文交换是分布式地址解析方法,即当一台机器要解析同一网络中另一台计算机的 IP地址时,先通过网络发送一个请求报文 ——请求对指定 IP地址的解析,之后收到一个应答 ——回答对应的硬件地址 。 这种方法常用于静态编址的 LAN。
那么,请求报文如何发送呢? 通常有两种方法:一是在网络中设立一台或几台服务器,专门用来回答地址解析的请求;
一是向全网广播,由各台计算机自己解析自己的 IP地址 。
为了使适应网络拓扑的动态变化并使 ARP高速运行,通常每台主机上都要设置一个 ARP高速缓存,用于存放最近 IP地址到硬件地址之间的映射记录,并且要对高速缓存进行动态更新。通常高速缓存中每项的生存时间是 20分钟。
通常主机在发送一个 IP包之前,它要到该转换表中寻找和 IP包对应的 MAC地址 。 如果没有找到,该主机就发送一个 ARP广播包,
为了使所有的计算机共同认可地址解析消息的精确格式和含义,
TCP/IP的地址解析协议 ARP定义了两种基本的消息,ARP请求消息
(一个请求包含一个 IP地址和对相应硬件的请求,格式如图 2.9所示)
和 ARP应答消息(一个应答消息既包含发来的 IP地址,也包含相应的硬件地址)。 ARP规定:所有 ARP请求消息都直接封装在 LAN帧中,广播给网上的所有计算机,每台计算机收到这个请求消息后都要检测其中的 IP地址;与 IP地址匹配的计算机即发出一个应答消息,
而其他计算机则丢弃收到的请求,不发出任何应答。可以看出,IP
地址是 32位的,而以太网地址是 48位的。
2,ARP欺骗
ARP是无状态的协议,在没有请求时也可以发送应答的包 。 入侵者可以利用这一点,向网络上发送自己定制的包,包中包括源 IP地址,
目的 IP地址以及硬件地址,不过它们都是伪造的 。 这些伪造的数据,
会修改网络上主机中的 ARP高速缓存 。
例如,网络上有三台主机,有如下的信息:
主机名 IP地址 硬件地址
A 201.15.192.01 AA:AA
B 201.15.192.02 BB:BB
C 201.15.192.03 CC:CC
这三台主机中,B是一台被入侵者控制了的主机,它具有 root权限,而 A信任 C。 入侵者的目的就是伪装成 C获得 A的信任,以便获得一些无法直接获得的信息等。下面介绍入侵者利用 B进行 ARP欺骗的过程。通常,入侵者要使用一些 ARP欺骗的工具,如 send_arp。
( 1) 入侵者控制主机 B向主机 A发送一个 ARP应答,ARP应答中包括:源 IP地址 ( 201.15.192.03),源硬件地址 ( BB:BB),目标 IP
地址 ( 201.15.192.01),目标硬件地址 ( AA:AA ) 。
这条应答被 A接受后,就被保存到 A主机的 ARP高速缓存中了 。
但是,由于网络上 C主机也是活动的,也有可能向 A发出自己的
ARP应答,将 A的 ARP缓存改回正确的硬件地址。因此,B在进行
ARP欺骗时还必须使 C不能向 A发送 ARP应答。入侵者的办法是也向
C发 ARP应答,将 A的硬件地址改为一个虚假的地址(不存在的硬件地址)如,DD:DD‖,使得 C发向 A的 ARP应答,根本无法受到。
2) A根据 ARP缓存中的缓存记录,将发往 C( 201.15.192.03,
CC:CC) 的数据报文,发向了 B( 201.15.192.03,BB:BB) 。
图 2.10为这个过程的示意图。
3,ARP欺骗的防范
( 1) MAC地址绑定,使网络中每一台计算机的 IP地址与硬件地址一一对应,不可更改 。
( 2) 使用静态 ARP缓存,用手工方法更新缓存中的记录,使 ARP
欺骗无法进行 。
( 3)使用 ARP服务器,使其他计算机的 ARP配置只接受来自
ARP服务器的 ARP响应。
2.4.4 DNS欺骗
1,DNS及其工作过程
DNS( Domain Name System,域名系统 ) 是一种用于 TCP/IP应用程序的分布式数据库,它提供主机名字和 IP地址之间的转换以及有关电子邮件的选路信息 。 DNS有两个重要特性:
·DNS对于自己无法解析的域名,会自动向其他 DNS服务器查询 。
· 为提高效率,DNS会将所有已经查询到的结果存入缓存
( Cache) 。
正是这两个特点,使得 DNS欺骗 ( DNS Spoofing) 成为可能 。 不过,还是先看一下 DNS的正常工作过程 。
设有如图 2.11所示的三台主机。其中,B向 A提供 DNS服务,A
想要访问 C( www.ccc.com)。 这个过程如下。
1 A向 B发一个 DNS查询请求,要求 B告诉 www.ccc.com的 IP地址,
以便与之通信 。
2 B查询自己的 DNS数据库,找不到 www.ccc.com的 IP地址,遂向其他 DNS服务器求援,逐级递交 DNS请求 。
3 某个 DNS服务器查到了 www.ccc.com的 IP地址,向 B返回结果 。
B将这个结果保存在自己的缓存中 。
4 B将结果告诉 A。
5 A得到了 C的地址,就可以访问 C了 ( 如向 C发出连接请求 ) 。
在上述过程中,如果 B在一定的时间内不能给 A返回要查找的 IP地址,就会给 A返回主机名不存在的错误信息。
2,DNS欺骗实施 DNS欺骗的基本思路是:让 DNS服务器的缓存中存有错误的 IP地址,即在 DNS缓存中放一个伪造的缓存记录 。 为此,
攻击者需要做两件事:
·先伪造一个用户的 DNS请求 。
·再伪造一个查询应答 。
但是,在 DNS的消息格式中还有一个 16位的查询标识符
( Query ID),它将被复制到 DNS服务器的相应应答中,在多个查询未完成时,用于区分响应 。 所以,回答信息只有
Query ID和 IP都吻合才能被 DNS服务器接受 。 因此,进行
DNS欺骗攻击,还需要能够精确地猜测出 Query ID。 由于
Query ID每次加 1,只要通过第一次向将要欺骗的 DNS服务器发一个查询包并监听其 Query ID值,随后再发送设计好的应答包,包内的 Query ID就是要预测的 Query ID。
下面结合图 2.11,介绍一次 DNS欺骗过程 。
1 入侵者先向 B( DNS服务器 ) 提交查询 www.ccc.com的 IP地址的请求 。
2 B向外递交查询请求 。
3 入侵者立即伪造一个应答包,告诉 www.ccc.com的 IP地址是
201.15.192.04( 往往是入侵者的 IP地址 ) 。
4 查询应答被 B( DNS服务器 ) 记录到缓存中 。
5 当 A 向 B 提 交 查 询 www.ccc.com 的 IP 地 址 请 求 时,B 将
201.15.192.04告诉 A。
可以看出,DNS欺骗是有一定的局限性的:
( 1) 入侵者不能替换 DNS缓存中已经存在的记录 。
( 2)缓存中的记录具有一定的生存期,过期就会被刷新。
2.4.5 Web欺骗
1,Web欺骗的几种形式
( 1) 基本的网站欺骗由于目前注册一个域名没有任何要求,利用这一点,攻击者会抢先或特别设计注册一个有欺骗性的站点。当有用户浏览了这个假冒地址并与之进行了了一些信息交流(如填写了一些表单)后,站点会给出一些响应的提示和回答,同时记录下用户的信息,并给这个用户一个 cookie,以便能随时跟踪这个用户。典型的例子是假冒金融机构偷盗客户的信用卡信息。
( 2) man-in-the-middle攻击
man-in-the-middle攻击并不限于 WEB欺骗,它要求攻击者必须位于所有进出受害方的流量都经过的位置,例如,攻击者可通过攻击一个公司的外部路由器来实现,因为所有进出公司的流量都要经过这个路由器 。
man-in-the-middle原理是,攻击者通过某种方法(比如 DNS欺骗)把目标主机的域名所对应的 IP地址与自己所控制的机器相联系。
从而使外界对目标主机的所有请求都涌向攻击者的主机。这时攻击者可以转发所有的请求到目标机器,让目标机器进行处理,再把处理结果发回到发出请求的客户机。实际上,就是把攻击者的机器设成目标机器的代理服务器,这样,所有外界进入目标机器的数据流都在攻击者的监视之下了,攻击者可以任意窃听甚至修改数据流里的数据,收集到大量的信息
2,Web欺骗的技巧
( 1) 表单欺骗在 URL改写的基础上,表单欺骗将会进行得非常自然 。 当受攻击者提交表单后,所提交的数据进入了攻击者的服务器 。 攻击者的服务器能够观察,甚至修改所提交的数据 。 同样,在得到真正的服务器返回信息后,攻击者在将其向受攻击者返回以前也可以为所欲为 。
( 2) 设计攻击的导火索为了开始攻击,攻击者必须以某种方式引诱受攻击者进入攻击者所创造的错误的 Web。 黑客往往使用下面若干种方法 。
·把错误的 Web链接到一个热门 Web站点上;
·如果受攻击者使用基于 Web的邮件,可以将它指向错误的 Web;
·创建错误的 Web索引,指示给搜索引擎。
( 3) 完善攻击前面描述的攻击相当有效,但是它还不是十分完美的 。 黑客往往还要创造一个可信的环境,包括各类图标,文字,链接等,提供给受攻击者各种各样的可信的暗示,以隐藏一切尾巴 。
( 4) 状态信息状态信息显示在浏览器底部 。 Web欺骗中涉及两类信息:
·当鼠标放置在 Web链接上时,连接状态显示链接所指的 URL地址;
·当 Web连接成功时,连接状态将显示所连接的服务器名称 。
这两项信息都容易使攻击者露出尾巴 —— URL或服务器名称。
为此,攻击者往往通过 JavaScript编程来弥补这两项不足。由于
JavaScript能够对连接状态进行写操作,而且可以将 JavaScript操作与特定事件绑定在一起,所以,攻击者完全可以将改写的 URL状态恢复为改写前的状态。这样 Web欺骗将更为可信。
3,Web欺骗的弱点尽管黑客在进行 Web欺骗时已绞尽脑汁,但是还是留有一些不足 。
( 1) 文档信息攻击者并不是不留丝毫痕迹 。 通过使用浏览器中 viewsource命令,
用户能够阅读当前的 HTML源文件 。 通过阅读 HTML源文件,可以发现被改写的 URL,从而发现攻击 。
另外,通过使用浏览器中,view document information‖命令,用户能够阅读当前 URL地址的一些信息 ——真实的 URL地址,由此很容易判断出 Web欺骗 。
( 2) 逃离灾难使用浏览器中提供的,Open location‖可以离开攻击者所设下的陷阱,进入其他 Web页面 。 之后用户也可以使用,Back‖键,重新进入原先的错误 Web页面 。 这种操作给了用户逃离灾难的主动权 。 不过,若用户将所访问的错误 Web存入 Bookmark,下次可能会直接进入攻击者所设下的陷阱 。
( 3) WEB服务器的拖累攻击者进行的 Web欺骗都离不开 Web服务器的帮助。然而,该 Web
服务器很可能是被攻击后的产物。于是攻击者进行 Web欺骗,就象罪犯驾驶着盗窃来的汽车去作案一样
4,Web欺骗的预防
Web欺骗是当今 Internet上具有相当危险性而不易被察觉的欺骗手法 。 幸运的是,现在已经有了一些预防的办法 。
( 1) 短期的解决方案为了取得短期的效果,最好从下面三方面来预防:
·禁止浏览器中的 JavaScript功能,使各类改写信息不能被掩盖;
·确保浏览器的连接状态是可见的;
·时刻注意所点击的 URL链接会在位置状态行中得到正确的显示 。
( 2) 长期的解决方案
·改变浏览器,使之具有反映真实 URL信息的功能,而不会被蒙蔽;
·对于通过安全连接建立的 Web——浏览器对话,浏览器还应该告诉用户谁在另一端,而不只是表明一种安全连接的状态。
2.5 拒绝服务类攻击返回
2.5.1 拒绝服务攻击及其典型举例拒绝服务( Denial of Service,DoS) 攻击是一种最悠久也是最常见的攻击形式。严格来说,拒绝服务攻击并不是某一种具体的攻击方式,而是攻击所表现出来的结果,最终使得目标系统因遭受某种程度的破坏而不能继续提供正常的服务,
甚至导致物理上的瘫痪或崩溃。具体的操作方法可以是多种多样的,可以是单一的手段,也可以是多种方式的组合利用,
最基本的 DoS攻击就是利用合理的服务请求来占用过多的服务资源,
按照所使用的技术,拒绝服务大体上可以分为两大类:
一类是基于错误配置,系统漏洞或软件缺陷,如
·利用传输协议缺陷,发送畸形数据包,以耗尽目标主机资源,使之无法提供服务 。
·利用主机服务程序漏洞,发送特殊格式数据,导致服务处理出错而无法提供服务 。
另一类是通过攻击合理的服务请求,消耗系统资源,使服务超载,
无法响应其他请求 。 例如制造高流量数据流,造成网络拥塞,使受害主机无法与外界通信 。
在许多情况下要使用上面两种方法的组合 。 例如,利用受害主机服务缺陷,提交大量请求以耗尽主机资源,使受害主机无法接受新请求 。
不过对于具体的问题,还要进行具体分析。下面介绍几种典型的拒绝服务的攻击原理。
1,死亡之 Ping( Ping of Death)
( 1) ICMP协议及其缺陷
IP是一种不可靠,无连接的包传送协议,也是一种尽最大努力服务的协议 。
当一个包在经过多个网际部件的传送途中,可能出现传送方向出错,目的主机不响应,包拥塞,不能出错等情况 。 这时,由于它没有差错报告和差错纠正机制所以,将无能为力 。 为了弥补 IP的这些不足,在 IP层引入了一个子协议:网际控制消息协议 ICMP( Internet Control Message
Protocol) 。
ICMP是一种差错报告机制,它为路由器或目标主机提供了一种方法,使它们能把遇到的差错报告给源主机。如图 2.12所示,ICMP报文始终包含
IP首部和产生 ICMP差错报文的 IP数据报的前 8个字节( 64KB)。 由于这一特点,早期的许多操作系统在处理 ICMP协议(如接收 ICMP数据报文)
时,只开辟 64KB的的缓存区。在这种情况下,一旦处理的数据报的实际长度超过 64KB,操作系统将会产生一个缓冲溢出,引起内存分配错误,
最终导致 TCP/IP协议堆栈的崩溃,造成主机死机。
( 2) Ping程序与拒绝服务攻击的实现
Ping是 TCP/IP网络中一个最简单而又非常有用的 ICMP应用程序 。
它使用 ICMP回应请求 /应答,测试一台主机的可达性,具体可以用于下列场合:
·验证基础 TCP/IP软件的操作;
·验证 DNS服务器的操作;
·验证一个网络或网络中的设备是否可以被访问 。
由于早期的 Ping可以用参数,-1” 指定所发送数据抱的尺寸,有可能发送一个超过 64KB的报文 。 如
ping -1 65540 212.15.1.0
这时,对方的主机存在这种漏洞,就会形成一次拒绝服务攻击 。
需要说明的是,现在的操作系统所附带的 Ping程序都限制了发送数据包的大小。因而这样的攻击已经不再可能。
2.,泪滴,( Teardrop)
―泪滴,也称为分片攻击 。 这是一个利用 TCP/IP的缺陷进行拒绝服务攻击的典型 。
( 1) TCP数据分片当两台计算机通信时,若数据量太大,无法在一个数据报文中进行传输,就会由 TCP将数据拆分成多个分片,传送到目的地后再到堆栈中进行重组 。 由于各片是分别传输的,并且所经过的路径和传输的速度各不相同,为了组装,在 IP包的首部中必须含有本片数据是原数据中的哪一段的信息 。 下面是将一个数据分成三片,并要尽快地将数据送往接收进程 ( PSH),
PSH 1:1024(1024) ack1,win4096
PSH 1025:2048(1024) ack1,win4096
PSH 2049:3072(1024) ack1,win4096
如图 2.13为数据的分片、传输和重装过程示意图 。
( 2),泪滴,攻击
,泪滴,攻击就是入侵者伪造数据报文,向目标机发送含有重叠偏移的畸形数据分片。如图 2.14所示。当这样的畸形分片传送到目的主机后,在堆栈中重组时,就会导致重组出错,引起协议栈的崩溃。
3,UDP―洪水,( UDP Flood)
UDP―洪水,由 ECHO/CHARGEN服务引起。 ECHO/CHARGEN服务是 TCP/IP为 TCP和 UDP提供的一种服务。 ECHO的作用就是由接收端将接收到的数据内容返回到发送端,CHARGEN则随机返回字符。这样简单的功能,为网络管理员提供了进行可达性测试、协议软件测试和选路识别的重要工具,也为黑客进行,洪水,攻击提供了方便。当入侵者假冒一台主机向另一台主机的服务端口发送数据时,ECHO服务或 CHARGEN服务就会自动回复。两台机器之间的互相回送,会形成大量数据包。当多台主机之间相互产生回送数据包,最终会导致系统瘫痪。
4,SYN―洪水,( SYN Flood) 与 Land
这是两个利用 TCP连接中三次握手过程的缺陷的拒绝服务攻击 。
正常的 TCP握手需要三次包交换来建立 。 一台服务器一旦接收到客户机的 SYN包后必须回应一个 SYN/ACK包,然后等待该客户机回应给它一个 ACK包来确认,才真正建立连接 。
SYN―洪水,的攻击方法是攻击者用伪造的地址 ( 网上没有使用的地址 ) 向然目标主机发出大量初始化的 SYN包 。 目标主机收到请求后,分别回以相应的 SYN/ACK。 但是由于源地址是虚假的,所以目标主机会因为其 SYN/ACK得不到确认,会保持相应的连接直到超时 。
当这些未释放的连接请求超过一定限度时,就会拒绝新的连接请求 。
Land也是利用三次握手的缺陷进行攻击。但它不是依靠伪造的地址,而是先发出一个特殊的 SYN数据包,包中的源地址和目标地址都是目标主机。这样,就会让目标主机向自己回以 SYN/ACK包,
导致自己又给自己回一个 ACK并建立自己与自己的连接。大量这样的无效连接达到一定数量,将会拒绝新的连接请求。
2.5.2 分布式拒绝服务攻击分布式拒绝服务( Distributed Denial of Service,
DDoS) 攻击指借助于客户 /服务器技术,将多个计算机联合起来作为攻击平台,对一个或多个目标发动 DoS攻击,从而成倍地提高拒绝服务攻击的威力。通常,攻击者使用一个偷窃帐号将 DDoS主控程序安装在一个计算机上,在一个设定的时间主控程序将与大量代理程序通讯,代理程序已经被安装在
Internet上的许多计算机上。代理程序收到指令时就发动攻击。利用客户 /服务器技术,主控程序能在几秒钟内激活成百上千次代理程序的运行。
1,DDoS攻击原理为了便于读者理解,下面结合几个 DDoS实例,介绍 DDoS攻击原理。
( 1) Smurf与 Fraggle
一 个 将 目 的 地 址 设 置 成 广 播 地 址 ( 以 太 网 地 址 为
FF:FF:FF:FF:FF:FF:FF) 后,将会被网络中所有主机接收并处理 。
显然,如果攻击者假冒目标主机的地址发出广播信息,则所有主机都会向目标主机回复一个应答使目标主机淹没在大量信息中,无法提供新的服务 。 这两个攻击就是利用广播地址的这一特点将攻击放大而实施的拒绝服务攻击 。 其中,Smurf是用广播地址发送 ICMP
ECHO包,而 Fraggle是用广播地址发送 UDP包 。
显然,smurf为了能工作,必须要找到攻击平台,这个平台就是:
其路由器上启动了 IP广播功能 ——允许 smurf 发送一个伪造的 ping
信息包,然后将它传播到整个计算机网络中 。 另一方面,为防止系统成为 smurf攻击的平台,要将所有路由器上 IP的广播功能都禁止
( 一般来讲,IP广播功能并不需要 ) 。 但是,攻击者若从 LAN内部发动一个 smurf攻击,在这种情况下,禁止路由器上的 IP 广播功能就没有用了 。 为了避免这样一个攻击,许多操作系统都提供了相应设置,防止计算机对 IP广播请求做出响应 。
挫败一个 smurf 攻击的最简单方法对边界路由器的回音应答 (echo
reply)信息包进行过滤,然后丢弃它们,使网络避免被淹没。
( 2) trinoo
trinoo是复杂的 DDoS攻击程序,它使用了前面介绍过的主控程序,master‖对实际实施攻击的任何数量的,代理,程序实现自动控制 。 图 2.15形象地表明了它的攻击原理 。 图中的
,傀儡机,就是一些,代理,,,控制傀儡机,就是安装有
master程序的计算机 。 该图对介绍 DDoS更具有一般性 。
图 2.15 DDoS的一般原理一个比较完善的 DDoS攻击体系分成 4部分:
·攻击者所在机
·控制机 ( 用来控制傀儡机 )
·傀儡机
·受害者 。
对受害者的攻击是从击傀儡机上发出的,控制机只发布命令而不参与实际的攻击 。
trinoo DDoS攻击的基本过程是:攻击者连接到安装了 master程序的计算机,启动 master程序,然后根据一个 IP地址的列表,由
master程序负责启动所有的代理程序 。 接着,代理程序用 UDP信息包冲击网络,攻击目标 。 在攻击之前,侵入者为了安装软件,已经控制了装有 master程序的计算机和所有装有代理程序的计算机 。
DDoS就是利用更多的傀儡机来发起进攻,以更大的规模来进攻受害者。
( 3) Tribal Flood Network和 TFN2K
Tribe Flood Network与 trinoo一样,使用一个 master程序与位于多个网络上的攻击代理进行通讯 。 TFN可以并行发动数不胜数的
DoS攻击,类型多种多样 ( 如 UDP攻击,TCP SYN 攻击,ICMP回音请求攻击以及 ICMP 广播 ),而且还可建立带有伪装源 IP地址的信息包 。
TFN2K是 TFN的一个更高级的版本,它,修复,了 TFN的某些缺点。
( 4) stacheldraht
Stacheldraht也是基于 TFN的,它采用和 trinoo一样的客户机 /服务器模式,其中 Master程序与潜在的成千个代理程序进行通讯。在发动攻击时,侵入者与 master程序进行连接。
Stacheldraht增加了以下新功能:攻击者与 master程序之间的通讯是加密的,以及使用 rcp ( remote copy,远程复制)
技术对代理程序进行更新。
2,DDoS系统的一般结构在更一般的情况下,DDoS可能使用多台控制 机,形成图 2.16所示的结构。
图 2.16 DDoS攻击原理
3,组织一次 DDoS攻击的过程这里用,组织,这个词,是因为 DDoS并不象入侵一台主机那样简单 。 一般来说,黑客进行 DDoS攻击时会经过如下几个步骤 。
( 1) 搜集了解目标的情况下列情况是黑客非常关心的情报:
·被攻击目标主机数目,地址情况
·目标主机的配置,性能
·目标的带宽对于 DDoS 攻 击 者 来 说,攻 击 互 联 网 上 的 某 个 站 点,如
http://www.WWWW.com,有一个重点就是确定到底有多少台主机在支持这个站点,一个大的网站可能有很多台主机利用负载均衡技术提供同一个网站的 www 服务 。 以 yahoo 为例,一 般 会 有 下 列地 址 都 是 提 供
http://www.WWW.com服务的:
66.218.71.87
66.218.71.88
66.218.71.89
66.218.71.80
66.218.71.81
66.218.71.83
66.218.71.84
66.218.71.86
对一个网站实施 DDoS攻击,就要让这个网站中所有 IP地址的机器都瘫掉。
所以事先搜集情报对 DDoS攻击者来说是非常重要的,这关系到使用多少台傀儡机才能达到效果的问题。
( 2) 占领傀儡机黑客最感兴趣的是有下列情况的主机:
·链路状态好的主机
·性能好的主机
·安全管理水平差的主机首先,黑客做的工作一般是扫描,随机地或者是有针对性地利用扫描器去发现网络上那些有漏洞的机器,象程序的溢出漏洞,cgi、
Unicode,ftp,数据库漏洞 … (简直举不胜举啊 ),都是黑客希望看到的扫描结果 。 随后就是尝试入侵了 。
黑客在占领了一台傀儡机后,除了要进行留后门、擦脚印这些基本工作之外,还要把 DDoS攻击用的程序上载过去,一般是利用
ftp。 在攻击机上,会有一个 DDoS的发包程序,黑客就是利用它来向受害目标发送恶意攻击包的。
( 3) 实际攻击前面的准备做得好的话,实际攻击过程反而是比较简单的。这时候埋伏在攻击机中的 DDoS攻击程序就会响应控制台的命令,一起向受害主机以高速度发送大量的数据包,导致它死机或是无法响应正常的请求。黑客一般会以远远超出受害方处理能力的速度进行攻击。高明的攻击者还要一边攻击一边用各种手段来监视攻击的效果,以便需要的时候进行一些调整。简单些的办法就是开个窗口不断地 ping目标主机,在能接到回应的时候就再加大一些流量或是再命令更多的傀儡机来加入攻击。
4,DDoS的监测现在网上 DDoS攻击日益增多,只有及时检测,及早发现自己受到攻击才能避免遭受惨重的损失 。 检测 DDoS攻击的主要方法有以下几种:
( 1) 根据异常情况分析异常情况包括:
·网络的通讯量突然急剧增长,超过平常的极限值时;
·网站的某一特定服务总是失败;
·发现有特大型的 ICP和 UDP数据包通过或数据包内容可疑 。
( 2) 使用 DDoS检测工具扫描系统漏洞是攻击者最常进行的攻击准备。目前市面上的一些网络入侵检测系统,可以杜绝攻击者的扫描行为。另外,一些扫描器工具可以发现攻击者植入系统的代理程序,并可以把它从系统中删除。
5,DDoS攻击的防御策略
DDoS攻击的隐蔽性极强,迄今为止人们还没有找到对 DDoS
攻击行之有效的解决方法 。 所以加强安全防范意识,提高网络系统的安全性,还是当前最为有效的办法 。 可采取的安全防御措施有以下几种:
( 1) 及早发现系统存在的攻击漏洞,及时安装系统补丁程序 。
对一些重要的信息 ( 例如系统配置信息 ) 建立和完善备份机制 。 对一些特权帐号 ( 例如管理员帐号 ) 的密码设置要谨慎 。
通过这样一系列的举措可以把攻击者的可乘之机降低到最小 。
( 2)在网络管理方面,要经常检查系统的物理环境,禁止那些不必要的网络服务。建立边界安全界限,确保输出的包受到正确限制。经常检测系统配置信息,并注意查看每天的安全日志。