弱點掃描解決方法
主題: |
弱點掃描解決方法 |
文章簡介: |
介紹經弱點掃描可能會遇到的問題與提供解決方式 |
作者: |
林保安 |
版本/產出日期: |
V1.0/2017.10.27 |
1. 前言
• 本文件用來提供Java開發人員在弱點掃描時,可能遇到的問題及提供解決方式,可以作為參考的依據。
• 本文使用測試規範為OWASP Top10 2010 And 2013。
• 本文提供Critical And High Level相關問題。
• 本文件適用於Java Web Project。
2. 目的
• 提供經弱點掃描,遇到的問題及提供解決方式。
3. 列舉問題與解決方式
注入攻擊(Injection)
Dynamic Code Evaluation: Code Injection |
Critical |
Analysis Info |
|
Sink: setTimeout(0) Source: Read response from done() In jquery.js or jquery.min.js |
|
解決方式: |
|
在js檔案內容刪除setTimeout相關字眼。 |
XML External Entity Injection |
Critical |
Analysis Info |
|
Sink: javax.xml.bind.Unmarshaller.unmarshal() Source: java.io.BufferedReader.readLine() |
|
解決方式: |
|
無法直接用readLine(),因為容易受到XML外部實體攻擊,所以建議加入以下程式碼,成為安全設定的解析器以解析文件。 Result = readLine()後的結果。 Tx = Object Class。 InputStream is = new ByteArrayInputStream(result.getBytes("UTF-8")); JAXBContext jaxbContext = JAXBContext.newInstance(Tx.class); Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller(); DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance(); dbf.setFeature("http://xml.org/sax/features/external-general-entities",false); dbf.setFeature("http://xml.org/sax/features/external-parameter-entities",false); dbf.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING,true); dbf.setExpandEntityReferences(false); DocumentBuilder db = dbf.newDocumentBuilder(); Document document = db.parse(is); Tx tx= (Tx)jaxbUnmarshaller.unmarshal(document); |
敏感資料外洩(Sensitive Data Exposure)
Password Management: Hardcoded Password Password Management: Password in HTML Form Password Management: Password in Comment Password Management: Password in Configuration File |
Critical |
Analysis Info |
|
Sink: FieldAccess: password |
|
解決方式: |
|
在JS or JSP or JAVA or XML檔案內含password字眼,所以需要移除或是另尋方法以達到相同結果,例:用串接方式達到password的效用。 |
跨站腳本攻擊(Cross-Site Scripting)
Input Validation and Representation |
Critical |
Analysis Info |
|
傳送未經驗證的資料到網路瀏覽器,導致瀏覽器執行惡意的程式碼 |
|
解決方式: |
|
在JSP頁面,可能會用以下方式宣告變數。 若此方式宣告,可能會造成執行惡意的程式碼,建議作法是JSTL+判斷式,這樣可以避免此問題的發生。 例: |
可移植性問題 (Portability Flaw)
Portability Flaw: Locale Dependent Comparison |
High |
Analysis Info |
|
呼叫equals()會造成移植性問題,因為存在不同的地區設定,可能會導致非預期的輸出。這也可能會規避自訂驗證例行程序。 |
|
解決方式: |
|
1. 發生此問題,可能是使用以下方法。 2. 此問題需要定義地區才能避免問題的發生。 |
不安全隨機性(Insecure Randomness)
Insecure Randomness |
High |
Analysis Info |
|
由 random() 實作的亂數產生器無法抵擋加密攻擊。 |
|
解決方式: |
|
因為使用Math.random()亂數產生器,需改用以下方式,或是用數字邏輯達到相同結果。 |
Insecure Randomness |
High |
Analysis Info |
|
使用虛擬亂數產生器也無法抵擋加密攻擊(bootstrap.js or jquery.js)。 |
|
解決方式: |
|
在js檔案內容刪除Math.random()相關字眼。 |
未釋出系統資源(Unreleased Resource: Streams)
Unreleased Resource: Streams Unreleased Resource: Sockets Null Dereference |
High |
Analysis Info |
|
程式可能因例外或其他原因無法釋出系統資源。資源洩漏至少有兩種常見原因1.錯誤條件以及其他異常情況。 2.不確定程式的哪一部份負責釋放資源。 |
|
解決方式: |
|
呼叫另外撰寫的函數SafeClose.close 例: |
4. 結論
• 我所遇到的問題,大多是JQuery & Bootstrap方面的問題,這部分我是直接升到最新版,再進行修改,刪除有問題的字眼或是相關的程式碼,但可能會造成Project功能上的異常,所以需要邊修改邊測試。
• 其他方面問題大都列在本文內,未列的問題,基本上都可以在網路上得到解答。
5. 參考來源
• Fix Fortify Issue 整理利用Fortify程式碼掃描的修改心得-http://fortifyissue.blogspot.tw/2014/08/unreleased-resource-streams.html
• Welcome to OWASP-https://www.owasp.org/index.php/Main_Page
• OWASP Top 10 Application Security Risks – 2010-https://www.owasp.org/index.php/Top_10_2010-Main
• OWASP Top 10 Application Security Risks – 2013-https://www.owasp.org/index.php/Top_10_2013-Top_10
• OWASP釋出新十大資安風險,API風險是新威脅-https://www.ithome.com.tw/news/113873