讀軟件開發(fā)安全之道:概念、設(shè)計與實施02經(jīng)典原則

讀軟件開發(fā)安全之道:概率、設(shè)計與實施02經(jīng)典原則.png

1. CIA原則

1.1. 軟件安全都構(gòu)建在信息安全的三大基本原則之上,即機密性(confidentiality)、完整性(integrity)和可用性(availability)

1.2. 雙方交換的數(shù)據(jù)

  • 1.2.1. 從技術(shù)上看,端點之間的數(shù)據(jù)交換本身就會削弱交互的機密性

  • 1.2.2. 隱藏通信數(shù)據(jù)量的一種方法是讓端點始終交換恒定數(shù)量的數(shù)據(jù)

  • 1.2.3. 在實際流量較低的時候,則讓端點發(fā)送虛擬數(shù)據(jù)包(dummy packet)來維持恒定的數(shù)據(jù)量

1.3. 授權(quán)是CIA各項原則中都固有的元素,它規(guī)定數(shù)據(jù)只能由合法的人員進行訪問、修改,數(shù)據(jù)可用性也只能交由合法人員進行管理

1.4. 機密性和完整性定義為防止未經(jīng)授權(quán)地泄露或篡改信息的行為原則

1.5. 可用性則會受到授權(quán)管理員的控制

1.6. 它們只有作為一個整體時才能有效地保護數(shù)據(jù)資產(chǎn)

2. 機密性

2.1. 不會泄露信息

2.2. 只允許已授權(quán)的數(shù)據(jù)訪問

2.3. 維護機密性意味著按照一種僅授權(quán)者可讀的方式來保護隱私信息

2.4. 必須認(rèn)真判斷哪些信息屬于隱私信息

  • 2.4.1. 最安全的做法是把所有從外部收集到的信息都默認(rèn)為隱私信息,直到有明確的策略來進行界定,并且解釋清楚為什么可以對這樣的設(shè)計方法進行適度的松綁

  • 2.4.2. 一位終端用戶可能會理所當(dāng)然地希望他們的數(shù)據(jù)是隱私數(shù)據(jù)(即使這些信息被泄露也無傷大雅),除非他們明確告知某些數(shù)據(jù)并非隱私

  • 2.4.3. 人們可能會把敏感數(shù)據(jù)輸入不同用途的文本字段中

  • 2.4.4. 信息的收集、處理和保存有可能需要滿足各類法律法規(guī)的要求,而很多人往往對這些法律法規(guī)一無所知

  • 2.4.5. 我們不僅應(yīng)該明確說出訪問規(guī)則,還應(yīng)該解釋這些規(guī)則背后的主觀判斷。

2.5. 機密性泄露也有一個頻譜

  • 2.5.1. 完全的信息泄露是指攻擊者獲取到了完整的數(shù)據(jù)集,其中包括元數(shù)據(jù)

  • 2.5.2. 這個頻譜的另一端則是程度相當(dāng)輕微的信息泄露,比如內(nèi)部錯誤消息或者其他不會造成什么后果的信息被泄露了出去

  • 2.5.3. 所有泄露受保護數(shù)據(jù)詳情的行為,在某種程度上都屬于機密性遭到破壞的情形

2.6. 去匿名化(denonymization)或者重標(biāo)識(reidentification)

3. 完整性

3.1. 準(zhǔn)確維護數(shù)據(jù)

3.2. 不允許未經(jīng)授權(quán)的數(shù)據(jù)修改或者刪除

3.3. 完整性就是指數(shù)據(jù)的真實性和準(zhǔn)確性,其宗旨是防止數(shù)據(jù)被隨意刪改

3.4. 除了通過技術(shù)手段防止數(shù)據(jù)遭到未經(jīng)授權(quán)的篡改,一份準(zhǔn)確的數(shù)據(jù)來源記錄(包括最初數(shù)據(jù)源,以及之后授權(quán)的數(shù)據(jù)源變更)也是相當(dāng)重要、強大的完整性保障

3.5. 保存重要數(shù)據(jù)的版本并且記錄它們的來源,這本身就是防止篡改攻擊的典型手段

3.6. 執(zhí)行增量備份是一種理想的攻擊預(yù)防手段,因為增量數(shù)據(jù)保存簡單,同時又以一系列快照的形式翔實地記錄了哪些數(shù)據(jù)執(zhí)行過變更,以及它們在何時執(zhí)行過變更

3.7. 篡改包括很多不同的方式,并不一定是修改存儲設(shè)備當(dāng)中的數(shù)據(jù)

  • 3.7.1. 篡改可能發(fā)生在客戶端一側(cè)

  • 3.7.2. 可能發(fā)生在客戶端和服務(wù)器之間

  • 3.7.3. 手段包括欺騙其中某一方修改數(shù)據(jù),也包括在頁面上修改腳本

3.8. 雖然永久丟失的數(shù)據(jù)也屬于不可用的數(shù)據(jù),但是這類數(shù)據(jù)一般會被認(rèn)為屬于完整性受到徹底破壞的情況

4. 可用性

4.1. 保障數(shù)據(jù)的可用性

4.2. 不允許出現(xiàn)嚴(yán)重延遲或者未經(jīng)授權(quán)的數(shù)據(jù)訪問關(guān)閉

4.3. 針對可用性的攻擊是網(wǎng)絡(luò)世界無法回避的現(xiàn)實問題,也是最難防御的攻擊方式之一

4.4. 攻擊者向服務(wù)器發(fā)送過量的數(shù)據(jù),通過看似合法的手段占用海量服務(wù)資源,導(dǎo)致服務(wù)資源耗竭

4.5. 匿名的拒絕服務(wù)(Denial of Service,DoS)攻擊(一般都是為了索取贖金)幾乎可以威脅到一切互聯(lián)網(wǎng)服務(wù),所以防御這類攻擊是非常艱巨的挑戰(zhàn)

  • 4.5.1. 需要利用有能力承受大量負(fù)載的基礎(chǔ)設(shè)施來承載大規(guī)模的服務(wù),同時維護系統(tǒng)的靈活性,確保在事件發(fā)生時基礎(chǔ)設(shè)施能夠迅速實現(xiàn)遷移

4.6. 攻擊者創(chuàng)建的惡意請求可以觸發(fā)錯誤,導(dǎo)致崩潰或者無限循環(huán),最終破壞服務(wù)器的服務(wù)

4.7. 其他的攻擊方式可以導(dǎo)致應(yīng)用的存儲、計算或者通信出現(xiàn)超載,或者使用破壞緩存有效性的模式,這些都可以導(dǎo)致相當(dāng)嚴(yán)重的問題

5. 黃金標(biāo)準(zhǔn)

5.1. gold standard

5.2. 如果CIA是安全系統(tǒng)的目標(biāo),那么黃金標(biāo)準(zhǔn)描述的就是達(dá)到這個目標(biāo)的方式

5.3. Aurum是黃金的意思,因此黃金的化學(xué)符號就是Au

5.4. 主體是指一切通過了可靠認(rèn)證的實體,包括一個人、一家企業(yè)或單位、一個政府實體,以及一個應(yīng)用、服務(wù)、設(shè)備或者其他有權(quán)執(zhí)行操作的對象

5.5. 認(rèn)證(authentication)

  • 5.5.1. 用高度可靠的方式來判斷主體的身份

  • 5.5.2. 認(rèn)證的過程,是指通過可靠的方式來建立主體證書可靠性的過程

5.6. 授權(quán)(authorization)

  • 5.6.1. 僅允許通過認(rèn)證的主體執(zhí)行操作

  • 5.6.2. 認(rèn)證后的主體在執(zhí)行數(shù)據(jù)訪問時,也會受到授權(quán)結(jié)果的限制

    • 5.6.2.1. 授權(quán)會根據(jù)預(yù)先設(shè)定的規(guī)則允許或拒絕用戶的行為
  • 5.6.3. 真正兌現(xiàn)授權(quán)決策的唯一方法,是確保使用系統(tǒng)的主體都是正常通過認(rèn)證的主體

5.7. 審計(auditing)

  • 5.7.1. 為主體所執(zhí)行的操作維護一份可靠的記錄,以便進行監(jiān)控

  • 5.7.2. 如果一項服務(wù)保留了一個安全日志,而這個日志可以準(zhǔn)確地記錄主體執(zhí)行的操作(包括那些因為授權(quán)失敗而沒有成功執(zhí)行的操作),那么接下來管理員可以執(zhí)行審計來對系統(tǒng)的操作進行監(jiān)控,確保所有操作都是合理的

  • 5.7.3. 如果希望實現(xiàn)強大的安全性,準(zhǔn)確的審計日志至關(guān)重要,因為它們提供了對真實事件的可靠記錄

  • 5.7.4. 詳細(xì)的日志可以為我們提供一份歷史記錄,揭示發(fā)生異常情況或者可疑事件時的準(zhǔn)確情況

  • 5.7.5. 審計則負(fù)責(zé)提供可靠的日志,記錄誰、何時執(zhí)行了什么操作,再由技術(shù)人員定期審查違規(guī)行為,并保留追究違規(guī)者責(zé)任的權(quán)利

5.8. 黃金標(biāo)準(zhǔn)充當(dāng)?shù)氖且环N實現(xiàn)機制,旨在對CIA提供保護

5.9. 安全設(shè)計方案應(yīng)該明確地把認(rèn)證和授權(quán)這兩者分開,因為把認(rèn)證和授權(quán)結(jié)合在一起往往會導(dǎo)致混亂

  • 5.9.1. 如果能夠把兩者明確地分開,審計追蹤工作也會變得更加清晰

6. 認(rèn)證

6.1. 認(rèn)證的目的是,根據(jù)能夠證明主體真實身份的證書,測試該主體的真實身份與其所聲稱的身份是否一致

6.2. 認(rèn)證服務(wù)也可能會使用一種更強形式的證書,譬如數(shù)字簽名或者挑戰(zhàn)碼

6.3. 數(shù)字簽名是一種更加理想的認(rèn)證形式,因為數(shù)字簽名可以讓主體在不泄露密碼的情況下證明自己掌握密鑰

6.4. 證書提供的認(rèn)證信息

  • 6.4.1. 所知之事(something you know):如密碼

  • 6.4.2. 所有之物(something you have):如安全令牌

  • 6.4.3. 自身屬性(something you are):即生物特征(如指紋、虹膜等)

  • 6.4.4. 所處之地(somewhere you are):經(jīng)過驗證的所在地,如與安全場所中私有網(wǎng)絡(luò)建立的連接

6.5. 你的所知之事可能泄露,你的所有之物可能失竊,你的所處之地有很多方法可以加以操縱,就連你的自身屬性都有可能被偽造(甚至如果遭到盜用,我們連修改都很困難)

6.6. 用戶使用兩項認(rèn)證要素總比使用一項認(rèn)證要素要好

6.7. 只要條件允許,我們就應(yīng)該依靠現(xiàn)成、可靠的認(rèn)證服務(wù),而不應(yīng)該動輒“自力更生”

6.8. 認(rèn)證的過程應(yīng)該包括對證書進行校驗,并給出認(rèn)證通過或者認(rèn)證失敗的響應(yīng)消息

  • 6.8.1. 不要采用認(rèn)證“部分成功”的做法,這樣等于在暗示黑客可通過不斷試錯來破解密碼

  • 6.8.2. 如果希望降低暴力破解密碼的風(fēng)險,常見的做法是讓認(rèn)證密碼從根本上很難通過計算破解,或者在認(rèn)證流程中引入一些延遲

  • 6.8.3. 一般來說,認(rèn)證模塊會給主體頒發(fā)一個令牌,主體在認(rèn)證中使用令牌即可,這樣就可以避免后續(xù)被要求執(zhí)行完整的認(rèn)證過程

6.9. 安全綁定認(rèn)證實體后可以用兩種基本方式進行入侵

  • 6.9.1. 攻擊者可以盜用受害者的身份

  • 6.9.2. 接受認(rèn)證的主體也有可能與其他人相勾結(jié),把自己的身份信息泄露給別人,甚至把自己的身份強加給別人

    • 6.9.2.1. 幾個人分享同一個付費訂閱的節(jié)目就屬于這種入侵方式

7. 授權(quán)

7.1. 各類系統(tǒng)會通過業(yè)務(wù)邏輯、訪問控制列表或者其他正式的訪問策略來實現(xiàn)授權(quán)功能

7.2. 匿名授權(quán)(即不進行認(rèn)證的授權(quán))適用的場合可以說寥寥無幾

  • 7.2.1. 根據(jù)時間設(shè)置訪問限制(比如,僅允許員工在工作時間訪問數(shù)據(jù)庫)也是匿名授權(quán)的一個示例

7.3. 應(yīng)該通過一項單一的要素來實施授權(quán),不要讓授權(quán)代碼散布在整個代碼庫中,否則這會是運維和審計人員的一場噩夢

  • 7.3.1. 應(yīng)該依靠某一項公共框架來唯一地提供訪問授權(quán)

7.4. 授權(quán)機制遠(yuǎn)比傳統(tǒng)操作系統(tǒng)提供的簡單讀/寫訪問控制要細(xì)致得多

  • 7.4.1. 人們可以設(shè)計更加強大的授權(quán)機制,以便在不損失重要功能的前提下對訪問進行限制,提升安全性

  • 7.4.2. 基于屬性的訪問控制(Attribute-based Access Control,ABAC)

  • 7.4.3. 基于策略的訪問控制(Policy-based Access Control,PBAC)

  • 7.4.4. 基于角色的訪問控制(Role-based Access Control,RBAC)可以在認(rèn)證和授權(quán)之間建立起一座橋梁

    • 7.4.4.1. RBAC會根據(jù)分配給認(rèn)證主體的角色(role)來提供訪問授權(quán),這樣就可以通過統(tǒng)一的框架簡化訪問控制

    • 7.4.4.2. RBAC并不會為每個人單獨定義訪問權(quán)限,而會根據(jù)每個人的職責(zé)指定一個或者多個角色,從而為人們自動分配相關(guān)聯(lián)的唯一權(quán)限

    • 7.4.4.3. 在更高級的RBAC模型中,一個人可以擁有多個角色,人們可以為不同的訪問主動選擇使用不同的角色

7.5. 對于某些數(shù)據(jù)來說,只讀訪問的訪問級別依然過高,密碼就屬于這類數(shù)據(jù)

  • 7.5.1. 認(rèn)證服務(wù)無法從證書數(shù)據(jù)庫中讀取明文密碼,但是它可以讀取摘要值,它會用這個值來與前端服務(wù)器提供的值進行比較

  • 7.5.2. 認(rèn)證服務(wù)就可以對證書進行校驗了,但認(rèn)證服務(wù)永遠(yuǎn)無法訪問任何密碼

  • 7.5.3. 除非界面設(shè)計能夠提供這類安全方案,否則它們會失去這樣一個減少數(shù)據(jù)泄露可能性的機會

8. 審計

8.1. 為了讓組織機構(gòu)能夠?qū)ο到y(tǒng)的行為進行審計,系統(tǒng)必須基于所有對運維安全至關(guān)重要的信息生成一份可靠的日志

  • 8.1.1. 日志中包括認(rèn)證和授權(quán)事件、系統(tǒng)啟動與關(guān)閉、軟件更新、管理訪問等

8.2. 審計日志也同樣必須能夠抗篡改

  • 8.2.1. 最好是連管理員也無法插手修改這些日志,這樣可以將其視為絕對可靠的記錄信息

8.3. 網(wǎng)絡(luò)中總是會發(fā)生這樣或那樣的事件,認(rèn)證和授權(quán)策略的漏洞也總是難免的

  • 8.3.1. 審計可以自始至終為人們提供必要的信息

8.4. 在工作中,當(dāng)授權(quán)主體做出與人們信任相悖的行為時,審計信息可以幫助人們規(guī)避由此帶來的風(fēng)險

8.5. 如果處理得當(dāng),審計日志可以為日常檢測、系統(tǒng)性能級別評測、錯誤和可疑行為檢測帶來巨大幫助,也可以在事件發(fā)生后用于判斷攻擊實際發(fā)生的時間和評估攻擊帶來的損失

  • 8.5.1. 審計日志只有在人們監(jiān)控日志內(nèi)容時才能發(fā)揮作用,因此務(wù)必認(rèn)真地分析那些異常事件,然后不斷跟進,并且在必要情況下采取合理的行動

8.6. 系統(tǒng)也必須有能力阻止人們通過篡改日志來掩飾那些惡意的操作

  • 8.6.1. 如果攻擊者有能力修改日志,他們當(dāng)然會把自己的操作痕跡清除得干干凈凈

  • 8.6.2. 對于那些特別敏感的高風(fēng)險日志,應(yīng)該由不同管理和操作團隊負(fù)責(zé)的獨立系統(tǒng)來管理其審計日志,以防內(nèi)部肇事者掩蓋自己的操作痕跡

  • 8.6.3. 一排高度有限的柵欄和一處位置顯眼的視頻監(jiān)控攝像頭就可以有效地防御入侵

8.7. 不可抵賴性(non-repudiability)是審計日志的一項重要的屬性

  • 8.7.1. 任何嘗試規(guī)避獨立系統(tǒng)的行為都會顯得相當(dāng)可疑,每一項錯誤的操作都會給攻擊者造成嚴(yán)重的影響

  • 8.7.2. 一旦被發(fā)現(xiàn),他們也很難對自己的罪行進行抵賴

8.8. 應(yīng)該遵循Goldilocks原則,即日志記錄的數(shù)量和規(guī)模應(yīng)當(dāng)適宜

  • 8.8.1. 找到一個合理的平衡點會是一項長期且艱巨的任務(wù)

9. 隱私

9.1. 安全和隱私的邊界很難清晰地界定,它們既緊密相關(guān)又大不相同

9.2. 為了尊重人們的數(shù)字信息隱私,我們必須考慮其他人為因素

  • 9.2.1. 客戶希望人們采用的信息收集與使用方式

  • 9.2.2. 明確界定如何合理使用和披露信息的策略

  • 9.2.3. 與收集和使用各類信息相關(guān)的法律法規(guī)

  • 9.2.4. 處理個人信息有關(guān)的政治、文化和心理等因素

9.3. 保護隱私殊非易事,明智的做法是讓使用數(shù)據(jù)的行為盡可能透明

9.4. 收集信息必須擁有明確的目標(biāo),保留信息必須保證信息確有價值

  • 9.4.1. 不要因為信息“將來有可能用到”就隨隨便便收集,這樣做的風(fēng)險很高,絕不是什么好做法

  • 9.4.2. 如果未來合法使用某些數(shù)據(jù)的必要性不高,最合理的做法就是安全地刪除這些數(shù)據(jù)

  • 9.4.3. 只要數(shù)據(jù)泄露的風(fēng)險超過了保留這些數(shù)據(jù)的益處,我們就應(yīng)該刪除這些數(shù)據(jù)

  • 9.4.4. 最好的策略往往就是刪除這樣的郵件,而不是想著“說不定哪天用得到”,于是就一直保留著所有的數(shù)據(jù)

9.5. 人是操作幾乎所有數(shù)字系統(tǒng)的主體,雖然操作的方式不一而足

  • 9.5.1. 把保護隱私融入軟件的設(shè)計之中

9.6. 人們必須明確表達(dá)出自己對隱私問題的關(guān)注

  • 9.6.1. 隱私策略和安全性不同,隱私策略能夠在一定程度上權(quán)衡信息服務(wù)會在多大程度上利用客戶的數(shù)據(jù)

9.7. 當(dāng)用戶的期望和實際的隱私策略相脫節(jié)時,或者當(dāng)用戶違反了明確的安全策略時,隱私問題就會暴露出來

  • 9.7.1. 用戶違反安全策略則是因為安全策略仍然不夠清晰,或者負(fù)責(zé)人對其熟視無睹,又或者這些安全策略在一場安全事故中遭到了破壞
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容