本文節選自 Graham Lea 的博客:Microservices Security: All The Questions You Should Be Asking。php
如下是個人問題列表, 您和您的團隊應該向本身詢問有關微服務安全性的問題。它旨在用做評估您本身的系統和流程的清單。但願你會發現你已經涵蓋了這些問題中的大多數, 但老是有更多的東西須要學習。每一個問題以後都有一個相關內容的連接。html
核心服務(Core Services)
(我指的是組成您的系統的服務, 不與互聯網或其餘外部系統接口)web
- 您是否只是在互聯網邊界保護您的系統?(縱深防護)
- 若是入侵者進入您的核心網絡, 您有哪些保護措施?(縱深防護)
- 網絡中的某我的在多大程度上能夠輕鬆地訪問您的服務之間的流量?(安全通訊)
- 您的服務之間是否是過於相互信任?或者,你的服務是否是無條件相信高頻調用者(您肯定只有您本身的服務能夠調用您本身的服務嗎?)(勉強信任)
- 當您的服務被調用時, 它是否要求調用方對進行身份驗證, 或者它是否容許任何鏈接請求?(服務認證)
- 您的服務是讓調用者訪問服務提供的全部 API, 仍是隻容許他們訪問履行其功能所需的 API?(服務受權)
- 在客戶端發起每一個調用請求的人的身份是否會傳遞到您的內部服務中, 仍是在網關中丟失?(當事人傳播)
- 您的服務是否能夠相互請求任何數據, 或僅請求授予其權限的用戶的數據?(當事人受權)
- 若是攻擊者擁有某個服務, 他們是否能夠很容易地從其下游服務中請求任何內容?(當事人受權)
- 您有什麼保證措施從通過身份驗證的用戶收到的請求沒有被篡改?(防篡改)
- 您如何確保第二次發送的受權請求被檢測和拒絕?(重播保護)
- 是否是每一個人都理解 SQL 注入?您有哪些措施來確保沒有人編寫容易受到 SQL 注入的代碼?(SQL 注入)
- 您是否熟悉全部其餘類型的注入, 以及如何預防?(SQL 以外的注入)
- 您是否掌握了密碼存儲的最新狀態?(密碼存儲)
- 您是否意識到, 若是您的密碼數據庫被盜, 現在簡單的撒鹽加密是徹底無用的?(密碼存儲)
- 若是您須要升級密碼存儲算法, 如何在不對用戶形成大規模干擾的狀況下進行升級?(密碼存儲)
- 如何積極識別數據庫中的私有和敏感數據?(私隱提高)
- 若是您的數據被盜, 您有哪些保護措施來防止最敏感的部分被讀取?(私人和敏感數據)
- 若是您的服務使用的是私鑰, 如何保護這些密鑰不被入侵者使用?(密鑰管理, 千萬不要覺得您的祕密是安全的)
- 您知道什麼是硬件安全模塊 (Hardware Security Module,HSM), 以及什麼時候以及如何使用硬件安全模塊嗎?(密鑰管理)
- 您有哪些日誌記錄可用於檢測和分析安全漏洞?(安全日誌記錄/安全信息和事件管理 (Security Information and Event Management ,SIEM))
中間件(Middleware)
(我指的是您在系統和界面中運行的任何第三方軟件。在個人公司裏, 目前這主要是咱們的數據庫和郵件系統, 但它可能包括其餘系統, 例如 bpm 和 中間件。這些問題大多也適用於集成的外部軟件。算法
- 您是否在全部服務中共享一個數據庫登陸權限?(最少特權)
- 您的服務能夠訪問多少數據?是全部的?仍是隻有他們必須的?(最少特權)
- 若是攻擊者得到了一個服務的數據庫憑據, 他們將得到多少數據?(最少特權)
- 您的數據庫受權策略是否容許更新和刪除應用程序僅插入到的表?(最少特權)
- 您是否在全部服務中共享單個消息傳遞中間件登陸?(最少特權)
- 您的消息傳遞中間件是否也有登陸憑據?(有些尚未!)(最少特權)
- 您的服務是否有權訪問系統中的全部消息, 仍是隻能訪問他們須要查看的郵件?(最少特權)
- 您的服務是否能夠將消息發送到任何隊列, 或僅將消息發送到所需的隊列?(最少特權)
- 若是攻擊者掌握了一個消息服務的憑據, 他們能夠訪問多少數據?(最少特權)
- 若是攻擊者掌握了一個消息服務的憑據, 他們能夠啓動哪些操做?(最少特權)
- 若是您使用登陸憑據保護數據庫和消息, 如何保護憑據?(千萬不要覺得你的祕密是安全的)
- 架構中的遺留系統如何使其餘服務處於危險之中?(保護最薄弱的環節)
邊緣服務(Edge Services)
(我指的是與互聯網或其餘外部管理的第三方系統接口的服務)數據庫
- 您是否已將 TLS 實現升級到最新版本?(安全通訊)
- 您是否配置了 TLS 以消除降級和弱密碼攻擊?(安全通訊)
- 您的員工中誰知道有關 TLS 的全部信息, 以及如何安全地配置 TLS?(安全通訊)
- 如何確保您的內部網站和管理員網址不會意外地打開到互聯網上?
- 我能夠從網關服務的未經身份驗證的 api 中獲取哪些信息?(枚舉)
- 我有一個破解密碼和用戶電子郵件的列表。我可使用您的密碼提醒 url 來測試您的系統中的哪些用戶嗎?(認證)
- 您的系統其餘部分是否過於信任您的網關服務?(勉強信任)
- 若是您假設您的網關服務已被徹底破壞, 您在其餘地方會有什麼不一樣的作法?(縱深防護)
- 若是網關服務被徹底破壞, 能夠從內存中收集哪些數據?(縱深防護)
- 若是網關服務被徹底破壞, 能夠從網絡流量中捕獲哪些數據?(縱深防護)
Web 和其餘客戶端(Web & Other Clients)
(我指的是您可能會也可能不創做與服務器端系統接口的軟件, 極可能是經過 internet)api
- 您如何幫助您的用戶選擇更安全的密碼?(密碼複雜性)
- 當輸入密碼錯誤時, 您會給出什麼反饋?它是否能夠用來枚舉用戶賬戶?(枚舉)
- 在屢次登陸嘗試失敗後, 是否鎖定賬戶?(認證)
- 您給攻擊者多少機會猜想每一個賬戶的密碼?(帳戶安全)
- 當您鎖定賬戶時, 您會給出哪些反饋?它是否能夠用來枚舉用戶賬戶?(枚舉)
- 您是否有密碼提醒功能?是否可使用它來枚舉用戶賬戶?(枚舉)
- 您是否有密碼重置功能?是否可使用它來枚舉用戶賬戶?(枚舉)
- 您是否考慮過您的系統或系統的某些部分是否須要多重身份驗證?(枚舉)
- 是否還有人注意到安全和良好的用戶體驗之間彷佛有一場史詩般的戰鬥?(UX vs 安全)
- 您熟悉 owasp 十大網絡漏洞嗎?(網絡安全缺陷)
- 您能說出全部 owasp 十大網絡漏洞的名稱嗎?(網絡安全缺陷)
- 你的團隊中的每一個人都能說出全部 owasp 前十名的名字嗎?(網絡安全缺陷)
- 你團隊中的每一個人都能解釋如何防範全部的 owasp 前十名嗎?(網絡安全缺陷)
- 如何確保在用做輸出時正確轉義每一塊用戶數據?(xss/輸出編碼)
- 如何正確地在輸出用戶數據的各類不一樣上下文中獲取用戶數據?(xss/輸出編碼)
- 您如何幫助防止用戶因使用 web 應用而受到攻擊?
- 您的 web 應用設計是否將瀏覽器視爲不安全的環境?(勉強信任)
- 您的原生移動應用設計是否將設備視爲不安全的環境?(勉強信任)
- 您如何幫助防止用戶因使用本機應用而受到攻擊?
- 您在客戶端上存儲或緩存哪些數據?您如何保護它?若是有人竊取了這些數據, 會發生什麼狀況?它須要放在客戶端嗎?
人員和過程
(我指的是開發和操做您的系統的人員, 以及他們用來執行此操做的過程)瀏覽器
- 你在作什麼來確保安全被嵌入到你的工程團隊所作的一切中去?(安全內建)
- 你如何把共同的安全原則嵌入到每一個人的大腦裏?(安全原則)
- 開發過程當中明確內置了哪些安全活動?(安全軟件開發過程)
- 您爲開發人員、測試人員和操做人員提供哪些安全培訓?(安全培訓)
- 技術人員是否只知道漏洞的名稱, 仍是真的知道如何利用和測試這些漏洞?(安全培訓)
- 您放置了哪些控制, 誰能夠訪問系統的哪些部分?(訪問控制)
- 您有什麼計劃按期審查這些控制措施和人們的訪問權限的適當性?(訪問控制審覈)
- 您發現和修復第三方軟件中的漏洞的過程是什麼?(漏洞管理)
- 如何鼓勵工程師將時間用於頭腦風暴系統中的風險?(風險頭腦風暴/"風險風暴")
- 您是否有確保每項新服務都以極大的安全性啓動的服務模板?(安全應用程序模板)
- 讓內部員工按期測試系統的安全性的計劃是什麼?(安全測試)
- 你有什麼計劃, 你會多久引進一次外部安全專家, 你將如何選擇他們關注的內容?(安全測試)
- 你在哪些活動中獲得了專家的幫助?只是滲透測試?設計和架構評論如何?(安全測試)
- 您必須進行哪些自動測試來捕獲編寫漏洞的漏洞?(自動化安全測試)
- 爲了確保安全控制始終到位, 您必須進行哪些自動測試?(自動化安全測試)
- 大家是否一直在問本身: "若是這個控制點失效了怎麼辦?下一個控制點是什麼? "(縱深防護)
最後..緩存
「 假設您的網絡受到威脅,你的系統的哪些部分會讓你深夜加班?」安全