《网络安全自学》网络协议篇
网络安全怎么学?一看你就明白了!
「网络」是网络安全的前置知识,想要解决网络的安全问题,我们必须先学会「网络」。
《网络安全自学》
1、OSI七层模型
OSI(Open System Interconnect )是国际标准化组织ISO制定的开放系统互联参考模型。
它把网络分为七层,从下往上依次是:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。
其中下面的四层是底层协议,负责「创建链路」,处理实际的信息传输;上面三层是高层协议,负责「处理应用请求」。
「物理层」定义了物理链路的电气特性,将比特流转成电压。这一层的设备有:光纤、双绞线、中继器、集线器(HUB)。
「数据链路层」负责物理寻址,根据Mac地址转发数据包。这一层的设备有:网卡、网桥、交换机(Switch)。
「网络层」负责路由寻址,根据IP地址转发数据包。这一层的设备有:路由器(Router)、三层交换机。
- 交换机本身是二层设备,但一些高档的交换机可以做路由转发,所以能在三层工作。
「传输层」负责建立逻辑链接,通过端口来区别不同的应用和服务。
「会话层」负责会话(Session)的建立、维持和终止。
「表示层」负责数据的加密、解密,数据格式的转换。这一层定义了很多编码,比如:ASCLL编码、Unicode编码。
「应用层」负责处理应用请求。这一层有很多应用协议,像FTP、HTTP这种需要提供可靠服务的协议底层是基于TCP实现的;而SNMP、DNS这种可靠性要求不是那么高的协议,底层是基于UDP实现的。
2、TCP/IP协议栈
因为OSI是理想化的七层模型,所以TCP/IP协议簇从「实用性」的角度出发,将OSI七层参考模型简化为四层模型。从上往下依次是应用层、传输层、网络互联层、网络接口层。
3、HTTP协议
HTTP(Hypertext Transfer Protocol)是「超文本传输协议」,基于B/S架构(Browser/Server,浏览器/服务器模式)通信,用户通过浏览器访问Web服务器产生网页(文本、图片、视频、音乐等),与服务器进行数据交互。
HTTP协议是基于TCP实现的请求响应-响应协议,工作分为四个过程:
- 三次握手「建立TCP连接」
- 客户端发送「请求」
- 服务端发送「响应」
- 四次挥手「关闭TCP连接」
工作过程从HTTP的数据包中可以很好地体现出来
协议本质上就是一个约定俗称的规范,而HTTP协议就规定了浏览器需要如何从服务器请求Web页面、服务器需要如何把Web页面传送给客户端。
- 浏览器向服务器请求Web页面需要使用「HTTP请求报文」
- 服务器吧Web页面传送给客户端需要使用「HTTP响应报文」
4、DHCP协议
DHCP(Dynamic Host Configuration Protocol)也叫动态主机配置协议,负责「管理」和「分配」IP。
常见的DHCP工作过程分为四步:
- DHCP Discover :客户端广播发现报文。
- DHCP Offer :服务器返回响应报文,携带IP地址。
- DHCP Request :客户端广播请求报文,希望使用这个IP地址。
- 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协议
TCP协议的安全能力有限,数据以「明文」传输,容易被「嗅探」、「篡改」。SSL协议可以在TCP建立连接后,将数据加密,再传输数据。
SSL(Secure Socket Layer)是「安全套接层协议」,在握手过程中使用非对称秘钥加密实现数据的机密性;使用哈希算法实现数据的完整性。
SSL协议执行的时候分为两个阶段:
- 第一个是「握手阶段」,通信双方使用SSL握手协议协商加密算法和密钥。
- 第二个是「数据传输阶段」,使用握手阶段协商的算法加密并传输数据。
6、SYN Flood
TCP协议通过三次握手建立连接,如果我只做第一次握手,向你发送一个SYN请求,后边就不管了,你就要在半连接队列里维护我的这个连接,并每隔一段时间向我返回ACK确认,直到这个连接超时。
如果我向你发送「大量的SYN请求」,你就要维护「大量的半连接队列」并不停的返回ACK确认,当半连接队列溢出或资源耗尽时,你的电脑就卡死了,这一招叫 SYN Flood 或者 SYN泛洪。
7、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(Internet Control Message Protocol)是「控制报文协议」,是IP协议的一个组成部分,工作在网络层,负责在主机和路由器之间「传递控制信息」(不传递用户数据),比如网络通不通,主机是否可达等。
ICMP的功能是「检错」而不是纠错。
它将出错的报文返回给发送方的设备,发送方根据ICMP报文确定「错误类型」,从而更好的重发错误的数据包。
常见的ICMP响应类型:
- 网络连通:
Type=0
,Code=0
- 网络不可达:
Type=3
,Code=0
- 主机不可达:
Type=3
,Code=1
- 协议不可达:
Type=3
,Code=2
- 端口不可达:
Type=3
,Code=3
9、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.254 | 255.0.0.0 | 共有126个网络,每个网络有1600万台主机,适合大规模的网络。 |
B类(128~191) | 128.0.0.1 ~ 191.255.255.254 | 255.255.0.0 | 共有16384个网络,每个网络有6万台主机,适合中等规模的网络。 |
C类(192~223) | 192.0.0.1 ~ 233.255.255.254 | 255.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(Address Resolution Protocol)是「地址解析协议」,负责将三层的IP地址解析成二层的Mac地址,也就是根据IP地址获取Mac地址。
ARP协议规定:每台计算机和路由器都维护一个「ARP缓存表」,用来保存IP和Mac地址的映射关系。
arp -a
可以查看ARP地址缓存表
通信的时候,计算机就根据目的IP判断是不是「同网段IP」,如果是同网段,就在当前局域网内查询。
- 先查自己的「ARP缓存表」,如果有,就直接跟Mac地址对应的计算机通信。
- 如果没有,就发「ARP广播」,报文里携带目的IP地址,局域网内的所有主机都会收到广播。
- 收到广播的主机会看目的IP是不是自己,如果不是,就什么也不做。
- 如果是,就响应一个「ARP单播」,把自己的Mac地址发回去。
- 计算机收到响应的单播,就跟报文里的Mac地址通信,然后把IP和Mac地址保存到自己的ARP缓存表里,下次就直接查表,不用广播了。
如果目的IP「不是同网段」,就通过路由器发给目标局域网的路由器。
- 路由器先查自己的ARP缓存表,如果有,就把Mac地址发回去。
- 如果没有,就广播,收到单播的Mac地址,保存到自己的ARP缓存表里,然后把Mac地址发回去。
11、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协议开始认证,这里以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 )报文,确认客户端下线。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)