計算機系統(tǒng)及信息安全問題是進入信息社會所必須解決的問題,大量Internet應(yīng)用的出現(xiàn)使這一問題更加突出。近來,隨著PIII的序列號和微軟操作系統(tǒng)中后門密鑰等事件的發(fā)生,使我們認識到信息安全“事關(guān)重大,刻不容緩”。從事計算機安全領(lǐng)域研究的沈昌祥院士指出:“信息安全保障能力是21世紀綜合國力、經(jīng)濟競爭實力和生存能力的重要組成部分,是世紀之交世界各國在奮力攀登的制高點。”
眾所周知,我們的計算機系統(tǒng)和網(wǎng)絡(luò)系統(tǒng)從硬件到軟件大多是國外的產(chǎn)品,包括一些相關(guān)的安全產(chǎn)品。許多產(chǎn)品在設(shè)計時都會留有一些后門供產(chǎn)品測試,也可能存在一些設(shè)計缺陷,同時存在有意埋伏安全陷阱的可能,所有這些猶如千里之堤中的蟻穴,甚至更甚于此。記得有這樣一個故事,A國在B國使用當?shù)亟ㄖ牧闲藿ㄊ桂^,結(jié)果發(fā)現(xiàn)在建筑物中有大量的竊聽裝置,最后只得不惜代價使用本國工人和建筑材料重新修建。因此“信息安全要打中國牌”,在安全系統(tǒng)中必須采用我們自己的產(chǎn)品。
計算機系統(tǒng)及信息安全可分為安全技術(shù)和密碼技術(shù)兩方面,兩者缺一不可。具體來說安全技術(shù)中關(guān)鍵是操作系統(tǒng)、CPU等,然而我們不具備自己的操作系統(tǒng)和CPU,短期內(nèi)也不會有,但最終應(yīng)該有,筆者認為這一事情應(yīng)該從戰(zhàn)略意義上考慮。幸運的是,Linux的出現(xiàn)為建立我國安全、自主的操作系統(tǒng)提供了機遇和挑戰(zhàn),發(fā)展自主版權(quán)的操作系統(tǒng)具有很大的經(jīng)濟效益和社會效益,筆者認為同時一定要把安全放在首位。
源代碼公開就不安全嗎?
Linux是一個自由、開放的操作系統(tǒng)軟件,其最初設(shè)計目標并不是一種安全操作系統(tǒng),因此Linux在安全方面存在一些不足、漏洞和后門。關(guān)于操作系統(tǒng)的安全性,目前除Windows NT是被確定為達到美國安全標準的C2級外,其它都難以定性而論,Linux也是如此。目前關(guān)于計算機系統(tǒng)安全的討論中有許多并非操作系統(tǒng)本身的問題而是應(yīng)用軟件或某些協(xié)議帶來的,如Sendmail中MIME以及TCP/IP本身的安全問題等,這里只簡單介紹Linux內(nèi)核存在的幾個主要問題,借以指出建立安全、自主的操作系統(tǒng)應(yīng)注意的幾個方面。
Linux屬于自由軟件,其源代碼是公開的,有人認為這是不安全因素。其實不然。首先,這種開放源碼的系統(tǒng)軟件恰有非自主的黑箱操作系統(tǒng)所不具備的一個安全特點,就是用戶可以對它有較深的理解,發(fā)現(xiàn)問題可很快解決,而不必苦苦等待軟件補丁和升級版;其次說句題外話,在密碼算法安全性研究中,前提是算法公開———即假設(shè)攻擊者已知算法,細節(jié)需要保密的算法沒有研究和利用價值。
Linux哪兒不安全?
Linux的第一個問題是利用啟動盤可以啟動計算機,或利用LILO進入單用戶模式,無須root口令而獲得root用戶具有的權(quán)限。這一點已被許多Linux文章書籍中作為忘記root口令時的解決方案介紹。這是個很大的安全問題,因為它使root口令失去了意義。
其次是Linux的口令問題。Linux存放的是用戶口令明文的One Way Hash運算結(jié)果,加上用戶選擇易記口令等因素,容易采用詞典攻擊,同時用戶遠程登錄時傳送的是口令明文,易于竊聽。目前Linux的發(fā)行版本中都采用了Shadow技術(shù),首先將口令作擴充(Padding)處理再作One Way Hash計算,結(jié)果存放在只有root用戶可訪問的文件中,其中Padding的數(shù)據(jù)是偽隨機數(shù)。這樣提高了口令的安全性。但密碼學(xué)的有關(guān)研究表明,僅僅采用對稱密碼算法或Hash算法是不夠的,不能構(gòu)成安全的口令認證方案。
第三,SETUID問題。SETUID是為解決某些普通用戶執(zhí)行的但執(zhí)行時須暫時獲得root特權(quán)的程序的執(zhí)行問題,這也是一個安全隱患。黑客可以在有root權(quán)限時將其黑客程序設(shè)置SETUID,以后就可以以普通用戶登錄運行該程序,此舉具有很大的隱蔽性,不易覺察。
第四,緩沖區(qū)溢出問題。當輸入數(shù)據(jù)超出所分配存儲空間而系統(tǒng)又沒有對此作直接處理時導(dǎo)致緩沖區(qū)溢出問題。緩沖區(qū)溢出會導(dǎo)致程序退出、數(shù)據(jù)丟失以及其它不可預(yù)計的結(jié)果。由于C、C++編譯器對緩沖區(qū)溢出、指針越界等不作檢查,因此會發(fā)生緩沖區(qū)溢出問題。如果緩沖區(qū)溢出發(fā)生在可執(zhí)行堆棧中,則會覆蓋堆棧中原有的程序執(zhí)行信息,導(dǎo)致系統(tǒng)執(zhí)行錯誤的指令。因此,黑客程序可以故意安排堆棧溢出時,系統(tǒng)就可能轉(zhuǎn)而執(zhí)行黑客程序,該黑客程序獲得正在執(zhí)行的程序的權(quán)利(通常是root特權(quán)),系統(tǒng)被破壞或失去控制權(quán)。
第五,計算機病毒和特洛伊木馬程序問題。如今PC平臺計算機病毒和特洛伊木馬程序?qū)映霾桓F,破壞力增大,人們對其防不勝防,Unix/Linux上的病毒卻不是很多,這除與操作系統(tǒng)機制有很大關(guān)系外,也與Unix/Linux未廣泛流行有關(guān)。由于Linux存在SETUID問題和緩沖區(qū)溢出等問題,這為計算機病毒和特洛伊木馬程序提供了入口。
另外還有其它一些問題以及具體操作、設(shè)置中存在的問題,在此不一一列舉。
如何保證Linux的安全?
針對Linux存在的一些安全問題,在建設(shè)安全、自主的操作系統(tǒng)時應(yīng)注意把握以下幾點:首先是系統(tǒng)引導(dǎo)問題,必須保證對用戶的身份認證。其次是口令機制,應(yīng)該研究結(jié)合公鑰密碼算法的安全口令認證方案。第三,Linux中用簡單的方法實現(xiàn)進程管理和調(diào)度,從安全和完成復(fù)雜任務(wù)角度看都略嫌不足。需要研究更好的文件權(quán)限、進程管理和執(zhí)行權(quán)限管理方案。解決緩沖區(qū)溢出問題一方面是嚴格編譯器的檢查,另一方面是尋求動態(tài)解決方案,確保系統(tǒng)的控制權(quán),并力求減少損失。
同時筆者認為安全的操作系統(tǒng)應(yīng)該具有一定的防病毒和特洛伊木馬程序的能力,在設(shè)計操作系統(tǒng)內(nèi)核時要結(jié)合反病毒的有關(guān)技術(shù),使之在根本上具有一定的免疫力。
Linux出現(xiàn)為我國建立安全、自主的操作系統(tǒng)提供了機遇和挑戰(zhàn),但是,Linux到底安全不安全?安全在哪兒?不安全在哪兒?我國在發(fā)展Linux的時候如何揚長避短?本欄目歡迎廣大讀者就Linux的安全問題進行廣泛深入的探討。