單薄的防禦
在一般常見的系統中,很常見到只要一個漏洞被發現,然後攻擊,整台電腦就跟著淪陷,為何這麼的容易,原因出在於,防線只有一道,以戰爭來比擬,你的防線可能有十公里,在這十公里中,只要有個洞就可以讓敵人鑽進來,而進來以後就有如入無人之境,以資訊安全來看,假設你的主機是網頁伺服器,你的戰線有OS、SQL Server、Web Server等等各種可能會被攻擊的點,如果你的防線就只有這樣,那麼很可能只要其中一個環節被拿下就等於整台電腦淪陷,不管你再怎麼加強每個層面,世界上沒有不存在漏洞的系統,不存在沒有漏洞的系統,那我們到底能做什麼? 答案就是 : 深度防禦。
什麼是深度防禦(Defence in depth)
深度防禦最經典的應用,應該要算是應用在核能發電廠,我們都知道核能發電廠有著一定的風險,不容許有一絲的差錯,因為核能電廠的安全是極度重要的,因此核能電廠採取就是深度防禦的策略,說了半天,到底什麼是深度防禦,所謂的深度防禦,就是一層防線後面還有一層防線,每層防線都是獨立的,多元化的、且有備援的,舉個例子來說,核能發電需要水來冷卻反應爐,如果第一套水冷系統失效,還有第二套完全獨立的系統在一旁待命,立刻可以接著運作,如果不幸的,連第二套系統也失靈了,我們還有另一道防線,將控制棒插入反應爐吸收中子,就算這層失敗了,後面還有許多許多層的防線,在很外面有一層圍阻體,就算用戰機高速衝撞也不會有事,因此核能電廠是世界上最安全的電廠,因為這一連串防線要全部失效的機率比慧星撞地球還低,每次看到一些沒道德的環保團體欺騙民眾說核電廠會像車諾比那樣炸掉來反核就很火大,回到正題,雖然主題不是核電廠,不過講到這裡我們大概就可以了解,深度防禦的策略,其思維,還有帶來的好處,與壞處,我們接著就來看在資訊安全上要如何應用
-
多層的防護
一層防禦是不夠的,如你所見只要一層失效了,就等於淪陷,因此深度防禦的理念之一,就是提供多層的保護,一層防火牆不夠? 再加一層,還覺得不夠? 再加一層,不過當然不是加越多防護就越安全,我們繼續看下去
-
多樣性的防護
試想你加了100層防火牆來保護你重要的資料,但這100層防火牆全用的是同一套防火牆,只要這防火牆被發現某種漏洞,這100層的防火牆很可能變得跟紙一樣,因此多樣性是必要的,例如三層不同的防火牆,以駭客的角度來看,想要進入到最裡層就需要突破三層不同的防火牆,從此看來要強行突入的可能性就大大減少
-
獨立的組件
系統的運作最好要能盡量獨立,假設所有系統的驗證是靠另一個系統,而只要那個系統被攻破,就等於依賴那個驗證系統的所有系統也跟著一起完蛋,因此獨立性也是非常重要的
-
備援系統
當你的系統失效時,是否有備援機制? 舉個例子,魔獸世界有通訊鎖,似乎是透過電話來驗證以防止盜帳號,前陣子突然發生通訊鎖失效,玩家抱怨進不了遊戲,於是通訊鎖似乎就因此暫停了小段時間,以攻擊者的角度來看,如果是我要盜取帳號,就可以從這裡下手,首先癱瘓它的通訊鎖,逼他們在玩家的壓力之下把通訊鎖的服務暫時關掉,不必驗證就能登入,如此一來就造成了空檔,之前盜來的帳號本來少了手機驗證這關,無法登入,但是有了這個空檔或許就可以好好利用,從這個例子我們可以看到,重要的系統需要有備援的系統,否則當這個系統失效,就產生了安全性上的問題,而且也可能造成提供攻擊的空檔,駭客可以刻意癱渙該系統以取得攻擊的空檔
-
最小化的權限
很常見的問題之一,就是使用過大的權限去執行做一些雞毛蒜皮的事,舉個例子,使用root來執行網頁伺服器,在這種情況下,只要網頁伺服器有什麼漏洞因此被利用了,就等於整台電腦的root被拿走了是一樣的,因此使用過大的權限是危險的行為,盡量將權限限制在能做好該做的任務就好的範圍,如此一來,就算某個帳號被拿下,也難以成大事,必須尋求其它管道
-
不要相信內部系統
即使來到系統內部,也不該相信所有資料不是惡意的,考慮一下如果駭客只拿下最外面的系統,接著要往裡面的系統攻擊,如果裡面的系統天真的以為,來自內部系統的都是安全的,那同樣等於內部的系統也被拿下,因為太相信內部系統而不做檢查的後果,因此就算來到了防線的後方,也不該因此而偷懶不用考慮安全的問題,記得假設你的每個系統都可能被攻擊,就算來自內部的系統也可能是攻擊,你怎麼知道你旁邊的電腦是不是變成殭屍了? 你怎麼知道管理員的介面就不會被殖入XSS因此而不用檢查惡意的html? 因此”不要相信任何人”
現實是…
如果都做到了,攻擊你的系統會是一件非常困難的事,一層防禦還有一層,防禦的種類又是多樣性且不盡相同,都有備援,權限被最小化,即使拿到了也只是個沒什麼用的使用者,而系統內部也不相信其它系統,拿下來外圍的系統想藉此攻擊內部也是很困難,是的,理論上來講非常困難,但是真正值得考慮的應該是到底能夠做到多少? 越多越繁複的防禦表示越高的成本,想像一下你會拿這樣的方式來防禦王小明寫給隔壁阿花的情書嗎? 我想不會,除非那個很重要,但是相對的,如果是核子彈發射的系統,這樣做就很值得,你不會想看到核子武器把玩在script kid的手中吧? 因此深度防禦如果真的要達到有深度確實要花不少成本,但是其實不用很深,我們保護的不是核子彈,就算是客戶的資料,我們一樣可以盡量增加防禦的深度,事實上不用太深的深度,當你的資料沒有那個價值讓駭客去花那麼大的力氣取得時,到那樣的深度其實就已經足夠