2021 OWASP Top 10 A03 Injection 的攻擊

2022/07/04


A03 Injection 的攻擊介紹

容易被遭受Injection 的攻擊4種情況

.應用程式沒有做驗證、過濾或是轉化使用者提供的資料。

一般來看使用者提供的資料,直接聯想到可能是網頁所直接收進來的 Query String 的資料,或是 POST DATA 的資料,但是資料庫所進來的資料也有可能是使用者間接提供的

,或是 Http header是使用者可以直接提供的資料,因此,應該須確認資料來源是否為使用者直接提供,還是使用者間接提供的資料。

.在直譯器裡面使用的內容是沒有做跳脫或不是用參數化的呼叫。

那因為直譯器相關的語法SQL、 template、ORM和 OS 的資料因為使用者可以直接提供,或是影響的狀況,導致直譯器無法分辨的情況下就可以直接做查詢或執行。

.ORM 的搜尋參數中,使用惡意的資料來擷取額外的敏感紀錄。

ORM Injection在搜尋的參數裡面可以用一些額外的語法去影響目前所查詢的語法。

.在動態查詢、命令或是資料庫語法系統指令中,直接使用或是連結惡意資料。

以上就是所有的使用者的輸入可以去影響程式的執行,早期 Injection 是不包含所謂的 Cross-Site Scripting XSS 的攻擊,在今年度OWASP 把 Injection 跟 XSS 一次做合併。

建議確認從所有的參數、表頭、URL、cookies、JSON SOAP 或是 XML 的資料都要做一個測試,而企業應使用靜態源碼測試,或動態應用程式檢測的工具,透過 CI/CD 做上線前的部署以識別 Injection 的缺陷。

A03 Injection攻擊如何做修補跟預防

1.命令把查詢資料分開,去防止 Injection 的攻擊。

首先使用 Framework 當中相關的參數去,舉例: Prepare Statement查詢方式,

去做相對應的查詢。

2.使用正向表列或是白名單在伺服器去驗證輸入的資料。

正向表列,在 API 一開始輸入資料中寫一個正規表示式去確認資料的正確性,或是白名單的方式,也可以避免使用者做直接的輸入。

3.對於任何的動態查詢,在轉譯的中針對特殊符號去做相對應的攔截。

4.在查詢當中,使用 LIMIT 或是其它的 SQL 控制器去防止資料大量的輸出。

A03 Injection攻擊情境的範例

情境一:SQL Injection

在字串中可以看到ID 的參數,是直接從 get 的 Parameter 輸入進來的,使用者是直接操作ID 參數去做查詢和攻擊,建議使用一個正向表列去限制ID 只有數字可以做輸入,是一個有效的修補方式。

情境二:查詢

ID 輸入進程式裡,在第四行裡面一樣是利用了get Parameter 把 ID 做一個轉介,從使用者輸入轉介到查詢語法,基本上也是跟 SQL 是類似的 HQL 語法,這樣的情況下,導致使用者可以用 HQL 的語法去影響整個程式的執行。

以上兩個情境,使用者都可以用 ID單引號 or 1=1,這樣的攻擊去影響整個程式的執行,是一個標準的 SQL Injection 攻擊的情境。

總結

對應的 CWE 列表的時候,從 Command Injection OS Command Injection然後到 SQL Injection LDAP Injection,延伸到了所謂的 XSS Cross-Site Scripting 跨站腳本攻擊,以上前端的問題在這一次 Injection 裡面被包括進來了。接下來,相對應的比較新型態的 Injection,如: XML Injection,或是 HTTP Response Splitting 為CRLF 的 Injection 的攻擊,同樣地,也包括了XPath Injection 、XQery Injection及EL Injection 的問題,因此Injection 影響的範圍非常的廣,建議可以針對使用者輸入做一個確認跟過濾轉化的做法。


其他訊息