网络安全面试题

时间:2024-10-19 07:55:24

IT面试

前言:

  1. 首先,从底层的环境/计算机基础,即网络、系统方面开始,网络从交换&路由的基本认知到排错,系统从命令查看方面,其次,最后,通过编程语言,如python,提供自动化运维的方法,提高办公。
  2. 简历方面,专业技能模块可以写成:
    (1)熟悉网络、交换基本原理和排错技巧(Tip:面试官大概率会按照简历所写提问原理为何物,排错技巧为何物,原理可以回复路由器和交换机的工作原理或其他,排错技巧暂定为网络包TCP三次握手和四次挥手,以及主用协议OSPF的七大状态机)
  3. 文本结构也考虑采用:
    1、理解模型:尤其必须理解OSI、TCP/IP、Cisco和纵深防御网络模型。
    2、理解第二层相关问题:包括了冲突域、广播域、交换与集线、端口安全以及生成树的相关主题。
    3、理解第三层相关问题:包含了IP路由协议;内部路由协议、如RIPv1/v2 和OSPF;外部路由协议,如BGP、子网络、超网络;网络地址转换(NAT)和IPv6。
    4、理解第四层相关问题:包含了TCP和UDP、会话的建立、报头和选项、端口地址转换以及常用端口。
    5、理解五到七层相关问题;包含了应用漏洞、特洛伊/蠕虫/病毒、内容过滤和IDS/ISP/IDP。

一、网络

网络架构方面代表:OSI七层模型

【一句话介绍】物数网传会表应。无数网传回标营。

重要性

对网络有个初步整体了解

原理

物理层:利用传输介质为数据链路层提供物理连接,实现比特流的透明传输。
数据链路层:接收来自物理层的位流形式的数据,并封装成帧,传送到上一层
网络层:将网络地址翻译成对应的物理地址,并通过路由选择算法为分组通过通信子网选择最适当的路径。
传输层:在源端与目的端之间提供可靠的透明数据传输
会话层:负责在网络中的两节点之间建立、维持和终止通信
表示层:处理用户信息的表示问题,数据的编码,压缩和解压缩,数据的加密和解密
应用层:为用户的应用进程提供网络通信服务

对于物理层而言打交道的基本都是电信号和光信号,例如网卡、光纤、双绞线等都被归到物理层考虑;
对于链路层,数据在离散电/光信号的基础之上,被逻辑划分成一帧一帧(Frame)来管理,这一层是数据交换的主要层面,交换的依据主要是网卡MAC地址,以太网(定义了一种帧格式)、交换机、集线器都划归这一层;
网络层是比链路层更高一级的逻辑层,在这一层主要工作的是路由器,路由器基于IP地址进行跨网链路的计算;
传输层顾名思义是用来控制网络层传输的,因为网络层只是一个“尽力而为”的层,其传输不是完全可靠的,如果将超时重传等可靠性保障机制都交给程序员来做,估计大部分程序员都要疯了,幸好有了传输层提供了TCP和UDP两种机制给我们,才让我们可以高枕无忧的传输数据,而我们在代码里要做的只是打开一个传输层的套接字(即Socket)就可以了;
至于表示层和会话层我们就不多做理解了,这两层基本只是摆设;
应用层是最高层的协议,Web HTTP协议、远程登录SSH协议等都被划归这一层,确切来说这一层已经不属于基础网络了,基本都是软件自定义协议。

在这里插入图片描述
在这里插入图片描述

【背书方法-口诀法】

  1. 勿联络,传话适应,勿指的是物理层,联指的是数据链路层,络指的是网络层,传指的是传输层,话指的是会话层,适指的是表示层,应指的是应用层。
  2. 物数网传会表应:物指的是物理层,数指的是数据链路层,网指的是网络层,传指的是传输层,表指的是表示层,应指的是应用层。【无数网传回标营:无数网,指的是通讯的网络线路,即指无数网络线路传回到了目标营地,无数网传会表应】
    【背书方法-记忆宫殿】你有一个七层的书架,从下到上,第一层放的是乔巴经常看的物理书,开发自己新的形态,第二层放的是娜美精通的数钱教程高数,第三层是罗宾当初在司法岛喊我想活下去给路飞听的联络书,第四层是乌索普拉弹弓的传送弹药,第五层是香克斯泡妞的会话技巧书;第六层是索隆的三千世界,第七层是路飞在凯多老师的教导下将霸气应用的炉火纯青的地步。
    【背书方法-视频法】点我进行视频学习哟

网络排错方面代表:TCP三次握手、四次挥手

【一句话介绍】
借鉴:很好的抓包解读

重要性
  1. 对于网络运维,关键在于故障排查,而TCP三次握手和四次挥手原理,有助于网络排障,分析数据包的异常状态。
  2. 故障排查,需要了解通信建立的原理,即TCP三次握手,再了解通信终止的原理,即TCP四次挥手,从中找到异常的地方,进行专项分析。
  3. 若是基本运维,感觉可以放大故障排查的原理讲解,面试的时候比较有话说。
原理
三次握手——建立通信

三次握手(Three-Way- Handshake)即建立TCP连接,就是指建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立。在 socket编程中,这一过程由客户端执行connect来触发
(1)第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。
(2)第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。
(3)第三次握手:Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。

第一次握手:首先client端发起SYN连接请求报文
第二次握手:server服务器收到连接后回复ACK报文,并为这次连接分配资源
第三次握手:client端接收到ACK报文后也向server端发送ACK报文,并分配资源,这样TCP连接就建立了
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1,同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手
三次握手
1、客户端 syn 发送到服务端,变成 SYN_SENT 状态
2、服务端 ack=syn+1 回传syn到客户端,变成SYN_RECV状态
3、客户端 ack=syn+1, 变成ESTABLISHED状态,传输给服务端
服务端收到ACK后变成ESTABLISHED状态,建立连接
SYN标志位为表示请求连接,ACK表示确认

【视频法】wireshark抓包分析TCP报文,通过真实的报文加深印象点我进行5分钟视频学习哈
在这里插入图片描述
由视频可得,http在tcp三次握手之后建立,第一次握手,标志位为SYN,第二次握手,标志位为SYN和ACK,第三次握手,标志位为ACK。

四次挥手——终止通信

**四次挥手(Four-Way Wavehand)**即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开,在 socket编程中,这一过程由客户端或服务端任一方执行close来触发。
(1)第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。
(2)第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。
(3)第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。
(4)第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。

四次挥手即终止TCP连接
第一次挥手:假设Client端发起中断连接请求,也就是发送FIN报文。
第二次挥手:Server端接到FIN报文后,意思是说"我Client端没有数据要发给你了",但是如果你还有数据没有发送完成,则不必急着关闭Socket,可以继续发送数据。所以你先发送ACK,“告诉Client端,你的请求我收到了,但是我还没准备好,请继续你等我的消息”。
第三次挥手:这个时候Client端就进入FIN_WAIT状态,继续等待Server端的FIN报文。当Server端确定数据已发送完成,则向Client端发送FIN报文,“告诉Client端,好了,我这边数据发完了,准备好关闭连接了”。
第四次挥手:Client端收到FIN报文后,"就知道可以关闭连接了,但是他还是不相信网络,怕Server端不知道要关闭,所以发送ACK后进入TIME_WAIT状态,如果Server端没有收到ACK则可以重传。“,Server端收到ACK后,“就知道可以断开连接了”。Client端等待了2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,我Client端也可以关闭连接了。Ok,TCP连接就这样关闭了!

什么是三次握手四次挥手?tcp为什么要三次握手?

为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误

第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
完成三次握手,客户端与服务器开始传送数据

客户端先发送FIN,进入FIN_WAIT1状态,用来关闭Client到Server的数据传送
服务端收到FIN,发送ACK,进入CLOSE_WAIT状态,客户端收到这个ACK,进入FIN_WAIT2状态
服务端发送FIN,进入LAST_ACK状态,用来关闭Server到Client的数据传送
客户端收到FIN,发送ACK,进入TIME_WAIT状态,服务端收到ACK,进入CLOSE状态(等待2MSL时间,约4分钟。主要是防止最后一个ACK丢失。)

第一次挥手:主动关闭方发送一个FIN,用来关闭主动方到被动关闭方的数据传送,也就是主动关闭方告诉被动关闭方:我已经不 会再给你发数据了(当然,在fin包之前发送出去的数据,如果没有收到对应的ack确认报文,主动关闭方依然会重发这些数据),但是,此时主动关闭方还可 以接受数据。
第二次挥手:被动关闭方收到FIN包后,发送一个ACK给对方,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号)。
第三次挥手:被动关闭方发送一个FIN,用来关闭被动关闭方到主动关闭方的数据传送,也就是告诉主动关闭方,我的数据也发送完了,不会再给你发数据了。
第四次挥手:主动关闭方收到FIN后,发送一个ACK给被动关闭方,确认序号为收到序号+1,至此,完成四次挥手。
【视频法】视频链接
在这里插入图片描述

应用:抓包

在这里插入图片描述
一、通过抓包软件,如wireshark,通过在交换机接口配置抓包配置,对问题时段的网络流量包进行分析,可以直观看到“三次握手建立过程和四次挥手拒绝过程”
二、对异常流量分析病毒种类
引用作者Leno-zy,侵删:/weixin_42728126/article/details/105701135?


网络路由方面代表:路由器

基本原理/工作原理:

网络交换方面代表:交换机

基本原理/工作原理:

网络传输协议方面代表:TCP

【逻辑等分】
1、通信方面,TCP三次握手建立传输层通信。
2、攻击方面,DDOS利用TCP三次握手原理进行攻击。
3、抓包方面,通过抓包工具进行TCP三次握手过程分析,发现三次握手标志位的不同和HTTP等协议在TCP三次握手之后形成。

网络路由协议方面代表:OSPF

【文本内容】
OSPF(Open Shortest Pass First,开放最短路径优先协议),是一个最常用的内部网管协议,是一个链路状态协议。(网络层协议)
原理:
OSPF组播的方式在所有开启OSPF的接口发送Hello包,用来确定是否有OSPF邻居,若发现了,则建立OSPF邻居关系,形成邻居表,之后互相发送LSA(链路状态通告)相互通告路由,形成LSDB(链路状态数据库)。再通过SPF算法,计算最佳路径(cost最小)后放入路由表。
Down、 init 、 attempt 、 two-way 、 exstart 、 exchange 、loading 、full
1)down
2)Init:初始化状态,一旦开始发送hello报文,进入初始化状态。
init接口激活,A开始发hello包。B收到A发的hello包进行检测是否满足邻居关系的建立条件,检测可以或者不可以,B都发hello包给A,hello包中包含B的信息和A的router-id。同时B进入init状态。A接收到对方发的hello报文包含自己router-id 的就进入Two-way状态。

3)Two-way:双向通信状态(邻居关系建立状态),接收到对方发的hello报文包含自己router-id 的就进入Two-way。
邻居状态下(two-way): MA的网络中会选举DR(指定路由器) BDR(备份指定路由器)

4)Exstart:预启动状态,进行主从选举一旦开始发送主从DBD,则进入预启动状态。
主从选举:发生在exstart状态, 通过双方的router-id进行比较,router-id大的一方为主。 发送的主从选举DBD,DBD中包含了MTU值(默认思科直接启用,华为中默认不包含MTU,可以使用命令激活传递MTU值的功能,若双方的MTU值不同则卡在exstart 状态)。
MTU 1500字节 作用:数据分段,二层数据链路层数据分段

5)Exchange:预交换,主从选举完成,双方都会发送一个包含LSA头部信息的DBD(LSA的目录信息)
进入预交换状态(但是没有LSU)
(A和B 就会通过对方发送的LSA头部信息,来看自己的lsa缺少什么从而形成请求列表,缺少就发送LSR进行请求 对方就回复LSU ,LSU包含请求的各种信息)这个过程是双向且同时进行的

6)Loading:加载状态,一旦发送LSU数据包,进入了加载状态,进行大量LSA的学习。

7)Full:邻接关系建立状态。
针对peer双方的请求列表和重传列表都为空,就是双方LSA已经全部学习完进入full状态。双方LSA同步(双方LSA全部学习)


OSPF5种报文,7状态机
OSPF报头
在这里插入图片描述
一、5种报文、抓包分析(重点干货)

报文:发现邻居并建立和维护邻居关系。
报文: ospf最常用的报文,作用为建立和维护跟邻接的关系,周期性的能在ospf的接口上发送发送的报文包括一下定时器的数值、网络中的DR 、BDR以及已经知道的邻居。
1、Hello报文:用于发现、建立和维护邻居关系。
在这里插入图片描述

Description(数据库描述报文简称DBD)报文:检查所有路由器的LSDB是否同步。
报文:两台设备在邻接关系初始化时,用DD报文描述本端设备的LSDB,进行数据库的同步。
2、DD(数据库描述)报文:描述LSDB情况,交换链路状态数据库摘要。
在这里插入图片描述

-State Request(链路请求报文简称LSR)报文:向另外一台路由器请求特定的链路状态记录。
报文:两台设备交换过DD报文,需要发送LSR报文向对方请求更新LSA,内容包括所需要的LSA的报文信息。
3、LSR(链路状态请求)报文:请求自身缺少的链路状态信息。
在这里插入图片描述

-State Update (链路回应报文简称LSU)报文:发送被请求的链路状态记录
报文:LSU报文用来向对端设备发送其所需要的LSA或者泛洪本端更新的LSA,内容是多条LSA(全部内容)的集合,为了实现Flooding的可靠性传输,需要LSAck报文对其进行确认,对没有收到确认报文的LSA进行重传,重传的LSA是直接发送邻居的。
4、LSU(链路状态更新)报文:发送详细的链路状态信息,回应LSR的请求。
在这里插入图片描述

-State Acknowledgment(链路确认报文简称LSA)报文:对其他类型的分组进行确认。
报文:LSAck报文用来对接收到的LSU报文进行确认,内容是需要确认的LSA的Header(一个LSAck报文可对多个LSA进行确认)。
5、LSAck(链路状态确认)报文:收到LSU后进行确认,发送确认报文。
在这里插入图片描述
总结
在这里插入图片描述

二、7种状态
状态:
出现Down的情况:

没有宣告OSPF邻居
40S时间都未收到Hello包超时。
已经宣告OSPF,收到对端发送的OSPF Hello,进入到下一个状态Init状态。

状态:
如何进入下一状态:
已经宣告OSPF,对端发送的OSPF Hello包中包含本机的router-id(active neighbor),此时进入到下一状态2-way状态

3.2-way状态:
2-way的作用:选举DR和BDR
如何选举DR和BDR
1、优先级 越大越优
优先级默认为1,范围是从0~255,0代表不参与选举DR。
2、Router-id 越大越优
3、手动指定
4、逻辑端口最大的IP地址 越大越优
5、物理端口最大的IP地址 越大越优
如何进入下一状态:
当DR和BDR选举出时进入下一状态Exstart状态。

状态:
作用是选举主路由器和从路由器,比较Router-id越大的位主。
选举成功后进入下一状态Exchange状态

状态:
作用相互传输DBD包,对比自己没有的路由条目,查缺补漏。

状态:
作用发送LSR、LSU,相互学习链路路由条目,完成路由表的收敛。发送LSA报文确认完成进入下一状态Full状态。

状态:
此状态后无特殊情况只会发hello报文,若产生路由更新或者路由震荡Full状态会发其他报文

OSPF路由器可与邻居路由器维系多种邻居状态,如下所列:
Down状态
Attempt状态(只在NBMA环境中)
Init状态
two-way状态
Exstart 状态
Exchange 状态
Loading 状态
Full状态

三、LSA的6种类型
1类:Router-LSA(Type1)
OSPF路由域内每一台路由器都会产生的LSA,这是LSA通告的基础,该LSA包内列出了,本路由器的所有参与OSPF进程的端口的IP地址与掩码与该接口Metric值,该LSA只会在发送路由器所在的区域内扩散,也就是说他的作用范围是本区域

2类:Network-LSA(Type2)
此类LSA只会在网络拓扑是多路访问的情况下产生,这类LSA包内,列出了这个多路访问的掩码,使用Router-id的方式,描述这个物理网段内有多少台路由器与DR保持联系

3类:Network-summary-LSA(Type3)
3类LSA由BDR发出,存在这类LSA的主要原因是1类2类只能在域内域内和传播,无法跨区域,这类数据包内,列出了网段,,掩码,出接口到达目标网段的Metric值,所以3类LSA相当于将1,2类LSA打包,通过ABR传输至其他区域

4类:ASBR-summary-LSA(Type4)
该类LSA并没有什么很特殊的意义,数据包中用Router-id的方法,,定位了ASBR与ASBR所在的区域的ABR,使得其他其他路由器可以找到ABR的位置

5类:AS-external-LSA(Type5)
由ASBR产生,描述到AS外部的路由,通告到所有的区

7类:NSSA LSA(Type7)
由ASBR产生,描述到AS外部的路由,仅在NSSA区域内传播。

LSA类型总结
1类:所有OSPF路由器都会产生,只在区域内传播
2类:DR产生,只在区域内传播
3类:ABR产生,在相邻的两个区域相互传播
4类:ABR产生,向和ASBR不在同一区域的其他区域传播,用于表示ASBR
5类:ASBR产生,向整个OSPF协议区传播,用于描述另一个协议域的路由信息
7类:NSSA区域中的ASBR产生,用于向NSSA区域通告外部路由
在这里插入图片描述
在这里插入图片描述

网络协议方面代表:重要协议分布图

在这里插入图片描述

网络安全设备方面代表:防火墙

基本原理/工作原理(了解它是怎么运行起来的)

网络安全访问方面代表:VPN

基本原理(了解其如何运行,出事时可以辅助分析)

网络安全漏洞方面代表-跨站/相似:XSS、XXE、CSRF、SSRF

一、主人公XSS简介
1、英文全名为Cross-site scripting,若简称为:CSS, 但这会与层叠样式表(Cascading Style Sheets,CSS)的缩写混淆。因此,跨站脚本攻击缩写为XSS
2、中文全名为跨站脚本,当目标网站目标用户浏览器渲染HTML文档的过程中,出现了不被预期的脚本指令并执行时,XSS就发生了

二、XSS的奇幻对比
1.【XSS自己和自己的区别】存储型、反射型和DOM型XSS有什么区别?
(1)存储型XSS:你发送一次带XSS代码的请求,以后这个页面的返回包里都会有XSS代码;
(2)反射型XSS:你发送一次带XSS代码的请求,只能在当前返回的数据包中发现XSS代码;
(3)DOM型XSS:你发送一次带XSS代码的请求,在返回包里压根儿就找不到XSS代码的影子。
2.【XSS自己和其他相似的区别】XSS和 XXE和CSRF 有什么区别,以及修复方式?
(1)XSS是跨站脚本攻击,用户提交的数据中可以构造代码来执行,从而实现窃取用户信息等攻击。修复方式:对字符实体进行转义、使用HTTP Only来禁止JavaScript读取Cookie值、输入时校验、浏览器与Web应用端采用相同的字符编码。
(2)CSRF是跨站请求伪造攻击,XSS是实现CSRF的诸多手段中的一种,是由于没有在关键操作执行时进行是否由用户自愿发起的确认。修复方式:筛选出需要防范CSRF的页面然后嵌入Token、再次输入密码、检验Referer。
(3)XXE是XML外部实体注入攻击,XML中可以通过调用实体来请求本地或者远程内容,和远程文件保护类似,会引发相关安全问题,例如敏感文件读取。修复方式:XML解析库在调用时严格禁止对外部实体的解析。
3.【XSS的主人与其他相似的区别】CSRF、SSRF和重放攻击有什么区别?
(1)CSRF是跨站请求伪造攻击,由客户端发起;
(2)SSRF是服务器端请求伪造,由服务器发起;
(3)重放攻击是将截获的数据包进行重放,达到身份认证等目的。

网络安全漏洞方面代表-注入:SQL两种分类说

SQL 注入只有两种类型:数字型与字符型
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

网络安全攻击方面代表:DDOS(攻击TCP三次握手)


二、系统

Linux系统

使用

一、常规使用
Linux是命令行系统,所以使用方面需要熟记命令。
【文本内容】

  1. 最基础的:
  1. ls是list,列表,也就是获取test目录下的文件列表
    ls test
  2. cd 是change directory,也就是切换到test目录下
    cd test
  3. pwd是print work directory,也就是打印当前目录路径
    pwd
  4. mkdir是make directory, 创建目录,后面加要创建的目录名
    mkdir test
  5. rm,rmdir 是remove directory,移除文件
    rmdir test
    rm
  6. mv命令是move的缩写,可以用来移动文件或者将文件改名
    mv [选项] 源文件或目录 目标文件或目录
    mv test tst
  7. cp是copy,复制文件或目录
    cp [options] source dest
  8. vi是编辑器的名字,后面加文件名,是打开文件
    vi

【理解法】命令就是英文的缩写。
最基础的:ls:list,列表;cd:change directory,切换目录;pwd:print work directory,打印当前目录路径;mkdir:make directory, 创建目录;rm:remove ,移除文件;rmdir:remove directory,移除文件;mv:move,移动文件或者将文件改名;cp:copy,复制文件或目录;vi:编辑器的名字,后面加文件名,是打开文件。tar:打包(联想,ta打);gz:gunzip,解压;

【功能记忆-增删查改】
如果面试记不起,那就通过软件的使用,无非就是增删查改四方面进行回忆
1、增:
复制文件或目录copy,命令为cp;
创建目录make directory,命令为mkdir;
2、删:
移除文件或目录remove,命令为rm;
移除目录remove directory,命令为rmdir;
3、查
获取文件列表list,命令为ls;
切换目录change directory,命令为cd;
打印当前目录路径print work directory,命令为pyd;
4、改
移动文件move,命令为mv;
编辑文件vi,命令vi;

二、结合使用
1、结合shell实现自动化
【案例法】

安全

【一句话介绍】


三、语言

python

python结合运维自动化,作为面试的加分点。

python运维自动化方面代表:

附件

1、大纲可借鉴【吐血整理】(面试大全)网络安全,渗透测试,安全服务工程师面试题
2、题目可借鉴深信服技术支持工程师(安全、云计算方向)面试题目