2017年上半年信息安全工程师考试真题含答案(下午题)

2017年上半年信息安全工程师考试真题含答案(下午题)

https://www.moondream.cn/?p=389

blob.png

第1题

阅读下列说明,回答问题 1 至问题 3,将解答写在答题纸的对 应栏内。

【说明】

安全目标的关键是实现安全的三大要素:机密性、完整性和可用性。对于一般性的信息类型的安全分类有以下表达形式:

{ (机密性,影响等级), (完整性,影响等级), (可用性,影 响等级) }

在上述表达式中,”影响等级”的值可以取为低 (L)、中(M)、高(H) 三级以及不适用 (NA)。

【问题 1】(6 分)

请简要说明机密性、完整性和可用性的含义。

【问题 2】(2 分)

对于影响等级”不适用”通常只针对哪个安全要素?

【问题 3 】(3 分)

如果一个普通人在它的个人 Web 服务器上管理其公开信息。请问这种公开信息的安全分类是什么?

【答案和解析】:

【问题 1】

(1)机密性:维护对信息访问和公开经授权的限制,包括保护个人隐私和私有的信息。
(2)完整性:防止信息不适当的修改和毁坏,包括保证信患的不可抵赖性和真实性。
(3)可用性:保证信息及时且可靠的访问和使用。

【问题2】“不适用”通常针对机密性。

【问题3】{(机密性,NA),(完整性,M),(可用性,M)}

第2题

阅读下列说明,回答问题 1 和问题 2,将解答写在答题纸的对 应栏内。
【说明】
Windows 系统的用户管理配置中,有多项安全设置,如图 2-1 所示。

【问题 1】(3 分)
请问密码和帐户锁定安全选项设置属于图中安全设置的哪一项?
【问题 2】(3 分)
Windows 的密码策略有一项安全策略就是要求密码必须符合复杂 性要求,如果启用此策略, 那么请问:用户 Administrator 拟选取的以下六个密码中的哪 些符合此策略?
123456    Admin123     Abcd321     Admin@     test123!     123@host

【答案和解析】:

【问题 1】属于账号策略。

【问题2】Abcd321  test123! 123@host

第3题

【说明】
扫描技术是网络攻防的一种重要手段,在攻和防当中都有其重要意义。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),达到防火墙禁止此类扫描流量进入和处出网络 ,同时又能允许网内用户访问外部网页服务器的目的。
表 3-1 防火墙过滤器规则表

【问题 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】在进入方向过滤是为了防止被人攻击,而在出口方向过滤则是为了防止自己成为攻击的源头或者跳板。

第4题

【说明】
DES 是一种分组密码,己知 DES 加密算法的某个 S 盒如表 4-1 所示。

【问题1】 (4分)
请补全该 S 盒,填补其中的空(1) – (4),将解答写在答题纸的对应栏内。
【问题 2】 (2分)
如果该 S 盒的输入为 110011,请计算其二进制输出。
【问题3】(6分)
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时也是弱密钥。

第5题

【说明】在公钥体制中,每一用户U都有自己的公开密钥PKu和私钥SKu。如果任意两个用户A和B按以下方式通信:

void Challenge(char *str)

{

char temp[9]={0};

strncpy(temp,str,8);

printf(“temp=%s\n”,temp);

if(strcmp(temp”Please!@”)=O){

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(bu f);

}

else {

printf(“Check is not 65 (%d) \n Program terminated!!\n”,check);

}

return  0;

}

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(mLm,A)

B给A发消息:EpKA(EsKN(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 了。

第6题

【说明】
基于 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()函数。


猜你喜欢

转载自blog.51cto.com/13744629/2116060