网络协议分析-WEB安全社区-弘客官方【交流区】-弘客联盟

网络协议分析

之前我们在说永恒之蓝的时候,说到了osi七层模型,今天我们来细说一下

应用层 表示层 会话层 传输层 网络层 数据链路层 物理层

在永恒之蓝说到的我们这里不会再说

今天说的主要是网络层的IP协议

IPv4

IPv4地址由32位二进制数组成,为了方便记忆,将IP地址32位进制数进行分段,每段8位,共4段,然后将没段8位二进制转换为十进制数,中间点号分割。这种表达方式称之为点分十进制

每个IP地址内部分成两部分,即网络号和主机号。

网络号:也叫网络地址,用于标识大规模TCP/IP网际网络内的单个网段(即由网络组成的网络)。

主机号:也叫主机地址,用于识别每个网络内部的TCP/IP节点,如工作站、服务器、路由器或其它TCP/IP设备。

IP地址中的网络号和主机号总共32位,因为网络规模有所不同,为了方便网络的管理,IP地址被分为 A,B,C,D,E,5类

广播地址

一个子网内的所有网络接口都能收到此广播消息。

 

直接广播:带目标网络号,主机地址二进制全1的地址。

 

有限广播:网络号和主机地址二进制全为1的地址(即255.255.255.255)。

组播地址

可实现跨网段的组播(多播)地址。

D类地址,主要用于视频广播和视频点播系统

地址范围从 224.0.0.0 到 239.255.255.255

224.0.0.1 指所有主机,224.0.0.2 指所有路由器

环回地址

网络地址是 127 的 IP 地址成为环回地址或回送地址,主要用于对本地回路测试及实现本地机器进程间的通信。

在实际中经常使用的环回地址是 127.0.0.1 ,它还有一个别名叫做 localhost。

私有地址

IP 地址是由网络信息中心统一管理并分配给提出注册申请的组织机构的,这类 IP 地址成为公有地址。

而私有地址属于非注册地址,专门为组织机构内部网络使用。

私有地址类别 范围

A 类 10.0.0.0 ~ 10.255.255.255

B 类 172.16.0.0 ~ 172.31.255.255

C 类 192.168.0.0 ~ 192.168.255.255

下面我们来说一下子网换算

子网换算这个东西相对而言有点复杂啦,首先我们得认识一下什么是子网掩码

首先我们用一个直观一点的来说明,在以前的古董机器中,你更改自己的私有IP时,你输入192.168.20.1之后

默认的子网掩码就是255.255.255.0这个是24位电子掩码

这样来说还是会有点抽象,192.168.20这里就是网络位,后面1表示主机位(也有的书会说主机号,都是一个概念)

这里我们按照路由器的路由表来解释

这里我们使用两个路由器直连我们看看直连的路由表会是怎么样表示的(ensp模拟,ensp模拟的网络设备是基于华为出品的网络设备,如果换成思科,那么里面的命令就变了)

d2b5ca33bd174725

 

可以看到我分别给AR2的端口附上了192.168.20.1 24的IP其中24表示的就是255.255.255.0也就是子网掩码,AR1的端口附上了192.168.30.1 24的IP

这样我们可以很容易的知道这两个IP地址不在同一个网段

d2b5ca33bd174753

 

我们来看两个路由器的路由表

d2b5ca33bd174823

 

可以看到destination/mask在192.168.30.0/24的时候下一跳到192.168.30.1

下一跳就是nexthop 当数据传输的时候,路由表看到目标IP的地址在192.168.30.*这个范围的时候(*表示0-255)下一跳就会给到192.168.30.1的地址

这里24位的掩码就起到了作用

IP报文

d2b5ca33bd174839

 

版本:IP协议的版本,目前的IP协议版本号为4,下一代IP协议版本号为6。

 

首部长度:IP报头的长度。固定部分的长度(20字节)和可变部分的长度之和。共占4位。最大为1111,即10进制的15,代表IP报头的最大长度可以为15个32bits(4字节),也就是最长可为15*4=60字节,除去固定部分的长度20字节,可变部分的长度最大为40字节。

 

服务类型:Type Of Service。

 

总长度:IP报文的总长度。报头的长度和数据部分的长度之和。

 

标识:唯一的标识主机发送的每一分数据报。通常每发送一个报文,它的值加一。当IP报文长度超过传输网络的MTU(最大传输单元)时必须分片,这个标识字段的值被复制到所有数据分片的标识字段中,使得这些分片在达到最终目的地时可以依照标识字段的内容重新组成原先的数据。

 

标志:共3位。R、DF、MF三位。目前只有后两位有效,DF位:为1表示不分片,为0表示分片。MF:为1表示“更多的片”,为0表示这是最后一片。

 

片位移:本分片在原先数据报文中相对首位的偏移位。(需要再乘以8)

 

生存时间:IP报文所允许通过的路由器的最大数量。每经过一个路由器,TTL减1,当为0时,路由器将该数据报丢弃。TTL 字段是由发送端初始设置一个 8 bit字段.推荐的初始值由分配数字 RFC 指定,当前值为 64。发送 ICMP 回显应答时经常把 TTL 设为最大值 255。

 

协议:指出IP报文携带的数据使用的是那种协议,以便目的主机的IP层能知道要将数据报上交到哪个进程(不同的协议有专门不同的进程处理)。和端口号类似,此处采用协议号,TCP的协议号为6,UDP的协议号为17。ICMP的协议号为1,IGMP的协议号为2.

 

首部校验和:计算IP头部的校验和,检查IP报头的完整性。

 

源IP地址:标识IP数据报的源端设备。

 

目的IP地址:标识IP数据报的目的地址。

 

ARP协议

地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。地址解析协议是建立在网络中各个主机互相信任的基础上的,局域网络上的主机可以自主发送ARP应答消息,其他主机收到应答报文时不会检测该报文的真实性就会将其记入本机ARP缓存;

最直白的说法是:在IP以太网中,当一个上层协议要发包时,有了该节点的IP地址,ARP就能提供该节点的MAC地址。

大家都知道,OSI模式把网络工作分为七层,彼此不直接打交道,只通过接口(layre interface). IP地址在第三层(网络层), MAC地址在第二层(数据链路层)。协议在发送数据包时,首先要封装第三层(IP地址)和第二层 (MAC地址)的报头, 但协议只知道目的节点的IP地址,不知道其物理地址,又不能跨第二、三层,所以得用ARP的服务拿到MAC地址。

 

假设主机A和B在同一个网段,主机A要向主机B发送信息,具体的地址解析过程如下:

1主机A首先查看自己的ARP缓存表,确定其中是否包含有主机B对应的ARP表项。如果找到了对应的MAC地址,则主机A直接利用ARP表中的MAC地址,对IP数据包进行帧封装,并将数据包发送给主机B。

2如果主机A在ARP表中找不到对应的MAC地址,则将缓存该数据报文,然后以广播方式发送一个ARP请求报文。ARP请求报文中的发送端IP地址和发送端MAC地址为主机A的IP地址和MAC地址,目标IP地址和目标MAC地址为主机B的IP地址和全0的MAC地址。由于ARP请求报文以广播方式发送,该网段上的所有主机都可以接收到该请求,但只有被请求的主机(即主机B)会对该请求进行处理。

3主机B比较自己的IP地址和ARP请求报文中的目标IP地址,当两者相同时进行如下处理:将ARP请求报文中的发送端(即主机A)的IP地址和MAC地址存入自己的ARP表中。之后以单播方式发送ARP响应报文给主机A,其中包含了自己的MAC地址。

4主机A收到ARP响应报文后,将主机B的MAC地址加入到自己的ARP表中以用于后续报文的转发,同时将IP数据包进行封装后发送出去。

当主机A和主机B不在同一网段时,主机A就会先向网关发出ARP请求,ARP请求报文中的目标IP地址为网关的IP地址。当主机A从收到的响应报文中获得网关的MAC地址后,将报文封装并发给网关。如果网关没有主机B的ARP表项,网关会广播ARP请求,目标IP地址为主机B的IP地址,当网关从收到的响应报文中获得主机B的MAC地址后,就可以将报文发给主机B;如果网关已经有主机B的ARP表项,网关直接把报文发给主机B。

ARP表

网络设备一般都有一个ARP缓存(ARP Cache),ARP缓存用来存放IP地址和MAC地址的关联信息。在发送数据前,设备会先查找ARP缓存表。如果缓存表中存在对方设备的MAC地址,则直接采用该MAC地址来封装帧,然后将帧发送出去。如果缓存表中不存在相应的信息,则通过发送ARP request报文来获得它。学习到的IP地址和MAC地址的映射关系会被放入ARP缓存表中存放一段时间。在有效期内,设备可以直接从这个表中查找目的MAC地址来进行数据封装,而无需进行ARP查询。过了这段有效期,ARP表现会被自动删除。如果目标设备位于其他网络则源设备会在ARP缓存表中查找网关的MAC地址,然后将数据发送给网关,网关再把数据转发给目的设备。

ARP表项又分为动态ARP表项和静态ARP表项。

动态ARP表项

动态ARP表项由ARP协议通过ARP报文自动生成和维护,可以被老化,可以被新的ARP报文更新,可以被静态ARP表项覆盖。每个动态ARP缓存项的潜在生命周期是10分钟。新加到缓存中的项目带有时间戳,如果某个项目添加后2分钟内没有再使用,则此项目过期并从ARP缓存中删除;如果某个项目已在使用,则又收到2分钟的生命周期;如果某个项目始终在使用,则会另外收到2分钟的生命周期,一直到10分钟的最长生命周期。

静态ARP表项

静态ARP表项通过手工配置和维护,不会被老化,不会被动态ARP表项覆盖。直到重新启动计算机为止。

配置静态ARP表项可以增加通信的安全性。静态ARP表项可以限制和指定IP地址的设备通信时只使用指定的MAC地址,此时攻击报文无法修改此表项的IP地址和MAC地址的映射关系,从而保护了本设备和指定设备间的正常通信。

静态ARP表项分为短静态ARP表项和长静态ARP表项。

在配置长静态ARP表项时,除了配置IP地址和MAC地址项外,还必须配置该ARP表项所在VLAN和出接口。长静态ARP表项可以直接用于报文转发。

在配置短静态ARP表项时,只需要配置IP地址和MAC地址项。如果出接口是三层以太网接口,短静态ARP表项可以直接用于报文转发;如果出接口是VLAN虚接口,短静态ARP表项不能直接用于报文转发,当要发送IP数据包时,先发送ARP请求报文,如果收到的响应报文中的源IP地址和源MAC地址与所配置的IP地址和MAC地址相同,则将接收ARP响应报文的接口加入该静态ARP表项中,之后就可以用于IP数据包的转发。

一般情况下,ARP动态执行并自动寻求IP地址到以太网MAC地址的解析,无需管理员的介入。

当希望设备和指定用户只能使用某个固定的IP地址和MAC地址通信时,可以配置短静态ARP表项,当进一步希望限定这个用户只在某VLAN内的某个特定接口上连接时就可以配置长静态ARP表项。

ARP报文格式

在局域网中,当主机或其它网络设备有数据要发送给另一个主机或设备时,它必须知道对方的网络层地址(即IP地址)。但是仅仅有IP地址是不够的,因为IP数据报文必须封装成帧才能通过物理网络发送,因此发送站还必须有接收站的物理地址,所以需要一个从IP地址到物理地址的映射。APR就是实现这个功能的协议。

ARP协议是通过报文进行工作的,是一个独立的三层协议,所以ARP报文在向数据链路层传输时不需要经过IP协议的封装,而是直接生成自己的报文,其中包括ARP报头,到数据链路层后再由对应的数据链路层协议(如以太网协议)进行封装。ARP报文分为ARP请求和ARP应答报文两种,它们的报文格式可以统一为下图所示。

前面Ethernet Address of destination, Ethernet Address of sender 和 Frame Type属于数据链路层的封装,往后的就是真正的ARP报文数据结构。

d2b5ca33bd174919

 

ARP欺骗

地址解析协议是建立在网络中各个主机互相信任的基础上的,它的诞生使得网络能够更加高效的运行,但其本身也存在缺陷:

ARP地址转换表是依赖于计算机中高速缓冲存储器动态更新的,而高速缓冲存储器的更新是受到更新周期的限制的,只保存最近使用的地址的映射关系表项,这使得攻击者有了可乘之机,可以在高速缓冲存储器更新表项之前修改地址转换表,实现攻击。ARP请求为广播形式发送的,网络上的主机可以自主发送ARP应答消息,并且当其他主机收到应答报文时不会检测该报文的真实性就将其记录在本地的MAC地址转换表,这样攻击者就可以向目标主机发送伪ARP应答报文,从而篡改本地的MAC地址表。ARP欺骗可以导致目标计算机与网关通信失败,更会导致通信重定向,所有的数据都会通过攻击者的机器,因此存在极大的安全隐患。

 

ARP攻击

ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的进行。基于ARP协议的这一工作特性,黑客向对方计算机不断发送有欺诈性质的ARP数据包,数据包内包含有与当前设备重复的Mac地址,使对方在回应报文时,由于简单的地址重复错误而导致不能进行正常的网络通信,或者如果不及时处理,便会造成网络通道阻塞、网络设备的承载过重、网络的通讯质量不佳等情况。。

一般情况下,受到ARP攻击的计算机会出现两种现象:

不断弹出“本机的XXX段硬件地址与网络中的XXX段地址冲突”的对话框。

计算机不能正常上网,出现网络中断的症状。

因为这种攻击是利用ARP请求报文进行“欺骗”的,所以防火墙会误以为是正常的请求数据包,不予拦截。因此普通的防火墙很难抵挡这种攻击。

 

说到ARP攻击,我想到STP攻击,这里不扯淡太多,留一个悬链,关于网络部分,我们后面还会说到的

 

 

 

附录

这一期的网络协议,我挺想写的生动形象一点,但是没有办法,这个东西它本身就是抽象的,所以我只好写的特别生硬,对于一个黑客来说,IP协议是必须得知道的,arp协议的欺骗,

这些都是基于网络层的东西,我的老师说过,如果一个网络安全的学者,只基于上层的漏洞而不去做底层的研究,那么到最后肯定是学不透的,一门语言可以做上层应用开发,也可以做底层的数据处理,这些网络层的协议,以及基于网络层的攻击,需要的信息收集是相对而言比较简单的,所以攻击起来也会相对而言方便,在以后ipv6的时代网络层的攻击可能会更加干脆利落,看以后IPSec还会不会做更多的优化吧,对于ipv6我了解的还不够多,不过一些网络协议因为IPv6的出现也会有一些更改例如,icmp协议面向ipv6的版本就会是icmpv6,还有DHCPv6等

请登录后发表评论

    没有回复内容