搜尋此網誌

2010年6月6日 星期日

[個人意見] 黑貓、白貓,真的沒關係嗎?

big-white-cat-small-black-cat 俗話說:『黑貓、白貓,只要能抓到老鼠的就是好貓。』在資訊安全領域中,也有一個跟黑白有關的概念,那就是黑名單 (Blacking listing) 與白名單 (White listing),兩者多使用於存取控制的機制中。

所謂的黑名單,簡單來說就是列出一堆不被允許的事物,除此之外都是被許可的。常見的黑名單應用包含惡意網址過濾、垃圾郵件黑名單 (如 DNSBL),以及大家很熟悉的防毒軟體。而白名單與黑名單恰恰相反,應該被許可的事物都必須明確地列出,而所有沒有列出的事物都是不被許可的。最常見的白名單應用就是登入系統,所有想要使用系統的人員,都必須擁有合法的帳號與密碼才能放行。

除了黑名單與白名單之外,另外還有一種稱之為灰名單 (Grey listing) 的機制。不過灰名單通常單指電子郵件中用來對付垃圾信件的一種機制,跟其他存取控制倒是沒有太大的關係。

黑、白名單在使用上相當簡單方便,但是比較缺乏彈性,因此還有其他各種不同的機制來實現存取控制。跟黑、白名單比較接近的還有一種稱之為規則清單 (rule-based ) 的概念,防火牆的規則通常都屬於這一類。規則清單的特色是可以在每一個規則中指定待驗證的事物是否應該被許可,甚至除了許可之外,還可以包含其他的可能性 (像是再使用其它的規則加以驗證)。規則清單除了擁有較大的彈性之外,使用得當也可以增進處理的效能。效能來自於規則的順序,將常用的規則放到前面可以有效地提升處理效能。例如一個網頁伺服器的流量大多是來自於 TCP Port 80,所以把這條放行的規則放到防火牆規則的前面,可以減少許多不必要的規則判斷。然而,規則的順序不但影響效能,更與設定的正確與否有關。也因此在一個複雜的系統中,如何設定為可使用且足夠安全的規則,往往不是一件容易的事情。所以,防火牆設定完成之後的確認動作,比較嚴謹的作法並不是只看規則的設定值,更需要實際對防火牆進行測試,確定沒有任何不該放行的流量可以通過才算完成。

不管是哪一種機制,背後其實都隱含著一個稱之為”預設結果”的重要概念。以黑名單來說其”預設結果”就是許可,而白名單的”預設結果”就是不許可。看到這裡,有概念的讀者應該就知道以安全的角度來說,白名單是一種比較安全的機制。那麼對於規則清單 (或其他機制) 來說其預設結果是甚麼呢?這個就要視其實作的方式才能知道。不過通常很幸運的是,這類規則清單的機制只要加上一條預設規則,就可以改變其預設結果,並不像黑白名單那般是固定而無法變動的。既然白名單比較安全,那麼為什麼還會有黑名單的存在?原因在於其方便性。舉例來說,當我們出國通過海關時,海關不會拿你的護照比對一份所謂的合法公民清單,而是比對限制出境的黑名單。原因在於列出所有合法公民 (包含外國人) 的清單不但內容過於龐大,也無法有效地即時執行。

但是不可否認的,白名單依舊是面對安全威脅時比較有效的機制,尤其是當威脅不斷在改變的情況下。所以,我們看到撰寫程式時,對於輸入的過濾應該採用白名單的機制,僅允許合法的數值傳入,而不是將不懷好意的輸入利用黑名單的方式加以判斷與阻擋。只是說歸說,很多開發人員依舊使用黑名單的概念,畢竟『寧可錯殺,不願錯放』的勇氣可不是人人都有。然而,黑名單所帶來的最大簍子可能莫過於現今市面上的防毒軟體 (或幾乎全部的防惡意程式軟體)。現今防毒軟體效果越來越不彰的主要原因,就在於惡意程式不斷的改變,因此並沒有辦法精確的加以判斷,所以要產生所有惡意程式的黑名單根本就是不可能的任務。當然,現在這類程式都有很多很聰明的方法來判斷程式是否惡意 (包含其行為)。但是千變萬變,基本上的概念卻還都是圍繞在黑名單。不好的行為擋掉…但是什麼叫做不好的行為?舉例來說,很多惡意程式都會使用 rootkit 的技術來隱匿自己的行蹤,但是很多端點防護的工具,也同樣會使用這樣的技術。換句話說,行為本身沒有好壞之分,只有背後的意圖才有良善與否的分別。好吧,把可疑行為抓出來讓使用者自行決定?我不曉得有多少使用者可以判斷這種情形發生是否正常,至少在正常的情況下我是不行的。Vista UAC 的苦頭,我想就算不是微軟,也沒有多少廠商敢重導覆轍。

所以有些廠商 (包含微軟自己推出的 AppLocker) 提出使用白名單的方式來管控電腦,必須是許可的程式才可以正常執行。立意雖好,但是要全面導入確實有它困難的地方。首先不同系統的支援就是一個困難之處。另外由誰來決定哪些程式是許可的?微軟的程式就是許可?隔壁沒招牌的資訊公司推出的程式就是不許可?現今多用數位簽章解決這個問題,但是數位簽章僅能確保程式是由具名的廠商所推出,至於裡面的程式有沒有問題,仍是無法保證。所以,微軟正式推出的 IE 仍舊會有安全上的問題,媒體播放器在撥放惡意影片時也可能會讓系統無緣無故多了一個帳號。除了技術上的問題需要克服,要採用白名單方式的真正困難點還是在人性上面。錯殺還是錯放?方便還是安全?惡意程式的橫行,或許就是我們為了方便所必須付出的代價。除了使用者付出極大的代價之外,整個資訊安全產業付出的代價更高(註一)。防毒軟體的費用幾乎佔據了資訊安全支出的絕大多數,而這些防毒軟體廠商更因此順勢壯大,讓整個產業呈現極度的不平衡。如果當初防毒軟體廠商的選擇就是白名單機制,或許使用者抱怨歸抱怨,但是卻可以擁有一個比較安全的電腦環境。但是當所有人都已經習慣這樣的方便與自由之後,嘗試著要收回這些權利的廠商可能會因此陷入萬劫不復的地獄。也或許,真的能為我們帶來一絲的曙光 (我個人希望是後者)。

過去我們無法改變,但是下次當你必須在黑名單與白名單之中二選一時,你會用何種方法與態度去做出最終的決定呢?

 

註一:或許當初防毒軟體廠商就是想到這樣的可能性才選擇使用黑名單機制,以便製造出一個會不斷成長的問題,好讓產品可以持續銷售。

About