完整版应用系统剩余信息保护的技术实现.docx

上传人:b****2 文档编号:2246518 上传时间:2023-05-03 格式:DOCX 页数:10 大小:47.70KB
下载 相关 举报
完整版应用系统剩余信息保护的技术实现.docx_第1页
第1页 / 共10页
完整版应用系统剩余信息保护的技术实现.docx_第2页
第2页 / 共10页
完整版应用系统剩余信息保护的技术实现.docx_第3页
第3页 / 共10页
完整版应用系统剩余信息保护的技术实现.docx_第4页
第4页 / 共10页
完整版应用系统剩余信息保护的技术实现.docx_第5页
第5页 / 共10页
完整版应用系统剩余信息保护的技术实现.docx_第6页
第6页 / 共10页
完整版应用系统剩余信息保护的技术实现.docx_第7页
第7页 / 共10页
完整版应用系统剩余信息保护的技术实现.docx_第8页
第8页 / 共10页
完整版应用系统剩余信息保护的技术实现.docx_第9页
第9页 / 共10页
完整版应用系统剩余信息保护的技术实现.docx_第10页
第10页 / 共10页
亲,该文档总共10页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

完整版应用系统剩余信息保护的技术实现.docx

《完整版应用系统剩余信息保护的技术实现.docx》由会员分享,可在线阅读,更多相关《完整版应用系统剩余信息保护的技术实现.docx(10页珍藏版)》请在冰点文库上搜索。

完整版应用系统剩余信息保护的技术实现.docx

完整版应用系统剩余信息保护的技术实现

0.引言

随着信息化的推进,信息系统的安全问题成为了世界各国都十分关心的问题。

我国则推出了GB/T22239-2008《信息安全技术信息系统安全等级保护基本要求》(以下简称《基本要求》)来对信息系统进行保护。

《基本要求》对三级以上信息系统提出了“剩余信息保护”的要求。

中国软件评测中心作为公安部信息安全等级保护测评推荐机构,在信息系统等级保护测评的过程中发现很多被测系统在“剩余信息保护”方面做的不是十分到位。

接下来,本文会较详细地介绍剩余信息保护的定义、技术实现以及检测方法。

1.剩余信息保护的定义

在介绍《基本要求》中对于剩余信息保护要求项的定义前,先要简单介绍一下一些背景知识。

1.1《基本要求》对于要求项的划分

从整体上,《基本要求》为技术要求和管理要求两大类。

其中,技术要求按其保护的侧重点的不同被划分为以下三类:

1)  业务信息安全类(S类):

主要关注的是保护数据在存储、传输、处理过程中不被泄露、破坏和免受未授权的修改。

2)  系统服务安全类(A类):

关注的是保护系统连续正常的原型,避免因对系统未授权修改、破坏而导致系统不可用。

3)  通用安全保护类(G类):

既关注保护业务信息的安全性,同时也关注保护系统的连续可用性。

《基本要求》中的所有的要求项都被分为上述三类,剩余信息保护要求项是在三级以上系统中才出现的,是属于S类的,一般被分为S3(适用于三级系统)或者是S4(适用于四级系统)。

此外,技术要求还被划分为物理层面安全要求、网络层面安全要求、主机层面安全要求(简称“主机安全”)、应用层面安全要求(简称“应用安全”)以及数据和备份恢复层面安全要求。

剩余信息保护要求项是出现在主机安全和应用安全方面的。

1.2《基本要求》对于剩余信息保护安全项的定义

在主机安全方面,剩余信息保护安全项(S3或S4)的要求包括:

1)  应保证操作系统和数据库系统用户的鉴别信息所在的存储空间,被释放或再分配给其他用户前得到完全清除,无论这些信息是存放在硬盘上还是在内存中;

2) 应确保系统内的文件、目录和数据库记录等资源所在的存储空间,被释放或重新分配给其他用户前得到完全清除。

在应用安全方面,剩余信息保护安全项(S3或S4)的要求包括:

1)  应保证用户鉴别信息所在的存储空间被释放或再分配给其他用户前得到完全清除,无论这些信息是存放在硬盘上还是在内存中;

2)  应保证系统内的文件、目录和数据库记录等资源所在的存储空间被释放或重新分配给其他用户前得到完全清除。

2.应用系统剩余信息保护的技术实现

从《基本要求》对于剩余信息保护要求项的描述来看,该要求项要保护的客体(也即对象)——“剩余信息”主要是内存或者硬盘的存储空间,要保护的时间是被释放或重新分配给其他用户后。

2.1内存中的剩余信息保护

内存中剩余信息保护的重点是:

在释放内存前,将内存中存储的信息删除,也即将内存清空或者写入随机的无关信息。

下面以应用程序对用户的身份鉴别流程(参见图1)为例,介绍一下如何对内存中的剩余信息进行保护。

假设用户甲在登录应用程序A的时候,输入了用户名和密码。

一般情况下,应用程序A会先将用户输入的用户名和密码存储在两个字符串类型(也可能是数组等)变量中。

通常情况下,为了防止攻击者采用自动脚本对应用程序进行攻击,应用系统会要求用户输入校验码,并优先对校验码进行验证。

如果用户输入的校验码错误,应用系统应要求用户重新输入校验码。

在校验码验证通过后,应用系统应从数据库中读取用户身份信息表,并在其中查找是否存在用户输入的用户名。

如果未查找到,则应用系统应返回“用户名不存在”(或者较模糊地返回“用户名不存在或者密码错误”)。

如果在用户身份信息表中找到用户名,应用程序一般应采用一种哈希(hash)算法(通常是MD5算法)对用户输入的密码进行运算得到其哈希值,并与数据库用户身份信息表中存储的密码哈希值进行比较。

这里需要说明的是,数据库中一般不明文存储用户的密码,而是存储密码的MD5值。

图1应用程序对其用户的身份鉴别流程图

通常情况下,应用系统在使用完内存中信息后,是不会对其使用过的内存进行清理的。

这些存储着信息的内存在程序的身份认证函数(或者方法)退出后,仍然存储在内存中,如果攻击者对内存进行扫描就会得到存储在其中的信息。

为了达到对剩余信息进行保护的目的,需要身份认证函数在使用完用户名和密码信息后,对曾经存储过这些信息的内存空间进行重新的写入操作,将无关(或者垃圾)信息写入该内存空间,也可以对该内存空间进行清零操作。

下面以C语言为例,对存储过用户名和密码的数组进行清零操作。

voidIsCorrectUser()

char*pcUserName=NULL;

char*pcPassword=NULL;

 

 

pcUserName=(char*)malloc(128*sizeof(char));

pcPassword=(char*)malloc(128*sizeof(char));

 

 

GetUserNameAndPassword(pcUserName,pcPassword);

 

 

CheckUserNameAndPassword(pcUserName,pcPassword);

 

 

inti=0;

for(i=0;i<128;i++)

{

*(pcUserName+i)=0;

*(pcPassword+i)=0;

}

 

free(pcUserName);

pcUserName=NULL;

free(pcPassword);

pcPassword=NULL;

 

return;

函数IsCorrectUser采用malloc函数为存储用户名和密码分别动态申请了128字节的内存。

在使用后,对内存进行了清空和释放的操作,这样就能够保证对剩余信息的保护。

此外,需要说明的是在GetUserNameAndPassword和CheckUserNameAndPassword函数中也要同样对存储过用户名和密码的内存进行使用后清空操作,才能够完成对剩余信息的保护工作。

2.2硬盘中的剩余信息保护

硬盘中剩余信息保护的重点是:

在删除文件前,将对文件中存储的信息进行删除,也即将文件的存储空间清空或者写入随机的无关信息。

下面以应用程序对一个文件的删除为例,介绍一下如何对硬盘中的剩余信息进行保护。

通常应用程序在删除文件的时候,仅仅是调用删除函数,判断删除函数的返回值是否正常。

voidDeleteFile(char*pcFilePath)

{

longlCurrentPosition=0;

FILE*fpFilePointer=NULL;

intiCounter=0;

charcTempChar='0';

 

 

fpFilePointer=fopen(pcFilePath,"r+");

if(NULL==fpFilePointer)

{

 

printf("\nfailtoopenfile%s",pcFilePath);

}

 

while(0==feof(fpFilePointer))

{

 

lCurrentPosition=ftell(fpFilePointer);

cTempChar=fgetc(fpFilePointer);

if(EOF==cTempChar)

{

break;

}

 

GetRandomCharacter(&cTempChar);

 

fseek(fpFilePointer,lCurrentPosition,SEEK_SET);

 

fputc(cTempChar,fpFilePointer);

 

lCurrentPosition=lCurrentPosition+1;

fseek(fpFilePointer,lCurrentPosition,SEEK_SET);

}

fclose(fpFilePointer);

fpFilePointer=NULL;

 

if(0!

=remove(pcFilePath))

{

删除文件失败,打印错误信息

printf("\nfailtoremovefile%s",pcFilePath);

}

return;

}

在函数DeleteFile中,函数每从文件中读出一个字符就调用GetRandomCharacter函数对该字符进行了操作,并将进行操作后的字符写回文件中。

这样就能够保证要被删除的文件中的内容也经过处理了。

而处理的方法可以是将文件中的内容都设置成零,也可以是对原有信息进行操作。

本文也以C语言为例,给出了如下两种实现方式。

voidGetRandomCharacter(char*pcChar)

{

 

 

 

intiOperator=0;

intiOperand=0;

 

 

randomize();

 

 

iOperator=random(4);

 

 

iOperand=random(128);

 

switch(iOperator)

{

case1:

{

*pcChar=*pcChar+iOperand;

break;

}

 

case2:

{

*pcChar=*pcChar-iOperand;

break;

}

 

case3:

{

*pcChar=*pcChar*iOperand;

break;

}

 

default:

{

*pcChar=iOperand;

break;

}

}

return;

}

3.应用系统剩余信息保护的检测方法简介

在应用系统剩余信息保护的检测方面,主要从访谈、检查和测试三部分分别描述。

1)  访谈

询问应用系统开发人员,是否对应用系统中的剩余信息进行了保护。

如果开发人员连剩余信息保护的概念都不清楚,那么也就不可能对剩余信息进行保护。

2)  检查

查看源代码,看在内存释放或者删除文件前,应用系统是否进行了处理。

检查应用系统操作手册中是否有相关的描述。

3) 测试

为了确认内存中是否有剩余信息,可以在采用内存扫描软件(或者内存监视软件)进行扫描。

对于存储在磁盘中的文件,可以尝试在应用系统删除文件后,用恢复软件恢复文件,并对比恢复文件和原文件。

4.总结和讨论

本文主要针对等保应用安全对剩余信息保护的技术实现和检测做了介绍。

对于通用操作系统来说,考虑到系统的运行效率,没有在系统内核层面默认实现剩余信息保护功能,只能通过第三方工具来实现

(2)。

对剩余信息的清除是会对应用系统的性能造成影响的。

相对于写入垃圾数据的方式,清空存储区或者文件的方式对性能的影响更小。

存储着剩余信息的内存空间或者磁盘文件就像是曾经记录过重要信息的纸或者光盘一样,不能随意丢弃。

在现实世界中,我们知道要把存储过重要信息的纸或者光盘销毁。

在电脑中也是一样的,在把内存空间或者磁盘空间分配给其他的用户使用前,需要把我们曾经存储在里面的信息销毁。

本文中给出的算法都是采用标准的C语言实现,希望能对用其它语言编程的用户有所启示。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2