描述
数据结构的意外删除哨兵可以导致严重的编程逻辑问题。
扩展描述
通常数据结构哨兵用来标记结构的数据结构。一个常见的例子是null字符的字符串。另一个常见的例子是链表可能包含一个哨兵标记列表的最后。允许这种类型的控制是危险的数据很容易访问。因此,重要的是要防止删除或修改以外的一些包装器接口提供安全。
的关系
模式的介绍
不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
常见的后果
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
范围 |
影响 |
可能性 |
可用性 其他
|
通常这个错误将导致数据结构不能正常工作。 |
|
授权 其他
|
如果一个控制字符,如零被移除,可能导致资源的访问控制问题。 |
|
示范例子
示例1
这个示例创建了一个空结尾字符串并打印内容。
char * foo; int计数器; foo = calloc (sizeof (char) * 10);
(counter = 0;计数器! = 10;计数器+ +){
foo(柜台)= ' a ';
printf (" % s \ n " foo); }
字符串foo有9个字符空间和一个零终结者,但10个字符写入。因此,字符串foo不以空字符结尾和调用printf()可能会有不可预知的和危险的结果。
潜在的缓解措施
阶段:体系结构和设计
使用一个抽象库抽象危险的api。不是一个完整的解决方案。 |
阶段:构建和编译
使用功能或运行或编译软件扩展自动提供一个保护机制,减轻或消除缓冲区溢出。
例如,某些编译器和扩展提供自动缓冲区溢出检测机制,构建到编译后的代码。例子包括Microsoft Visual Studio / GS标志,Fedora / Red Hat FORTIFY_SOURCE GCC国旗,StackGuard, ProPolice。
注意:这未必是一个完整的解决方案,因为这些机制只能检测某些类型的溢出。此外,仍有可能导致拒绝服务的攻击,因为典型的反应是退出应用程序。 |
阶段:操作
使用操作系统的预防功能。不是一个完整的解决方案。 |
分类法映射
映射分类名称 |
节点ID |
适合 |
映射节点名 |
扣 |
|
|
删除数据结构哨兵 |
引用
|
(ref - 62)马克·多德约翰麦克唐纳和贾斯汀Schuh。“软件安全评估的艺术”。第八章,“NUL-Termination问题”,452页。1版。艾迪生卫斯理》2006。 |
|