CSDN博客

img Nsun

四 软件安全

发表于2004/10/23 13:07:00  1334人阅读

2.4应用软件安全
2.4.1重要性
    软件主要指计算机系统中的程序(源程序和执行程序)以及程序运行所必须的数据和文
档。信息系统中各种软件程序的安全必须得到重视,事实上,系统的硬件和操作系统提供
了完成系统设计目标的可能性,而具体的任务需要有各种各样的软件配合来完成。所以有
了操作系统的安全,还需要有软件的安全。软件安全的重要性源于软件与其所处理和维护
的数据密不可分,而这些数据包含的信息就是建设信息系统的最终目的,也是信息系统的
主要资产。
    要说明一个应用软件是可靠的,一般需要采用形式化的方法,即首先需要对它进行形
式化规范的说明,其次还要验证形式化规范与编码实现的一致性。这两者都是极其困难的
,更糟糕的状况在于,形式化方法可以通过揭示系统的不一致性、歧义性和不完备性来增
加我们对系统的理解程度,从而提高我们对系统可靠性的可信度,但是形式化方法本身也
不能确保系统的可靠性。由此可见,要使得一个应用软件具有安全性是极其困难的。
    事实上,我们可以看到,各种应用软件的漏洞和错误正在不断涌现。软件不断升级同
时推出各种补丁包。这方面,微软的IE浏览器可以作为例子,许多黑客入侵事件都是利用
了IE的漏洞。最近发现的Serv-u ftp服务器端的溢出漏洞,使得互联网上许多ftp服务器被
非法侵入。关于软件的安全性有两个很著名的例子可以说明其重要性。1996年6月,欧洲宇
航局的阿丽亚娜5号火箭由于软件故障,在发射之后爆炸。原因是一个64位数据被装入16位
空间引起溢出。三年后,NASA的火星探路者在一次发射中神秘失踪,起因是一个数据转换
错误。NASA的工程师没有把火箭冲力的单位从英制“磅”换算成“牛顿”,两种计量单位
之间相差4.45倍。这两起灾难虽然与计算机安全无关,但却表明设计和实现无错误故障代
码的重要性。
    软件安全需要保护的内容很广泛,包括软件自身的安全,软件的存储安全,软件的通
信安全,软件的使用安全,软件的运行安全等多方面内容。
    当前的信息系统对软件和数据的依赖性日益严重,软件中任何一个小的纰漏、一种不
完善的功能、一次微细的修改都可能对系统造成极大的影响。现实中软件bug的例子比比皆
是。对软件的保护和对系统的保护一样至关重要、是十分迫切需要解决的问题。
    根据Carnegie Mellon大学的估计,每1000行代码一般有5至15个bug,大多数的bug是
轻微的,并不影响软件的性能,因而不被注意。问题的重点在于,这些确实都是安全隐患

“更深层次的问题是:在任何复杂系统中,如火箭系统的软件、大型数据库、操作系统、
网络软件等,它们都有太多的环节可能出问题。复杂性一直在不断突破人类的极限,想要
对所有问题进行设计和测试是不现实的。出现故障是不可避免的。”
当然软件安全是极其复杂的问题的,软件的正确无错性只是软件安全的一个方面而不是问
题的全部。

2.4.2软件安全需求
    软件安全保护需要考虑的内容十分广泛,下面简要介绍一下其中几个主要的方面。


软件自身安全
软件自身的完整性是软件抵御外部攻击的能力。自身安全的研究包括:
⑴软件自身完整性
    为了保证代码完整、数据完整和功能完整,可以采用各种数据校验技术,常用的如CR
C。另外采用程序自诊断、自保护技术,软件加密、软件压缩、软件运行控制技术、软件加
壳(UPX,ASPACK…)技术等防止软件被非法篡改。
⑵软件自身可信性
    包括减少软件的(或无)隐蔽通道,消除程序陷阱(trapdoor),杜绝逻辑炸弹,尽可
能在软件发布前消除bug。同时需要避免无效操作,死机和不可信调用。尽量减少为了功能
扩充而保留的程序接口、为软件测试而有意留下、为今后软件维护而有意留下的程序入口

其他还包括防止软件丢失、被破坏、被删除;防止软件被篡改、被覆盖、被伪造、防病毒
、程序固化等技术。

软件存储安全
    软件和数据的宿主是各类存储介质 (磁盘、磁带、光盘等),对软件的访问、修改、复
制等都需要经过存储介质和设备。所以存储设备的可靠性、存储设备 (磁盘) 的加密解密

存储设备的访问控制等成为软件安全的重要问题。
软件存储方式可以采用可靠存储、保密存储、压缩存储、备份存储等方式。
软件通信安全
    这方面的内容包括软件数据的安全传输、加密传输;通过网络的安全下载、完整下载

传输数据的编码校验、传输校验等。

软件运行安全
    主要需要解决的问题是软件运行的正确性。
    计算机系统的安全也取决于在其上运行的软件。软件既要确保能够正常运行,还应具
有非常高的运行正确性,在执行时其功能不应出现差错,一旦出现差错,则要有出错处理
能力和容错能力。要求软件在运行过程中,不能破坏别的运行软件,也不允许别的软件来
破坏自己。软件正确性与可信性有着辩证的关系。可信软件没有明确的定义,所以可信软
件的检测与认证是个大问题。

2.4.3软件保护技术
    基于以上的软件安全的需求,软件保护采用了种种技术来确保这一点。
    软件保护有多种技术和机制,能够保持软件完整性及黑盒性,防止软件的非法移植、
盗用、运行、复制,防止对系统安全有关的软件的功能的破解。
    软件保护致力于软件加密和解密技术,密文技术,软件的压缩与还原技术,固化与存
取技术,运行安全技术 (含硬件运行控制机制),软件的反跟踪与反破解技术,软件自身保
护技术和软件访问控制技术。任何一个软件保护系统都并非是不可攻破的,但是,一个好
的软件保护系统会使攻击者付出很大的代价,直至放弃对软件的非法获取。
    软件保护主要解决四个问题,即软件的防复制、防执行、防篡改、防暴露,各种安全
技术和机制在实施中贯穿于始终。

一、软件防复制(存储访问技术)
    软件极易被复制,软件存储在存储设备和载体中,保护和阻止存储载体的操作是防止
复制复制的简单方法。
1.磁盘加密
    磁盘(含其他存储介质) 的加解密技术是防复制的关键技术之一,由于磁盘的可加密性
和可破解性,使得磁盘的复制和反复制成为可能。磁盘本身无特殊性,而由人们在盘体上
作出了物理的或者逻辑的标记,作为磁盘的 “指纹” ,使得磁盘本身可以被识别,成为
复制和反复制的标记,而通过专门的识别程序来分辨和识别是原盘还是复制盘。标记识别
型磁盘防复制技术的关键在于“标记”的不可复制性,否则,防复制是没有意义的。
    磁盘加密技术包括:盘区部分加密、相关磁道加密、磁盘关闭和锁定、扇区锁定、专
门复制程序、软件复制标记和复制权限等。还可以采用激光加密、指纹加密、非正常磁道
加密、磁隙加密等技术。

2.不完整软件技术
    在应用中也称为程序分块技术。采用如下三种方式:覆盖;交换;以及程序运行时不
全部调入内存,而采用运行一部分,再调入一部分的办法。防止窃取者利用内存映象对程
序进行窃取。

3.软件安装机制
    在软件的安装时间、安装次数、安装标记、序列号等方面加以设计,限制软件的安装
和使用次数。
    单一软件防复制技术具有一定的局限性,在实际应用中,多采用综合防复制技术。综
合性软件防复制技术将磁盘(含其他存储介质)防复制技术与软件单一防复制技术结合,形
成带有智能型的防复制技术,使软件的复制和盗窃难以进行。这些技术结合了软件和数据
的密文技术、反跟踪技术和自毁技术。

二、软件防执行(运行控制技术)
    软件保护的另一方法是使非法使用者不能正常使用软件,当非法复制的软件开始执行
时,采用各种方式阻止程序运行,这就是软件运行控制技术。
    一种方式是程序的执行依赖于系统硬件部件,只有相应的硬件存在,软件的正常功能
才能正常地执行。阻止执行的优点在于软件加密可靠,合法备份不受限制,而非法用户即
使能够得到复制软件,也不能使用软件。用于阻止软件执行的硬件控制机制有“软件狗”
、运行加密卡等。
1.软件狗
    软件狗是安装在计算机并行口上的一个硬件部件,作为一种硬件“钥匙”,被保护的
软件中设置了许多判定和计算机制,称为“软件锁”,当钥匙与锁相配合时,软件才能正
常运行。软件狗占用并行口,与并行打印机同口,但不影响打印机工作,即软件狗对打印
机是透明的。软件狗本身的安全,最容易受到攻击的是软件中的软件锁。软件锁的数量和
复杂性直接影响着攻击难度。增加软件锁和多次访问软件狗是一种保护策略,将锁和访问
分散到软件的各个部分,既提高了保护程度,也增加了被攻击和破解的难度。
2.运行加密卡
    加密卡类似于其他的I/O扩展卡,是安装在计算机机箱内部扩展槽中的硬件部件,其优
点是加密变化多,反跟踪措施多,保护机制较完备,但安装不方便。其工作原理是:软件
锁配卡上硬件钥匙。
3.软件固化技术
    程序存储在非易失性器件和芯片中,解决对这些固化程序或数据的存取技术和方式。
认真研究软件固化、软件运行控制机制,利用硬件或软硬结合实现加解密技术,提高加解
密速度、节省时间、减少存储空间和运行空间、防止跟踪破析。

三、软件防暴露(加密解密技术)
    防暴露 (防泄漏) 是信息安全性的必要保证,也是信息可用性的必要因素。其目的是
保护软件、防止非法查阅、修改、复制、分析、盗用、移植。软件防暴露技术包括了软件
加密、软件压缩等,配合其他机制达到防泄露的目的。
1.软件加解密技术
    密文技术是加解密的关键,现代密码技术都可用于软件加解密。密码技术的使用和加
解密技术的实施,不应影响软件性能和功能,尤其是对时间、空间、速度等敏感的软件和
程序,实时软件以及某些多媒体软件要进行专门的加解密研究,取得应有的加密功效和实
用功效。
2.软件压缩还原技术
    压缩还原是另一种软件防暴露技术,既可以反查阅、反分析、反跟踪,也可以节省存
储空间。可以通过程序自身压缩解压业可以用专用的压缩解压程序,如winzip,winrar等

3.软件反跟踪技术
    反跟踪技术防止软件被非法地剖析、分析、盗用、移植,以及对专用软件,如:军用
软件、金融软件等的逆向工程的研究。当前的动态调试程序功能十分强大,如softice,o
lldbg等,软件在它们面前可以说是没有秘密可言,所以需要防止被此类软件调试。
反跟踪技术采用破坏跟踪、反穷举法达到软件保护目的,使入侵者不能跟踪或者跟踪困难
。研究针对相应系统平台的破坏跟踪方式,如:检测跟踪法、键盘锁定法、干扰视频法、
循环启动和系统死锁法等,也可以采用迷宫程序法、隐蔽程序流、废指令与逆指令流、反
反汇编法等。

四、软件防篡改(完整可用技术)
    软件防篡改是信息完整性的必要条件,是信息可用性的基础。计算机犯罪活动,通常
是由篡改计算机应用程序入手,通过改变程序中的某些代码,删除和改动某些文件数据,
替换某些文件来进行。恶意程序的进入和传播,也常常通过感染程序、附着在程序或数据
之中,进行潜伏和再传播,这些被非法修改的程序还通过携带、交换和通过网络传播到远
方,它们是信息系统不安全的重要因素。
    软件防篡改研究的目标与内容涉及面很广,包括软件自身完整性的理论与机制研究、
软件自保护技术 (含自诊断、自检测技术、自毁技术) 研究,软件防病毒技术研究,磁盘
(含其他存储介质) 的防篡改、防破坏技术。
1.软件自保护技术
    防篡改首先要求软件能够自保护。实际采用自诊断、自检测、防病毒、自毁等技术。

自毁技术是对某些特殊敏感性软件而研究的,作为一种特殊的软件保护机制,自毁技术研
究的重点是自毁码的保密、自毁条件的确认与控制技术,以防止不应有的误触发、误毁。

2.软件访问控制技术
    防篡改的另一途径是系统必须具有相应的软件访问控制技术。
    专用软件 (如军用软件、金融软件等) 和涉及国家与部门核心机密、重要信息系统的
软件都必须进行访问控制。
    一般采用OS访问控制技术 + 软件自身访问控制技术的方式。同时各种措施可以相互参
照,如:运行口令、关键字、数字指纹与签名等。此外,访问控制技术也针对软件在存储
介质上的标记和物理结构布局,防止入侵者通过对存储介质的直接读写获取、篡改和破坏
软件,这是结合磁盘文件保护的研究课题。
3.软件自毁技术
    正常的自毁程序是专用程序。自毁程序是负有特殊任务的合法程序,其合法性由研制
部门承担。软件自毁必须取得权威认证。《中华人民共和国计算机信息系统安全保护条例
》规定:不得以任何借口在程序中设置有破坏计算机系统功能的特殊程序。
    常见的特殊程序是“逻辑锁”、“时间锁”,也称逻辑炸弹。当逻辑方程满足或时间
定时满足时,程序中含有破坏计算机功能(锁死硬盘、清除文件等)的子程序被激活,对计
算机系统造成损坏。例如,1997年9月公安部对北京江民公司软件KV300-L++网络升级版中
的“逻辑锁”行为的调查处理。

2.4.4缓冲区溢出
    缓冲区溢出是过去十年间最常见、最容易被利用的软件安全漏洞,因而是对系统安全
的重大威胁。美国计算机安全专业机构 Computer Emergency Response Team(CERT)于2
003年七月份公布的10大安全漏洞通告中至少有5项属于缓冲区溢出漏洞。要根除缓存溢出
过于困难,就算有足够的时间核查,也不能保证没有缓存溢出问题。代码越大越复杂,受
到缓存溢出攻击的可能就越大。
    举一个最简单的例子来说明如何利用计算机系统缓存溢出漏洞进行攻击。计算机将程
序和数据存储在内存中,如果它要求接受用户输入8个字符,却接收到200个字符,那么这
些多余的字符将会收入内存,覆盖掉其他区域的数据(计算机本身不像这么做,这是它的
一个漏洞)如果我们利用合适的内存区域,那么我们就可以将“拒绝连接”指令改成“允
许操作”指令,甚至是我们自己的指令。Morris蠕虫就是这种著名的“溢出漏洞”的使用
者,它利用了UNIX fingered程序中的缓存溢出。
    有经验的编程可以避免此类攻击。例如这些编程可以截去超过最大长度的字符。这很
容易做到,困难的是对一个大型程序所有地方都要做到。因为对于现代大型的复杂程序来
说,存在缓存溢出的地方实在是太多了,而且很多没有例子所说的这么直观和简单。要根
除缓存溢出过于困难,就算有足够的时间核查,也不能保证没有缓存溢出问题。代码越大
越复杂,受到攻击的可能就越大。
0 0

相关博文

我的热门文章

img
取 消
img