反馈
问题:
代码安仝漏洞往往是系统或者网络被攻破的头号杀手。在C语言程序开发中,由于C语言自身语法的-些特性,很容易出现各种安全漏洞。因此,应该在C程序开发中充分利用现有开发工具提供的各种安全编译选项,减少出现漏洞的可能性。
选项 :
(4分)<br> 图5-1给出了一段有漏洞的C语言代码(注:行首数字是代码行号),请问,上述代码存在哪种类型的安全漏洞?该漏洞和C语言数组的哪一个特性有关?<br> <img style='width:100%;' src="https://files.lightsoft.tech/rkfiles/ruankao_work_version_0103/userfile/kindeditor/image/20220401/20220401205001_205.png"><br>
选项 :
(4分)<br> 图5-2给出了C程序的典型内存布局,请回答如下问题。<br> <img style='width:100%;' src="https://files.lightsoft.tech/rkfiles/ruankao_work_version_0103/userfile/kindeditor/image/20220401/20220401205511_524.png"><br> <span style='color:#FF6347;'>( )</span>请问图5-1的代码中第9行的变量authenticated保存在图5-2所示的哪个区域中?<br> <span style='color:#FF6347;'>( )</span>请问stack的两个典型操作是什么?<br> <span style='color:#FF6347;'>( )</span>在图5-2中的stack区域保存数据时,其地址增长方向是往高地址还是往低地址增加?<br> <span style='color:#FF6347;'>( )</span>对于图5-1代码中的第9行和第10行代码的两个变量,哪个变量对应的内存地址更高?<br>
选项 :
(6分)<br> 微软的Visual Studio提供了很多安全相关的编译选项,图5-3给出了图5-1中代码相关的工程属性页面的截图。请回答以下问题。<br> <img style='width:100%;' src="https://files.lightsoft.tech/rkfiles/ruankao_work_version_0103/userfile/kindeditor/image/20220401/20220401210227_932.png"><br> <span style='color:#FF6347;'>( )</span>请问图5-3中哪项配置可以有效缓解上述代码存在的安全漏洞?<br> <span style='color:#FF6347;'>( )</span>如果把图5-1中第10行代码改为char buffer[4];图5-3的安全编译选项是否还起作用?<br> <span style='color:#FF6347;'>( )</span>模糊测试是否可以检测出上述代码的安全漏洞?<br>
答案:
解析:
缓冲区(栈)溢出。<br> 不对数组越界进行检查。<br> <br> 本题考查软件安全的漏洞类型以及安全开发的知识,是关于代码安仝的问题。<br> 此类题口要求考生对常见的安全漏洞有基本的掌握,并在微软的Visual Studio开发环境中进行调试。<br> 这类漏洞是由于函数内的本地变量溢出造成的,而本地变量都位于堆栈区域,因此这类漏洞一般称为栈溢出漏洞。主要是因为C语言编译器对数组越界没有进行检查导致的。<br> 答案解析:<br/> <span style='color:#FF6347;'>( )</span>stack<br> <span style='color:#FF6347;'>( )</span>push和pop或者压栈和弹栈<br> <span style='color:#FF6347;'>( )</span>高地址<br> <span style='color:#FF6347;'>( )</span>第9行或者authenticated变量<br> <br> 第9行的变量authenticated同样是本地变量,因此位于堆栈(stack)区域。堆栈结构常见的操作就是push和pop。在数据往堆栈区域写时,都是往高地址写的。在入栈时,则是第9行的变量先入栈在高地址,后续的第10行代码对应的变量buffer后入栈在低地址,因此第9行的变量在高地址。只有这样在往buffer数组拷贝过多的数据时,才会覆盖掉后续的authenticated变量。<br> 答案解析:<br/> <span style='color:#FF6347;'>( )</span> Enable Security Check(/GS)<br> <span style='color:#FF6347;'>( )</span>不起作用<br> <span style='color:#FF6347;'>( )</span>可以检测出漏洞<br> <br> 微软的Visual Studio编译器提供了很多的安全编译选项,可以对代码进行安全编译,例如图中Enable Security Check(/GS)可以在栈中添加特殊值,使得一旦被覆盖就会导致异常,从而增加漏洞利用难度。该编译选项针对小于等于4个字节的数组不起保护作用。模糊测试通过发送不同长度的数据给buffer,可能导致覆盖后续变量和指针值,导致程序异常从而触发监测,因此采用模糊测试的方法是可以检测出此类漏洞的。<br> <br/>