複製鏈接
請複製以下鏈接發送給好友

剩餘信息保護

鎖定
隨着信息化的推進,信息系統的安全問題成為了世界各國都十分關心的問題。我國則推出了GB/T 22239-2008《信息安全技術信息系統安全等級保護基本要求》(以下簡稱《基本要求》)來對信息系統進行保護。
《基本要求》在定級為三級及以上的信息系統中提出了“剩餘信息保護”的要求。
中文名
剩餘信息保護
來源出處
信息安全技術信息系統安全等級保護基本要求

剩餘信息保護剩餘信息保護的定義

在介紹《基本要求》中對於剩餘信息保護要求項的定義前,先要簡單介紹一下一些背景知識。

剩餘信息保護1.1 《基本要求》對於要求項的劃分

從整體上,《基本要求》為技術要求和管理要求兩大類。其中,技術要求按其保護的側重點的不同被劃分為以下三類:
(1)業務信息安全類(S類):主要關注的是保護數據在存儲、傳輸、處理過程中不被泄露、破壞和免受未授權的修改。
(2)系統服務安全類(A類):關注的是保護系統連續正常的運行,避免因對系統未授權修改、破壞而導致系統不可用。
(3)通用安全保護類(G類):既關注保護業務信息的安全性,同時也關注保護系統的連續可用性。
《基本要求》中的所有的要求項都被分為上述三類,剩餘信息保護要求項是在三級以上系統中才出現的,是屬於S類的,一般被分為S3(適用於三級系統)或者是S4(適用於四級系統)。
此外,技術要求還被劃分為物理層面安全要求、網絡層面安全要求、主機層面安全要求(簡稱“主機安全”)、應用層面安全要求(簡稱“應用安全”)以及數據和備份恢復層面安全要求。剩餘信息保護要求項是出現在主機安全和應用安全方面的。

剩餘信息保護1.2 剩餘信息保護安全項的定義

在主機安全方面,剩餘信息保護安全項(S3或S4)的要求包括:
(1)應保證操作系統和數據庫系統用户的鑑別信息所在的存儲空間,被釋放或再分配給其他用户前得到完全清除,無論這些信息是存放在硬盤上還是在內存中;
(2)應確保系統內的文件、目錄和數據庫記錄等資源所在的存儲空間,被釋放或重新分配給其他用户前得到完全清除。
在應用安全方面,剩餘信息保護安全項(S3或S4)的要求包括:
(1)應保證用户鑑別信息所在的存儲空間被釋放或再分配給其他用户前得到完全清除,無論這些信息是存放在硬盤上還是在內存中;
(2)應保證系統內的文件、目錄和數據庫記錄等資源所在的存儲空間被釋放或重新分配給其他用户前得到完全清除。

剩餘信息保護應用系統剩餘信息保護的技術實現

從《基本要求》對於剩餘信息保護要求項的描述來看,該要求項要保護的客體(也即對象)——“剩餘信息”主要是內存或者硬盤的存儲空間,要保護的時間是被釋放或重新分配給其他用户後。

剩餘信息保護2.1 內存中的剩餘信息保護

內存中剩餘信息保護的重點是:在釋放內存前,將內存中存儲的信息刪除,也即將內存清空或者寫入隨機的無關信息。下面以應用程序對用户的身份鑑別流程(參見圖1)為例,介紹一下如何對內存中的剩餘信息進行保護。假設用户甲在登錄應用程序A的時候,輸入了用户名和密碼。一般情況下,應用程序A會先將用户輸入的用户名和密碼存儲在兩個字符串類型(也可能是數組等)變量中。通常情況下,為了防止攻擊者採用自動腳本對應用程序進行攻擊,應用系統會要求用户輸入校驗碼,並優先對校驗碼進行驗證。如果用户輸入的校驗碼錯誤,應用系統應要求用户重新輸入校驗碼。在校驗碼驗證通過後,應用系統應從數據庫中讀取用户身份信息表,並在其中查找是否存在用户輸入的用户名。如果未查找到,則應用系統應返回“用户名不存在”(或者較模糊地返回“用户名不存在或者密碼錯誤”)。如果在用户身份信息表中找到用户名,應用程序一般應採用一種哈希(hash)算法(通常是MD5算法)對用户輸入的密碼進行運算得到其哈希值,並與數據庫用户身份信息表中存儲的密碼哈希值進行比較。這裏需要説明的是,數據庫中一般不明文存儲用户的密碼,而是存儲密碼的MD5值。
剩餘信息保護 剩餘信息保護
圖1 應用程序對其用户的身份鑑別流程圖
通常情況下,應用系統在使用完內存中信息後,是不會對其使用過的內存進行清理的。這些存儲着信息的內存在程序的身份認證函數(或者方法)退出後,仍然存儲在內存中,如果攻擊者對內存進行掃描就會得到存儲在其中的信息。為了達到對剩餘信息進行保護的目的,需要身份認證函數在使用完用户名和密碼信息後,對曾經存儲過這些信息的內存空間進行重新的寫入操作,將無關(或者垃圾)信息寫入該內存空間,也可以對該內存空間進行清零操作。下面以C語言為例,對存儲過用户名和密碼的數組進行清零操作。
void IsCorrectUser ()
{
char* pcUserName = NULL;
char* pcPassword = NULL;
pcUserName = (char*) malloc(128 * sizeof(char));
pcPassword = (char*) malloc(128 * sizeof(char));
GetUserNameAndPassword(pcUserName, pcPassword);
CheckUserNameAndPassword(pcUserName, pcPassword);
int i = 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 硬盤中的剩餘信息保護

硬盤中剩餘信息保護的重點是:在刪除文件前,將對文件中存儲的信息進行刪除,也即將文件的存儲空間清空或者寫入隨機的無關信息。下面以應用程序對一個文件的刪除為例,介紹一下如何對硬盤中的剩餘信息進行保護。通常應用程序在刪除文件的時候,僅僅是調用刪除函數,判斷刪除函數的返回值是否正常。
void DeleteFile (char* pcFilePath)
{
long lCurrentPosition = 0;
FILE* fpFilePointer = NULL;
int iCounter = 0;
char cTempChar = '0';
fpFilePointer = fopen(pcFilePath, "r+");
if(NULL == fpFilePointer)
{
printf("\nfail to open file %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("\nfail to remove file %s", pcFilePath) ;
}
return;
}
在函數DeleteFile中,函數每從文件中讀出一個字符就調用GetRandomCharacter函數對該字符進行了操作,並將進行操作後的字符寫回文件中。這樣就能夠保證要被刪除的文件中的內容也經過處理了。而處理的方法可以是將文件中的內容都設置成零,也可以是對原有信息進行操作。本文也以C語言為例,給出瞭如下兩種實現方式。
void GetRandomCharacter (char* pcChar)
{
int iOperator = 0;
int iOperand = 0;
randomize();
iOperator = random (4);
iOperand = random (128);
switch(iOperator)
{
case 1:
{
*pcChar = *pcChar + iOperand;
break;
}
case 2:
{
*pcChar = *pcChar - iOperand;
break;
}
case 3:
{
*pcChar = *pcChar * iOperand;
break;
}
default:
{
*pcChar = iOperand;
break;
}
}
return;
}

剩餘信息保護應用系統剩餘信息保護的檢測方法簡介

在應用系統剩餘信息保護的檢測方面,主要從訪談、檢查和測試三部分分別描述。
(1)訪談
詢問應用系統開發人員,是否對應用系統中的剩餘信息進行了保護。如果開發人員連剩餘信息保護的概念都不清楚,那麼也就不可能對剩餘信息進行保護。
(2)檢查
查看源代碼,看在內存釋放或者刪除文件前,應用系統是否進行了處理。檢查應用系統操作手冊中是否有相關的描述。
(3)測試
為了確認內存中是否有剩餘信息,可以在採用內存掃描軟件(或者內存監視軟件)進行掃描。對於存儲在磁盤中的文件,可以嘗試在應用系統刪除文件後,用恢復軟件恢復文件,並對比恢復文件和原文件。

剩餘信息保護總結和討論

本文主要針對等保應用安全對剩餘信息保護的技術實現和檢測做了介紹。對於通用操作系統來説,考慮到系統的運行效率,沒有在系統內核層面默認實現剩餘信息保護功能,只能通過第三方工具來實現。
對剩餘信息的清除是會對應用系統的性能造成影響的。相對於寫入垃圾數據的方式,清空存儲區或者文件的方式對性能的影響更小。
存儲着剩餘信息的內存空間或者磁盤文件就像是曾經記錄過重要信息的紙或者光盤一樣,不能隨意丟棄。在現實世界中,我們知道要把存儲過重要信息的紙或者光盤銷燬。在電腦中也是一樣的,在把內存空間或者磁盤空間分配給其他的用户使用前,需要把我們曾經存儲在裏面的信息銷燬。
本文中給出的算法都是採用標準的C語言實現,希望能對用其它語言編程的用户有所啓示。