在其它影響因素相同的情況下,簡單的解決方案是最安全的。
在開發軟件時間,代碼寫的越多,出現錯誤的機率也就越大。在統計學上代碼行數和錯誤數量之間是存在簡單對應的關係的:代碼越多,錯誤越多。由於很多(不是全部)的錯誤可以被當作安全方面的脆弱點予以利用,因此,對於單一軟件來說系統開發量就可以對安全造成重大影響。
在為軟件系統添加功能時,不論需要多少行代碼來執行這些功能,都有可能導致錯誤的出現。這是因為系統中不同功能塊的相互作用,有時會產生驚人的效果,特別是當這些功能嚴重地互相依賴時。這種風險由於功能並行的增加而日益擴大,因為多項功能可能依賴於同一時間的某項單獨功能,並且也有可能對該功能產生影響,通過這種共同的無計劃依賴,它們之間同時具有相互影響的趨勢。
複雜的軟件除了在安全技術方面帶來嚴重的後果外,也會給我們的理解力帶來影響。系統越大就越複雜,對於一個人來說,這時間了解系統所有不同部分的方式就更麻煩。當系統中的互動部分沒有被完全理解,從事這方面工作的人是不會從這些相互作用中認識到安全問題的,並且會因此而無法妥善解決這些問題。
因此,簡化才是安全方面最重要的策略。有很多方法可以用來對系統進行簡化處理:
最小化設計:抵制添加功能到系統中的衝動是非常困難的,但考慮到避免問題和錯誤帶來的可衡量回報可以幫助你做到這一點。當考慮是否要在系統中額外功能時,應該確認是存在實際需要,還是僅僅為了加入到列表項目中,而在實際中可能永遠不會使用。
模塊化配置:在單一系統中可能需要包含多項功能,這些功能可能涉及到在本地執行系統,挑选和使用的功能可以根據需要選擇系統的不同部分,在專用的基礎上盡可能地簡化系統。基於這個原因,分解成"模塊",可以讓系統根據需要提供服務,防止在執行過程中導致複雜性增加。人們可以根據自己的需要選擇功能,而不是啟動整個系統,不能排除不需要的功能。
注意分散關注:將功能分解成為不能直接互同的離散部分可以協助降低系統的複雜性。這就是我們通常說的"分散關注"。通過增加系統部分的獨立性,系統管理將變得更加簡單也不容易出現漏洞導致意想不到的安全問題。
在Unix體系中,經常被提到的一條原則就是"專註一件事,將它做到完美"。對於系統設計中的所有工具來說,該原則都是要遵循的,只針對一件事,並將它做好。當出現多件需要同時進行的事情時,可以選擇使用多種工具來滿足複雜性方面的要求,這樣的話,複雜性就不會成為系統本身的組成部分。在Unix和類Unix系統設計中就提供了簡單的自動化機制,可以在離散的工具之間創建特定的臨時連接。這樣的話,單一用途的工具就可以與其它工具進行靈活合作,處理更多複雜任務的功能也得到了很好的支持和鼓勵。
對於安全來說,它可能不算是一顆靈丹妙藥,但這種保持系統簡單的模式涵蓋了簡化系統的所有三項要點:最小化設計、模塊化配置和注意關注分離。因此,從Unix體係安全的角度來看,我們建議,軟件開發者重視"專註一件事,將它做到完美"這一原則,不要忽略。
最新回復
謝