打印本文 打印本文  关闭窗口 关闭窗口  
路由器专家:创建网络详细清单
作者:陈鹏  文章来源:eNet  点击数  更新时间:2009/9/11 1:43:50  文章录入:陈鹏  责任编辑:陈鹏

在开始网络服务审计之前,必须创建网络详细清单。该清单包括收集所有网络节点的主机身份信息,如IP地址、网络界面硬件(NIC)地址和DNS条目。在大多数环境中,某些信息是现有的,并且往往会有些错误。在大多数情况下,NIC信息和MAC地址将不被记录。

  即使我们已经获得了信息,但是将创建详细清单和验证这些信息作为审计的第一步也是一个不错的做法。这样,我们就可以完全了解网络环境,同时,它还能有助于发现必须清除的不一致性。本文中所涉及的方法是假设我们对正在审计的网络有管理访问权限。所提供的开源脚本在Unix/Linux、Apple OS X和 Windows环境的Cygwin上运行,同时可以在基于IOS的交换机和支持SSH或者RCMD访问的路由器上运行。

  收集详细清单属性

  在我们开始这个收集过程之前,有必要先阐述一下我们对IP、MAC和DNS信息感兴趣的原因所在。当处理连接到网络用户和管理员的节点时,一般情况下,我们要么使用主机IP地址要么使用DNS来建立通信和交换数据。这些身份验证方法都是友好用户并且易于管理的。它们经常指派一个人名(和号码)来帮助我们实现与这些非人类机器的交互。这两种方案是在70年代后期设计的,当时串行终端设备是计算机交互的主要手段,而原ARPANET主机表还是一个电邮文件。

  这两种方法的动态属性,即分配和实现,使它们可以灵活地同时支持全局和私有操作模式。然而,这种动态的属性也恰恰制造了安全性麻烦。因为指派过程是动态和可转移的,因此,不同的物理主机可以假装指派相同的“网络身份”。大多数基于网络的攻击都是利用了IP和DNS的不可验证性。分布式拒绝服务(DDOS)攻击可以使合法的主机失效,并且允许攻击者伪装被攻击者的IP标识。ID钓鱼邮件可以使用伪URL来将没有戒心的用户重定向到假的网站上,从而获取个人身份和金融帐户信息。

  只有NIC MAC地址是唯一的,因为它们是与主机的NIC相关的,而非主机本身。目前大多数的工作站和服务器都有内置的网络接口,这样, MAC地址就是一种非常理想的用于跟踪和访问控制(通过二层过滤和/或静态DHCP)的网络参数。这并不是说使用MAC地址就是万无一失的;如果攻击者进入了本地网络,他就可能进行ARP/MAC欺骗。同时,如果服务器由于失效而被替代,那么它的MAC信息也将改变。因此,如果没有很好的跟踪方法,跟踪(和控制访问使用)MAC、IP和DNS属性是验证和确保网络连续性的最好的方法之一。

  主机验证信息来源和方法


  首先,打开电子表格、记事本或者任何用于文档化网络节点的工具。我们将把这些信息作为控制数据。从验证的角度来看,一个理想的审计环境是:我们正在验证我们已经确信是已存在的东西。如果这个数据并不是已经存在的,那么第一个审计将作为与以后的审计对比的基线。

  正如我们前面所探讨的,主机详细清单收集三种数据:IP地址、MAC地址和DNS条目。在清单的最后,我们必须有一个清单数据集,它看起来是这样的:

172.30.100.1 0000.0c07.ac05 CISCO SYSTEMS, gw.outlan.net
172.30.100.100 0004.ac5e.4810 IBM CORP. yp.outlan.net
172.30.100.14 000b.cd83.53f6 Unknown OUI oscar.outlan.net
172.30.100.15 0008.02a1.4d80 Compaq Computer auth.outlan.net
172.30.100.16 0050.8b2c.f25e COMPAQ COMPUTER mail.outlan.net
172.30.100.17 0002.a528.b2b3 Compaq Computer home.outlan.net
172.30.100.172 0008.c7f4.4655 COMPAQ COMPUTER foo.outlan.net
172.30.100.18 000b.cd50.786a Unknown OUI kermit.outlan.net
172.30.100.19 0008.c72a.c8fb COMPAQ COMPUTER bigbird.outlan.net
172.30.100.2 0001.812b.fe08 Nortel Networks rs01.outlan.net
172.30.100.3 0005.5fe7.0800 Cisco Systems, rs02.outlan.net

  必须为网络的每个分段创建诸如这样的表。目前,我们已经探讨了4种属性的其中3种。第三个字段中的数据是每个MAC地址的机构的唯一识别符(OUI)。每个以太网MAC地址的前24字节是硬件制造商的OUI,它是由IEEE所指派的。制造商使用OUI以及一个唯一的24字节值来为每个网络接口创建唯一的MAC地址。

  我们知道网络节点的OUI能够协助跟踪和故障修复行为不当的主机。在网络化的前期,NIC是一个添加到计算机的附加组件,它要求跟踪MAC地址并将MAC地址与跟踪主机相关联。目前,大多数的硬件制造商提供一个或多个网卡,因此,在大多数情况下,解析主机MAC OUI也就是识别连接到网络的硬件类型,以及操作系统类型。

  一旦完成了清单,就可以收集和比较后续的清单了,这样,我们就可以很容易地发现变化和错误以便我们调查和改正它们。所有这样的数据都可以在网络上收集到;并不需要访问节点。清单的数据是通过从网络交换机和路由器ARP和接口表、DNS Zone Dump和ICMP PING扫描来收集的。ARP和ICMP扫描能提供有效IP主机的信息。DNS Zone和接口表提供管理域上关于IP网络的信息,以及主机名信息。每个数据源都提供一种信息,同时,它们还提供可以与其它的资源作比较的冗余信息,以便确保正确性和发现不一致性。

  工具

  运行下面的脚本,我们的计算机必须支持Perl、SED、awk、sh、sort、date、diff和grep。同时,我们还将需要下载和编译domainscan和 fping。(Fping是ping的替代,它支持大量扫描和输出选项,因此对于依赖ICMP修复故障的管理员来说,它是一个强大的工具。)脚本作为程序封装使用,它可以提取和格式化清单数据从而使它更容易访问。下面是关于每个脚本的概述,阐述了它们所依赖的程序和它们的功能:

  vidump.sh——这个Bourne Shell脚本使用SSH来获取一组路由器的物理接口或者交换机的VLAN接口。它建立了一组连接到路由器或者交换机的IP网络,从而可以用来确定哪些网络我们必须审计。同时,它还有助于识别哪些设备可以运行ARP Dump。

  arpextract.sh——这个Bourne Shell脚本同样使用SSH来获取IP地址或者基于IOS路由器或者交换机上的IP地址和ARP表。ARP表必须从直接连接到网络分段的设备上获取,这样,我们就可以从中收集到ARP信息(理想状态下是分段的默认网关)。否则,我们所查询的IP地址的ARP终端条目将导致路由器或者交换机使用的物理接口来访问目标主机。

  dnsdump.sh——这是一个Bourne Shell脚本,它调用域扫描来在C类网络上执行DNS查找。它格式化用于与其它工具比较的和数据合并的输出。为了达到更好的效果,使用网络分段的根DNS服务器和次DNS服务器来运行dnsdump.sh和比较结果。如果我们可以公共访问的主机,那么我们将想要将我们的DNS根条目与其它公共的DNS服务器作比较以便确保数据是一致的。

  activehosts.sh——这是另外一个Bourne Shell脚本,它调用fping来对IP地址范围执行ICMP ping扫描。正常情况下,我们将在有255个IP地址或者稍微少些的C类网络上使用它。更大范围的扫描也是可以运行的,但是数据将变得较难管理些。和dnsdump.sh一样,fping命令的输出是经过格式化来与其它的脚本一起使用的。

  ouiresolv.pl——这是一个Perl脚本,它处理48位以太网MAC地址的OUI部分。这个ouiresolv.pl脚本从arpresolv.txt文件上获得输入。这个文件是当运行arpextract.sh带有将输出保存为一个文件的选项来生成一个ARP表Dump时生成的。

  ouilookup.sh——这是一个ouiresolv.pl Perl脚本的Bourne Shell封装脚本。它格式化了ouiresolv.pl输出以便合并来自其它脚本的报告数据。

  收集网络清单数据

  建立清单最有效的方法是一次处理一个IP子网。每个网络都有它本身的逻辑布局,但是每个网络都会使用一个或多个子网。这样IP子网就成为了处理中最小的逻辑单位。如果我们审计我们自己的网络,那么我们并不需要运行vidump.sh,因为我们已经知道了组成我们网络的子网。然而,如果由于忘记或者并不熟悉正在审计的网络部分,那么我们可以使用vidump.sh命令来从网关设备中获取接口或者VLAN列表。脚本会向设备打开一个SSH会话。接着提示输入密码,然后输出命令将被发送到CLI上,并作为文本文件(用于引用)保存。在一个IOS路由器上,使用的是?Vr命令标记,而在一个IOS交换机上使用的是?Vv标记。如果对于语法还有些疑问的话,那么可以运行后面跟着?Vh标记的命令。完整的命令语法看起来是这样的: vidump.sh {-v -i}。以下是一个CLI执行例子:

Trinity# ./vidump.sh amin out-rs01 -v
amin@out-rs01's password:
Vlan179 172.30.179.3
Vlan168 172.30.168.3
Vlan5 172.30.5.3
Vlan11 172.30.11.3
Vlan168 172.30.169.67
Vlan177 172.30.177.3
Vlan172 172.30.172.3
Vlan164 172.30.164.3
Vlan133 172.30.169.133
Vlan165 172.30.165.3
Vlan169 172.30.169.163
The Report Name is: Vlan-list-out-rs01-10-21-04.txt
Trinity#
 
  一旦我们有了一个子网列表,那么可以选择一个网段,并通过dnsdump.sh脚本来收集DNS记录。和vidump一样,这个脚本打开设备的一个SSH会话。在命令执行之前,将提示我们输入密码。默认情况下,命令将把输出转储到CLI上。使用?Vr标记来将数据保存到一个报告文件中。完整的命令语法看起来是这样的:dnsdump.sh< xxx.xxx.xxx> {-r}.。下面的例子扫描了172.30.100子网并将输出保存到一个报告文件上:

Trinity# ./dnsdump.sh 172.30.100 -r
172.30.100.1 gw.outlan.net
172.30.100.100 yp.outlan.net
172.30.100.14 oscar.outlan.net
172.30.100.15 auth.outlan.net
172.30.100.16 mail.outlan.net
172.30.100.17 home.outlan.net
172.30.100.172 foo.outlan.net
172.30.100.18 kermit.outlan.net
172.30.100.19 bigbird.outlan.net
172.30.100.2 rs01.outlan.net
172.30.100.3 rs02.outlan.net
Report 172.30.5-dnsdump-12-05-04 Complete!
Trinity#

  在收集了DNS信息之后,下一步就是查找IP子网上活跃的主机。这可能看来似乎是非常明显的,但是在使用动态DHCP的IP子网上运行IP主机清单查找所能提供有用信息是微乎其微的。它可以提供一个连接的主机的快照,但是数据的有效时期仅限于主机保持连接和/或连接过期之前。通过将交换机的ARP转储数据与DHCP服务器的租赁表关联到指纹主机,就可能可以“破坏审计”主机,但是这是另外一篇文章的主题了。而现在,我们所能够说的是清单收集必须在IP是静态分配(或者通过DHCP分配)的子网上运行。

  我们的目标是对连接到网络上的服务器的网络服务执行一个审计。通过使用activehosts.sh脚本可以建立一个活跃主机列表。activehosts.sh脚本必须以根用户或者相当于根用户的ID在Unix/Linux系统上运行,因为fping必须以根用户权限来运行。在默认情况下,activehosts.sh命令将命令的输出发送到CLI,并且通过在IP网络范围语句之后加上?{r标记来将它存储在一个报告文件中。完整的命令语法看起来是这样的:activehosts.sh (start IP) < xxx.xxx.xxx.xxx> (end IP) {-r}>。下面是一个CLI输出例子:

Trinity # ./activehosts.sh 172.30.100.1 172.30.100.254 -r
172.30.100.1
172.30.100.100
172.30.100.14
172.30.100.15
172.30.100.16
172.30.100.18
172.30.100.17
172.30.100.172
172.30.100.18
172.30.100.19
172.30.100.2
172.30.100.3
172.30.100.31
172.30.100.44
The report name is 172.30.100.1-acthost-out-rs01-11-20-04.txt
Trinity #

  在通过使用activehosts.sh收集CMP之后,我们必须生成另外两个的IP主机报告,一个列出活跃的IP主机,而另一个列出活跃的IP主机以其各自的MAC地址。在大多数情况下,“只”从网关设备中获取的IP提供的信息与根据由activehosts.sh生成的报告的信息是重复的。然而,也会有某些情况下主机可能响应非常缓慢或者根本不响应ICMP请求,因为主机已经过滤了或者失效ICMP了。但IP网关ARP表并不会受到这些弊端的影响,因为IP分段上任何在或不在这个网段的传输数据的主机都必须在交换机/路由器的ARP表上有一个有效的MAC条目

  arpextract.sh脚本可以将它的输出定向到CLI或者一个报告文件上。与其它的脚本不同的是,它可以通过提供IP前缀或者跟在报告标记后的VLAN ID,或者去掉整个IP或ARP表,或者仅去掉一个特定IP子网或者VLAN的ARP信息。为了完成我们的主机清单的数据收集,我们必须为目标IP子网同时收集IP和ARP数据。为了生成IP表,我们使用?Vi标记来将输出发送到CLI,或者使用?Vir标记来将输出发送到CLI和一个报告文件中。为了生成ARP表,我们使用?Va标记来将输出发送到CLI,或者使用?Var标记来将输出发送到CLI和一个报告文件中。

  所有输出选项的默认值是生成一个报告来列出ARP表中的每个条目。这个清单可能相当的大,特别是当连接因特网主机的流量通过时,因为路由器/交换机在它转发因特网流量时为每一个因特网IP地址指派网关的MAC地址。为了报告文件更容易管理,我们可以根据IP子网前缀或者跟在报告标记后的VLAN ID来指定搜索。完整命令语法看起来是这样的: arpextract.sh {-a -ar -i -ir} 。下面是一个在有效IP主机上执行收集数据的例子:

Trinity # ./arpextract.sh admn outlan-rs01 -ir 172.30.100
admn@outlan-rs01's password:
Connection to outland-rs01 closed by remote host.
Collection Complete.
Formatting Data...
Active IP Host Table for 172.30.100 on outlan-rs01 Completed...
172.30.100.1
172.30.100.100
172.30.100.14
172.30.100.15
172.30.100.16
172.30.100.18
172.30.100.17
172.30.100.172
172.30.100.18
172.30.100.19
172.30.100.2
172.30.100.3
172.30.100.31
172.30.100.44
Report Saved as 172.30.100-IPdump-outlan-rs01-12-05-04.txt
Trinity #

  这是一个使用VLAN ID作为搜索字符串的在相同子网的一个APR表报告的输出:

Trinity # ./arpextract.sh admn outlan-rs01 ?Var Vlan5
admn@outlan-rs01's password:
Connection to outland-rs01 closed by remote host.
Collection Complete.
Formatting Data...
ARP Table for Vlan5 on outlan-rs01 Completed...
172.30.100.1 0000.0c07.ac05
172.30.100.100 0004.ac5e.4810
172.30.100.14 000b.cd83.53f6
172.30.100.15 0008.02a1.4d80
172.30.100.16 0050.8b2c.f25e
172.30.100.17 0002.a528.b2b3
172.30.100.172 0008.c7f4.4655
172.30.100.18 000b.cd50.786a
172.30.100.19 0008.c72a.c8fb
172.30.100.2 0001.812b.fe08
172.30.100.3 0005.5fe7.0800

Report Saved as Vlan5-ARPdump-outlan-rs01-12-05-04.txt Created arpresolv.txt for ARP-Lookup.pl
Trinity#

  OUI翻译报告必须最后运行。这里涉及到两个脚本,ouiresolv.pl和ouilookup.sh。而且,这两个脚本的操作原理都是相同的。它们读取arpresolv.txt的内容。它们解析地址的OUI部分同时通过使用 curl 程序在http://standards.ieee.org/cgi-bin/ouisearch网站进行搜索。ouiresolv.pl生成了下面的CLI输出:

Trinity $ perl ouiresolv.pl
looking up OIDs.
172.30.100.4 -> Nortel Networks
172.30.100.19 -> COMPAQ COMPUTER CORPORATION
172.30.100.2 -> Nortel Networks
172.30.100.15 -> Compaq Computer Corporation
172.30.100.1 -> CISCO SYSTEMS, INC.
172.30.100.18 -> Unknown OUI
172.30.100.14 -> Unknown OUI
172.30.100.172 -> COMPAQ COMPUTER CORPORATION
172.30.100.16 -> COMPAQ COMPUTER CORPORATION
172.30.100.5 -> DITECH CORPORATION
172.30.100.83 -> COMPAQ COMPUTER CORPORATION
172.30.100.85 -> COMPAQ COMPUTER CORPORATION
172.30.100.3 -> Cisco Systems, Inc.
172.30.100.100 -> IBM CORP.
172.30.100.17 -> Compaq Computer Corporation
Trinity $


  ouilookup.sh脚本运行了ouiresolv.pl并格式化了输出,同时将它发送到CLI和存储到名为oui-join.txt的文件上。oui-join.txt文件数据是与其它报告数据合并以便完成网络详细清单报告的数据集中的一种。下面是ouilookup.sh脚本的输出例子:

Trinity: $ ./ouilookup.sh
172.30.100.1 CISCO SYSTEMS,
172.30.100.100 IBM CORP.
172.30.100.14 Unknown OUI
172.30.100.15 Compaq Computer
172.30.100.16 COMPAQ COMPUTER
172.30.100.17 Compaq Computer
172.30.100.172 COMPAQ COMPUTER
172.30.100.18 Unknown OUI
172.30.100.19 COMPAQ COMPUTER
172.30.100.2 Nortel Networks
172.30.100.3 Cisco Systems,
172.30.100.4 Nortel Networks
172.30.100.5 DITECH CORPORATION
172.30.100.83 COMPAQ COMPUTER
172.30.100.85 COMPAQ COMPUTER
Trinity: $


  一旦我们收集了所有的数据,创建该报告就很简单了。在此,我们应该有与下面列出的文件相似的一组文件:

Trinity$ ls
172.30.100-IPdump-fny-rs01-12-05-04.txt Vlan-list-outlan-rs01-12-05-04.txt
172.30.100-dnsdump-12-05-04.txt Vlan5-ARPdump-outlan-rs01-12-08-04.txt
172.30.100.1-acthost-12-05-04.txt oui-join.txt
IPdump-fny-rs01-12-07-04
Trinity$

  既然我们已经收集了所有主机验证数据,那么我们准备好了交叉引用数据集,以及建立网络详细清单报告。我们将在接下来的文章中探讨这个主题。

打印本文 打印本文  关闭窗口 关闭窗口