201705信息安全下午真题
第 1 题
阅读下列说明,回答问题1至问题3,将解答写在答题纸的对应栏内。
【说明】
安全目标的关键是实现安全的三大要素:机密性、完整性和可用性。对于一般性的信息类型的安全分类有以下表达形式:
{ (机密性,影响等级), (完整性,影响等级), (可用性,影响等级) }
在上述表达式中,“影响等级”的值可以取为低 (L)、中(M)、高(H)三级以及不适用 (NA)。
【问题1】(6分)
请简要说明机密性、完整性和可用性的含义。
【问题2】(2 分)
对于影响等级“不适用”通常只针对哪个安全要素?
【问题3】(3分)
如果一个普通人在他的个人Web服务器上管理其公开信息。请问这种公开信息的安全分类是什么?
答案与解析
- 试题难度:较难
- 知识点:网络信息安全概述>网络信息安全基本属性
- 试题答案:
【问题1】:
(1)机密性:维护对信息访问和公开经授权的限制,包括保护个人隐私和私有的信息。
(2)完整性:防止信息不适当的修改和毁坏,包括保证信息的不可抵赖性和真实性。
(3)可用性:保证信息及时且可靠的访问和使用。
【问题2】:
“不适用”通常针对机密性。
【问题3】:
{(机密性,NA),(完整性,M),(可用性,M)} - 试题解析:
【问题1】:
(1)机密性:维护对信息访问和公开经授权的限制,包括保护个人隐私和私有的信息,机密性的缺失是指信息的非经授权的公开。
(2)完整性:防止信息不适当的修改和毁坏,包括保证信息的不可抵赖性和真实性。完整性的缺失是指信息未经授权的修改和毁坏。
(3)可用性:保证信息及时且可靠的访问和使用。可用性的缺失是指信息或信息系统的访问或使用被中断。
【问题2】:
对于公开信息类型,机密性的缺失并没有什么潜在的影响,因为公开的信息没有保密的需求,所以机密性在公开信息类型中并不适用。
【问题3】:
一个普通人在他的个人Web服务器上管理其公开信息。首先机密性在公开信息类型中并不适用,比如海滨老师在个人微博上发表了一篇博文,显然这是公开信息,机密性的缺失不受影响;其次,对于完整性的缺失是一个Moderate的影响;再次,对可用性的缺失也是一个Moderate的影响。这种类型的公开信息的安全分类表述如下:
{ (机密性,NA) ,(完整性,M),(可用性,M)}
第 2 题
阅读下列说明,回答问题 1和问题 2,将解答写在答题纸的对应栏内。
【说明】
Windows 系统的用户管理配置中,有多项安全设置,如图2-1 所示。
【问题1】(3分)
请问密码和账户锁定安全选项设置属于图中安全设置的哪一项?
【问题 2】(3分)
Windows的密码策略有一项安全策略就是要求密码必须符合复杂性要求,如果启用此策略,那么请问:用户 Administrator 拟选取的以下六个密码中的哪些符合此策略?
123456 Admin123 Abcd321 Admin@ test123 ! 123@host
答案与解析
- 试题难度:较难
- 知识点:操作系统安全保护>Windows操作系统安全分析与防护
- 试题答案:
【问题1】
属于账号策略。【问题2】
Abcd321 test123! 123@host - 试题解析:
【问题1】账户策略主要包括密码策略和账户锁定策略两种安全设置。
【问题2】密码必须符合复杂性要求:启用此策略,用户账户使用的密码必须符合复杂性的要求。
密码复杂性必须符合下列最低要求:
不能包含用户的账户名;
不能包含用户姓名中超过两个连续字符的部分;
至少有六个字符长;
密码总必须包含以下4类字符中的三类字符:
1、英文大写字母(A-Z)
2、英文小写字母(a-z)
3、10个基本数字(0-9)
4、特殊符号(!@#¥%等)
第 3 题
阅读下列说明,回答问题 1 至问题 7,将解答写在答题纸的对应栏内。
【说明】
扫描技术是网络攻防的一种重要手段,在攻和防当中都有其重要意义。nmap 是一个 开放源码的网络扫描工具,可以查看网络系统中有哪些主机在运行以及哪些服务是开放 的。 namp 工具的命令选项:sS 用于实现 SYN 扫描,该扫描类型是通过观察开放端口和关闭端口对探测分组的响应来实现端口扫描的。
请根据图 3-1 回答下列问题
【问题1】(2分)
此次扫描的目标主机的IP地址是多少?
【问题2】(2 分)
SYN 扫描采用的传输层协议名字是什么?
【问题 3】 (2分)
SYN 的含义是什么?
【问题 4】 (4分)
目标主机开放了哪几个端口?简要说明判断依据。
【问题 5】(3分)
每次扫描有没有完成完整的三次握手?这样做的目的是什么?
【问题 6】(5分)
补全表 3-1 所示的防火墙过滤器规则的空(1) - (5),达到防火墙禁止此类扫描流量进入和处出网络 ,同时又能允许网内用户访问外部网页服务器的目的。
【问题 7】(2 分)
简要说明为什么防火墙需要在进出两个方向上对据数据包进行过滤。
答案与解析
- 试题难度:较难
- 知识点:网络安全漏洞防护技术原理与应用>网络安全漏洞扫描技术与应用
- 试题答案:
【问题1】
192.168.220.1
【问题2】
TCP协议
【问题3】
同步信号,是TCP/IP建立连接时使用的握手信号。
【问题4】:
目标主机开放的端口为:135端口,139端口。
判断依据:如果端口开放,目标主机会响应扫描主机的SYN/ ACK连接请求;如果端口关闭,则目标主机会向扫描主机发送RST的响应。
【问题5】
没有完成;
第三个握手包没有发送,不完成整个握手协议过程,是避免扫描行为被目标主机记录在案,逃避检测,实现隐蔽扫描。
【问题6】
(1)UDP (2)* (3)80 (4)0 (5)1
【问题7】
在进入方向过滤是为了防止被人攻击,而在出口方向过滤则是为了防止自己成为攻击的源头或者跳板。 - 试题解析:
【问题1】
TCP SYN扫描,也叫半打开扫描。这种扫描方法并没有建立完整的TCP连接。客户端首先向服务器发送SYN分组发起连接。从图中可以看出,源主机地址为192.168.220.129;目标主机为192.168.220.1。
【问题2】
TCP SYN扫描是基于TCP协议的三次握手机制进行的。
【问题3】
SYN(synchronous):同步信号,是TCP/IP建立连接时使用的握手信号。在客户机和服务器之间建立正常的TCP网络连接时,客户机首先发出一个SYN消息,服务器使用SYN+ACK应答表示接收到了这个消息,最后客户机再以ACK消息响应。这样在客户机和服务器之间才能建立起可靠的TCP连接,数据才可以在客户机和服务器之间传递。
【问题4】
TCP SYN扫描,也叫半打开扫描。这种扫描方法并没有建立完整的TCP连接。客户端首先向服务器发送SYN分组发起连接,如果收到一个来自服务器的 SYN/ACK 应答,那么可以推断该端口处于监听状态。如果收到一RST/ACK 分组则认为该端口不在监听。而客户端不管收到的是什么样的分组,都向服务器发送一个 RST/ACK 分组,这样并没有建立一个完整的 TCP 连接。
【问题5】
半连接(SYN)扫描是端口扫描没有完成一个完整的TCP连接,在扫描主机和目标主机的一指定端口建立连接时候只完成了前两次握手,在第三步时,扫描主机中断了本次连接,使连接没有完全建立起来。这样即使日志中对扫描有所记录,但是尝试进行连接的记录也要比全扫描少得多;这样做的目的是防止对方主机的系统和防火墙记录此类扫描行为。
【问题6】第1条规则,拒绝从外网往内网发送的请求连接信息,所以ACK=0;
第2、3、4条规则,配置允许内网用户访问外部网页服务器。
第2条规则,允许内网往外网服务器80端口发送的请求连接和应答信息,所以目的端口为80;
第3条规则,允许内网向外网域名服务器发送的请求连接和应答信息,所以协议为UDP;
第4条规则,允许外网域名服务器发往内网的应答信息,所以ACK=1;
第5条规则,其他流量一律不允许进出内外部网络,所以协议为*。
【问题7】防火墙是一种位于内部网络与外部网络之间的网络安全系统,依照特定的规则,允许或是限制传输的数据通过,需要在进出两个方向对防火墙进行过滤设置,在进入方向过滤是为了防止被人攻击,而在出口方向过滤则是为了防止自己成为攻击的源头或者跳板。
第 4 题
阅读下列说明,回答问题 1 至问题 5,将解答写在答题纸的对应栏内。
【说明】
DES 是一种分组密码,已知 DES加密算法的某个 S 盒如表 4-1 所示。
【问题1】(4分)
请补全该 S 盒,填补其中的空(1) - (4),将解答写在答题纸的对应栏内。
【问题 2】 (2分)
如果该 S 盒的输入为 110011,请计算其二进制输出。
DES加密的初始置换表如下:
置换时,从左上角的第一个元素开始,表示输入的铭文的第58位置换成输出的第1位,输入明文的第50位置换成输出的第2位,从左至右,从上往下,依次类推。
DES加密时,对输入的64位明文首先进行初始置换操作。
若置换输入的明文M=0123456789ABCDEF(16进制),请计算其输出(16进制表示)。
【问题4】(2分)
如果有简化的DES版本,其明文输入为8比特,初始置换表IP如下:
IP:2 6 3 1 4 8 5 7
请给出其逆初始置换表。
【问题5】(2分)
DES加密算法存在一些弱点和不足,主要有密钥太短和存在弱密钥。请问,弱密钥的定义是什么? **答案与解析** - 试题难度:较难 - 知识点:密码学基本理论>常见密码算法 - 试题答案:【问题1】
(1)10 (2)6 (3)1 (4)11
【问题2】
0100
【问题3】
M = (0123456789ABCDEF)16 = (00000001 00100011 01000101 01100111 10001001 10101011 11001101 11101111)2经过IP置换,结果为:M’ =(11001100 00000000 11001100 11111111 11110000 10101010 11110000 10101010)2=(CC00CCFFF0AAF0AA)16
【问题4】
4 1 3 5 7 2 8 6
【问题5】
弱密钥不受任何循环移位的影响,并且只能得到相同的子密钥,由全0或全1组成的密钥显然是弱密钥,子密钥生成过程中被分割的两部分,分别为全0或全1时也是弱密钥。
- 试题解析:
【问题1】:
DES算法中的每个S盒都是由4行16列的矩阵构成,每行都是0到15这16个数字,从上表中可以分析得出,第0行缺少10,第1行缺少6,第3行缺少1,第4行缺少11。
【问题 2】:
S盒的运算规则:设输入为110011,第一位和第六位数字组成的二进制数为11=(3)10;表示选中该S盒中的行号为3的那一行,其余4位数字组成的二进制数为1001=(9)10;表示选中该S盒中列号为9的那一列。交点处的数字为4,则S盒中的输出为0100
【问题3】:
首先将M = (0123456789ABCDEF)16表示成二进制形式,即1位16进制数字可表示为4位二进制,即M = (00000001 00100011 01000101 01100111 10001001 10101011 11001101 11101111)2
然后按照初始置换表进行置换,基本置换规则为:原始数据中的第58位放在第一位;第50位放第二位;第42位放第三位……其余依次类推。置换后的结果为:
M’ =(11001100 00000000 11001100 11111111 11110000 10101010 11110000 10101010)2
=(CC00CCFFF0AAF0AA)16
【问题4】:
逆初始置换是在初始置换的基础上进行逆置换;比如原始数据顺序为1 2 3 4 5 6 7 8;经过初始置换之后变成:2 6 3 1 4 8 5 7;则逆初始置换是要将其顺序进行还原,比如,原始数据中第一位数据经初始置换之后放到了第4位,那么逆初始置换就要将初始置换后的第4位放到第1位,即逆初始置换表第一位为4;原始数据中第二位数据经初始置换之后放到了第1位,那么逆初始置换就要将初始置换后的第1位放到第2位,即逆初始置换表第二位为1;其余依次类推,得出该逆初始置换表为4 1 3 5 7 2 8 6。
【问题5】:
DES算法中存在弱密钥和半弱密钥。
弱密钥K:即 K1=K2=…=K16;弱密钥不受任何循环移位的影响,并且只能得到相同的子密钥,由全0或全1组成的密钥显然是弱密钥,子密钥生成过程中被分割的两部分分别为全0或全1时也是弱密钥,并且存在4个弱密钥。
半弱密钥K:有些种子密钥只能生成两个不同的子密钥,这样的种子密钥K称为半弱密钥,DES至少存在12个半弱密钥。半弱密钥将导致把明文加密成相同的密文。
阅读下列说明,回答问题1和问题2,将解答写在答题纸的对应栏内。
【说明】
在公钥体制中,每一用户 U 都有自己的公开密钥 PKu 和私钥 SKu 。如果任意两个用户 A 和 B 按以下方式通信:
A 发给 B 消息 [EpKB (m),A] 。
其中 Ek(m)代表用密钥 K对消息m进行加密。
B收到以后,自动向A返回消息【EPkA(m),B】,以使A 知道B确实收到消息m。
【问题 1】(4分)
用户 C 怎样通过攻击手段获取用户 A 发送给用户 B 的消息 m。
【问题 2】 (6 分)
若通信格式变为:
A 给 B 发消息:EPKB(ESKA(m),m ,A)
B 给 A 发消息: EpKA(EsKB (m),m,B)
这时的安全性如何?请分析 A,B 此时是如何相互认证并传递消息的。
答案与解析
- 试题难度:较难
- 知识点:认证技术原理与应用>认证类型与认证过程
- 试题答案:
【问题1】
攻击用户C可以通过以下手段获取报文 m:
1. 用户C截获消息:(EPKB(m), A)
2. 用户C篡改消息:(EPKB(m), C)
3. 用户B返回消息:(EPKC(m), B)
4. 用户C成功解密,最后得到明文m。
【问题2】
安全性提高了,能实现加密和认证的双重任务。但会存在重放攻击。
第一步,A 发给 B 消息是 A 首先用自己的秘密钥 SKA对消息 m 加密,用于提供数字签名,再用接收方的公开钥 PKB第 2 次加密,密文中包括明文的信息和 A 的身份信息。
第二步,接收方 B 收到密文,用自己的私钥先解密,再用对方的公钥验证发送方的身份是 A,实现了 B 对 A 的认证,并获取了明文。
第三步,B 发给 A 消息是 B 首先用自己的私钥 SKB对消息 m 加密并签名,再用 A 的公开钥 PKA第 2 次加密,密文中包括明文的信息和 A 的身份信息,还有 B 对接收的 m 的签名密文。
第四步,只有 A 才能用自己的私钥打开 B 送过来的密文,并且验证是 B 的签名,实现了 A 对 B的认证,当 A 看见原样返回的 m,就知道 B 收到了 A 发送的明文 m 了。 - 试题解析:
【问题 1】:
1. 用户C首先截获消息:(EPKB(m),A)
2. 然后将用户标识信息改为C自己的标识信息,让用户B以为这条消息就是C发过来的。即: C(“B” ) --->B:(EPKB(m),C)
3. 用户B将自己的身份标识及用C的公钥加密的信息一起发送给用户C。即:B--->C:(EPKC(m),B)
4. 用户C用私钥成功解密,最后得到明文m。
【问题 2】:
安全性提高了,利用公钥的数字签名机制能实现加密和认证的双重任务。但会存在重放攻击。
第一步,A发给B消息是A首先用自己的秘密钥SKA对消息m加密,用于提供数字签名,再用接收方的公开钥 PKB第 2 次加密,密文中包括明文的信息和A的身份信息。
第二步,接收方B收到密文,用自己的私钥先解密,再用对方的公钥验证发送方的身份是A,实现了 B 对 A 的认证,并获取了明文。
第三步,B 发给A消息是 B 首先用自己的秘密钥 SKB对消息 m 加密并签名,再用A的公开钥PKA第 2 次加密, 密文中包括明文的信息和 A的身份信息, 还有 B 对接收的m的签名密文。
第四步,只有A才能用自己的私钥打开B送过来的密文,并且验证是B的签名,实现了A对 B的认证,当A看见原样返回的 m,就知道 B 收到了A发送的明文 m了。
第 6 题
阅读下列说明,回答问题 1 至问题 4 ,将解答写在答题纸的对应栏内。
【说明】
基于 Windows32 位系统分析下列代码,回答相关问题 。
void Challenge(char str)
{
char temp[9]={0};
strncpy(temp,str,8);
printf("temp=%s\n",temp);
if(strcmp(temp"Please!@")==0){
printf("KEY: **");
}
}
int main(int argc,char argv[ ])
{
Char buf2[16]
Int check=1;
Char buf[8]
Strcpy (buf2, "give me key! !");
strcpy(buf,argv[1]);
if(check==65) {
Challenge(buf);
}
else {
printf("Check is not 65 (%d) \n Program terminated!!\n",check);
}
Return 0;
}
【问题 1】(3 分)
main 函数内的三个本地变量所在的内存区域称为什么?它的两个最基本操作是什么?
【问题 2】(3分)
画出buf,check,buf2 三个变量在内存的布局图。
【问题 3】(2分)
应该给程序提供什么样的命令行参数值(通过argv变量传递)才能使程序执行流程进入判断语句 If(check=65)....然后调用challenge( )函数。
【问题4】(4分)
上述代码所存在的漏洞名字是什么,针对本例代码,请简要说明如何修正上述代码以修补次漏洞。
答案与解析
- 试题难度:较难
- 知识点:网络安全漏洞防护技术原理与应用>网络安全漏洞处置技术与应用
- 试题答案:【问题1】
1、堆栈。2、PUSH和POP。
【问题2】
变量的先后关系、每个变量所占空间、增长方向(数组)
【问题3】
用户输入9个字符的字符串,使其满足条件:前8个字符为任意字符和第9个字符为大写字母A;
【问题4】
缓冲区溢出。对输入参数的长度进行检查;使用安全函数strncpy()来代替strcpy()函数。 - 试题解析:
【问题1】一个程序在内存中分为程序段、数据段和堆栈三部分。程序段里放着程序的机器码和只读数据;数据段放程序中的静态数据;动态数据则通过堆栈来存放,也就是说,变量存在的内存区域是堆栈;堆栈的特性是后进先出 (LIFO),即先进入堆栈的对象最后出来,最后进入堆栈的对象最先出来。堆栈两个最重要的操作是 PUSH和POP将对象放入堆栈顶端(最外边,内存高端);POP 操作实现一个逆向过程,把顶端的对象取出来。
【问题2】首先根据3个变量定义的先后顺序,buf2先压入堆栈(在最底下),然后是check,最后是buf(最上面);空间大小根据C语言语法即可确定。buf2是16个字节,check是整型变量占用4个字节,buf是字符数组,有8个字符,每个字符占一个字节,共占用8个字节。所以buf、check、buf2三个变量在内存的布局图如下所示:【问题3】该代码按正常流程走下来,因check的值为1,不满足check==65,所以会执行else语句,所以这道题的关键在于通过什么样的方式来改变check的值,使其等于65,满足条件然后调用Challenge()函数。
再来分析strcpy() 函数这个函数,该用来复制字符串,其原型为:char *strcpy(char *dest, const char *src);
【参数】dest 为目标字符串指针,src 为源字符串指针。
注意:src 和 dest 所指的内存区域不能重叠,且 dest 必须有足够的空间放置 src 所包含的字符串(包含结束符NULL)。
【返回值】成功执行后返回目标数组指针 dest。
strcpy() 把src所指的由NULL结束的字符串复制到dest 所指的数组中,返回指向 dest 字符串的起始地址。
注意:如果参数 dest 所指的内存空间不够大,可能会造成缓冲溢出。
主函数在执行时会接收用户输入信息放入指针数组argv中,而指针数组存放的信息又会通过strcpy复制到buf数组里面,buf数组的长度为8个字符,一旦用户输入数据长度大于8个字符就会溢出,溢出部分就会覆盖其他变量的值,从上面堆栈中的数据存储方式可以看出,buf数组一旦溢出,溢出部分就会覆盖check的值;根据题目意思,只要令溢出部分的值为65即可令check=65,从而满足条件。所以可以先任意输入8个字符堆满buf数组,再输入时就是溢出部分,可以输入大写字母A,因check为整形数据,所以将字符赋给整形变量时,会按其ASCII码值进行处理,即A的ASICC值为65,从而可以把check值变成65满足条件。
【问题4】前面分析strcpy() 函数,当其参数 dest 所指的内存空间不够大,可能会造成缓冲溢出。
而strncpy()用来复制字符串的前n个字符,其原型为:char * strncpy(char *dest, const char *src, size_t n);
【参数说明】dest 为目标字符串指针,src 为源字符串指针。strncpy()会将字符串src前n个字符拷贝到字符串dest。
在编写程序时通常用strncpy()函数来取代strcpy()函数防止缓冲区溢出。