java 弱點掃描 web

弱點掃描解決方法

林保安 2017/11/02 23:40:32
15991







主題

弱點掃描解決方法

文章簡介

介紹弱點掃描可能會遇到的問題與提供解決方式

作者

林保安

版本/產出日期

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

林保安