2019年信息安全工程师案例分析真题与答案试题五(共17分)
阅读下列说明和图,回答问题1至问题4,将解答填入答题纸的对应栏内。
【说明】
信息系统安全开发生命周期(Security Development Life Cycle(SDLC))是微软提出的从安全角度指导软件开发过程的管理模式,它将安全纳入信息系统开发生命周期的所有阶段,各阶段的安全措施与步骤如下图5.1所示。
【问题1】(4分)在培训阶段,需要对员工进行安全意识培训,要求员工向弱口令说不!针对弱口令最有效的攻击方式是什么?以下口令中,密码强度最高的是( )。
A、security2019 B、2019Security
C、Security@2019 D、Security2019
参考答案:穷举攻击。C。
【问题2】(6分)在大数据时代,个人数据正被动地被企业搜集并利用。在需求分析阶段,需要考虑采用隐私保护技术防止隐私泄露。从数据挖掘的角度,隐私保护技术主要有:基于数据失真的隐私保护技术、基于数据加密的隐私保护技术、基于数据匿名隐私保护技术。
请问以下隐私保护技术分别属于上述三种隐私保护技术的哪一种?
(1)随机化过程修改敏感数据
(2)基于泛化的隐私保护技术
(3)安全多方计算隐私保护技术
参考答案:(1)基于数据失真的隐私保护技术(2)基于数据匿名的隐私保护技术(3)基于数据加密的隐私保护技术
【问题3】(4分)有下述口令验证代码:
#define PASSWORD "1234567"
int verify_ password (char *password)
{
int authenticated;
char buffer[8];
authenticated= strcmp(password,PASSWORD);
strcpy(buffer,password);
return authenticated;
}
іnt mаіn(іnt аrgс, сhаr* аrgv[ ])
{
int valid_ flag=0;
char password[1024];
while(1)
{
printf("please input password: ");
scanf("%s",password);
valid_ flag = verify_ password(password); //验证口令
if ( valid_ flag)//口令无效
{
printf("incorrect password!\n\n");
}
else //口令有效
{
printf("Congratulation! You have passed the verification!\n");
break;
}
}
其中main函数在调用verify_ password函数进行口令验证时,堆栈的布局如图5.2所示。
请问调用verify_password函数的参数满足什么条件,就可以在不知道真实口令的情况下绕过口令验证功能?
参考答案:参数password的值满足:12个字符的字符串,前面8个字符为任意字符,后面4个字符为空字符。
参考解析:首先,分析代码可知,要绕过口令验证,需要使得authenticated值为0。authenticated结果是通过strcmp判断两个字符相等得到的,了解下这个函数:
strcmp函数是string compare(字符串比较)的缩写,用于比较两个字符串并根据比较结果返回整数。基本形式为strcmp(str1,str2),若str1=str2,则返回零;若str1<str2,则返回负数;若str1>str2,则返回正数。
也就是说,正常情况下authenticated为0一定表示两个字符串相等。但是我们观察堆栈可知,buff占用8个字节,紧后authenticated占用4个字节(int类型)。结合程序通过strcpy将password写入buff可知,我们可以利用strcpy执行时缓冲区溢出,将后续地址的值也改为0,而空字符对应的ASCII码为0,因此,可以输入12个字符,前面8个字符为任意字符,后面4个字符为空字符,后面4个字符是为了让authenticated的值为0。
【问题4】(3分)SDLC安全开发模型的实现阶段给出了3种可以采取的安全措施,请结合问题3的代码举例说明?
参考答案:(1)使用批准工具(安全编译工具)。(2)禁用不安全函数(禁用C语言中有隐患的函数,例如代码中的strcpy,scanf)。(3)静态分析工具(如检测程序指针的完整性)。