Cyber Security - Insecure Deserialization
Introduction
在 ASP.NET MVC Framework - JSON 中有提到關於 Serialization 序列化 & Deserialization 反序列化的觀念
而不安全的反序列化其實是 OWASP 十大漏洞之一!
對資料進行序列化和反序列化的 Web 應用程式
序列化是指從應用程式碼中獲取物件,並將其轉換為可用於其他目的的格式
反序列化將資料轉回為應用程式可以使用的物件
序列化就像在搬家之前將傢俱打包到箱子裡,而反序列化就像在搬家之後拆開箱子並組裝傢俱
而不安全的反序列化攻擊就像搬家公司在拆箱之前篡改箱子中的物品!
不安全的反序列化漏洞利用,是不可信來源的資料反序列化的結果
防止不安全反序列化攻擊的唯一肯定有效的方法是,禁止來自不受信任來源的資料反序列化
Serialization & Deserialization
讓我們複習一下什麼是 Serialization 序列化和 Deserialization 反序列化:
- Serialization:序列化
- 將資料結構或物件狀態轉換成可儲存的格式
- Deserialization:反序列化
- 相反的過程,從一系列位元組中,提取資料結構
Insecure Deserialization Cause
嗚姆,那什麼是造成不安全的反序列化成因呢?
當不受信任的資料用於濫用應用程式的邏輯流程、執行任意程式碼,或在反序列化時執行阻斷服務(DoS,Denial Of Service)時,即可能造成 Insecure Deserialization 不安全的反序列化
造成 Insecure Deserialization 的原因:
開發人員通常更信任淨化的物件提供的資料,而不是傳統的使用者輸入
Insecure Deserialization Example
假設一個線上商店使用 Serialization 序列化來儲存使用者的購物車,使用者儲存購物車的狀態,並從網站接收序列化物件,例如:
1 | {"productId":6, "amount":2, "price":42.00} |
但在此例中,只要使用者更改序列化物件
1 | {"productId":6, "amount":2, "price":5.00} |
將價格變更為 5,若應用程式不檢查序列化物件而使用新價格
當物件被載入、由應用程式反序列化,以及未經驗證就使用資料時,就會發生不安全的反序列化
使用者只需要為反序列化物件支付價格,此時僅需支付 5 元而已!
哎呀,這樣商家就虧爛了啊!
Insecure Deserialization Impact
而 Insecure Deserialization 不安全的反序列化可能會造成深遠的影響
不安全的反序列化可用於執行任意程式碼、濫用應用程式的邏輯流程,甚至可造成阻斷服務攻擊(DoS,Denial Of Service)
根據序列化物件的使用方式,Insecure Deserialization 亦可能造成 SQL Injection、Cross-Site Scripting(XSS)、Remote Code Execution 攻擊!
Insecure Deserialization Prevent
嚇都嚇鼠了,那該怎麼防禦呢?
- 開發人員透過篩選或驗證,將序列化物件的資料清理為不受信任的使用者輸入
- 對任何序列化物件實施完整性檢查,例如數位簽章,防止篡改
- 隔離並執行在低特權環境中反序列化的程式碼
Reference
Secure Code Warrior 安全學習平台
OWASP Top 10
OWASP Top Ten: Insecure Deserialization
Understanding Insecure Deserialization
