策略:伺服器上的白名單安全機制

avatus發表於2018-09-03

圖片都存在一起,最大的好處就是可以做CDN加速.特別是某些高清圖.同理,視訊,音訊檔案也是這樣的.

然而今天卻並不是要從這個角度去討論這個話題.

今天的話題,從一個不太可愛的地方談起:靜態潛伏的惡意程式碼.

在一個看似正常的動態連結庫裡面,潛伏著一段惡意程式碼.當知曉這個祕密的神祕來客用一個同樣是看似無害的程式載入了這個庫之後,只要呼叫一個不為人知的API,剩下的事情,也就只能由這個神祕人頭頂的神明來決定了.(這裡就要感嘆一下IOS系統的應用分離機制和IO控制機制了,確實,蘋果在兼顧軟體生態多樣性的同時,找到了一種解決安全問題的有效的辦法)

同樣的道理,在一些有特殊結構的檔案裡面,是存在著被追加寫入甚至在特殊位置注入其他bit級別資訊的可能性的.我們習慣把程式和資料分開,這種思路在陽光下並無大礙,甚至利於思考問題,但是在那些陽光照不到的地方,程式與資料,都是硬體裡的訊號,他們本質上是沒有區別的,只是不同的標識特徵決定了他們的身份,進而決定了他們的用途.

那麼有沒有一種可能,讓一個程式從不同的,看似無害的資料檔案中,取出一些隱藏在其中的資料,然後把他們組裝成另外一個程式呢?從技術上來說,是完全可行的.甚至你可以取出一個事先加了密的片段,組裝到一起再解密,最終獲得一個可執行程式.

對應的防護策略當然也是有的,這就是AV大戰的一部分了.

在個人電腦上,這個問題並不難解決,一般的電腦,跑個av軟體會卡一點,但是還不至於卡到失去響應.在聯網的系統裡,也是如此,伺服器僅僅是把圖片存起來,再傳輸給各個終端的PC,真正冒險去解碼圖片的,還是終端的PC機.

於是程式設計師漸漸達成了共識,專機專用,絕不混雜不同的可執行區域,這裡也就是一個簡單的運維手段:最小化安裝和執行:伺服器除了它所執行的應用所必須的元件之外,不要有任何多餘的功能.於是這樣,一個白名單的管理體系就能被建立起來:除了允許做的事情之外,一切都是禁止的.有時候,為了防止一臺伺服器上的元件過多,還要拆分整個應用的功能,把他們分散到不同的機器裡面去.

這一切,都是為了防止在伺服器上出現某個未知的應用程式被執行的情況.因為你不知道,這個程式究竟會幹出什麼事情來.對於程式來說,繞過靜態程式碼審查的方法實在是太多了.所以,越是那種功能多,討人喜歡的系統,反而是越危險的系統,因為這種系統永遠都只能等到惡意程式碼執行之後,才能被動的觸發防禦機制.根本不能從根源上解決問題,只會把問題越搞越複雜.因此,對於伺服器來說,不希望被莫名其妙的神祕人控制?那就別把簡單的問題複雜化,分工明確,各司其職,專注,專一,高效的處理和高效的合作,這不才是網路存在的意義嗎?


相關文章