天天看點

程式設計中的安全生态系統概述

就像近年來的情況一樣,安全漏洞已越來越被接受。 僅以最近的Equifax違規為例。 無論我們在哪裡看,似乎總是有人在某種形式的惡意攻擊中成為受害者。

雖然我們最近想到了最近的漏洞,但我想花一點時間來概述有關軟體開發的安全生态系統。 我将從建設性和積極的角度介紹您可以做的一些關鍵事情,以提高應用程式的安全性以防止安全漏洞。

為此,我将研究四個關鍵領域。 他們将主要讨論具體的技術步驟。 但是,他們還将讨論員工和使用者的心态。 這四個都不是詳盡無遺的,因為我要盡一切可能使我們面臨的各種可能性大打折扣,但要記住每個人的情況都不一樣。 這樣,讓我們​​開始吧。

了解OWASP前10名

開發越來越安全的軟體的基本工具之一是緊跟OWASP Top 10 。

如果您不熟悉它,它将是不斷更新的影響軟體應用程式的十大最嚴重漏洞的清單。 該清單是根據對各種軟體語言,行業和國家/地區的研究得出的。

目前清單包括您可能期望的攻擊媒介,例如注入攻擊 , 破壞的身份驗證 , 會話管理不當 , 跨站點腳本(XSS)攻擊和破壞的通路控制 。 但是它還包括一些您可能不會想到的數字,包括安全性配置錯誤和API保護不足 (這是2017年的新增功能)。

每個漏洞都會得到詳細記錄,以及如何确定遭受威脅的程度以及可以采取哪些措施來防禦威脅。 我強烈鼓勵所有開發人員,無論他們的技術水準和經驗水準如何,都必須了解OWASP Top 10并保持最新狀态。

執行安全稽核

下一步是考慮将軟體安全稽核作為持續開發(CD)流程的一部分。

安全稽核評估和評估應用程式是否準備好應對安全威脅,例如OWASP Top 10中的威脅。但是,它們還包括與員工交談,檢視通路控制配置以及評估對系統的實體通路。

其中一些步驟可以自動化,例如安全掃描。 但是,其中一些必須手動執行,例如與員工交談。 無論如何,通過執行全面的安全稽核,您将擁有一個基準,可以從該基準中制定一個行動計劃,以不斷提高應用程式的品質。

在本節中,我将重點介紹安全掃描。 有開放源代碼和封閉源代碼選項。 我更熟悉的一個很好的例子是RIPS(Re-Inforce PHP Security) 。

RIPS可以自動檢測基于PHP的軟體中的安全漏洞,并可以基于行業标準清單(包括OWASP Top 10, CWE , SANS 25和PCI-DSS)檢測漏洞。

這樣的工具可以:

  • 內建到現有軟體開發管道中,能夠在每次代碼更改時運作
  • 幫助優先處理錯誤
  • 幫助開發人員了解錯誤的來源
  • 協助改善整體品質标準

您可以在“相關連結”部分中找到一系列安全掃描器。

注冊免費的Codeship帳戶

限制資訊通路

盡管我們可以驗證和清理輸入,執行安全稽核并考慮代碼的複雜性,但是確定流程 , 使用者和程式隻能通路其應有的内容也很重要。

接下來,讓我們看看控制應用程式中的資訊通路或實作最低特權原則 。 應用時,該原則可確定

每個子產品(例如程序,使用者或程式,取決于主題)都隻能通路合法目的所必需的資訊和資源。

以患者醫療服務為例。 如果所述服務在給定時間段内準确顯示使用者的病曆,但不檢查所請求的記錄是否屬于目前登入的使用者,則任何患者都可以看到任何其他人的記錄。 這種情況是一場災難,正等着發生。

但是,在大多數語言中,實作這種控件并不是那麼困難。 大多數語言的軟體包都實作了兩個領先的資訊通路限制标準:通路控制清單(ACL)和基于角色的通路控制(RBAC)機制。

如果您不熟悉其中之一,請快速浏覽一下。 ACL

指定授予哪些使用者或系統程序通路對象的權限,以及對給定對象允許的操作。

而RBAC :

是一種将系統通路權限限制為授權使用者的方法。 它[RBAC]是圍繞角色和特權定義的與政策無關的通路控制機制。 RBAC的元件(例如角色權限,使用者角色和角色角色關系)使執行使用者配置設定變得很簡單。

深入探讨都不是本文的讨論範圍。 但是,我提供了有關這兩個标準的進一步文檔以及它們的語言實作的連結。

了解您的代碼的更廣泛的生态系統

除了檢視代碼外,我們還需要考慮代碼所在的環境以及與其互動的其他服務。

幾年前,作為軟體開發人員,當我表示有興趣獲得LPI認證時,我在老闆(一位資深UNIX / Linux系統管理者)中的地位得到了很大提高。

如果您不熟悉它,則LPI認證是圍繞Linux作業系統的一系列認證。 但是,還有許多其他選擇,例如RHCE和Microsoft相關的認證 。

個人認證不是特别重要。 對我的老闆而言,重要的是,我渴望了解代碼在其中運作的更大的生态系統-當時非常缺乏這種品質。

通過這樣做,他建議,我将以一種全新的方式檢視我正在編寫的代碼。 與其孤立地看待它,不認為我的職責範圍止于代碼的邊緣,我會考慮我更全面地寫的内容的含義。

他是正确的。 通過這樣做,我們在本文開頭考慮的OWASP Top 10具有更多的意義。 一個簡單的例子是更好地了解SQL注入攻擊對您正在使用的資料庫的影響,以及可以采取哪些措施來限制其影響。

是以,鼓勵您的開發人員了解整個生态系統或工具鍊。 您使用的是什麼版本?使用的每個服務的弱點和已知的安全漏洞是什麼? 需要采用什麼解決方法? 有沒有可以使用的,沒有那麼嚴重或沒有那麼多漏洞的替代選項?

鼓勵安全意識

既然我們已經通過一系列技術,定量方法涵蓋了安全軟體開發生态系統,那麼我想以方程式的更人性化為結尾。

特别是,我鼓勵您在組織内部以及客戶和使用者之間建立一種安全的軟體開發思想。

這樣做的動機是鼓勵開發人員将安全意識作為其軟體開發技能的基本方面。 這樣,他們将在編寫軟體時不斷尋找安全漏洞。 通過在使用者中進行培養,可以幫助他們避免遭受攻擊。

安全專家布魯斯·施耐爾(Bruce Schneier) 在有關該主題的文章中說得最好 :

如果更多的人有安全意識,危害隐私的服務就不會有如此可觀的市場佔有率。 筆記本電腦不會丢失數百萬個未加密的社會安全号碼,并且我們所有人都會通過辛苦的方式學到更少的安全課程。

但是,雖然很容易談論,但是卻不那麼容易教。 但是,有些課程可以教授安全思想。 如果您希望今天開始,這裡是布魯斯的最終建議:

任何人都可以通過嘗試從攻擊者的角度看世界來行使其安全思想。 如果我想逃避此特定的安全裝置,該怎麼辦? 我能遵循這部法律的文字,但能繞開精神嗎? 如果撰寫此廣告,散文,文章或電視紀錄片的人是不道德的,[他們]能做什麼? 然後我如何保護自己免受這些攻擊?

結論

現在,我們已經考慮了目前安全軟體開發生态系統的四個主要方面。 這四個方面涵蓋了技術方面以及人的方面。

通過對這四個領域的讨論,我希望您現在處于一個更好的位置,以學習如何準備基于CWE和SANS 25等标準的應用程式,以及從整體角度看待安全性。

這個話題太多了,以至于一篇文章永遠都不可能完整地讨論它。 但是,我希望這隻是軟體安全之旅的開始,這有助于我們雙方為應對目前和未來的安全威脅做好更好的準備。

連結

  • Web應用安全
  • 什麼是好的安全稽核?
  • 刹車安全掃描器(Ruby on Rails)
  • BenchIT安全掃描器(Python)
  • 如何在Go中安全編碼
  • 靜态分析工具和代碼品質檢查器的集合
  • GAS – Go AST掃描器
  • 安全政策
  • 安全心态(安全技術)
  • 在Zend架構中實施RBAC
翻譯自: https://www.javacodegeeks.com/2017/10/overview-security-ecosystem-programming.html