2018上半年信息安全工程师案例分析真题试题四
阅读下列说明和C语言代码,回答问题1至问题4,将解答写在答题纸的对应栏内。
【说明】
在客户服务器通信模型中,客户端需要每隔一定时间向服务器发送数据包,以确定服务器是否掉线,服务器也能以此判断客户端是否存活,这种每隔固定时间发一次的数据包也称为心跳包。心跳包的内容没有什么特别的规定,一般都是很小的包。
某系统采用的请求和应答两种类型的心跳包格式如图4-1所示。
心跳包类型占1个字节,主要是请求和响应两种类型;
心跳包数据长度字段占2个字节,表示后续数据或者负载的长度。
接收端收到该心跳包后的处理函数是process_heartbeat(),其中参数p指向心跳包的报文数据,s是对应客户端的socket网络通信套接字。
void process_heartbeat(unsigned char *p, SOCKET s)
{
unsigned short hbtype;
unsigned int payload;
hbtype=*p++; //心跳包类型
n2s(p, payload); //心跳包数据长度
pl=p; //pl 指向心跳包数据
if(hbtype=HB_REQUEST){
unsigned char *buffer, *bp;
buffer=malloc(1+2+payload);
*bp++=HB_RESPONSE; //填充1byte 的心跳包类型
s2n(payload, bp); //填充2bytes 的数据长度
memcpy(bp,pl,payload);
/*将构造好的心跳响应包通过sockets 返回客户端 */
r=write_bytes(s, buffer,3+payload);
}
}
【问题1】(4分)
(1)心跳包数据长度字段的最大取值是多少?
参考答案:65535
参考解析:心跳包数据长度字段占2个字节,表示后续数据或者负载的长度。所以心跳包数据长度字段的最大取值为2^16-1=65535。
(2)心跳包中的数据长度字段给出的长度值是否必须和后续的数据字段的实际长度一致?
参考答案:否
【问题2】(5分)
(1)上述接收代码存在什么样的安全漏洞?
参考答案:存在缓冲区溢出安全漏洞、“心脏出血”漏洞。
(2)该漏洞的危害是什么?
参考答案:会造成有用数据的泄露
【问题3】(2分)
模糊测试(fuzzing)是一种非常重要的信息系统安全测评方法,它是一种基于缺陷注入的自动化测试技术。请问模糊测试属于黑盒测试还是白盒测试?其测试结果是否存在误报?
参考答案:属于黑盒测试;不存在误报。
参考解析:模糊测试属于软件测试中的黑盒测试,是一种通过向目标系统提供非预期的输入并监视异常结果来发现软件漏洞的方法。模糊测试不需要程序的源代码就可以发现问题。模糊测试是一种自动化的动态漏洞挖据技术,不存在误报,也不需要人工进行大量的逆向分析工作。
【问题4】(4分)
模糊测试技术能否测试出上述代码存在的安全漏洞?为什么?
参考答案:可以测出上述代码存在的安全漏洞。可以利用黑盒测试的方法,向服务器发送特定报文,通过服务器返回的数据解析出报文,并判断是否存在“心脏出血”漏洞,不需要程序的源代码即可发现问题。