在本文中,我們會介紹當您開發雲端應用程式時要考慮的安全性活動和控件。 涵蓋在Microsoft 安全性開發生命週期 (SDL) 實作和驗證階段期間要考慮的安全性問題和概念。 目標是協助您定義可用來開發更安全應用程式的活動和 Azure 服務。
本文章涵蓋下列 SDL 階段:
- Implementation
- Verification
Implementation
實作階段的重點在於建立早期預防的最佳做法,以及偵測和移除程序代碼中的安全性問題。 假設您的應用程式是以您不想要使用的方式使用。 這可協助您防範意外或刻意濫用應用程式。
執行程式碼審核
簽入程式代碼之前,請先進行程式代碼檢閱,以提高整體程式代碼品質,並降低建立 Bug 的風險。 You can use Visual Studio to manage the code review process.
執行靜態程式代碼分析
靜態程式代碼分析 (也稱為 原始程式碼分析)會在程式代碼檢閱中執行。 靜態程式代碼分析通常是指執行靜態程式代碼分析工具,以找出非執行程式代碼中的潛在弱點。 Static code analysis uses techniques like taint checking and data flow analysis.
Azure Marketplace offers developer tools that perform static code analysis and assist with code reviews.
驗證並清理應用程式的每個輸入
將所有輸入視為不受信任,以保護您的應用程式免於最常見的 Web 應用程式弱點。 不受信任的數據是插入式攻擊的工具。 應用程式的輸入資料包括 URL 中的參數、使用者輸入、來自資料庫或 API 的數據,以及任何可能被使用者操作的傳入資料。 An application should validate that data is syntactically and semantically valid before the application uses the data in any way (including displaying it back to the user).
在數據流早期驗證輸入,以確保只有正確格式的數據進入工作流程。 您不希望資料庫中保存格式不正確的數據,或觸發下游元件中的故障。
封鎖清單和允許清單是執行輸入語法驗證的兩種一般方法:
封鎖清單嘗試檢查指定的使用者輸入是否不包含「已知為惡意」內容。
允許清單功能會嘗試檢查指定的使用者輸入是否符合一組「已知良好」的輸入。 以字元為基礎的允許清單是允許清單的形式,其中應用程式會檢查使用者輸入是否只包含「已知良好」字元,或該輸入符合已知格式。
例如,這可能涉及檢查用戶名稱是否僅包含字母和數字字符,或者它恰好包含兩個數字。
Allowlisting 是建置安全軟體的慣用方法。 封鎖清單很容易發生錯誤,因為無法想出可能不良輸入的完整清單。
在伺服器上執行這項作業,而不是在用戶端上(或在伺服器和用戶端上)。
確認應用程式的輸出
您以視覺化方式或在文件中呈現的任何輸出,都應一律進行編碼和逸出。 Escaping, also known as output encoding, is used to help ensure that untrusted data isn't a vehicle for an injection attack. 逸出與數據驗證結合,可提供分層防禦,以提升整個系統的安全性。
Escaping makes sure that everything is displayed as output. Escaping also lets the interpreter know that the data isn't intended to be executed, and this prevents attacks from working. This is another common attack technique called cross-site scripting (XSS).
如果您是使用來自第三方的 Web 架構,則可以使用 OWASP XSS 預防速查表來確認您在網站上輸出編碼的選項。
當您連絡資料庫時,請使用參數化查詢
絕不會在程序代碼中「即時」建立內嵌資料庫查詢,並將它直接傳送至資料庫。 插入至應用程式的惡意代碼可能會導致資料庫遭竊、抹除或修改。 您的應用程式也可以用來在裝載資料庫的作系統上執行惡意作系統命令。
請改用參數化查詢或預存程式。 當您使用參數化查詢時,您可以安全地從程式代碼叫用程式,並傳遞字串,而不必擔心它會被視為查詢語句的一部分。
拿掉標準伺服器標頭
伺服器、X-Powered-By 和 X-AspNet-Version 等標頭會顯示伺服器和基礎技術的相關信息。 建議您隱藏這些標頭,以避免對應用程式進行指紋識別。 請參閱 移除 Azure 網站上的標準伺服器標頭。
隔離生產數據
生產數據或「實際」數據不應用於開發、測試或任何其他用途,除非是商務目的。 A masked (anonymized) dataset should be used for all development and testing.
這表示很少有人能夠存取您的真實數據,這可減少您的受攻擊面。 這也表示員工看到個人資料較少,這可消除機密性的潛在缺口。
實作強密碼原則
若要防止暴力密碼破解及以字典為基礎的猜測,您必須實作強式密碼原則,以確保使用者建立複雜的密碼 (例如,長度最少 12 個字元及要求使用英數字元和特殊字元)。
Microsoft 外部租戶中的 Entra 外部識別碼透過提供 自助式密碼重設 及其他功能,協助您進行密碼管理。
若要防範預設帳戶的攻擊,請確認所有密鑰和密碼皆可取代,且在您安裝資源之後產生或取代它們。
如果應用程式必須自動產生密碼,請確定產生的密碼是隨機的,而且它們具有較高的 entropy。
驗證檔案上傳
If your application allows file uploads, consider precautions that you can take for this risky activity. 許多攻擊的第一個步驟是將一些惡意代碼放入遭受攻擊的系統。 使用檔案上傳可協助攻擊者完成這項作業。 OWASP 提供驗證檔案的解決方案,以確保您上傳的檔案是安全的。
反惡意代碼防護可協助識別和移除病毒、間諜軟體和其他惡意軟體。 You can install Microsoft Antimalware or a Microsoft partner's endpoint protection solution (Trend Micro, Broadcom, McAfee, Microsoft Defender Antivirus in Windows, and Endpoint Protection).
Microsoft Antimalware includes features like real-time protection, scheduled scanning, malware remediation, signature updates, engine updates, samples reporting, and exclusion event collection. 您可以將 Microsoft Antimalware 和合作夥伴解決方案與適用於雲端的 Microsoft Defender 整合,以方便部署和執行內建偵測 (警示與事件)。
請勿快取敏感性內容
請勿在瀏覽器中快取敏感性內容。 瀏覽器可以儲存資訊以進行快取和記錄。 快取的檔案會儲存在資料夾中,例如若是 Internet Explorer,則會儲存在 Temporary Internet Files 資料夾內。 再次參考這些頁面時,瀏覽器會顯示其快取中的頁面。 If sensitive information (address, credit card details, Social security number, username) is displayed to the user, the information might be stored in the browser's cache and be retrievable by examining the browser's cache or by pressing the browser's Back button.
Verification
驗證階段涉及一項全面工作,以確保程序代碼符合先前階段中建立的安全性和隱私權原則。
尋找並修正應用程式相依性的弱點
您可以掃描您的應用程式及其相依連結庫,以識別任何已知的易受攻擊元件。 可用來執行此掃描的產品包括 OWASP 相依性檢查、Snyk 和 Black Duck。
以作業狀態測試您的應用程式
動態應用程式安全性測試 (DAST) 是測試處於作業狀態的應用程式以尋找安全性弱點的程式。 DAST 工具會在執行時分析程式,以尋找安全性弱點,例如記憶體損毀、不安全的伺服器設定、跨網站腳本、使用者許可權問題、SQL 插入和其他重大安全性考慮。
DAST 與靜態應用程式安全性測試 (SAST) 不同。 當程式代碼未執行時,SAST 工具會分析原始程式碼或已編譯的程式代碼版本,以找出安全性缺陷。
Perform DAST, preferably with the assistance of a security professional (a penetration tester or vulnerability assessor). 如果無法使用安全性專業人員,您可以使用 Web Proxy 掃描器和一些訓練自行執行 DAST。 儘早插入 DAST 掃描器,以確保您不會在程式代碼中引入明顯的安全性問題。 See the OWASP site for a list of web application vulnerability scanners.
執行模糊測試
In fuzz testing, you induce program failure by deliberately introducing malformed or random data to an application. 誘發程式失敗有助於在應用程式發行之前顯示潛在的安全性問題。
安全性風險偵測 是Microsoft獨特的模糊測試服務,可用來尋找軟體中的安全性關鍵性錯誤。
執行攻擊面檢閱
在程式代碼完成之後檢閱受攻擊面有助於確保已考慮應用程式或系統的任何設計或實作變更。 它有助於確保任何因變更而建立的新攻擊媒介,包括威脅模型,都經過檢閱並減輕。
您可以掃描應用程式來建置受攻擊面的圖片。 Microsoft提供稱為 「攻擊面分析器」的受攻擊面分析工具。 您可以從許多商業動態測試和弱點掃描工具或服務中選擇,包括 OWASP 攻擊 Surface Detector、 Arachni 和 w3af。 這些掃描工具會爬行您的應用程式,並映射透過 Web 存取的應用程式部分。 You can also search the Azure Marketplace for similar developer tools.
執行安全性滲透測試
確保應用程式的安全與測試任何其他功能一樣重要。 Make penetration testing a standard part of the build and deployment process. 在已部署應用程式上排程定期安全性測試和弱點掃描,並監視開啟連接埠、端點和攻擊。
執行安全性驗證測試
來自 Secure DevOps Kit for Azure (AzSK) 的 Azure Tenant Security Solution (AzTS) 包含多個 Azure 平台服務的 SVT。 您可以定期執行這些 SVT,以確保您的 Azure 訂用帳戶和組成應用程式的不同資源處於安全狀態。 您也可以使用 AzSK 的持續整合/持續部署(CI/CD) 擴充功能來自動化這些測試,讓 SVT 成為 Visual Studio 擴充功能。
Next steps
在下列文章中,建議您使用可協助您設計和部署安全應用程式的安全性控件和活動。