地址勘察技术

2024-09-09

地址勘察技术(精选四篇)

地址勘察技术 篇1

随着网络的不断发展,网络规模日益扩大,用户对网络安全及稳定性方面的要求也日益提高。在日常的网络管理中,IP地址的盗用一直是网络管理员比较棘手的问题。

IP地址盗用就是盗用者将本机的IP地址修改为本子网内的另外一个合法用户的IP地址或未分配的IP地址,然后利用该IP地址去访问网络,从而影响合法用户的网络的正常使用。

网络管理部门在规划的网段中,为合法注册用户分配了相应的网络IP地址资源,以保证通信数据的正常传输。以这种方式接入的用户,静态的IP地址是必不可少的配置项目之一,它享有“网络通信身份证”的特权。网络管理员在配置IP地址资源时,对其正确性有特殊的要求,主要表现在以下两个方面:分配的地址应在规划的子网网段范围内;分配的IP地址对任何联网的主机必须是惟一的,即无二义性。然而,IP地址作为接入网络主机的唯一标识、网络管理的重要信息元素,却只是对网络设备、主机有意义,对网络管理部门来讲,并不能从IP地址上识别主机或用户,从而为网络管理带来了障碍。

如果用户在配置TCP/IP或修改TCP/IP配置时,使用的不是网络管理部门分配的IP地址,就形成了IP地址盗用。具体表现为三种方式:

1)静态修改IP地址

由于IP地址是一个逻辑地址,是一个需要用户设置的值,因此无法限制用户对于IP地址的静态修改,除非使用DHCP服务器分配IP地址,但又会带来其它管理问题。

2)同时修改IP-MAC地址

MAC地址是设备的硬件地址,对于我们常用的以太网来说,即俗称的计算机网卡地址。每一个网卡的MAC地址在所有以太网设备中必须是唯一的,它由IEEE分配,是在设备出厂时固化在网卡上的,但由于网卡的驱动程序在收发数据包时为了加快处理速度并非每次处理数据帧时都从网卡的ROM中读MAC地址,而是将MAC地址放入缓存中,需要的时候直接从缓存中读取,这种工作机制就造成了用户可以通过专用软件甚至操作系统修改网卡的MAC地址进而达到欺骗上层网络软件的目的。

3)伪造IP地址

利用编制好的IP欺骗工具,绕过上层网络软件收发数据包。

2 问题分析

目前防止IP地址盗用比较常用的方法是定期扫描网络中各路由器的ARP(address resolution protocol)表,获得当前正在使用的IP地址以及IP-MAC对照关系,与合法的IP地址表,IP-MAC表对照,如果不一致则有非法访问行为发生。另外,从用户的故障报告(盗用正在使用的IP地址会出现MAC地址冲突的提示)也可以发现IP地址的盗用行为。在此基础上,常用的防范机制有:IP-MAC捆绑技术、代理服务器技术、IP-MAC-USER认证授权以及透明网关技术等。但这些机制都有一定的缺点:如IP-MAC捆绑技术无法防范对修改IP-MAC的盗用行为;代理服务器技术不适合大规模企业网络的使用;透明网关不能控制来自内部的地址盗用,更重要的是上述机制事实上仅仅是造成了盗用者无法访问三层设备以上的外部资源,由于IP地址盗用者仍然具有该网段内完全活动的自由,因此一方面这种行为会干扰合法用户的使用:另一方面可能被某些有不良企图用户用来攻击该网段内的其他机器和网络设备。如果侦测到代理服务器的存在,盗用者还可以通过种种手段获得网外资源。所以,亟待解决的问题是如何快速定位盗用者所在的用户端口并快速实现阻断。

一般情况下,在进行网络综合布线的同时,施工单位会获得网络设备端口与具体物理位置(用户)的对应关系,如果能把IP地址对应的端口找到,就可以通过查找该端口所在物理位置确定用户所在。而网络设备的MIB库中就记录了数据包的IP地址和MAC信息,为查找端口提供了基础。

网络从上至下可分为核心层、汇聚层和接入层,位于不同层次的网络设备中存储着不同的MIB库,对应相应的IP—MAC地址和相应的物理端口,可以通过网络设备的逐层分析,定位目标IP所处的网络端口位置。要从位于不同层次的网络设备中提取到相应的ARP的信息,就要进行基于网络的SNMP(简单网络管理协议)分析。SNMP协议目前最常用的有两个版本,通常称之为v1和v2。一般情况下v2向下兼容v1版。

SNMP标准主要由三部分组成:简单网络管理协议(SNMP);管理信息结构(Structure of Management Information,简称SMI,RFC1155标准)和管理信息库(MIB,RFC1156、RFC1158标准)。管理信息结构(SMI)和管理信息库(MIB)两个协议是关于管理信息的标准,它们规定了被管理网络对象的定义格式、MIB库中都包含哪些对象以及怎样访问这些对象等等。SMI协议规定了定义和标识MIB变量的一组原则。它规定所有的MIB变量必须用ASN.1(即抽象语法表示法I,它是一种描述数据结构的通用方法。

SNMP MIB管理信息库的存储方式是一种目录树的结构,而且它总是开始于:iso.Org.Dod翻译成数字就是1.3.6,这就是我们所说的MIB(Management Information Base,管理信息库)的格式,而关于物理地址的MIB就是:iso.Org.Dod.Internet.Mgmt.Mib.At.AtTable.AtEnty.AtPhysAddress(1.3.6.1.2.1.3.1.1.2)。

每个MIB变量都有一个名称用来标识。在SMI中,这个名称以对象标识符(Object Identifier)来表示。对象标识符相互关联,共同构成一个分层结构。在这个分层结构里,一个对象的标识符是由从根出发到对象所在节点的途中所经过的一个数字标号序列组成。如图1中,Internet的对象标识符就是1.3.6.1,对象标识符的命名由专门的机构负责。

在Internet节点下的mgmt节点,专门为管理信息库分配了一个子树,名为mib(1)。所有的MIB变量都在mib节点下,因此它们的名称(对象标识符)都以iso.org.dod.internet.mgmt.mib开始,数字表示是1.3.6.1.2.1。MIB变量的命名实际上是引用了ISO的对象标识(OID Object Identfier)名字空间管理,表示法分为整数标识法和字符标识法两种,前者适合软件实现,后者便于理解。

3 定位模型

路由器中的路由表MIB中存有网络中工作站IP地址与MAC地址的对应表。在CISCO路由器的路由表中,这种信息一般放在树型结构的{1.3.6.1.2.1.3.1.1.2.0.0.1.47}位置中,比如:一个IP地址为10.169.169.2的机器,它的MAC地址就存放在MIB表中{1.3.6.1.2.1.3.1.1.2.0.0.1.47}+{10.169.169.2}的这个位置上,知道了这个表结构后,我们就可以通过编写CGI程序来调用SNMP代理,读取MIB管理信息表中的MAC地址。

我们调用简单网络管理协议SNMP从设备的MIB库中获取有用信息,SNMP体系结构如图2所示。SNMP协议是运行在UDP(用户数据报协议)之上的应用层协议。SNMP系统一部分由Agent(分布式代理)软件组成,它运行在服务器、路由器等被管理的对象上。每一个Agent都有一个MIB(Management Information base管理对象信息库)及一些与具体设备有关的变量。SNMP系统的另一关键部分是网络管理站(NMS Network Management Station),它具有全部被管对象的主数据库。

Agent在网管系统结构的位置相当于管理器和被管设备之间的网关和协议转换器。Agent的功能需求的范围应该为:

1)协议转换:实现SNMP协议和被管设备之间的协议互相转换

2)转发请求:包括向被管设备转发查询,设置请求;向Manager转发设备产生的告警信息

3)通过MIB库维护被管设备的信息结构

4)对Manager提供一个统一的网管接口,无论被管设备有多复杂,对Manager来说只需要和Agent交互就可以获得所有被管设备的网管信息

5)不需要牵涉诸如轮巡,告警策略等网管业务逻辑。也不参与被管设备本身对网管数据的处理流程。这些由被管设备的网管业务逻辑层自行处理。

6)不需要对数据进行统计分析

7)不需要保存历史或实时网管数据

SNMP以GET-SET方式替代了复杂的命令集。SNMP协议现在有3个版本。其中SNMPv1定义了5种用于管理进程和Agent之间交换信息的报文格式:

get-request从agent上读取数值

set-request对agent上的变量进行设置

get-next-request从agent上读取当前所读参数的下一个参数值,用于表的遍历

get-reponse agent对前面三个操作的响应,返回参数值

trap agent主动向Manager发送的报文,通知事件的发生。

我们可以利用上述五种报文从MIB库中获取相关信息,从而有针对性的设置参数。从www.agentpp.com上可以获取公开源代码的SNMP开发工具SNMP++v3.2,使用该软件包可以获取MIB信息并实现对目标端口的控制。

MIB表是通过行和列来描述的。其中列表头是各个表项的原始Oid,而行表头则是index。这样以来一个Oid和一个index就唯一地确定了表中的一项。比如在接口表中,ifDescr(Oid为1.3.6.1.2.1.2.2.1.2)为一列,而具体对于某一个接口则为一行。这样,某一具体表项的Oid就表示为:列Oid+index的形式。按照RFC1213描述,最基本的方法是通过index来获取某一表项。但事实上,index本身也是一个表项,再加之有些表需要多个index,并且各种index的数据类型不同,比如要手工处理ip地址类型的index就比较困难,所以这种方法具有很难的操作性。因此,在实际编程时,可以采取如下方法:

从Snmp中对于get报文的描述可知,如果get-ext的参数为一个表中某一列的表头Oid,比如前面的ifDescr(1.3.6.1.2.1.2.2.1.2),则得到的值为该列第一行元素值,并可得到该值的Oid。再对取得的Oid使用GetNext就可获得该列第二行的值。如此下去,如果到了该列的最后一行,那么用GetNext将得到下一列的第一行。如果到了该表的最后一个元素,那么用GetNex将得到按MIB树所得的下一个元素值。显然,在越界的情况下,其Oid的前部分已不同于本列表头的Oid,所以,可以通过得到的Oid值来判断是否越界。

获取了MIB信息,我们定义“验证———定位模型”如下:

1)从核心设备上根据IP-ARP表确定MAC地址。主要读取表ipNetToMediaTable中的两项:ipNetToMediaNetAddress(存放IP地址信息)和ipNetToMediaPhysAddress(存放MAC地址信息)。利用snmp_get_net()遍历表ipNetToMedia NetAddress获取指定的IP的索引值x,使用snmp+get(x)命令报文获取指定IP对应的MAC地址;

2)确定MAC地址对应的汇聚层设备。根据获取的MAC地址,利用snmp_get()读取表dot1dTpFdbPort,获得MAC对应的端口号p,查找存储拓扑结构信息的MIB,确定核心设备上端口p所连接的汇聚层设备;

3)在汇聚层设备上重复1、2两个步骤,进而确定接入层是哪个设备;

4)在接入层设备根据MAC地址确定目标主机所连接的端口;

5)发送snmp_set()至接入层设备的MIB库中的表项mib-2.interfaces.ifTable.ifEntry.ifOperStatus将其值设为“2”(关闭)

至此,我们实现了对目标主机的快速定位、验证和阻断。

4 结束语

由于上述涉及到的MIB表项均属于由IEEE发布的标准MIB库,所以目前网络中绝大多数支持SNMP的设备均可方便采用该方式实现对地址盗用主机的快速定位和阻断,而与设备的型号、种类无关,大大减轻了网络管理员的工作量。

通过对网络设备MIB信息的采集和分析,利用SNMP编程接口可以开发各种网络管理程序,实现网络设备信息的自动采集和对设备的管理,缩短了网络排障时间,提高了网络系统运行的稳定性、安全性及可靠性。

摘要:该文提出通过即时查询网络设备的MIB库信息,快速确定盗用IP地址用户所在网络端口,定义了了快速定位——验证模型,最后结合SNMP++编程,给出了具体的实现办法。

关键词:地址盗用,MIB,SNMP

参考文献

[1]IETF RFC1213.http://www.ietf.org/rfc/rfc1213.net.

[2]STALLINGS.W.SNMP网络管理[M].北京:中国电力出版社,2001.

地址勘察技术 篇2

一、教学目标 【知识与技能】

学生能准确说出IP地址概念;完整复述IP地址格式及分类方法.【过程与方法】

学生通过生活实例直观感受IP地址的作用和便捷;通过小组讨论,自主探究掌握IP地址的分类形式,并能正确辨别IP地址类型。

【情感态度与价值观】

学生体验通过计算识别IP地址类型的学习乐趣,在进行自主学习的过程中勇于克服困难,同时提高对网络技术应用的学习兴趣。

二、教学重难点 【重点】

能够理解IP地址的概念,熟记IP地址的格式组成和分类方法。【难点】

能进行IP地址类型识别。

三、教学过程 环节一:导入新课

1.老师利用多媒体播放视频,内容是关于我国首例利用因特网破获聚众赌博案件

(1)学生观看视频。(2)学生概括视频主要内容。

本文由广西中公教育整理提供,供各位考生参考学习!

2.设置疑问:公安机关根据什么线索进行破案的?根据学生的回答,引入IP地址的概念。

环节二:新课讲授 任务

一、查一查

1.设置小组竞赛,根据查看本机IP地址的方法,学生动手操作查看自己计算机的IP地址。

2.请较快完成的同学说出自己的IP地址,老师在黑板上记录。任务

二、答一答

(1)学生自学课本上关于IP地址概念的内容。

(2)学生回答问题:“什么是IP地址”“ip地址类型”“各类ip地址可以容纳的计算机台数”,老师做补充总结。

任务

三、说一说

1.学生利用2分钟自学书上内容,讨论IP地址的组成特点。

2.教师带领学生结合黑板上记录的IP地址,总结IP地址组成的特点,包括点分十进制的表示方法及网络标识、主机标识;并通过对网络号和主机号的讨论,引入IP地址分类的概念。

环节三:巩固提高

根据之前学习的内容,完成巩固训练习题:

1.请学生随机说出一个IP地址,设置纠错环节帮助学生进一步理解IP地址的组成特点。

2.进一步训练学生辨别IP地址类型的能力,突破难点。环节四:小结作业

本文由广西中公教育整理提供,供各位考生参考学习!

1.首尾呼应:回顾上课播放的视频,请同学们思考警察到底是如何根据IP地址查获罪犯,根据网络号和主机对应进行分析。

2.小结:简单回顾本节课所学要点。

3.作业:因特网IP地址、我国的IP地址分别由谁来分配与管理,请同学们课后去查资料,下节上课时请同学们分享。

四、板书设计

五、教学反思

地址勘察技术 篇3

关键词:地址转换技术;Public IP;Private IP;校园网;透明

中图分类号:TP396 文献标识码:A文章编号:1007-9599 (2011) 08-0000-01

NAT Technology Application in the Campus Network

Lu Yijun

(Zhejiang Yuyao No.4 Vocational Technical School,Yuyao315470,China)

Abstract:With the rapid development of Internet technology,access to the increasing number of Internet users,IP resources, and network security issues such as shortage of IT people become the focus of attention.Network address translation technology so that these problems have been alleviated,the article describes the concept of NAT technology,NAT technology classification and NAT technology implementation process,and use NAT technology to the campus computer network through the private network IP addresses into public IP addressesaccess to the Internet to solve the shortage of campus IP address of the problem and save money.

Keywords:Address translation technology;Public IP;Private IP;Campus network;Transparent

一、NAT技术的概述

(一)什么是NAT。NAT英文全称是Network Address Translation,称是网络地址转换,可以让网络内的多台计算机(地址)共享一个(组)IP地址的技术,这对终端用户来说是透明的。

在网络内部,各计算机间通过内部的IP地址进行通讯,而当内部的计算机要与外部internet网络进行通讯时,具有NAT功能的设备(比如:路由器)负责将其内部的IP地址转换为合法的IP地址(即经过申请的IP地址)进行通信。

(二)NAT设备。NAT路由设备至少必须具有两个网络接口,每个接口都必须要有一个IP地址。对于连接到Internet的网络接口,即WAN接口,必须设置为Public IP地址。而连接到内部局域网的网络接口,即LAN接口,其IP地址是使用Private IP地址。

二、NAT技术的分类

NAT技术作为一种流行的技术,目前常见的路由设备的NAT类型有以下三种:静态NAT(Static NAT)、动态地址NAT(Pooled NAT)、网络地址端口转换NAPT(Port-Level NAT)。

(一)静态NAT(Static NAT)。内部网络中的某个主机都被永久映射成外部网络中的某个合法的地址,配置时需要指明内网接口和外网接口。

(二)动态地址NAT(Pooled NAT)。用外部网络中组合法的IP地址定义一个地址池,把地址池里的IP地址动态分配映射到内部网络。

(三)网络地址端口转换NAPT(Port-Level NAT)。把内部地址映射到外部网络的一个IP地址的不同端口上,所有不同的TCP和UDP信息流看起来好像来源于同一个IP地址。

三、NAT技术的原理

当LAN中的机器需要访问外部的网络时,数据包首先会被送到该机器所在的网关(一般是路由设备),这个网关除了路由数据包,还有地址转换任务。当网关收到包并确定可以路由后,会检查该包是否符合NAT的标准,然后会将内网IP地址转换为外网IP地址,于是,数据包的源地址被转换成能够在Internet上识别的Public IP地址并被送到目的地。

四、网络地址转换NAT技术在校园网中的实现

我校是通过向电信局申请的一条100M光纤专线,通过路由器接入互联网,保证所有主机高速接入互联网。利用一台锐捷NBR1000路由器、一台锐捷4909交换机和一些普通交换机等设备来构建校园内600多台计算机的上网环境。在网络搭建过程中碰到了一些困难,经过多次试验,将我们实现的过程进行简单的介绍如下:

(一)设计思路和设备连接方法。我们学校内部的局域网使用地址为192.168.0.0/24网段,按地理位置和功能不同划分了12个VLAN,由三层交换机实现不同VLAN之间的通讯,利用路由NAT地址转换功能,将内部网的私有地址转换成互联网上的合法地址。

电信提供给我们的IP地址:61.164.86.114/29,其中61.164.86.114/21用于路由器的WAN接口。同时将局域网内的WEB服务器和FTP服务器对外发布,使Internet用户可以访问这两台服务器。

(二)路由器上具体配置如下:

access-list 98 permit any(定义访问控制列表)

interface Fast Ethernet 0/0(LAN接口)

ip nat inside

ip address 192.168.100.2 255.255.255.0

interface Fast Ethernet 1/0(WAN接口)

ip nat outside

ip address 61.164.86.114 255.255.248.0

ip nat inside source static 192.168.0.10 218.71.226.102 permit-inside

ip nat inside source static 192.168.0.7 218.71.226.100 permit-inside

(静态地址转换,对外发布WEB服务器和FTP服务器)

ip nat inside source list 98 Fast Ethernet 1/0 overload(动态地址转换)

ip route 0.0.0.0.0.0.0.0 Fast Ethernet 1/0 61.164.86.113(设置默认路由)

(三)工作站的配置。在TCP/IP属性中设置IP地址,关网为三层交换机上的VLAN的三层接口地址,设置DNS为宁波电信的IP地址:202.96.104.16;202.96.104.65;

五、结束语

NAT技术主要解决了IP地址资源有限,实现了多个用户公用一个合法IP与外部Internet进行通信;并且通过NAT将内部网络与外部Internet隔离开,增强了安全性;但是对于一些端对端的应用将无法实现。

参考文献:

[1]汪双顶,韩立凡.中小型网络构建与管理(上下册)[M].北京:高等教育出版社,2006

[2]Allan Reid.北京邮电大学思科网络技术学院.思科网络技术学教程CCNA4广域网技术[M].2008

地址空间随机化技术研究 篇4

1988年11月2日,莫里斯利用Unix操作系统fingerd软件中缓冲区溢出安全漏洞编写了莫里斯蠕虫,莫里斯蠕虫感染了数万台计算机,造成了巨大的损失,这也是缓冲区溢出安全漏洞被首次利用。从那以后,越来越多的缓冲区溢出安全漏洞被发现,利用缓冲区溢出安全漏洞的攻击已经成为网络安全的最大威胁,根据US-CERT(美国计算机应急处理小组)报导,60%的针对计算机系统的攻击行为属于这一类。

按照修改程序执行流程的方式来划分,基于缓冲区溢出安全漏洞的攻击包括栈溢出[1]、堆溢出[2]、整形溢出[3]、格式化字符串攻击[4]和双重free[5]攻击等。按照攻击代码的来源可以分为需要植入代码的攻击和return-into-lib(c)[6]攻击。

尽管如StackGuard[7]、FormatGuard[8]之类的系统可以阻止栈溢出和格式化字符串攻击,PaX[9]中的可写页不可执行技术(NOEXEC)和Windows XP SP2之后的操作系统中的数据执行保护技术(DEP)可以有效地阻止植入代码的攻击,但是每个系统或技术只能防御某一特定方式的攻击,要将这些系统或技术集成在一起却很难,而新的攻击方式还在不断出现。另外,这当中某些技术存在额外开销过大的问题。为了避免这些不足,研究人员提出了从另一个角度来对系统进行保护的技术,即ASR技术。ASR的基本出发点是:基于缓冲区溢出安全漏洞的攻击需要事先熟悉进程的地址空间,从而将程序的执行流程跳转到攻击代码的位置。为此,ASR技术随机修改进程的地址空间分布,使得攻击者无法将程序的执行流程跳转到预期的位置,从而阻止进程执行攻击者预先设置好的攻击代码。分析和实验表明,ASR技术能够以比较小的额外开销有效地降低攻击者成功的概率。

1 ASR技术

ASR技术主要对进程的栈、堆、主程序代码段、静态数据段、共享库(Shared Library)、GOT(Global Offset Table )等所在的地址进行随机化。图1是ASR技术的示意(以基本的栈溢出为例),不采用ASR技术的进程,因其地址空间固定,攻击者可预先得出图中攻击代码的地址,将其覆盖到某函数返回地址的位置,使函数返回时跳转到攻击代码的位置执行;采用了ASR技术后,因为图中攻击代码的地址不固定,攻击者只能猜测该地址,所以不能保证能正确地跳转到攻击代码的位置。ASR的最终效果在于:① 降低攻击者成功的概率;② 使针对一台计算机的攻击方法不能简单地移植到另一台计算机上。在Windows Vista之前,ASR技术已经被提出并在一些开源系统中实现,本节按照各种ASR技术的成熟度对它们进行介绍。

1.1 早期的ASR

S.Forrest最早提出了ASR的概念[10],指出计算机系统的相似性会带来安全隐患——对一台计算机的攻击方法可以轻易移植到其他计算机上,带来攻击的大众化和病毒的快速传播,并首次提出通过进程地址空间随机化的方法来实现多样化的计算机系统。S.Forrest提出了一些地址空间随机化的方法,如修改栈基地址、为局部变量分配冗余空间、随机化静态变量地址等方法,并在原形系统中实现了其中的一种:修改gcc编译器,如果一个局部变量需要的栈空间超过16字节,则在分配空间时随机增加8、16、24、…、64个字节。

M.Chew等人提出了将操作系统随机化来抵御缓冲区溢出攻击的方法[11],指出了多种实现技术,其中ASR技术是修改操作系统内核,随机化进程栈基址。实现方法是:进程初始化时,先在进程栈顶放入0-32K个字节的数据,将栈顶指针减去放入的字节数,然后开始进程。这样,进程实际使用的栈基地址就被随机化了。

Homebrew[12]是在FreeBSD系统下实现ASR的一种方案,可以通过修改gcc在编译期间实现,也可以修改内核在进程加载时实现。实现方法是:修改进程栈基址(将栈顶指针减少0-1M),并且填充随机数量(0-16K)的字节到每个函数的栈空间。这样不仅进程栈空间发生了变化,每个函数的栈空间也发生了变化,增加了要得到栈中某个变量的地址的难度。

这些早期的实现方案只对进程的栈空间进行了一定程度的随机化,使攻击者无法轻易得到栈中某个变量的地址(攻击代码的起始地址),因此不能确定在函数的返回地址位置写入的数值,增加了攻击的难度。但这些早期的简单的方案无法抵御多种类型的攻击(如堆溢出等),比较容易被绕过。而且,由于随机空间太小,容易被暴力破解。但这些方案提出的通过随机化进程地址空间来抵御缓冲区溢出攻击的思路具有重要意义。

1.2 成熟的ASR

PaX[9]中的ASR技术被认为是目前实现得最成功的,通过为Linux内核打补丁,实现了对栈基地址、主程序基地址以及共享库的加载地址的随机化。实现方法是,在进程加载时,对栈基地址的4-27位共24位进行随机化,对包括主程序映象、静态数据区、堆这一连续区域的基地址的12-27位共16位进行随机化,对共享库加载地址的12-27位共16位进行随机化。这种ASR技术加上可写页不可执行技术,PaX构成一个完整的实用的系统防护方案,可写页不可执行技术迫使攻击者必须使用进程空间中现有的代码(如共享库中的函数)进行攻击,ASR使得这些现有的代码的位置不确定。而且,如果攻击者使用的共享库函数需要参数,攻击者就需要知道放入栈中(或堆中)的参数的位置,而这也是不确定的。通过这些技术,PaX能大大降低攻击成功的概率,在linux系统中得到广泛的应用。

TRR[13]通过修改进程加载器来实现ASR,不需要修改系统内核。采用的随机方法与PaX类似,在进程加载时修改了栈基址、堆基址以及共享库的加载地址。与PaX相比,TRR增加了对GOT的随机化,以阻止修改GOT函数指针指向恶意代码的攻击。GOT保存在程序的静态数据区,在动态链接的程序中,动态库中的函数并不包含到主程序代码中,在编译时编译器将这些函数的地址保存在GOT中,并将GOT的地址保存在代码段中的PLT(procedural linkage table)中,主程序对动态库中函数的调用通过PLT和GOT协作来实现。攻击者常常修改GOT中的函数指针,指向预先安排好的攻击代码,因此TRR对GOT的位置进行了随机化。要对GOT进行随机化,不仅需要将GOT放在随机的位置,还需要修改PLT中对GOT的索引,使其正确指向GOT。TRR修改了进程加载器,在进程加载时将GOT移动到新的位置,并用二进制代码修改工具修改代码段中的PLT,从而实现了GOT的随机化。

这一类ASR实现方案对栈、堆、主程序代码段以及共享库等在进程空间的基地址进行了随机化,粒度较粗、实现简单、额外开销较小,目前得到了广泛的应用,OpenBSD和Windows Vista也采用了类似的方法。它们的缺陷主要在于只随机化了基地址以及使用的随机空间不大,Tyler Durden 和H. Shacham分别从相对地址攻击和暴力破解的角度分析了ASR的缺陷[14,15],将在下面第二节进行介绍。

1.3 高级的ASR

S.Bhatkar先提出了称为Address Obfuscation的实现方案[16],通过代码修改工具修改二进制代码:① 修改进程中所有单元的绝对地址;② 在栈中每个函数的参数和局部变量间、堆中malloc分配的缓冲区之间随机增加空隙;③ 在静态变量间、函数间增加空隙并增加jump指令跳过;④ 修改变量、函数的相互顺序。其中③和④没有实现。这种方案不仅修改了进程中各单元的绝对地址,而且修改了各个单元内部的相对地址,能抵御基于相对地址的攻击。其缺陷在于,因为需要在进程加载前修改二进制代码来确定随机参数,实现较为复杂,而且为了阻止对参数的猜测,需要经常修改,这样不仅开销很大,而且与某些具有程序完整性检查功能的入侵检测系统冲突。同时,由于实现难度很大,③和④没有实现,这使得系统抵御攻击的能力有所降低。

因为Address Obfuscation的缺陷,S. Bhatkar随后提出了另一种随机化相对地址的方案[17],通过修改C源代码,可以生成相同的可执行代码,在进程加载时通过可执行代码修改地址空间,这样无须修改操作系统内核,实现简单,与Address Obfuscation相比可行性更高,并且提出了将缓冲区类型的变量(如数组)分开存储的思路。这种方案的缺点是需要修改程序源代码,采用自动化工具可能不能正确地修改一些比较复杂的程序代码。

Code Islands[18]主要针对chained return-into-lib(c)之类需要知道多个库函数地址的攻击,指出只修改基地址不能有效地阻止攻击者进行与文献[15]中类似的暴力破解。该方案在程序或者动态库加载时将函数划分到不同的块中(称为code islands),并加载到随机的位置。这样猜测得到一个库函数的地址后,不能根据相对位置来计算其他库函数的地址,需要重新猜测。如果在猜测的过程中发生了再随机操作,那么猜测的难度将会大大增加。分析表明,在猜测的过程中进行再随机操作,将使得猜测难度以指数级增加。

这一类的ASR技术从更细的粒度对进程空间进行了随机化,对栈、堆等模块的内部空间进行随机操作,并可能修改二进制代码中各个模块的相对位置。如果能够可靠地实现,这一类的ASR将使得类似文献[14,15]的攻击变得非常困难甚至不可行。但由于其实现困难,目前没有得到广泛应用。

1.4 Vista中的ASR

Windows Vista从Beta2版本开始加入了ASR功能(ASLR address space layout randomization),Ollie Whitehouse,M.Howard等人分别对Vista的不同版本中的ASR进行了研究[19,20,21,22,23]。Vista中的ASR技术本来属于1.2节中的一类,但由于Vista的重要地位,这里单独分一节介绍。

从Beta2版本开始,如果可执行文件被打上了ASR标记,则进程的代码段基地址、栈基地址、堆基地址、PEB(process environment block )的位置等都在进程加载时被随机化了。进程初始化时,可执行文件(exe或者dll)被随机加载到256个地址之一;栈基址被随机选在32个地址之一,然后栈顶指针随机向下移动1-512个双字(4字节),共进行了13位的随机化;PEB的随机化在XP SP2和2003 SP1中已经默认启用,被随机放在进程空间中256个位置的中一个,且不需要对程序做任何设置;Ollie Whitehouse认为堆地址随机分配到32个位置中的一个[19],但是实验结果表明远远多于32个。其中,可执行程序和动态库的加载地址每次计算机重新启动就变化一次,其他是每次程序执行变化一次。

Vista中系统自带的程序和DLL已经默认启用了ASR功能,这些程序或者DLL被加载时将会加载到随机的位置。自定义的程序要开启该功能,需要使用Visual Studio 2005 SP1以上的编译器编译,并加上/dynamicbase这一链接选项,编译器将会在生成的二进制程序中打上标记,Vista加载这些程序时将采用ASR技术。同时,任何使用了包含标记的DLL的程序,不管本身是否打过标记,使用的DLL都将包含ASR特征。

2 对ASR的攻击

目前对ASR技术的攻击主要针对1.2中的实现方案,可能是因为这一类实现只随机化了基地址,且得到了广泛应用的缘故。

Tyler Durden演示了一种针对PaX的攻击方法[14],因为PaX只对主程序代码地址中12-27位进行了随机修改,所以代码段中特定代码的页内地址与没有采用PaX的系统中的页内地址相同,可以覆盖存在溢出漏洞的函数的返回地址的最后一个字节(页内地址的低8位),使其跳转到本页内call printf之类的指令,再通过格式化字符串攻击的方法,逐步获取共享库加载的基地址,从而实现return-into-lib(c)攻击。这种攻击方法利用了PaX只修改了基地址而没有修改主程序代码中语句的相对地址的漏洞,虽然只能在很特别的环境下才能实现,但是确实表明了1.2节中的ASR技术存在漏洞。

H.Shacham采用了暴力猜测PaX中共享库的加载基地址的方法进行攻击[15],只要获得了该基地址,就可以由相对地址计算得到所有被加载的动态链接库中的函数的地址。因为PaX只对该基地址进行了16位的随机化,所以最多存在65536种可能,平均进行32768次猜测就可以猜出该地址,H. Shacham通过实验,用平均216秒的时间就实现了return-into-lib(c)攻击,得出以下结论:① 32位系统下PaX中的ASR技术只能降低蠕虫的传播速度,不能有效地抵御暴力破解,64位系统下该技术才可以使暴力破解变得不可能;② 猜测共享库中单目标函数地址时,实现再随机化最多使猜测时间增加一倍;③ 与运行时再随机化相比,在编译期间对共享库进行更细粒度的随机化更加有效,但是实现难度很大;④ 在某些重要的服务器系统中,即使检测到类似这种暴力攻击,也没有好的方法解决。这种攻击具有普遍意义,对于只需要事先确定单一目标地址的攻击,只有用增大随机空间的方法来解决,但是对于需要确定多个目标地址的攻击,在猜测的过程中如果进行再随机化,这种攻击将很难实现。另一方面,如果被攻击系统具有有效的攻击检测和处理机制,这种攻击就很容易被检测到,因为每次失败的猜测都将使程序跳转到不可预测的位置,而这可能会引起进程崩溃。

Ollie Whitehouse对Windows Vista RTM版本中的ASR技术进行了实验[19],统计了进程每次启动时的栈地址、代码加载地址、PEB地址和三个堆的地址,对结果进行分析后认为PEB的位置和堆基地址的分布不是均匀的,使得猜测的难度大大降低,损害了ASR的有效性。

同时,Windows Vista中的ASR还存在其他技术缺陷:① 8位的随机空间比PaX中的还要小很多,使得暴力破解更为简单;② 只有用Visual Studio 2005 SP1以上编译器编译的程序才能被打上标记启用随机化,而不是所有程序默认启用;③ 主程序代码和动态库加载的基地址每次系统重新启动才变化,这样所有进程的主程序代码和动态库加载的基地址都是一样的,这可能带来安全问题。

3 实现ASR系统的考虑

根据前面对现有ASR技术和已知攻击方法的分析,这里提出一些实现高效可用的ASR系统需要注意的一些问题。

· 实现的难度和系统开销

一种ASR系统的实现难度不应过大,修改源代码或二进制代码的措施往往因为实现难度太大而得不到广泛应用。相对于其他抵御缓冲区溢出的技术,ASR带来的系统开销较小,但是如果频繁地调整进程的空间布局,也会让用户难以接受。

· 随机空间应该足够大

在没有其他漏洞的情况下,攻击者将会采用暴力猜测的方法对ASR系统进行攻击,分析表明,若要抵御这种攻击,随机的位数应该在20位以上。

· 随机化的粒度

随机化的粒度应尽可能细,以抵御基于相对地址的攻击,由前面的分析可知,只随机化进程各个模块加载的基地址是不够的,需要对各个模块内部元素间的间隔进行进一步的随机化,同时需要考虑实现的难度。

· 结合其他防护措施

ASR系统应和其他安全防护系统如入侵检测系统结合使用,当攻击者猜测随机值错误时,能及时发现攻击并作出响应。

4 结束语

ASR是一种新的抵御已知的和未知的基于缓冲区溢出安全漏洞的攻击的方法,它能有效地降低攻击者成功的概率。随着Windows Vista操作系统的推出,目前主流的操作系统都使用了ASR技术来增强安全性。但是目前得到广泛应用的ASR技术的实现还不全面,还存在被暴力破解和被基于相对地址的攻击攻破的可能,更高级的对相对地址进行随机化的方法由于实现难度高尚没有得到推广。找到易于实现的细粒度随机化方法可能是ASR技术未来的研究重点。而对ASR技术进行攻击的重点将会集中在对Windows Vista中的ASR技术的分析和破解上。

摘要:地址空间随机化ASR(address space randomization)技术的目的是使进程空间不可预测,从而保护系统不受攻击。研究了几乎所有主流的ASR系统和技术的原理;分析了其优缺点;研究了对部分ASR系统进行攻击的方法;最后提出了实现实用的ASR系统需要注意的一些问题。

上一篇:现代网络课程下一篇:第二大经济体