• 教學 08.10.2017 No Comments

    軟體發展安全流程 SDL (Secure Development LifeCycle)

    Web Security雲端資訊安全15.06.2017

    軟體發展安全流程 SDL (Secure Development LifeCycle)

    這篇文章主要介紹軟體發展流程中必要的安全技術與工具

    要讓該流程能夠有所落實, 還是必須回歸安全技術

    單單依照流程執行還是不夠的, 到底這流程中有執行上有哪些問題與技術要考量?

    安全培訓

    與其說是培訓不如說這部分更多的是溝通的過程, 安全的培訓內容包含哪些? 一般來說分為下列幾大部分

     

    公司整體安全政策

    例如資訊安全, 安全流程規範, 數位資產防護, USB/行動電腦使用規範等

    這樣的培訓通常會在新員工入職舉辦, 或是定期公司以宣傳的方式進行,

    網路安全從業人員對於網路安全業務的處理, 會有更其他網路安全從業要求的培訓,

    除了一般常見的軟體安全技術, 例如: 安全編碼 or 安全需求等.

    還包含法規與行業合規, 舉例來說:

    • 中國有《網路安全法》《中華人民共和國電腦資訊系統安全保護條例(2011修訂)》《通信網路安全防護管理辦法》《國家安全法(2015)》
    • 每個國家對於密碼與進出口都有貿易合規的相關規定
    • 個人隱私保護規範, 每個國家對於個人隱私資料的獲得, 儲存與處理也有特別法律的規律
    • 行業安全認證

    這些與 SDL 軟體發展有什麼關係呢? 主要在於必須要識別出關鍵的安全需求風險

    哪些軟體的設計會導致安全合規的障礙或是缺失必須要識別出, 提煉出相關軟體的安全需求, 安全設計, checkList

    安全架構設計

    首先要區分的是軟體的安全與安全的軟體有所不同.

    軟體的安全指的是透過 SDL (Secure Development Lifecyle)保障軟體的安全

    安全的軟體, 例如防毒軟體

    這邊更多指的是軟體的安全, 當然防毒軟體的本身也需要安全的設計,

    什麼是一個好的安全架構設計 , 有許多的模型與架構, 一般來說ICU. X805提供一個整體性的思考

    儘管該模型超過 10年, 但是整體的安全設計原則還是沒有改變

    改變的是許多不同的應用場景, 例如雲化場景下的場景, 例如微服務架構下的場景, 例如開放環境下認證的場景等

    安全設計

    安全設計的培訓通常包含整體性攻擊與威脅防護的安全設計方案,

    筆者很推薦這本書 https://msdn.microsoft.com/en-us/library/ff648647.aspx

    另外OWASP ESAPI提供一個設計與實作整體的思考, 非常值得參考

    即使不使用 ESAPI 實作,  整體的安全設計也應該包含這些模組

    威脅分析

    在設計階段時會進行威脅分析的討論, 針對每個模組進行 STRIDE 的威脅與防護的分析

    https://www.owasp.org/index.php/Application_Threat_Modeling#STRIDE

    https://www.owasp.org/index.php/Application_Security_Architecture_Cheat_Sheet

    隨著時間的累積, 會累積一定的資料庫

    進行這樣的分析必須避免流於形式, 為了符合流程而只是做拷貝複製類似模組的威脅分析

    另外, 必須厘清現有的削減措施與建議消減措施以便落地于產品開發中

    這是一個安全工程師, 開發工程師, 安全與業務的雙向溝通過程

    如何在業務與安全中取得一個平衡是這溝通過程中最重要的部分

    相關威脅分析工具與材料可參考:

    威脅分析 https://www.microsoft.com/en-us/sdl/adopt/threatmodeling.aspx

    威脅分析 https://www.owasp.org/index.php/Application_Threat_Modeling#STRIDE

     

    安全編碼

    安全編碼培訓常見的有 C/C++, PHP, Java, Python, 編譯安全, 安全編碼掃描工具使用, 加密演算法使用等

    業界比較值得參考的安全編碼規範有

    CWE 常見的編碼與軟體錯誤

    Oracle Java 安全編碼指南

    Secure Coding

    OWASP

     

     

    另外筆者也建議 FindBugs 工具所提供的編碼錯誤指南

    編碼掃描工具

    商用較知名的有

    • Klocwork
    • Coverity
    • Veracode

     

    安全測試

    Web 安全測試方法與工具,

    筆者推薦 OWASP Testing Guide https://www.owasp.org/index.php/OWASP_Testing_Guide_v4_Table_of_Contents

    測試工具的部分知名的 Kali Linux 內建許多安全測試工具

    由於多半的服務為 Web, 也可以考慮使用 Samurai , 跟Kali Linux 類似, 但是著重於 Web 相關的測試工具

    http://www.samurai-wtf.org/

    對於平台, 作業系統, Linux, Database 等的安全配置測試, 筆者建議採用業界

     

    網路法規 & 個人隱私保護

    由於歐洲 GDPR 個人隱私資料保護法的實施, 讓個人隱私資料保護成為各互聯網企業的顯學

    在中國有<網路安全法>, 法律跟網路軟體安全有什麼關係呢? 筆者列舉下列幾點:

    • 日誌保存必須6個月: 日誌保存就必須注意到備份與完整性保護等機制
    • 資料對外輸出: 如果有資料必須傳輸至其他國家就必須經過過濾與處理
    • 個人隱私收集與處理: 如果服務在處理過程中有收集使用者資料必須告知
    • 漏洞回應: 漏洞的處理與回應必須符合規定與通報《中國互聯網協會漏洞資訊披露和處置自律公約》

    中國漏洞權威發佈的機構

    1.中國國家資訊安全性漏洞庫:http://www.cnnvd.org.cn

    2.國家互聯網應急中心:http://www.cert.org.cn

    參考: http://blog.nsfocus.net/network-security-law-points/#i-2

    另外《電子商務法》與《個人資訊保護法》也正在立法中, 這些法案將對於中國互聯網比較大的影響

    安全需求分析

    安全需求來源可以分為下列幾個層面:

    • 客戶
    • 法規
    • 行業 OWASP, NIST, CSA
    • 安全認證
    • 業務場景衍生

    另外筆者推薦參考 OWASP ASVS, 該專項對於安全整體需求分為19類

     

     

    參考

    SDL 指導書下載參考: https://www.microsoft.com/en-us/download/details.aspx?id=12379

    https://www.microsoft.com/en-us/sdl/default.aspx

     

  • 誰說資安一定要花大錢? 企業安全必備的開源工具

    原圖來源: AlienVault

    這篇文章主要介紹幾種企業安全開源的工具與平台

    主要分為五大類, 資產偵測, 弱點偵測, 威脅偵測, 行為監控與威脅情報平台等

     

    Open Source Asset Discovery Tools

    這類的工具主要在於列舉與搜尋目前公司網路上相關的電腦資產設備

     

    如何辨識該電腦為Windows or Linux 特定版本or 印表機?

    參考: https://github.com/gamelinux/prads/tree/master/etc

     

    Threat Detection Tools

    這類的工具主要為 IDS/IPS 主機入侵檢測

     

    Behavioral Monitoring Tools

    這類的工具主要在於檢測系統的狀態

     

     

    Vulnerability Assessment Tools

    這類的工具主要在於檢測系統的漏洞, 其中以NMAP 與OpenVAS 最為著名

     

    Intelligence and Analytics Tools

    情報威脅感知平台, 或是常聽到的 SIEM為整合許多日誌資訊進行威脅分析

    開源的情報威脅感知平台有

    OSSIM http://www.alienvault.com/ossim

    Logstash http://logstash.net/

    其他更多開源方案, 另外可以參考這篇

    https://github.com/hslatman/awesome-threat-intelligence

     

    Intelligence Feeds & Threat Sharing Communities

    業界威脅情報來源與資料庫有很多,

    MDL http://www.malwaredomainlist.com

    ETO http://www.emergingthreats.net

    OTX http://www.alienvault.com/otx

    當發現有異常Domain的訪問時?

    可以利用網上一些業界開源工具得知該Domain是否為已知有害威脅

    舉例來說, “eovighu.com” 是否為已知威脅來源? 可用下列方式搜尋

    abuse.net 

    其他更多開源方案可以參考:
  • 不寫程式就完成BDD (Behavior Driven Development)自動化測試工具 – bddfire

     

    Image result for BDD

    這篇文章主要介紹如何不用寫程式就完成 BDD的自動化測試,

    開始介紹如何運用開源工具之前, 先介紹BDD測試的基本概念與執行時的困難點

    這樣會更容易理解BDD測試所帶來的好處與該開源工具的優勢

     

    什麼是BDD的測試方式?

    簡單來說就是將每一個測試個案與測試用例依照 User Story的方式來書寫

    • Given : 某個條件下
    • When: 當使用者執行某些動作
    • Then: 預期的執行結果

    如此一來整個測試用例的執行結果就會更趨近於原本客戶的訴求

    達到 Acceptance Testing, 最終客戶為觀點的驗收測試

    Image result for BDD

    BDD困難點

    問題來了, 為了要將測試個案寫成這樣的形式,畢竟還是需要對應的程式碼才能執行

    • Given : 某個條件下
    • When: 當使用者執行某些動作
    • Then: 預期的執行結果

    因此會有下列過程:

    1.  寫下 user story ( 用英文描述的方式 Given, When, Then…)
    2. 編寫相對應的程式碼

     

    不寫程式如何完成 BDD?

    原則上BDD 有上述兩大步驟,

    1. 寫下 user story ( 用英文描述的方式 Given, When, Then…)
    2. 編寫相對應的程式碼

    因此, 我們會利用一個開源框架 BddFire, 該開源框架已經定義好許多 user story與相對應的程式碼

    我們只要將依據測試場景的需求增新修改必要的參數即可

    舉例來說, 對於瀏覽器的操作該開源框架提供下列操作

    我們只要針對 “” 的內容加以修改符合該測試場景

    Browser Actions

       When I navigate to another page ""
       When I go forward using browser
       When I go back using browser
       When browser is refreshed
       When I have switched to another window ""
       When browser window is resized to width "" and height ""
       When browser window is maximized
       When I closed browser window
       When page is zoomed in
       When page is zoomed out
       When I scrolled to element with selector ""
       When element with selector is hovered over
    

    User Actions

       Given  I am on “url”
       When I fill in “element” with the text “text”
       When I select the “link” link
       When I select the "button" button
       When I click on link having text “text"
       When I check “checkbox”
       When I uncheck “checkbox”
       When I choose “radio button”
       When I select option “option” from the dropdown “dropdown”
       When I attach the file “file_path" to the field “locator”
       When I hover over the element “locator"
    

    Assertions

       Then the page title is  “title"
       Then I see the element “element” with the text “text”
       Then page contains “element”
       Then I see element “element” “count” times
       Then page contains the link "link"
       Then page contains the button  “button”
       Then page contains the field “field”
       Then page contains the table “table”
       Then the element “element” is checked
       Then the element “element” is unchecked
       Then the page contains the following content "content"

     

    除此之外, BddFire還提供API測試的相關操作與驗證

    Given I send a GET request for "<your_uri>"
    
       Given I send a GET/PUT/POST/DELETE request for "<your_uri>" with the following: 
        """
       <your_payload>
        """
    
       Then the response should be JSON
    
       Then the response status code should be '200'
    
       Then the JSON response should have '<number_of_properties>' properties
    
       Then the JSON response has a "<id_of_property>" property
    
       Then the JSON "<id_of_property>" property equals "<value_of_property>" 
    
       Then the JSON response header has key "<header_name>" with value of "<header_name>" 
    
       Then /^the JSON response should be:
        """
         <your_json>
        """

     

    當要考慮將測試個案採用 BDD user story 的方式時, 不訪可以參考BddFire https://github.com/Shashikant86/bddfire

    範例程式

    安裝好BDDfire 相關套件之後, 例如下列範例程式,將會執行下列步驟

    1. 啟動瀏覽器瀏覽  www.google.com

    2. Google搜尋頁面中找到搜尋輸入框 q,  輸入 bddfire google Search文字

    3. 搜尋結果頁面會出現 Sign in的文字

    Feature: Google Search to explore BDDfire
    
    
    Scenario: View home page
      Given I am on "http://www.google.com"
      When I fill in "q" with the text "bddfire Google Search"
      Then I should see "Sign in"

     

    參考

    https://www.qatestingtools.com/compare-bdd-testing-tools

    http://jbehave.org/