《网络安全自学教程》

在这里插入图片描述

「网络」是网络安全的前置知识,想要解决网络的安全问题,我们必须先学会「网络」

1、OSI七层模型

OSI七层模型

OSI七层模型

OSI(Open System Interconnect )是国际标准化组织ISO制定的开放系统互联参考模型。

它把网络分为七层,从下往上依次是:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。

在这里插入图片描述

其中下面的四层是底层协议,负责「创建链路」,处理实际的信息传输;上面三层是高层协议,负责「处理应用请求」

「物理层」定义了物理链路的电气特性,将比特流转成电压。这一层的设备有:光纤、双绞线、中继器、集线器(HUB)。

「数据链路层」负责物理寻址,根据Mac地址转发数据包。这一层的设备有:网卡、网桥、交换机(Switch)。

「网络层」负责路由寻址,根据IP地址转发数据包。这一层的设备有:路由器(Router)、三层交换机。

  • 交换机本身是二层设备,但一些高档的交换机可以做路由转发,所以能在三层工作。

「传输层」负责建立逻辑链接,通过端口来区别不同的应用和服务。

「会话层」负责会话(Session)的建立、维持和终止。

「表示层」负责数据的加密、解密,数据格式的转换。这一层定义了很多编码,比如:ASCLL编码、Unicode编码。

「应用层」负责处理应用请求。这一层有很多应用协议,像FTP、HTTP这种需要提供可靠服务的协议底层是基于TCP实现的;而SNMP、DNS这种可靠性要求不是那么高的协议,底层是基于UDP实现的。

2、TCP/IP协议栈

TCP/IP协议栈

请添加图片描述

因为OSI是理想化的七层模型,所以TCP/IP协议簇从「实用性」的角度出发,将OSI七层参考模型简化为四层模型。从上往下依次是应用层、传输层、网络互联层、网络接口层。

在这里插入图片描述

3、HTTP协议

HTTP协议

在这里插入图片描述

HTTP(Hypertext Transfer Protocol)是「超文本传输协议」,基于B/S架构(Browser/Server,浏览器/服务器模式)通信,用户通过浏览器访问Web服务器产生网页(文本、图片、视频、音乐等),与服务器进行数据交互。

HTTP协议是基于TCP实现的请求响应-响应协议,工作分为四个过程:

  1. 三次握手「建立TCP连接」
  2. 客户端发送「请求」
  3. 服务端发送「响应」
  4. 四次挥手「关闭TCP连接」

工作过程从HTTP的数据包中可以很好地体现出来

在这里插入图片描述

协议本质上就是一个约定俗称的规范,而HTTP协议就规定了浏览器需要如何从服务器请求Web页面、服务器需要如何把Web页面传送给客户端。

  • 浏览器向服务器请求Web页面需要使用「HTTP请求报文」
  • 服务器吧Web页面传送给客户端需要使用「HTTP响应报文」

4、DHCP协议

DHCP协议

在这里插入图片描述

DHCP(Dynamic Host Configuration Protocol)也叫动态主机配置协议,负责「管理」「分配」IP。

常见的DHCP工作过程分为四步:

  1. DHCP Discover :客户端广播发现报文。
  2. DHCP Offer :服务器返回响应报文,携带IP地址。
  3. DHCP Request :客户端广播请求报文,希望使用这个IP地址。
  4. DHCP ACK :服务端响应确认报文,客户端开始使用IP。

在这里插入图片描述
1)需要IP的客户端,广播一条发现报文( DHCP Discover )。

2)所有DHCP服务器都会收到发现报文,并向客户端发送一个响应报文( DHCP Offer ),响应报文中携带服务器自己的IP和可以分配给客户端的IP;

3)客户端收到第一个响应后,会广播一个请求报文( DHCP Request ),并将响应报文中的服务器IP和可以分配的IP放到报文里。

4)所有DHCP服务器都会收到请求报文,并判断报文里的服务器IP是不是自己:

  • ​ 如果不是自己,就收回刚才分配的IP;
  • ​ 如果是自己,就向客户端发送一个确认响应报文( DHCP ACK ),并在报文里提供IP地址的租期。

5)客户端收到响应报文后,检查分配的IP是否可用:

  • 如果可用,就使用IP;
  • ​如果不可用,比如IP已经被别人使用,就向DHCP服务器发送拒绝报文,通知服务器禁用这个IP,让后重新申请IP(回到第一步)。

6)客户端可以随时发送释放报文( DHCP Release),释放IP地址,服务器收到释放报文后,会回收IP地址并重新分配。

5、SSL协议

SSL协议

在这里插入图片描述

TCP协议的安全能力有限,数据以「明文」传输,容易被「嗅探」「篡改」。SSL协议可以在TCP建立连接后,将数据加密,再传输数据。

SSL(Secure Socket Layer)是「安全套接层协议」,在握手过程中使用非对称秘钥加密实现数据的机密性;使用哈希算法实现数据的完整性。

SSL协议执行的时候分为两个阶段:

  1. 第一个是「握手阶段」,通信双方使用SSL握手协议协商加密算法和密钥。
  2. 第二个是「数据传输阶段」,使用握手阶段协商的算法加密并传输数据。

在这里插入图片描述

6、SYN Flood

SYN Flood

在这里插入图片描述

TCP协议通过三次握手建立连接,如果我只做第一次握手,向你发送一个SYN请求,后边就不管了,你就要在半连接队列里维护我的这个连接,并每隔一段时间向我返回ACK确认,直到这个连接超时。

如果我向你发送「大量的SYN请求」,你就要维护「大量的半连接队列」并不停的返回ACK确认,当半连接队列溢出或资源耗尽时,你的电脑就卡死了,这一招叫 SYN Flood 或者 SYN泛洪。

7、TCP协议

TCP协议

在这里插入图片描述

TCP(Transmission Control Protocol)是「传输控制协议」,通过「面向连接」的方式,提供可靠的、端到端的字节流传输服务。

UDP(User Datagram Protocol)是「用户数据包协议」,无连接传输协议,提供简单不可靠的数据传送服务。

为了保证传输的安全性,TCP在传输前,会通过三次握手「建立连接」

在这里插入图片描述

  • 第一次握手:客户端向服务器发送 SYN(seq=x),「请求」建立连接。
  • 第二次握手:服务器收到SYN,响应 SYN(seq=y)和 ACK(ack=x+1),表示「同意」建立连接。
  • 第三次握手:客户端收到响应后,返回一个ACK(ack=y+1),并打开客户端到服务器的「单向连接」
  • 服务器收到响应后,也会打开服务器到客户端的「单向连接」「两个方向」的连接都打开了,就可以传输数据了。

数据传输完成后,TCP会通过四次挥手「断开连接」(TCP连接是全双工,两个方向都得断开)
在这里插入图片描述

  • 第一次挥手:客户端传输完数据后,发一个FIN给服务端,「请求」断开连接。
  • 第二次挥手:服务端收到请求后,响应一个ACK,然后「准备关闭」服务端到客户端的连接。
  • 第三次挥手:服务端的数据也传输完了,也发一个FIN给客户端,「请求」断开连接。
  • 第四次挥手:客户端收到后,也响应一个ACK给服务端,然后启动一个定时器,定时器结束后「关闭」客户端到服务端的连接。
  • 服务端收到确认请求后,「直接关闭」服务端到客户端的连接。等「两个方向」的连接都关闭后,TCP连接就关闭了。

8、ICMP协议

ICMP协议

在这里插入图片描述

ICMP(Internet Control Message Protocol)是「控制报文协议」,是IP协议的一个组成部分,工作在网络层,负责在主机和路由器之间「传递控制信息」(不传递用户数据),比如网络通不通,主机是否可达等。

ICMP的功能是「检错」而不是纠错。

它将出错的报文返回给发送方的设备,发送方根据ICMP报文确定「错误类型」,从而更好的重发错误的数据包。

常见的ICMP响应类型:

  • 网络连通:Type=0Code=0
  • 网络不可达:Type=3Code=0
  • 主机不可达:Type=3Code=1
  • 协议不可达:Type=3Code=2
  • 端口不可达:Type=3Code=3

9、IP协议

IP协议

在这里插入图片描述

IP(Internet Protocol)协议也叫「网际互联协议」,负责「不同网络」之间的「通信」,为主机提供一种无连接、不可靠的数据包传输服务。

IP地址由「网络地址」「主机地址」两部分组成。

  • 「网络地址」:用来识别设备所在的「网络」,位于IP地址的前段,同一网络上的所有设备,都使用相同的网络地址。比如 192.168.31.121,前段的 192.168 就是网络地址。IP在路由的时候,就是根据网络地址,决定数据发给哪个网络。
  • 「主机地址」:用来识别网络上的「设备」,位于IP地址的后段。比如 192.168.31.121,后段的 31.121 就是主机地址。IP路由到指定网络以后,就根据主机地址,决定数据发给哪个设备。

为了适应「不同大小」的网络规模,IP地址被划分为A、B、C、D、E五类。

在这里插入图片描述

A类地址「第一段」是网络地址,剩下三段是主机地址;
B类地址「前两段」是网络地址,剩下两段是主机地址;
C类地址「前三段」是网络地址,最后一段是主机地址;

类别IP范围子网掩码描述
A类(1~126)1.0.0.1 ~ 127.255.255.254255.0.0.0共有126个网络,每个网络有1600万台主机,适合大规模的网络。
B类(128~191)128.0.0.1 ~ 191.255.255.254255.255.0.0共有16384个网络,每个网络有6万台主机,适合中等规模的网络。
C类(192~223)192.0.0.1 ~ 233.255.255.254255.255.255.0共有209万个网络,每个网络有254台主机,适合小型网络。
D类(224~239)224.0.0.0 ~ 239.255.255.255组播地址,一次请求发给一组特定的主机 ,常用于视频会议等场景。
E类(240~255)240.0.0.0 ~ 255.255.255.254保留地址

其中A、B、C三类地址比较常用,分别适用于大、中、小型网络,公司可以根据自己的规模申请合适的网络地址。比如我是个大公司,我就可以申请 126.0.0.0 这个网络地址,我公司的员工可以使用它的主机地址。

IP地址是有限的,总有用完的一天,为了节约IP资源,从A、B、C类地址中抽出一部分作为「私有地址」。私有地址不需要注册,也不不能跟互联网直接通信。比如我们公司的网络可以用192.168.100.1这个私有IP,其他公司的网络也可以用同样的IP。

私有地址如下:

  • A类 10.0.0.0–10.255.255.255,1个
  • B类 172.16.0.0–172.31.255.255,16个
  • C类 192.168.0.0–192.168.255.255,255个

A、B、C类地址范围中,私有IP外的地址都是「公有地址」(特殊地址除外)。

10、ARP协议

ARP协议

在这里插入图片描述

ARP(Address Resolution Protocol)是「地址解析协议」,负责将三层的IP地址解析成二层的Mac地址,也就是根据IP地址获取Mac地址。

ARP协议规定:每台计算机和路由器都维护一个「ARP缓存表」,用来保存IP和Mac地址的映射关系。

arp -a可以查看ARP地址缓存表

在这里插入图片描述

通信的时候,计算机就根据目的IP判断是不是「同网段IP」,如果是同网段,就在当前局域网内查询。

  1. 先查自己的「ARP缓存表」,如果有,就直接跟Mac地址对应的计算机通信。
  2. 如果没有,就发「ARP广播」,报文里携带目的IP地址,局域网内的所有主机都会收到广播。
  3. 收到广播的主机会看目的IP是不是自己,如果不是,就什么也不做。
  4. 如果是,就响应一个「ARP单播」,把自己的Mac地址发回去。
  5. 计算机收到响应的单播,就跟报文里的Mac地址通信,然后把IP和Mac地址保存到自己的ARP缓存表里,下次就直接查表,不用广播了。

如果目的IP「不是同网段」,就通过路由器发给目标局域网的路由器。

  1. 路由器先查自己的ARP缓存表,如果有,就把Mac地址发回去。
  2. 如果没有,就广播,收到单播的Mac地址,保存到自己的ARP缓存表里,然后把Mac地址发回去。

在这里插入图片描述

11、ARP欺骗

ARP欺骗

在这里插入图片描述

ARP是「无状态协议」,不需要请求就能响应。比如我「伪造」一个「ARP响应」,你收到以后就会把我响应的「映射关系」保存到你的「ARP缓存表」里。如果我把你的网关和我的MAC地址映射到一起,你上网的时候找「网关」就会找到我的电脑,而我的电脑没有提供WEB服务,你就会断网。

用 Kali 自带的 Nmap 扫描当前网段的「存活主机」

比如我的IP是 192.168.126.131,那我就扫 192.168.126.0/24 这个网段。

在这里插入图片描述

从扫描结果判断出,192.168.126.130 是这次实验的冤大头,192.168.126.2 是它的「网关」

Kali 执行 arpspoof -i eth0 -t 192.168.126.130 192.168.126.2,同时,Win7请求超时,开始「断网」

这里的 -i 指定网卡,-t 指定 冤大头IP,冤大头网关

在这里插入图片描述

12、802.1x协议

802.1x协议

在这里插入图片描述

触发认证后,802.1x协议开始认证,这里以ERP中继方式解释一下认证流程(为了方便理解,接入设备用交换机来代替;认证服务器用radius服务器来代替):

1)用户访问网络时,客户端向交换机发送( EAPOL-Start ),开启802.1x认证。

2)交换机收到请求后,向客户端发送( EAP-Request/Identity )请求,要求客户端把用户名发过来。

3)客户端收到请求后,向交换机发送( EAP-Response/Identity )响应,同时把用户名传给交换机。

4)交换机把客户端响应的报文(原封不动的)封装成radius报文( RADIUS Access-Request ),发送给radius服务器。

5)认证服务器收到后,取出里面的用户名,到数据库的用户名列表查询对应的密码,并随机生成一个加密字(MD5 Challenge)加密这个密码,然后把加密字封装成radius报文( RADIUS Access-Challenge )发送给交换机。

6)交换机收到后,把里面的加密字发送给客户端( EAP-Request/MD5 Challenge )。

7)客户端收到加密字后,用加密字对密码进行MD5加密,然后把加密后的密码( EAP-Response/MD5 Challenge )发送给交换机。

8)交换机再封装成radius报文( RADIUS Access-Request )发送给radius服务器。

9)radius服务器把收到的加密密码和自己生成的加密密码做对比,如果相同,就给交换机发送认证通过的报文( RADIUS Access-Accept )。

10)交换机把收到的radius报文解封后,发给客户端( EAP-Success ),并把端口授权改为已授权状态,允许用户通过这个端口访问网络。认证通过后,DHCP分配IP地址。

11)交换机会定期向客户端发送「握手」报文,以检测用户的在线情况。客户端发送应答报文则表示在线;如果连续两次握手报文没有应答,就会让用户下线。

12)客户端可以主动要求「下线」,发送( EAPOL-Logoff )帧。交换机收到后,把端口状态改成未授权,并向客户端发送( EAP-Failure )报文,确认客户端下线。

在这里插入图片描述

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐