linux之是以容易清除病毒前面有文章談過,就是說它可以随時删除檔案,linux的檔案管理沒有和使用者的任何政策膠合在一起,就是說打開檔案的方式沒有獨占方式,所謂獨占就是和使用者的膠合,打開應該僅僅有檔案的屬性才對,比如讀,寫等等,而不應該有除了如何使用檔案之外的資訊,獨占檔案是不允許的,憑什麼獨占,linux的單點驗證在于你是否是檔案的主人,也就是檔案的通路控制清單,隻要是你就可以打開它或者删除它,我是檔案的主人就因為别的主人獨占打開了檔案我就不能使用檔案,這對我不公平!在linux中獨占檔案是程式應該考慮的事情而不是核心應該提供的保護,避免行賄受賄的最佳方式就是剝奪執行官更多的特權。linux的核心rootkit之是以容易清除在于linux的核心是完全映射進記憶體的,也就是說它不可換出,這樣在運作時隻需要換一個核心就可以了,然後在重新啟動系統之前你不必擔心系統XX屏。
就病毒本身來講,雖然linux善于簡單的清楚病毒,但是這也僅僅是一個補救方案,如何才能使得linux不中病毒呢?衆所周知,linux将elf檔案格式作為自己的可執行檔案格式,那麼保護elf也就成了首要大任,怎麼保護呢?如果說我們無法防止一個可執行檔案被破壞,那麼最起碼我們應該知道一個可執行檔案是否已經被破壞,這顯然很重要,目前有很多方法,簽名是一種常見的方式,在開源網站下載下傳過源代碼的朋友都清楚,一般的源代碼或者二進制程式都會有一個md5檔案,這個檔案用于認證,通過linux多數發行版自帶的工具可以輕易得到一個軟體包的md5摘要,在執行前如果我們計算出該程式的摘要,然後和下載下傳時候一同下載下傳的摘要檔案比對,如果相同,那麼就說明檔案沒有被篡改,反之該程式就有可能是不安全的,這個機制簡單的實作了運作前的判斷,那麼有沒有什麼方式動态的判斷程式是否被更改呢?有的,這就是elf簽名機制,在執行一個可執行檔案的時候要先将這個elf檔案加載到記憶體,如果說可以在加載的期間判斷檔案是否合法,那麼最好了,原理很簡單,就是在elf加載的時候驗證證書,在核心中維護一個可信證書連結清單,而每一個elf檔案的頭均說明該檔案是否要經過驗證,如果是的話,那麼elf檔案中就會有簽名資訊,加載elf的時候周遊核心中的證書連結清單依次驗證就可以了,這就需要在核心中注冊可信證書,完了後每一個elf檔案中均包含認證資訊,包含兩部分,第一部分包含是否需要驗證以及驗證的級别,第二部分包括如果需要驗證的話那麼簽名值是多少,如果需要驗證,那麼在加載elf的時候就會周遊核心中的證書連結清單,直到比對成功為止。
雖然elf的認證機制很不錯很嚴謹,但是總覺得将簡單的問題複雜化了,就是說這個機制僅僅是一個學究的作品而不是一個可行的解決方案,說實話我不是很喜歡這個機制,畢竟是學究的産物嘛。
本文轉自 dog250 51CTO部落格,原文連結:http://blog.51cto.com/dog250/1274092