有一個常聽到的笑話:如何保全(Secure)你的電腦不被入侵?答案是:關掉電源,拔掉所有線路,用水泥將它密封,然後丟進大海。儘管這種做法確實保障了電腦的安全,但也造成電腦完全無法運作,所以沒有意義。

電腦保全(Security)分為兩部分:(1)電腦保護自己免於外來危害或損失,同時系統必須維持原來的功能;(2)電腦保全必須和電腦功用之間達到平衡。後者才是真正困難的地方。

如果我們所需的保全系統技術相當難以使用、擾亂系統基本工作,那麼使用者就會將它關閉或略過,導致系統沒有被保全。Windows Vista的UAC(User Access Control,使用者存取控制)正是這樣的例子,許多人對於一再出現的安全提示感到不耐,於是關閉該功能,造成電腦處於無保全狀態。

電腦保全不等於加密。保全雖然使用到加密,然而,密碼學是另一個專業領域。除非你是這方面專家,否則你不應該寫自己的加解密程式碼,即使專家也不見得能做好。.NET、Windows、Java等平臺都有完善的安全機制和工具,在這些平臺上編寫程式,便可以直接利用這些平臺建立保全系統。

許多系統的保全都是事後加上,這樣子很危險。事先良好的規畫是建立保全環境的關鍵,而規畫的最佳工具是保全塑模(Modeling)。

模型是系統的一種簡化表現,將不必要和不重要的細節摒除在外。藉由塑造模型(Modeling),我們可以將焦點放在「真正有影響」的細節,忽略不重要的部分,因為現代電腦系統太過複雜,所以我們不可能巨細靡遺地處理所有細節,我們必須將焦點放在真正最重要的事情上。

威脅塑模是一種系統性的方法,可以辨識一個系統會遭遇哪些威脅,並歸類之。對於系統的威脅,是指「潛在的事件,可能會具有不愉快或不想要的後果」。弱點則是指「系統設計上或實踐上」的弱點,可能會被利用來造成這些不想要的事件。而攻擊則是有人利用這些弱點來獲取不被允許的利益。

模型的重點是用形式上的作法,尋找威脅與弱點,藉以破除攻擊。這很重要,因為不這樣做,我們可能會花上許多無謂的時間,試圖保護系統免於不重要的事。不能在作法上聚焦,往往只得到無用的結果。

STRIDE是相當知名的威脅分類模型。STRIDE可以針對系統的重大威脅進行分類。威脅正是攻擊者希望發生的事,相對而言,也就是我們不希望發生的事。如果我們塑模所有的STRIDE威脅分類,我們就有很高的機會可以涵蓋大多數重要的領域。

STRIDE是Spoofing(偽造)、Tampering(竄改)、Repudiation(否認)、Information Disclosure(資訊揭露)、Denial of Service(服務阻斷)、與Elevation of Privilege(特權提升)的縮寫,分別解說如下:

● 偽造身分:在工作期間假冒另一個使用者的身分

● 竄改資料:就只是改變資料,竄改資料不見得是資訊揭露,竄改資料只有達到資料的污損。

● 否認:就攻擊者的觀點,否認就是隱匿蹤跡,讓某件行為無法被追蹤,無法歸咎於肇事者。

● 資訊揭露:允許未授權的人取用敏感資訊,像是信用卡號碼、密碼……等。

● 服務阻斷(DOS):讓某種資源耗竭,例如網路頻寬、處理器運算能力、磁碟空間。DOS攻擊相當容易匿名發動,所以有時候會難以判斷是否為惡意攻擊。

● 特權提升:不具有特權的使用者或行程,獲得特權的存取。

建立保全模型,有三個部分:威脅、資產與緩解(Mitigation)。資產是攻擊者發動攻擊的動機所在,這些資產可能是具有直接價值的東西,例如信用卡號碼或財務資訊;或者具有間接價值,像是「執行程式碼的能力」。執行程式碼的能力也算是資產,因為一旦可以在一部機器上執行程式碼,就可以使用這些資源來做些事情,例如送出垃圾郵件,執行分散式DOS攻擊。

緩解是我們用來消弭威脅的手段。辭典對於緩解的定義是「使其變得較不嚴重」。將消弭威脅的手段定義為緩解,而非防止(Prevent),是因為我們可能不希望該活動被禁止,而是希望消除其中的傷害。比方說,在PowerShell中,執行程式的能力不能被防止,因為「執行程式」本來就是PowerShell存在的目的。我們只想讓有授權的使用者才能執行被認可過的劇本,一旦有未授權的劇本執行,則會藉由許多不同的作法而被緩解。

身為程式員的你,必須及早補充Security相關知識,透過塑模了解系統可能面臨的威脅,並緩解問題,保護資產。不要讓你的程式布滿弱點,危害大眾。

蔡學鏞-技術顧問
清華大學資訊工程碩士,曾任華碩集團軟體工程師、元智大學資訊系講師、美商歐萊禮出版社技術編輯、臺灣微軟特約專欄作家。

熱門新聞

Advertisement