跳至內容

靜態應用程式安全測試

維基百科,自由的百科全書

靜態應用程式安全測試(Static application security testing)簡稱SAST,是透過審查程式原始碼來識別漏洞,提昇軟件安全性的作法。早在電腦問世時,就已有靜態程式分析的作法。自從1998年起,SQL注入的攻擊方式開始出現在公眾的討論中,而網絡應用程式整合了JavaScriptAdobe Flash Player,因此從90年代末開始,用靜態程式分析進行安全測試的作法也開始普及。

靜態應用程式安全測試的作法和動態應用程式安全測試(DAST)的黑盒測試工具不同,DAST是針對應用程式的功能,而SAST是白盒測試,着重在應用程式的程式碼本身。 SAST工具會掃描應用程式以及其元件的程式碼,確認其軟件及架構中是否有安全漏洞。 靜態分析工具約可偵測到50%程式的安全漏洞[1]

軟件開發過程中,靜態應用程式安全測試可以在開發過程的早期,在程式碼階段進行,也可以在所有的程式碼及軟件元件放在一致的測試環境時再測試。此一技術也用在軟件品質保證[2],不過會產生許多的假警報,因此也讓軟件開發者不願導入此一測試[3]

SAST工具可以整合到開發流程中,幫助開發團隊,讓他們主要專注在開發及交付對應需求規格的軟件[4]。SAST工具像其他的安全工具一様,着重在減少應用程式無法正常運作的風險,也避免應用程式中儲存的私隱資料不會被破壞或是洩漏。

簡介

應用程式的安全測試可以分為三種:除了靜態應用程式安全測試(SAST)外,還有動態應用程式安全測試(DAST),以及合併上述兩者的互動式應用程式安全測試(IAST)[5]

靜態分析工具會以語法來檢查程式碼,在原始碼中依固定模式或是公式來確認。理論上,靜態分析工具也可以檢查編釋後的程式。其技術是以程式的instrumentation為基礎,會比對編釋後的元件以及元件的原始碼,以識別問題。 靜態分析可以人工進行,像是為了代碼審查或是為了不同目的(包括軟件安全)的軟件稽核審查英語Software audit review,但相當花時間[6]

SAST工具的準確度會受到分析的範圍,識別漏洞的技術而定。以下是幾種不同層次的分析:

分析的範圍會決定其準確度,以及用上下文資訊偵測漏洞的能力[7]

在函式層級的常見技術,是創建控制資料流動程式的抽象語法樹[8]

從1990年代後期開始,商業模式的變化也讓軟件開發開始轉向元件化[9],開發團隊的組織和流程也促使這樣的轉變[10]。隨着資料流在應用程式的各元件之間(或是各應用程式之問)流動,就需要在呼叫程式時加入特定程序來「消毒」,也要避免程式中的資料被污染[11][12]

網頁應用程式的興起,更突顯了測試的重要性。Verizon Data Breach 2016年指出,40%的資料泄露是和網頁應用程式的漏洞有關[13]。網絡安全的威脅有來自外部的,目前也開始關注內部的威脅。Clearswift Insider Threat Index(CITI)指出,2015年的問卷的回覆者中,有92%在過去一年內曾遭受過IT事件或是網絡安全事件,而有72%的資料外泄是由公司或組織內部人士發起[14]。Lee Hadlington將內部威脅分為三類:惡意、意外及未蓄意。手機軟件的爆炸性成長,因此需要在開發早期加入應用程式的安全機制,以減少惡意程式碼的散佈[15]

優點

漏洞在在軟件開發生命週期中的越早期進行修正,所花的成本越小。在開發階段修正的成本約是測試階段修正成本的十分之一,是量產階段修正成本的百分之一[16]。 不論是在程式碼層次或是應用程式層次的SAST工具,都會自動執行,不需要與其互動。若將SAST工具整合在CI/CD(持續整合/持續發佈)流程內, 在SAST工具識別到嚴重的漏洞時,可以自動停止整合流程[17]

SAST工具會掃描所有的程式碼,程式碼的覆蓋率是100%。而DAST(動態應用程式安全測試)工具覆蓋了執行到的部份,應用程式中可能有些部份不會掃描到[5],也有可能在組態檔案中有些不安全的組態。

SAST工具會有品質測試或是架構測試的副加功能,軟件品質和安全性之間有直接的相關性。若軟件品質不好,其安全性也不會好[18]

缺點

即使軟件開發者都對SAST工具的使用有正面的回應,在導入時仍有許多不同的挑戰[4]

若是使用敏捷軟件開發,開發者一開始會注重在產品特徵以及產品交付,不會一開始就考慮安全性,因此早期導入SAST工具會出現許多的錯誤[19]

用SAST工具掃描較大的程式,可能會有上百個甚至成千個的漏洞警告,SAST工具會產生許多是偽陽性的假警報,增加分析的時間,並且降低程式設計師對此工具的信任。若有些漏洞的上下文是工具偵測不到的,那此一問題就更加嚴重了[3]

相關條目

參考資料

  1. ^ Okun, V.; Guthrie, W. F.; Gaucher, H.; Black, P. E. Effect of static analysis tools on software security: preliminary investigation. (PDF). Proceedings of the 2007 ACM Workshop on Quality of Protection (ACM). October 2007: 1–5 [2023-05-08]. S2CID 6663970. doi:10.1145/1314257.1314260. (原始內容存檔 (PDF)於2023-01-23). 
  2. ^ Ayewah, N.; Hovemeyer, D.; Morgenthaler, J.D.; Penix, J.; Pugh, W. Using static analysis to find bugs. IEEE Software (IEEE). September 2008, 25 (5): 22–29. S2CID 20646690. doi:10.1109/MS.2008.130. 
  3. ^ 3.0 3.1 Johnson, Brittany; Song, Yooki; Murphy-Hill, Emerson; Bowdidge, Robert. Why don't software developers use static analysis tools to find bug. ICSE '13 Proceedings of the 2013 International Conference on Software Engineering. May 2013: 672–681. ISBN 978-1-4673-3076-3. 
  4. ^ 4.0 4.1 Oyetoyan, Tosin Daniel; Milosheska, Bisera; Grini, Mari. Myths and Facts About Static Application Security Testing Tools: An Action Research at Telenor Digital. International Conference on Agile Software Development. (Springer). May 2018: 86–103. 
  5. ^ 5.0 5.1 Parizi, R. M.; Qian, K.; Shahriar, H.; Wu, F.; Tao, L. Benchmark Requirements for Assessing Software Security Vulnerability Testing Tools.. IEEE 42nd Annual Computer Software and Applications Conference (COMPSAC) (IEEE). July 2018: 825–826. ISBN 978-1-5386-2666-5. S2CID 52055661. doi:10.1109/COMPSAC.2018.00139. 
  6. ^ Chess, B.; McGraw, G. Static analysis for security. IEEE Security & Privacy (IEEE). December 2004, 2 (6): 76–79. doi:10.1109/MSP.2004.111. 
  7. ^ Chess, B.; McGraw, G. Risk Analysis in Software Design. IEEE Security & Privacy (IEEE). October 2004, 2 (4): 76–84. doi:10.1109/MSP.2004.55可免費查閱. 
  8. ^ Yamaguchi, Fabian; Lottmann, Markus; Rieck, Konrad. Generalized vulnerability extrapolation using abstract syntax trees. Proceedings of the 28th Annual Computer Security Applications Conference (IEEE). December 2012, 2 (4): 359–368. S2CID 8970125. doi:10.1145/2420950.2421003. 
  9. ^ Booch, Grady; Kozaczynski, Wojtek. Component-Based Software Engineering. 2006 IEEE Symposium on Security and Privacy (S&P'06) (IEEE Software). September 1998, 15 (5): 34–36. S2CID 33646593. doi:10.1109/MS.1998.714621. 
  10. ^ Mezo, Peter; Jain, Radhika. Agile Software Development: Adaptive Systems Principles and Best Practices. 2006 IEEE Symposium on Security and Privacy (S&P'06) (Information Systems Management). December 2006, 23 (3): 19–30. S2CID 5087532. doi:10.1201/1078.10580530/46108.23.3.20060601/93704.3. 
  11. ^ Livshits, V.B.; Lam, M.S. Finding Security Vulnerabilities in Java Applications with Static Analysis. USENIX Security Symposium. May 2006, 14: 18. 
  12. ^ Jovanovic, N.; Kruegel, C.; Kirda, E. Pixy: a static analysis tool for detecting Web application vulnerabilities. 2006 IEEE Symposium on Security and Privacy (S&P'06) (IEEE). May 2006: 359–368. ISBN 0-7695-2574-1. S2CID 1042585. doi:10.1109/SP.2006.29. 
  13. ^ 2016 Data Breach Investigations Report (PDF). 2016 [2023-05-11]. (原始內容存檔 (PDF)於2021-03-20). 
  14. ^ Clearswift Insider Threat Index (CITI) (PDF). 2015 [2023-05-11]. (原始內容存檔 (PDF)於2020-12-08). 
  15. ^ Xianyong, Meng; Qian, Kai; Lo, Dan; Bhattacharya, Prabir; Wu, Fan. Secure Mobile Software Development with Vulnerability Detectors in Static Code Analysis. 2018 International Symposium on Networks, Computers and Communications (ISNCC). June 2018: 1–4. ISBN 978-1-5386-3779-1. S2CID 53288239. doi:10.1109/ISNCC.2018.8531071. 
  16. ^ Hossain, Shahadat. Rework and Reuse Effects in Software Economy. Global Journal of Computer Science and Technology. October 2018 [2023-05-11]. (原始內容存檔於2023-06-10). 
  17. ^ Okun, V.; Guthrie, W. F.; Gaucher, H.; Black, P. E. Effect of static analysis tools on software security: preliminary investigation (PDF). Proceedings of the 2007 ACM Workshop on Quality of Protection (ACM). October 2007: 1–5 [2023-05-08]. S2CID 6663970. doi:10.1145/1314257.1314260. (原始內容存檔 (PDF)於2023-01-23). 
  18. ^ Siavvas, M.; Tsoukalas, D.; Janković, M.; Kehagias, D.; Chatzigeorgiou, A.; Tzovaras, D.; Aničić, N.; Gelenbe, E. An Empirical Evaluation of the Relationship between Technical Debt and Software Security. Konjović, Z.; Zdravković, M.; Trajanović, M. (編). International Conference on Information Society and Technology 2019 Proceedings (Data set) 1: 199–203. August 2019. doi:10.5281/zenodo.3374712可免費查閱. 
  19. ^ Arreaza, Gustavo Jose Nieves. Methodology for Developing Secure Apps in the Clouds. (MDSAC) for IEEECS Conferences. 2019 6th IEEE International Conference on Cyber Security and Cloud Computing (CSCloud)/ 2019 5th IEEE International Conference on Edge Computing and Scalable Cloud (EdgeCom) (IEEE). June 2019: 102–106. ISBN 978-1-7281-1661-7. doi:10.1109/CSCloud/EdgeCom.2019.00-11.