天天看點

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

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

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

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

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

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

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

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

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

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

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

繼續閱讀