为了正常的体验网站,请在浏览器设置里面开启Javascript功能!
首页 > 黑客

黑客

2012-04-04 50页 ppt 1MB 96阅读

用户头像

is_019192

暂无简介

举报
黑客null第2章 网络攻击 第2章 网络攻击 2.1 黑客 2.2 信息收集类攻击 2.3 入侵类攻击 2.4 欺骗类攻击 2.5 拒绝服务类攻击 null 自从20世纪90年代以来,几乎每一个计算机信息系统都是在网络环境下运行的。在网络环境下工作的计算机,除了经常要受到病毒等恶意程序的侵害外,还要受到黑客的攻击。这一章介绍黑客对于网络的一些主要攻击手段。 2.1 黑客2.1 黑客返回null2.1.1 侠客、骇客和入侵者 “黑客”是一个精通计算机技术的特殊群体。可分...
黑客
null第2章 网络攻击 第2章 网络攻击 2.1 黑客 2.2 信息收集类攻击 2.3 入侵类攻击 2.4 欺骗类攻击 2.5 拒绝服务类攻击 null 自从20世纪90年代以来,几乎每一个计算机信息系统都是在网络环境下运行的。在网络环境下工作的计算机,除了经常要受到病毒等恶意程序的侵害外,还要受到黑客的攻击。这一章介绍黑客对于网络的一些主要攻击手段。 2.1 黑客2.1 黑客返回null2.1.1 侠客、骇客和入侵者 “黑客”是一个精通计算机技术的特殊群体。可分为3类: “侠客(Hackers)”,他们多是好奇者和爱出风头者; “骇客(Crackers)”,他们是一些不负责的恶作剧者; “入侵者(Intruder),他们是有目的的破坏者。 null2.1.2 黑客攻击的发展趋势 目前,黑客攻击有如下发展趋势: (1)攻击工具的简单化:目前,黑客工具的技术性越来越高,使用越来越简单,并且大多是图形化界面,容易操作。 (2)攻击目标针对化:黑客攻击的目标越来越有针对性,并主要是针对意识形态和商业活动,如Yahoo事件。 (3)攻击方式系统化:黑客在攻击方式、时间、规模等方面一般都进行了长时间的准备和部署,系统地进行攻击。 (4)攻击时间持续化:由于网络的漏洞和追踪力量的薄弱,黑客肆无忌惮地对目标进行长时间的攻击。例如,cnns.net网站曾承受过DDoS长达40余天的攻击。 null2.1.3 黑客攻击的一般过程 尽管黑客攻击目标偏好不同、技能有高低之分、手法多种多样,但是他们对目标施行攻击的流程却大致相同,基本如图2.1所示。 null下面介绍各个步骤的基本内容。 1. 踩点 黑客确定了攻击目标后,一般要收集被攻击者的信息: · 目标机的类型、IP地址、所在网络的类型; · 操作系统的类型、版本; · 系统管理人员的名字、邮件地址; · ……。 null 对攻击对象信息的分析,可找到被攻击对象的脆弱点。为了获得这些信息,黑客要利用一些技术。例如: · 运行一个host命令,可以获得被攻击目标机的IP地址信息,还可以识别出目标机操作系统的类型; · 利用whois查询,可以了解技术管理人员的名字; · 运行一些Usernet和Web查询,可以了解有关技术人员是否经常上Usernet等; · 利用DNS区域传送工具dig、nslookup及Windows版本的Sam Spade(网址为http://www.samspade.org),获取目标域中的所有主机信息; · 一个管理人员经常讨论的问题也可以表明其技术水平的高低等。 null2. 扫描 “苍蝇不叮无缝的蛋“。系统的漏洞会为攻击提供机会和入口。在踩点获得的信息的基础上,黑客常编写或收集适当的工具,在较短的时间内对目标系统进行扫描,进一步确定攻击对象的漏洞。 漏洞扫描就是自动检测计算机网络系统在安全方面存在的可能被黑客利用的脆弱点。漏洞扫描技术通过安全扫描程序实现。所谓扫描,包含了非破坏性原则,即不对网络造成任何破坏。在实施策略上可以采用被动式和主动式两种策略。 null(1)被动式扫描策略 被动式扫描策略主要检测系统中不合适的设置、脆弱的口令以及同安全规则相抵触的对象,具体还可以分为如下几类: (a)基于主机的扫描技术,通常它涉及系统的内核、文件的属性、操作系统的补丁等问题,能把一些简单的口令解密和剔除,能非常准确地定位系统存在的问题,发现漏洞。缺点是与平台相关,升级复杂。 (b)基于目标的扫描技术,基于目标的扫描技术的基本原理是基于消息加密算法和哈希函数,如果函数的输入有一点变化,输出就会发生很大变化。这样文件和数据流的细微变化就会被感知。基于目标的扫描技术通常用于检测系统属性和文件属性,如数据库、注册号等。由于这种技术的加密强度极大,不易受攻击,比较安全和可靠。 (c)基于应用的扫描技术,这种技术主要用于检查应用软件包的设置和安全漏洞。 null(2)主动式扫描策略 主动式扫描策略是基于网络的扫描技术,主要通过一些脚本文件对系统进行攻击,系统的反应,从中发现漏洞。 (3)扫描工具 目前,扫描程序已经发展到了几十种,有的小巧快捷,有的界面友好;有的功能单一,有的功能完善。被广泛使用的扫描程序有如下一些。 (a)Ping扫射 Ping扫射可以判别主机是否“活动”。Ping向目标主机发送ICMP回射请求分组,并期待目标系统关于活动的回射应答分组。常用的Ping扫射工具有:操作系统的Ping命令和用于扫射网段的fping和WS_ping等。 null(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键,看返回的信息是什么。 null(d)操作系统检测 许多漏洞与操作系统有关。因此,黑客要首先确定操作系统的类型。如图2.2所示,目前操作系统检测按技术原理可以分为:利用系统旗标信息和利用TCP/IP堆栈指纹两种;按鉴别的主动性可以分为:主动鉴别和被动鉴别。 目前常用的操作系统检测工具有: · Nmap · Queso(http://www.spostools.org/projectz/gueso) · Siphon(http://www.siphon.datanerds.net) null3. 查点 查点就是搜索特定系统上用户、用户组名、路由表、SNMP信息、共享资源、服务程序及旗标等信息。 查点采用的技术依操作系统而定: (1)Windows系统上的主要技术 · 查点NetBIOS线路 · 空会话(Null Session) · SNMP代理 · 活动目录(Active Directory) · 其他 nullWindows系统上使用的主要工具: (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 null(2)UNIX系统上的主要技术 · PRG查点 · NIS查点 · NFS查点 · SNMP查点 UNIX系统上常用的工具有:rpcinfo、rpcdump、shomount、finger、rwho、ruser、nmap、telnet、nc和snmpwalk等。 null4. 模拟攻击 进行模拟攻击,测试对方反应,找出毁灭入侵证据的方法。 5. 获取访问权 获取访问权是入侵的正式开始。 (1)Windows系统上的主要技术 · NetBIOS-SMB密码猜测; · 窃听LM及NTLM认证散列 · 攻击IIS Web服务器 · 远程缓冲区溢出 null(2)UNIX系统上的主要技术 · 蛮力密码攻击 · 密码窃听 · 数据驱动式攻击(如缓冲区溢出、输入验证、字典攻击等) · RPC攻击 · NFS攻击 · 针对X-Windows系统的攻击 · 其他 null著名的密码窃听工具: · 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 null6. 权限提升 黑客一旦获取了访问权,就会试图将自己的普通用户权限提升至超级用户权限,以对系统进行完全控制。 权限提升主要的技术是口令破解‘利用漏洞以及不当配置等进行。 常用口令破解工具有:John The RIPper。可以得到管理员权限的工具有:lc_message、getadmin、sechole、Invisible、Keystroke、Logger(http://www.amecisco.com/iksnt.htm)。 7. 窃取 窃取就是对一些敏感数据的篡改、添加、删除和复制,以及通过对敏感数据的分析,为进一步攻击应用系统做准备。 8. 掩盖踪迹 掩盖踪迹,即清除自己所有的入侵痕迹。主要工作有:禁止系统审计、隐藏作案工具、清空事件日志(使用zap、wzap、wted等)、替换系统常用操作命令等。 null9. 创建后门 创建后门是为了以后的入侵打开一个缺口,使入侵者能卷土重来,以特权用户身份控制整个系统。主要工作有: · 创建具有特权用户权限的虚假用户账号; · 安装批处理或远程控制工具; · 使用木马程序替换系统程序; · 安装监控程序; · 感染启动文件。 null黑客常用的创建后门的工具有: · 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 信息收集类攻击 返回null2.2.1 Sniffer Sniffer(嗅觉器)是一类用于捕获网络报文的软件。它可以用来进行网络流量分析,找出网络中潜在问题,确定在通信所使用的多个协议中,属于不同协议的流量大小,哪台主机承担主要协议的通信;哪台主机是主要的通信目的地,报文发送的时间是多少,主机间报文传送的时间间隔等,是网络管理员的一个常用工具。当一段网络运行不好,速度较慢而又找不出问题所在时,用Sniffer往往可以做出精确判断。 Sniffer可以捕获网络报文这一用处,也可以被黑客用来捕获网络中传输的用户口令、金融账号、机密或敏感数据、专用数据、低级协议信息等。 null1. Sniffer的工作原理 (1)在共享网络中的嗅觉器 共享信道是Sniffer捕获信息的根本所在。这里,共享意味着一台计算机能够接收到其他计算机之间通信的信息,或者说同一网段的网络所有接口都有访问在物理媒体上传输数据的能力。以太网的特点就是这样的一种共享网络。在以太网中,每个接口有一个与其他网络接口不同的硬件地址,同时网段还有一个向所有传输的广播地址。一个合法的网络接口应该只响应这两种地址。 以太网卡有4种工作模式。当局域网中的某台计算机将网络接口配置成混杂(Promiscuous)模式后,就可以接收网络上的所有报文和数据帧了。这台计算机上安装的用于处理捕获报文的软件,就是一个嗅觉器。 null 可见,Sniffer工作在网络环境中的底层,它会“嗅”到所有在网络上传输的数据。由于在一个以太网中,账号和口令都是以明文形式传输的,因此一旦入侵者获取了其中一台主机的管理员权限,并将其配置成混杂模式,它就有可能对网络中的其他所有计算机发起攻击。 null(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,网关。 null 在正常情形下,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来说,一切都非常正常,但有关内容已经被窃去。 null 当然,如果在A上用ARP命令查看ARP高速缓存,可以发现网关地址已经被换掉了。 因此,在交换环境中,一个ARP(地址解析——将IP地址解析为局域网中的MAC地址)欺骗加上一个Sniffer软件,同样可以实现Sniffer攻击。 null2. Sniffer产品 (1)Sniffer Pro Sniffer Pro是NAI公司开发的一种图形界面嗅觉器。它功能强大,能全面监视所有网络信息流量,识别和解决网络问题,是目前唯一能够为七层OSI网络模型提供全面性能管理的工具。 (2)Libpcap/Winpcap Libpcap是Packet Capture Library(数据包捕获函数库)的缩写与重组。它不是一个Sniffer,但是它提供的C语言函数接口可用于对经过网络接口数据包的捕获,以支持Sniffer产品的开发。Winpcap是Libpcap的Win32版本。 null(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是一个传统的嗅觉器,通过将网卡设置为混杂模式截取帧进行工作。 null3. Sniffer的防范 Sniffer攻击属第二层攻击,通常是入侵者进入目标系统后,为了获取更多的信息而采用的攻击手段。为了达到好的 攻击效果,它要被放置在下列位置: · 被攻击对象(主机或网络)附近; · 网关上。 Sniffer的防范方法大体有如下一些。 (1)网络 一般将网络分段划分得越细,Sniffer收集到的信息越少。 (2)采用加密通信 加密后,即使Sniffer捕获了数据,也难于获得数据的原文。目前比较流行的做法是使用SSL协议和SSH(下在地址为http://www.openssh.com)安全产品。 null(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 null2.2.2 扫描器 扫描器是自动检测远程或本地主机安全性弱点的程序,它不仅是黑客们的作案工具,也是管理人员维护网络安全的有力工具。主要用于收集系统信息(远程操作系统的识别、网络结构的分析以及其他敏感信息的收集)和发现漏洞。常用的扫描器很多,如网络安全扫描器NSS、超级优化TCP端口检测程序Strobe、员网络分析工具SATAN等。 1. 扫描类型 具体地说,扫描是通过向目标主机发送数据报文,从响应中获得目标主机的有关信息。按照扫描方式,可以将扫描分为如下3种主要类型。 null(1)地址扫描 地址扫描就是判断某个IP地址上有无活动主机,以及某台主机是否在线。 最简单的地址扫描方法是使用ping命令,用ping命令向目标主机发送ICMP回显请求报文,并等待ICMP回显应答。如果ping不到某台主机,就表明它不在线。 Ping命令的发送可以手工一条一条地进行,也可以用Fping等根据进行大范围的地址扫描,得到一个网段中的在线地址列表。 但是,由于用户安全意识的提高,很多路由器和防火墙的规则中都增加了丢弃ICMP回显请求数据包,或在主机中进行了禁止请求应答,使得地址扫描难于进行。 (2)端口扫描 在TCP/IP网络中,端口号是主机上提供的服务的标识。例如,FTP服务的端口号为21、Telnet服务的端口号为23、DNS服务的端口号为53、Http服务的端口号为53等。入侵者知道了被攻击主机的地址后,还需要知道通信程序的端口号;只要扫描到相应的端口被打开着,就知道目标主机上运行着什么服务,以便采取针对这些服务的攻击手段。 (3)漏洞扫描 漏洞是系统所存在的安全缺陷或薄弱环节。入侵者通过扫描可以发现可以利用的漏洞,并进一步通过漏洞收集有用信息或直接对系统实施威胁。管理人员可以通过扫描对所管理的系统和网络进行安全审计,检测系统中的安全脆弱环节。 常用的扫描工具有Xscan等。 null2. 扫描技术 (1)半开放扫描 TCP连接通过三次握手建立。图2.5表示了一个建立TCP连接的三次握手过程。若主机B运行一个服务器进程,则它要首先发出一个被动打开命令,要求它的TCP准备接收客户进程的连接请求,然后服务器进程就处于“听”状态,不断检测有无客户进程发起连接的请求。null 当A需要服务器的服务时,就要向它的TCP发出主动连接命令:用SYN=1和ACK=0表示连接请求,用SEQ=x表示选择了一个序号。主机B收到A的连接请求报文,就完成了第一次握手。 主机B如果同意连接,其TCP就向A发回确认报文:用SYN=1和ACK=1表示同意连接,用ACK=x+1表示对x的确认,用SEQ=y表示B选择的一个序号。主机A接收到该确认报文,完成第二次握手。 接着,主机A的TCP就还要向主机B发出确认:用SYN=1和ACK=1表示同意连接,用ACK=y+1表示对y的确认,同时发送A的第一个数据x+1。主机B收到主机A的确认报文,完成第三次握手过程。 null 完成这样一个三次握手,才算建立了可靠的TCP连接,才能开始正式传输数据报文。 攻击者进行端口扫描最常用的方法就是尝试与远程主机的端口建立一次正常的TCP连接。连接成功,表示端口开放。这种扫描方式称为“TCP connect扫描”。但是,这种扫描往往会被远程系统记入日志。针对这一缺陷,便产生了半开放扫描——“TCP SYN扫描”。因为,当客户端发出一个SYN连接请求报文后,如果收到了远程目标主机的ACK/SYN确认,就说明远程主机的该端口是打开的;而若没有收到程目标主机的ACK/SYN确认,而是收到RST数据报文,就说明连接出现问题,远程主机的该端口没有打开。这样对于扫描要获得的信息已经足够了,也不会在目标主机的日志中留下记录。 null(2)FIN扫描 半开放扫描广泛地应用,使得防火墙和路由器都采取了相应的措施,会对端口扫描进行完全记录。有些入侵扫描系统也能检测到这类扫描,许多过滤设备能过滤SYN数据报文。于是端口扫描开始另辟溪径,采用FIN扫描。 FIN是中断连接的数据报文。很多日志不记录这类报文。“TCP FIN扫描”的原理是向目标端口发送FIN报文,如果收到了RST的回复,表明该端口没有开放;反之(没有回复),该端口是开放的,因为打开的端口往往忽略对FIN的回复。这种方法还可以用来区别操作系统是Windows,还是Unix。 但是,有的系统不管端口打开与否,一律回复RST。这时,FIN扫描就不适用了。 null(3)反向扫描 反向扫描是一种地址扫描技术,主要用于获得可到达网络和主机的地址列表,借以推断出一个网络的结构分布图。其基本原理是利用了多数路由器只对报文中的地址进行检查,而不分析报文的内容。具体方法是使用可以穿过防火墙的RST数据报文对网络地址进行扫描。向一个网络中的所有地址发送RST报文后,路由器会对这些报文进行检查:当目标地址不可到达时,就送回ICMP差错报文;没有返回的ICMP差错报文的,就是主机在线。根据不在线的主机,进行求逆可以获得在线主机列表。 (4)慢速扫描 慢速扫描就是使用非连续性端口进行时间间隔长且无定率的扫描,并使用不一致的源地址,使这些扫描记录无规律地分布在大量的日志中,被淹没,给日志分析造成困难。 (5)乱序扫描 乱序扫描就是对扫描的端口号集合,随机地产生扫描顺序,并且每次的扫描顺序不同。这就给对入侵检测系统的发觉带来困难。 null2.2.3 其他信息收集类攻击 1. 利用信息获取命令举例 (1)ping命令 ping命令的基本格式:ping <主机名> ping还有许多高级应用,如命令 ping –f <主机名> 可以向指定主机发送大量数据,使该主机忙于回应而死机。 (2)tracert命令 tracert命令用来跟踪消息从一台主机到另一台主机的路径,并显示。 null(3)rusers 这个命令都是Unix命令,用于收集目标计算机上的有关用户的信息。 (4)host/nslookup命令 这两个命令都是Unix命令,可以得到包括操作系统、机器和网络的许多信息。 (5)showmount命令 showmount命令可以列出一台机器上共享的所有目录及其相关信息。 (6)rpcinfo命令 rpcinfo命令报告关于一台主机上注册了的可供外部进程调用的过程服务的编号、版本、端口和名称。 null2. 利用信息服务 (1)whois服务 whois是一个客户程序。通过它攻击者可以收集到下列信息: · 网络注册机构 · 网络域名 · 主机信息 · 网络IP地址分配 · 网络管理人员信息,如电子邮件、电话号码等。 null(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 入侵类攻击 返回null2.3.1 口令攻击 口令机制是资源访问的第一道屏障。攻破了这到屏障,就获得了进入系统的第一道大门。所以口令攻击是入侵者最常用的攻击手段。 口令攻击可以从破解口令和屏蔽口令保护两个方面进行。下面主要介绍口令破解技术1. 口令破解的基本技术 口令破解首先要获取口令文件,然后采取一定的攻击技术进行口令的破解。下面介绍口令破解的基本方法。 (1)口令字典猜测破解法 攻击者基于某些知识,编写出口令字典,然后对字典进行穷举或猜测攻击。表2.1为口令字典的构造方法。 nullnull目前,Internet上已经提供了一些口令字典,从一万到几十万条,可以下载。此外,还有一些可以生成口令字典的程序。利用口令字典可以以猜测方式进行口令破解攻击。 null(2)穷举破解法 有人认为使用足够长的口令或者使用足够完善的加密模式,就会攻不破。事实上没有攻不破的口令,这只是个时间问题。如果有速度足够快的计算机能尝试字母、数字、特殊字符所有的组合,将最终能破解所有的口令。这种类型的攻击方式通过穷举口令空间获得用户口令称为穷举破解法或蛮力破解,也叫强行攻击。如先从字母a开始,尝试aa、ab、ac等等,然后尝试aaa、aab、aac……。 攻击者也可以利用分布式攻击。如果攻击者希望在尽量短的时间内破解口令,也可能会求助几个有大批计算机的公司并利用他们的资源破解口令。 null(3)组合破解法 词典破解法只能发现词典单词口令,但是速度快。穷举破解法能发现所有的口令,但是破解时间很长。鉴于很多管理员要求用户使用字母和数字,用户的对策是在口令后面添加几个数字,如把口令computer变成computer99。使用强行破解法又非常费时间。由于实际的口令常常很弱(可以通过对字典或常用字符列表进行搜索或经过简单置换而发现的口令)。这时可以基于词典单词而在单词尾部串接几个字母和数字。这就是组合破解法。 (4)其他破解类型 · 社会工程学:通过对目标系统的人员进行游说、欺骗、利诱,获得口令或部分。 · 偷窥:观察别人敲口令。 · 搜索垃圾箱。 null2. Unix系统的口令攻击 Unix系统用户的口令,本来是经加密后保存在一个文本文件passwd中,一般存放在/etc目录下。后来由于安全的需要,把passwd文件中与用户口令相关的域提取出来,组织成文件shadow,并规定只有超级用户才能读取。这种分离工作也称为shadow变换。因此,在破解口令时,需要作UnShadow变换,将/etc/passwd与/etc/shadow合并起来。在此基础上才开始进行口令的破解。 真正的加密口令一般是很难逆向破解的,黑客们常用的口令入侵工具所采用的技术是仿真对比,利用与原口令程序相同的方法,通过对比分析,用不同的加密口令去匹配原口令。下面是口令破解工具Crack的主要工作流程。 null它采用逆向比较法进行口令破解。 1 准备:对口令文件作UnShadow变换; 2 下载或自己生成一个字典文件; 3 穷举出口令字典中的每个条目,对每个单词运用一系列规则。典型的规则有: · 使用几个单词或数字的组合; · 大小写交替使用; · 把单词正向、反向拼写后,接在一起; · 在单词的开头或结尾加上一些数字; 规则可以多种多样。规则越多,破译时间越长;但成功率越高。 4 调用crypt()函数对使用规则生成的字符串进行加密变换; 5 用一组子程序打开口令文件,取出密文口令,与crypt()函数的输出进行比较。 循环3、4两步,直到口令破解成功。 null3. 网络服务口令攻击 网络服务口令攻击往往是一种远程在线攻击,攻击过程大致如下: · 建立与目标网络服务的网络连接; · 选取一个用户列表文件和一个字典文件; · 在用户列表文件和一个字典文件中,选取一组用户和口令,按照网络服务协议规定,将用户名和口令发给目标网络服务端口。 · 检测远程服务返回信息,确定口令尝试是否成功。 · 循环2、3、4步,直到口令破解成功。 null4. 增强口令安全性的措施 口令攻击的成功与否,取决于多种因素,如口令长度、口令有效期、口令加密算法的加密强度、口令系统的安全机制等。此外,采用下面一些措施,也可以增强口令的安全性: · 除进行口令验证外,还应使口令完全不可读(包括超级用户)。 · 在选择密码时,就对密码进行过滤。 · 对字典或字符列表进行扫描,剔除用户选择的弱口令。 · 采用口令与智能卡结合的方式登录系统。 · 使用一次性口令。 null2.3.2 缓冲区溢出攻击 缓冲区是程序运行时在内存中为保存给定类型的数据而开辟的一个连续空间。这个空间是有限的。当程序运行过程中要放入缓冲区的数据太多时,就会产生缓冲区溢出。 null 早在1988年,美国康奈尔大学的计算机科学系研究生,23岁的莫里斯(Morris)利用了UNIX fingered程序不限制输入长度的漏洞使缓冲器溢出。Morris又写了一段程序使他的恶意程序能以root(根)身份执行,并传播到其他机器上,结果造成6000台Internet上的服务器瘫痪,占当时总数的10%。“SQL Slammer”蠕虫王的发作原理,就是利用未及时更新补丁的MS SQL Server数据库缓冲溢出漏洞。采用不正确的方式将数据发到MS Sql Server的监听端口,这个错误可以引起缓冲溢出攻击。目前新出现的MSBLAST病毒正是利用了微软关于RPC接口中远程任意可执行代码漏洞,“中招”的机器会反复重启,或者拷贝、粘贴功能不工作等现象。黑客如果成功利用缓冲漏洞,就有可能获得对远程计算机的完全控制,并以本地系统权限执行任意指令,如安装程序、查看或更改、删除数据、格式化硬盘等,危害性不言而喻。 null 缓冲溢出漏洞是一种很普遍的漏洞。在1998年CERT的13份建议中,有9份是是与缓冲区溢出有关的,在1999年,至少有半数的建议是和缓冲区溢出有关的。根据绿盟科技提供的漏洞报告(http://www.nsfocus.com):2002年共发现各种操作系统和应用程序的漏洞1830个,其中缓冲区溢出漏洞有432个,占总数的23.6%;而2002年程度严重、影响范围最大的十个安全漏洞中,和缓冲区溢出相关的就有6个。 值得关注的是,缓冲器溢出攻击不是一种窃密和欺骗的手段,而是从计算机系统的最底层发起攻击,因此在它的攻击下系统的身份验证和访问权限等安全策略形同虚设;同时,由于攻击者传输的数据分组并无异常特征,没有任何欺骗,且用来实施缓存器溢出攻击的字符串非常多样化,无法与正常数据有效进行区分,因而传统安全工具(如防火墙)对这种攻击方式也无能为力。 null2. 缓冲溢出的基本原理 缓冲区溢出的根本原因来自C语言(以及其后代C++)本质的不安全性: · 没有边界来检查数组和指针的引用; · 标准C 库中还存在许多非安全字符串操作,如strcpy() 、sprintf() 、gets() 等。 为了说明这个问题还必须看一看程序的内存映像。 任何一个源程序通常都包括代码段和数据段,这些代码和数据本身都是静态的。为了运行程序,首先要由操作系统负责为其创建进程,并在进程的虚拟地址空间中为其代码段和数据段建立映射。但是,光有静态的代码段和数据段是不够的,进程在运行过程中还要有其动态环境。一般说来,默认的动态存储环境通过堆栈(简称栈)机制建立。所有局部变量以及所有按值传递的函数参数都通过堆栈机制自动地进行内存空间的分配。分配同一数据类型相邻块的内存区域称为缓冲区。图2.6为Linux下进程的地址空间布局。当然,C语言还允许程序员使用堆机制创建存储器,存储使用malloc()获得的数据。不过,这与本节讨论的问题无关。 null从逻辑上讲进程的堆栈是由多个堆栈帧构成的,其中每个堆栈帧都对应一个函数调用。当函数调用发生时,新的堆栈帧被压入堆栈;当函数返回时,相应的堆栈帧从堆栈中弹出。尽管堆栈帧结构的引入为在高级语言中实现函数或过程这样的概念提供了直接的硬件支持,但是由于将函数返回地址这样的重要数据保存在程序员可见的堆栈中。当程序写入超过缓冲区的边界时,这就是所谓的“缓冲区溢出”。发生缓冲区溢出时,就会覆盖下一个相邻的内存块,导致一些不可预料的结果:也许程序可以继续,也许程序的执行出现奇怪现象,也许程序完全失败。null下面的程序是一个缓冲溢出的实例。 例2.3.1 #include int main(){ char name[5]; printf(“Please input your name:”); gets(name); printf(“you are %s”,name); }  运行这个程序可以发现,当输入的字符数少时,程序运行正常;当输入的字符数太多时(超过8),程序就不能正常结束。这就是缓冲区逸出所造成。 null 典型的堆栈帧结构如图2.7所示。堆栈中存放的是与每个函数对应的堆栈帧。当函数调用发生时,新的堆栈帧被压入堆栈;当函数返回时,相应的堆栈帧从堆栈中弹出。 图2.7 典型的堆栈帧结构 null 堆栈帧的顶部为函数的实参,下面是函数的返回地址以及前一个堆栈帧的指针,最下面是分配给函数的局部变量使用的空间。一个堆栈帧通常都有两个指针,其中一个称为堆栈帧指针,另一个称为栈顶指针。前者所指向的位置是固定的,而后者所指向的位置在函数的运行过程中可变。因此,在函数中访问实参和局部变量时都是以堆栈帧指针为基址,再加上一个偏移。由图2.7可知,实参的偏移为正,局部变量的偏移为负。当发生数据栈溢出时,多余的内容就会越过栈底,覆盖栈底后面的内容。通常,与栈底相邻的内存空间中存放着程序返回地址。因此,数据栈的溢出,会覆盖程序的返回地址,从而造成如下局面:要么程序会取到一个错误地址,要么将因程序无权访问该地址而产生一个错误。 鉴此,C语言把这一艰巨任务交给了开发人员,要求他们进行边界检查,编写安全的程序。然而这一要求往往被人们忽视,从而给黑客有机可乘。 null3. 缓冲区溢出攻击 如果当发生缓冲溢出时,能够准确地控制跳转地址,将程序流程引向预定的地址,CPU就会去执行这个指令。如果入侵者在预定的地址中放置代码用于产生一个Shell,则当程序被溢出时,入侵者将获得一个Shell。该Shell会继承被溢出的程序的权限(操作系统中,一个新产生的Shell会继承生成该Shell的程序的权限)。如果入侵者获得了某台服务器的一个普通权限账号,而服务器上某个以root或system权限运行的程序存在缓冲溢出漏洞,入侵者就可以利用该漏洞生成的Shell去获得root权限。而入侵者进行攻击的关键是修改以较高权限运行的程序跳转指令的地址。 null 入侵者为了修改以较高权限运行的程序跳转指令的地址,一般要经过如下3步。 (1)将需要执行的代码放到目标系统的内存。下面是两种常用方法: · 植入法:通过主机,将需要执行的代码(目标平台上可执行的),直接放到缓冲区。 · 利用已经有的代码:只要修改传入参数。 (2)修改返回地址。 (3)控制程序跳转,改变程序流程。下面是3种常用方法。 · 修改程序返回地址:将预先设定好的地址替换程序原来的返回地址。 · 在缓冲区附近放一个函数指针,指向入侵者定义的指令。 · 使用longjmp:C语言的setjmp/longjmp是一个检验/恢复系统,可以在检验点设定setjmp(buffer),用longjmp(buffer)恢复检验点。入侵者可以利用longjmp(buffer)跳转到预定代码。 null4. 缓冲区溢出防御措施 (1)安装安全补丁。 (2)编写安全的代码:缓冲区溢出攻击的根源在于编写程序的机制。因此,防范缓冲区溢出漏洞首先应该确保在Linux系统上运行的程序(包括系统软件和应用软件)代码的正确性,避免程序中有不检查变量、缓冲区大小及边界等情况存在。比如,使用grep工具搜索源代码中容易产生漏洞的库调用,检测变量的大小、数组的边界、对指针变量进行保护,以及使用具有边界、大小检测功能的C编译器等。 null(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”文件中显示这些信息的代码注释掉,可以使系统不显示这些信息。 null一种方法是在显示这些信息的代码行前加“#”: …# 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在监听哪些网络端口,为每个端口启动哪些特定服务等信息,会泄露大量的敏感信息。 null(4)保护堆栈 · 加入函数建立和销毁代码。前者在函数返回地址后增加一些附加字节,返回时要检查这些字节有无被改动。 · 使堆栈不可执行——非执行缓冲区技术,使入侵者无法利用缓冲区溢出漏洞。 null2.3.3 格式化字符串攻击 格式化字符串攻击也称为格式化字符串漏洞,同其他许多安全漏洞一样是由于程序员的疏漏造成的。不过,这种疏漏来自程序员使用格式化字符串函数的不严谨。 null1. 格式化字符串函数族 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函数,它的前一个参数,就是格式化字符串。 null2. 格式化字符串漏洞 为了说明对格式化字符串使用不当而产生的格式化字符串漏洞,请先看下面的程序。 例 2.3.2 #include int main() { char *name; gets(s); printf(s); }abcde abcde%08x,%08x,%08x 000002e2,0000ffe4,0000011d下面是该函数的两次运行结果。 null 当输入“abcde”时,输出仍然是“abcde”。 当输入“%08x,%08x,%08x”时,输出的却是“000002e2,0000fe4,0000011d”。这就是格式化字符串漏洞所造成的问题。因为,在printf函数中,s被解释成了格式化字符串。当调用该函数时,首先会解析格式化字符串,一次取一个字符进行分析:如果字符不是“%”,就将其原样输出;若字符是“%”,则其后面的字符就要按照格式化参数进行解析。当输入“abcde”时,由于没有包含“%”,所以每个字符都被原样输出了。而当输入“%08x,%08x,%08x”时,就要将每个“%”后面的“x”都解释为一个十六进制的数据项,但函数没有这样3个数据项。于是,就将堆栈中从当前堆栈指针向堆栈底部方向的3个地址的内容按十六进制输出出来,这就是“000002e2,0000fe4,0000011d”。 一个启发:当格式化字符串中包含有许多“%”时,就会有机会访问到一个非法地址。 null3. 格式化字符串攻击的几种形式 (1)查看内存堆栈指针开始的一些地址的内容 由例2.3.1可知,使用类似于 printf (“%08x,%08x,%08x”); 的语句,可以输出当前堆栈指针向栈底方向的一些地址的内容,甚至可以是超过栈底之外的内存地址的内容。 (2)查看内存任何地址的内容 所查看的内存地址内容,也可以从任何一个地址开始的内存内容。例如语句 printf (“\x20\02\x85\x08_%08x,%08x,%08x”); 将会从地址0x08850220开始,查看连续3个地址的内容。 null(3)修改内存任何地址的内容 格式化字符串函数还可以使用一个格式字符“%n”。它的作用是将已经打印的字节数写入一个变量。请观察下面的程序。 例 2.3.3 #include int main() { int i; printf(“china \%n\n”,(int*)&i); printf(“i = %d\n”,i); } null程序运行的结果如下: 即i的值为前面已经打印的字符串“china”的长度——5。利用这一点,很容易改变某个内存变量的值。 null例 2.3.4 #include 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); } 程序执行结果如下: null语句 printf(“%108u%n\t”,1,(int*)&i); 用数据“1”的宽度——108来修改变量i的值。而语句 printf(“%58s123%n\t”,””,&i); 是用字符串“”加上字符串“123”的存放宽度——23+3来修改变量i的值。 使用同样的办法,可以向进程空间中的任意地方写一个字节。以达到下面的目的: · 通过修改关键内存地址内容,实现对程序流程的控制; · 覆盖一个程序储存的UID值,以降低和提升特权; · 覆盖一个执行命令; · 覆盖一个返回地址,将其重定向到包含shell code的缓冲区中。 2.4 欺骗类攻击 2.4 欺骗类攻击 返回null 电子欺骗(spoofing)是与认证(authentication)和信任(trust)相联系的一个概念。认证是网络上的计算机相互间进行识别的过程。信任是经过认证获准连接的相互关系。信任有程度之分,有高度信任关系的两台计算机进行连接,一般不需要严格的认证;而信任程度较低的两台计算机之间进行连接,就需要进行严格的认证。 电子欺骗就是在两台建立了信任关系的计算机之间,冒充其中一台,对另一台进行欺骗性连接,而后对其发起攻击。这种欺骗可以通过不同的网络协议漏洞进行。欺骗策略与等级欺骗策略与等级假冒可信站点通信 假冒可信站点,同时使可信站点瘫痪null2.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欺骗攻击虽然有,但要少得多。 null2)使计划要冒充的主机无法响应目标主机的会话 当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请求。受攻
/
本文档为【黑客】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索