在本文中,我們會介紹當您開發雲端應用程式時要考慮的安全性活動和控件。 涵蓋在Microsoft 安全性開發生命週期 (SDL) 實作和驗證階段期間要考慮的安全性問題和概念。 目標是協助您定義可用來開發更安全應用程式的活動和 Azure 服務。
本文章涵蓋下列 SDL 階段:
- Implementation
- Verification
Implementation
實作階段的重點在於建立早期預防的最佳做法,以及偵測和移除程序代碼中的安全性問題。 假設您的應用程式是以您不想要使用的方式使用。 這可協助您防範意外或刻意濫用應用程式。
執行程式碼審核
簽入程式代碼之前,請先進行程式代碼檢閱,以提高整體程式代碼品質,並降低建立 Bug 的風險。 你可以用 Visual Studio 來管理程式碼審查流程。
執行靜態程式代碼分析
靜態程式代碼分析 (也稱為 原始程式碼分析)會在程式代碼檢閱中執行。 靜態程式代碼分析通常是指執行靜態程式代碼分析工具,以找出非執行程式代碼中的潛在弱點。 靜態程式碼分析使用如 污點分析 和 資料流分析等技術。
Azure Marketplace 提供開發 者工具 ,能執行靜態程式碼分析並協助程式碼審查。
驗證並清理應用程式的每個輸入
將所有輸入視為不受信任,以保護您的應用程式免於最常見的 Web 應用程式弱點。 不受信任的數據是插入式攻擊的工具。 應用程式的輸入資料包括 URL 中的參數、使用者輸入、來自資料庫或 API 的數據,以及任何可能被使用者操作的傳入資料。 應用程式在使用資料(包括將資料顯示回給使用者)之前,應先 驗證 資料在語法和語意上都有效。
在數據流早期驗證輸入,以確保只有正確格式的數據進入工作流程。 您不希望資料庫中保存格式不正確的數據,或觸發下游元件中的故障。
封鎖清單和允許清單是執行輸入語法驗證的兩種一般方法:
封鎖清單嘗試檢查指定的使用者輸入是否不包含「已知為惡意」內容。
允許清單功能會嘗試檢查指定的使用者輸入是否符合一組「已知良好」的輸入。 以字元為基礎的允許清單是允許清單的形式,其中應用程式會檢查使用者輸入是否只包含「已知良好」字元,或該輸入符合已知格式。
例如,這可能涉及檢查用戶名稱是否僅包含字母和數字字符,或者它恰好包含兩個數字。
Allowlisting 是建置安全軟體的慣用方法。 封鎖清單很容易發生錯誤,因為無法想出可能不良輸入的完整清單。
在伺服器上執行這項作業,而不是在用戶端上(或在伺服器和用戶端上)。
確認應用程式的輸出
您以視覺化方式或在文件中呈現的任何輸出,都應一律進行編碼和逸出。 逃逸,也稱為 輸出編碼,是用來確保不受信任的資料不會成為注入攻擊的載體。 逸出與數據驗證結合,可提供分層防禦,以提升整個系統的安全性。
跳脫確保所有東西都以輸出。 跳脫也告訴解譯器這些資料不是用來執行的,從而防止攻擊成功。 這是另一種常見的攻擊技術,稱為 跨站腳本 (XSS)。
如果您是使用來自第三方的 Web 架構,則可以使用 OWASP XSS 預防速查表來確認您在網站上輸出編碼的選項。
當您連絡資料庫時,請使用參數化查詢
絕不會在程序代碼中「即時」建立內嵌資料庫查詢,並將它直接傳送至資料庫。 插入至應用程式的惡意代碼可能會導致資料庫遭竊、抹除或修改。 您的應用程式也可以用來在裝載資料庫的作系統上執行惡意作系統命令。
請改用參數化查詢或預存程式。 當您使用參數化查詢時,您可以安全地從程式代碼叫用程式,並傳遞字串,而不必擔心它會被視為查詢語句的一部分。
拿掉標準伺服器標頭
伺服器、X-Powered-By 和 X-AspNet-Version 等標頭會顯示伺服器和基礎技術的相關信息。 建議您隱藏這些標頭,以避免對應用程式進行指紋識別。 請參閱 移除 Azure 網站上的標準伺服器標頭。
隔離生產數據
生產數據或「實際」數據不應用於開發、測試或任何其他用途,除非是商務目的。 所有開發與測試應使用遮罩(匿名)資料集。
這表示很少有人能夠存取您的真實數據,這可減少您的受攻擊面。 這也表示員工看到個人資料較少,這可消除機密性的潛在缺口。
實作強密碼原則
若要防止暴力密碼破解及以字典為基礎的猜測,您必須實作強式密碼原則,以確保使用者建立複雜的密碼 (例如,長度最少 12 個字元及要求使用英數字元和特殊字元)。
Microsoft 外部租戶中的 Entra 外部識別碼透過提供 自助式密碼重設 及其他功能,協助您進行密碼管理。
若要防範預設帳戶的攻擊,請確認所有密鑰和密碼皆可取代,且在您安裝資源之後產生或取代它們。
如果應用程式必須自動產生密碼,請確定產生的密碼是隨機的,而且它們具有較高的 entropy。
驗證檔案上傳
如果您的應用程式允許 上傳檔案,請考慮對此風險活動可採取的預防措施。 許多攻擊的第一個步驟是將一些惡意代碼放入遭受攻擊的系統。 使用檔案上傳可協助攻擊者完成這項作業。 OWASP 提供驗證檔案的解決方案,以確保您上傳的檔案是安全的。
反惡意代碼防護可協助識別和移除病毒、間諜軟體和其他惡意軟體。 你可以安裝 Microsoft Antimalware 或 Microsoft 合作夥伴的端點防護解決方案(Trend Micro、 Broadcom、 McAfee、 Windows 版的 Microsoft Defender 防毒軟體,以及 Endpoint Protection)。
Microsoft 反惡意軟體 包含即時防護、排程掃描、惡意軟體修復、簽名更新、引擎更新、樣本回報及排除事件收集等功能。 您可以將 Microsoft Antimalware 和合作夥伴解決方案與適用於雲端的 Microsoft Defender 整合,以方便部署和執行內建偵測 (警示與事件)。
請勿快取敏感性內容
請勿在瀏覽器中快取敏感性內容。 瀏覽器可以儲存資訊以進行快取和記錄。 快取的檔案會儲存在資料夾中,例如若是 Internet Explorer,則會儲存在 Temporary Internet Files 資料夾內。 再次參考這些頁面時,瀏覽器會顯示其快取中的頁面。 如果使用者顯示敏感資訊(地址、信用卡資料、社會安全號碼、使用者名稱),這些資訊可能會儲存在瀏覽器快取中,並可透過檢視快取或按下 瀏覽器的返回 鍵來取得。
Verification
驗證階段涉及一項全面工作,以確保程序代碼符合先前階段中建立的安全性和隱私權原則。
尋找並修正應用程式相依性的弱點
您可以掃描您的應用程式及其相依連結庫,以識別任何已知的易受攻擊元件。 可用來執行此掃描的產品包括 OWASP 相依性檢查、Snyk 和 Black Duck。
以作業狀態測試您的應用程式
動態應用程式安全性測試 (DAST) 是測試處於作業狀態的應用程式以尋找安全性弱點的程式。 DAST 工具會在執行時分析程式,以尋找安全性弱點,例如記憶體損毀、不安全的伺服器設定、跨網站腳本、使用者許可權問題、SQL 插入和其他重大安全性考慮。
DAST 與靜態應用程式安全性測試 (SAST) 不同。 當程式代碼未執行時,SAST 工具會分析原始程式碼或已編譯的程式代碼版本,以找出安全性缺陷。
執行 DAST,最好在安全專業人員(滲 透測試員 或漏洞評估員)協助下進行。 如果無法使用安全性專業人員,您可以使用 Web Proxy 掃描器和一些訓練自行執行 DAST。 儘早插入 DAST 掃描器,以確保您不會在程式代碼中引入明顯的安全性問題。 請參閱 OWASP 網站以了解網頁應用程式漏洞掃描器的清單。
執行模糊測試
在 模糊測試中,你透過故意向應用程式引入錯誤或隨機的資料來誘發程式失敗。 誘發程式失敗有助於在應用程式發行之前顯示潛在的安全性問題。
安全性風險偵測 是Microsoft獨特的模糊測試服務,可用來尋找軟體中的安全性關鍵性錯誤。
執行攻擊面檢閱
在程式代碼完成之後檢閱受攻擊面有助於確保已考慮應用程式或系統的任何設計或實作變更。 它有助於確保任何因變更而建立的新攻擊媒介,包括威脅模型,都經過檢閱並減輕。
您可以掃描應用程式來建置受攻擊面的圖片。 Microsoft提供稱為 「攻擊面分析器」的受攻擊面分析工具。 您可以從許多商業動態測試和弱點掃描工具或服務中選擇,包括 OWASP 攻擊 Surface Detector、 Arachni 和 w3af。 這些掃描工具會爬行您的應用程式,並映射透過 Web 存取的應用程式部分。 你也可以在 Azure Marketplace 搜尋類似 的開發工具。
執行安全性滲透測試
確保應用程式的安全與測試任何其他功能一樣重要。 讓 滲透測試 成為建置與部署流程的標準部分。 在已部署應用程式上排程定期安全性測試和弱點掃描,並監視開啟連接埠、端點和攻擊。
執行安全性驗證測試
來自 Secure DevOps Kit for Azure (AzSK) 的 Azure Tenant Security Solution (AzTS) 包含多個 Azure 平台服務的 SVT。 您可以定期執行這些 SVT,以確保您的 Azure 訂用帳戶和組成應用程式的不同資源處於安全狀態。 您也可以使用 AzSK 的持續整合/持續部署(CI/CD) 擴充功能來自動化這些測試,讓 SVT 成為 Visual Studio 擴充功能。
下一步
在下列文章中,建議您使用可協助您設計和部署安全應用程式的安全性控件和活動。