嵌入式系统安全性的分析与研究
发布时间:2021-10-30 01:05
嵌入式系统有限的资源(如处理能力、存储空间等)及特殊的运行环境使其安全性设计和实现不同于其他通用计算机系统。在有限的资源下,系统不仅要完成预期的功能,还要支持加密算法、安全协议或其他安全要求,这种双重要求使嵌入式系统的安全性设计面临很大的挑战。本文简要探讨了嵌入式系统安全的基础知识,包括嵌入式系统常见的硬件攻击和常见的软件安全性缺陷与漏洞,以及嵌入式系统安全性设计面临的挑战,在此基础上主要研究了利用“可靠”程序的漏洞或缺陷进行的软件攻击,分析了相关防御技术的优缺点,然后深入研究了两种防御此类软件攻击的硬件辅助运行时安全监控技术——代码监控技术和数据特性检查技术,对这两种技术的设计原理、实现机制以及各自的优势和不足进行了细致而深入的分析,并在此基础上对其分别提出了几点改进和扩展思想。最后,本文搭建了对这两种技术进行模拟的仿真环境SimpleScalar3.0,并对代码监控技术的性能进行了仿真,仿真结果表明,这种技术能够以很小的性能开销增强嵌入式系统中程序的安全执行。
【文章来源】:西安电子科技大学陕西省 211工程院校 教育部直属院校
【文章页数】:63 页
【学位级别】:硕士
【图文】:
代码监控技术的体系结构
图3.3代码监控技术各模块的结构2.过程内控制流检查器由图3.3可知,该检查器由基本块信息表TABbb构成,TABbb存储跟踪每一个函数内部控制流变化所需的信息,可以根据基本块所属的函数将其分组。实现时,给函数起始地址表TABstart的每一行增加一个附加指针域,使其指向TABbb表中的某个位置,该指针告诉过程内控制流检查器,当某个函数被调用时(控制流进入函数内部)它应该从TABbb中的哪一行开始进行过程内检查,即在TABbb表中定位与该函数的第一个基本块对应的那一行。3.指令完整性检查器给定一段信息x及其加密哈希值H(x),找到另一段信息y使得y笋X且H(y)=H(x)
进行防御的攻击示例。1.防御栈粉碎攻击图3.4所示为一个栈粉碎攻击示例。栈粉碎攻击[I5]所使用的基本机制是溢出定义在函数栈内的缓冲区,并在溢出过程中改写函数的返回地址。voidfh(ehar*inPut){ eharbuffer[128];strePy(bufl笼r,inPut):B:return;内存空间增长方向main()的栈帧argy[l] intmain(intarge,ehar**argy){一…一T}bu且七r[』.fh(argy[l]); A:returno;} aaargV[l]]]返返回地址 址之之前的 FPPPbbbuffer【 111栈空间增长方向调用索引函函数名名索引引 引引引引引引引引卿卿卿卿卿卿卿卿 卿卿/‘ ‘ mmmammm00000返回厂岁 岁谊谊谊谊谊谊谊谊谊谊谊谊谊谊谊谊谊谊 谊厂调用/222 fffhhhlllll返回地址址索引引引 引 ssslrcPyyy22222AAA0000000 BBBBBBBBBBBlllllll没有匹配(d)图3.4防御栈粉碎攻击图3.4中的栈所示为当main()函数调用函数血()时,角O栈中的激活记录。函数fn()调用库函数strepy()将用户提供的输入(input)拷贝至字符数组buffer[]。如图3.4(b)和图3,4(c)所示,strepy()没有对input进行任何边界检查,如果input的大小超过buffer[]的容量
【参考文献】:
期刊论文
[1]软件安全漏洞的静态检测技术[J]. 张林,曾庆凯. 计算机工程. 2008(12)
[2]嵌入式信息系统安全体系构建与应用[J]. 王明剑,谢永强,王建新. 信息安全与通信保密. 2005(07)
本文编号:3465737
【文章来源】:西安电子科技大学陕西省 211工程院校 教育部直属院校
【文章页数】:63 页
【学位级别】:硕士
【图文】:
代码监控技术的体系结构
图3.3代码监控技术各模块的结构2.过程内控制流检查器由图3.3可知,该检查器由基本块信息表TABbb构成,TABbb存储跟踪每一个函数内部控制流变化所需的信息,可以根据基本块所属的函数将其分组。实现时,给函数起始地址表TABstart的每一行增加一个附加指针域,使其指向TABbb表中的某个位置,该指针告诉过程内控制流检查器,当某个函数被调用时(控制流进入函数内部)它应该从TABbb中的哪一行开始进行过程内检查,即在TABbb表中定位与该函数的第一个基本块对应的那一行。3.指令完整性检查器给定一段信息x及其加密哈希值H(x),找到另一段信息y使得y笋X且H(y)=H(x)
进行防御的攻击示例。1.防御栈粉碎攻击图3.4所示为一个栈粉碎攻击示例。栈粉碎攻击[I5]所使用的基本机制是溢出定义在函数栈内的缓冲区,并在溢出过程中改写函数的返回地址。voidfh(ehar*inPut){ eharbuffer[128];strePy(bufl笼r,inPut):B:return;内存空间增长方向main()的栈帧argy[l] intmain(intarge,ehar**argy){一…一T}bu且七r[』.fh(argy[l]); A:returno;} aaargV[l]]]返返回地址 址之之前的 FPPPbbbuffer【 111栈空间增长方向调用索引函函数名名索引引 引引引引引引引引卿卿卿卿卿卿卿卿 卿卿/‘ ‘ mmmammm00000返回厂岁 岁谊谊谊谊谊谊谊谊谊谊谊谊谊谊谊谊谊谊 谊厂调用/222 fffhhhlllll返回地址址索引引引 引 ssslrcPyyy22222AAA0000000 BBBBBBBBBBBlllllll没有匹配(d)图3.4防御栈粉碎攻击图3.4中的栈所示为当main()函数调用函数血()时,角O栈中的激活记录。函数fn()调用库函数strepy()将用户提供的输入(input)拷贝至字符数组buffer[]。如图3.4(b)和图3,4(c)所示,strepy()没有对input进行任何边界检查,如果input的大小超过buffer[]的容量
【参考文献】:
期刊论文
[1]软件安全漏洞的静态检测技术[J]. 张林,曾庆凯. 计算机工程. 2008(12)
[2]嵌入式信息系统安全体系构建与应用[J]. 王明剑,谢永强,王建新. 信息安全与通信保密. 2005(07)
本文编号:3465737
本文链接:https://www.wllwen.com/kejilunwen/jisuanjikexuelunwen/3465737.html