四 軟件安全

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程序中的緩存溢出。
    有經驗的編程可以避免此類攻擊。例如這些編程可以截去超過最大長度的字符。這很
容易做到,困難的是對一個大型程序所有地方都要做到。因爲對於現代大型的複雜程序來
說,存在緩存溢出的地方實在是太多了,而且很多沒有例子所說的這麼直觀和簡單。要根
除緩存溢出過於困難,就算有足夠的時間覈查,也不能保證沒有緩存溢出問題。代碼越大
越複雜,受到攻擊的可能就越大。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章