針對SOAP的滲透測試與防護
SOAP概述
簡單對象訪問協(xié)議(SOAP)是連接或Web服務或客戶端和Web服務之間的接口。SOAP通過應用層協(xié)議(如HTTP,SMTP或甚至TCP)進行操作,用于消息傳輸。
圖1 SOAP操作
它是基于xml語言開發(fā)的,它使用Web服務描述語言(WSDL)來生成Web服務之間的接口。如果客戶端或用戶的獨立應用程序想要與Web服務連接,則它需要由應用程序生成的服務端點接口(SEI)。這些接口WSDL和SEI是使用自動化工具或手動生成的,它們具有平臺無關性。通用描述,發(fā)現(xiàn)和集成(UDDI)是Web服務可以發(fā)布關于其服務的一個目錄,用戶可以提交他們的查詢。
一個簡單的SOAP消息包含:
Envelope: 標識XML文檔,具有名稱空間和編碼詳細信息。
標題:包含標題信息,如內(nèi)容類型和字符集等。
正文:包含請求和響應信息.
故障:錯誤和狀態(tài)信息。
圖2 SOAP請求和響應的示例
圖2顯示了SOAP請求和響應,其中Web服務請求用戶的名稱并回復消息。SOAP是一組被定義為執(zhí)行某些操作的標準協(xié)議,因此它只傳輸請求的數(shù)據(jù),無論請求是什么,如果它在其機制中被驗證,它將有答復。
常見SOAP漏洞:
SQL 注入:
SOAP請求易受SQL注入攻擊,提交參數(shù)作為變種 sql查詢可以泄露敏感信息。
攻擊前:
在執(zhí)行攻擊之前,必須知道Web服務的功能,如圖3所示,可以看到以string作為輸入的username參數(shù)。
圖3請求功能分析
輸入隨機用戶名以檢查其操作,此時它回應用戶名不存在的消息,這可以幫助執(zhí)行具有可能性的攻擊。
圖4響應信息分析
攻擊后:
下面顯示的請求是一個攻擊者試圖通過在參數(shù)的位置傳遞一個sql查詢來訪問用戶詳細信息,數(shù)據(jù)庫的錯誤消息將有助于猜測查詢的內(nèi)容。
圖5數(shù)據(jù)庫錯誤消息
圖6 SQL注入請求
如果傳遞的查詢成功中斷了數(shù)據(jù)庫語句查詢,那么它將回應用戶的信息。
圖7 SQL注入響應
payload: SQL注入的payload是簡單的變形查詢,它使數(shù)據(jù)庫獲取詳細信息,在上面的例子中,使用的數(shù)據(jù)庫是My SQL(來自Fig.5),它可能包含不同的表,知道所有表中的信息可能是不可能的,但是 在這種情況下可以訪問某些字段。在圖3中,SOAP消息正在使用結合用戶名和1=1的OR語句請求管理員帳戶的詳細信息,并且將其他所有內(nèi)容標記為“-- ”注釋,這使得數(shù)據(jù)庫顯示所有用戶的用戶名和簽名。在SQL注入中,可以有更多的可能性來執(zhí)行攻擊,例如具有“,”,“ - ”,“or””and”,“insert”或滿足條件的任何其他組合查詢的語句。
補?。哼@種類型的攻擊可以通過兩種方式來進行防護與修復:
白名單:雖然列表只允許某些字符通過,但在此列表中添加admin等字符會使應用程序只接收列出的字符。
過濾:其中涉及通過刪除不需要的字符(例如admin'OR'1 = 1'')來過濾用戶輸入 - 將被清理,以便只有admin通過它。
命令注入
命令注入是通常通過傳遞具有數(shù)據(jù)的命令以獲得諸如目錄結構,網(wǎng)站地圖或甚至與web應用相關的敏感信息的攻擊。
圖8命令注入請求(1)
在上述lookupDNS web服務中,使用IP地址和命令ls進行請求,其列出了如下所示的應用的目錄結構
圖9命令注入響應(1)
在其他請求ping命令傳遞與IP地址ping主機,如下所示
圖10命令注入請求(2)
圖11命令注入響應(2)
payload:對于這種類型的攻擊,payload是與用戶輸入相結合的命令語句,但有些命令是常用的,有些是操作系統(tǒng)特定的,操作系統(tǒng)的類型是可以由HTTP可以看到的簡單操作。 諸如ls,adduser,install,kill或join等命令可用于執(zhí)行操作。
補丁:為了修補命令注入攻擊,必須構建嚴格的驗證機制,并且實現(xiàn)其功能,數(shù)據(jù)庫對于包含攻擊模式192.168.66.2; ls 和192.168.66.2& & ping c1 localhost 進行驗證,以便它只允許字母數(shù)字字符。在上述命令中,注入攻擊包括特殊字符&或;這將在服務端執(zhí)行時分離命令和數(shù)據(jù),因此必須開發(fā)考慮這些情況的函數(shù)功能。
XML 注入
在XML注入類型的攻擊中,SOAP消息的變形請求可以在數(shù)據(jù)庫中進行更改,并對數(shù)據(jù)庫造成嚴重損壞。
正常功能:創(chuàng)建用戶函數(shù)在應用程序中創(chuàng)建新用戶,這需要幾個參數(shù)作為輸入,如圖12所示
圖12 XML請求
響應將具有帶有插入了用戶名帳戶的消息的return語句,如圖13所示
圖13 XML響應
攻擊
在實際的XML注入中,代碼的一部分被變形并與請求一起發(fā)送,使得代碼將在另一側執(zhí)行,在圖14中,創(chuàng)建用戶功能被添加有附加代碼以利用服務。
圖14 變形的XML請求
從圖15可以看出,web服務被執(zhí)行具有插入了用戶名帳戶的消息的代碼。該功能執(zhí)行攻擊者插入的參數(shù),而不是實際請求。
圖15 變形請求的響應
payload:這種類型攻擊的有效載荷實際上是在另一端提交的參數(shù),在這種情況下,創(chuàng)建用戶XML標簽被變形或添加了帳戶Alice的詳細信息并附加請求,以便它將執(zhí)行它。
補?。哼@種類型的攻擊的補丁對createUser的標簽字符串進行了嚴格的限制,它必須使用字符串的長度來定義,并且必須定義wsdl中createUser功能的次數(shù)或發(fā)生次數(shù)。 基于數(shù)據(jù)和解析器為用戶輸入開發(fā)清理機制,并且還使用文檔類型定義(DTD)來驗證嘗試注入是最佳實踐。
SOAP操作欺騙
每個HTTP請求都包含一個稱為SOAP Action的字段,用于執(zhí)行在其內(nèi)容中定義的操作??赡苡晒粽吒淖儍?nèi)容,攻擊者在客戶端和服務器之間操作,一種繞過或中間人攻擊。
下面顯示的請求消息包含一個稱為create user的功能,它可以在SOAP Action字段和SOAP主體中看到。
圖16帶有SOAP動作字段的SOAP請求
簡單地變形(可能不是一個)可以改變其功能,如圖17所示
圖17 變形的SOAP動作的請求
在更改請求并將其傳遞到服務器后,請求將有一個響應,因為它似乎是合法的,并執(zhí)行其操作刪除帳戶,可以在圖18
圖18 SOAP執(zhí)行變形請求后的響應
payload:對于這種類型的攻擊沒有特定的有效載荷,SOAP動作字段被認為是目標,對功能的徹底分析可以提供執(zhí)行攻擊的線索。僅改變SOAP字段可能不足以執(zhí)行攻擊,它可能需要根據(jù)所執(zhí)行的動作來改變請求消息。
補?。簽榱朔乐惯@種類型的攻擊,必須在HTTP請求中禁用SOAP Action字段(如createUser或deleteUser),或使用不容易猜到的SOAP Action術語。有時可能需要在這樣的事件中強制添加Action字段,開發(fā)人員必須考慮SOAPAction:“”(意味著SOAP消息的意圖由請求的URI給出)的可能性或SOAP Action:(空字段表示 消息的意圖是不指示任何值或URI)。
SOAP參數(shù)DOS攻擊
每個SOAP請求包含一個被傳遞以獲取一些數(shù)據(jù)的參數(shù),有一些請求,攻擊者可以利用這些請求來執(zhí)行拒絕服務攻擊。 如果應用程序無法執(zhí)行輸入驗證或沒有參數(shù)的邊界,可能導致緩沖區(qū)溢出,這將使服務不可用。 下圖顯示的參數(shù)用戶名沒有任何邊界限制,因此任何一個都可以將任意長度的字符串傳遞給應用程序。
圖19沒有限制條件的SOAP請求
如果用戶名有限制,那么它會有一些異常傳遞正確的字符串,這將使應用程序安全。
payload:這種類型的攻擊的有效載荷是知道在請求中傳遞的數(shù)據(jù)類型,因此基于傳遞最大值或大值的數(shù)據(jù)類型可以是攻擊的方式。
補?。簽榱藴p輕這種類型的攻擊,必須使用最小和最大長度或某些邊界來定義參數(shù),例如參數(shù)用戶名包含5個最小值和35個字符串最大長度,可以在處理中輕松驗證。
圖20 帶條件的SOAP請求
WSDL泄露
WSDL泄露不能被視為攻擊,而是攻擊的一個步驟,就像我們所知道的,所有WSDL都知道的包含Web服務的信息,有一些Web服務需要對諸如支付網(wǎng)關或正在收集敏感信息的服務等攻擊者隱藏。 任何攻擊者都可以通過在搜索引擎中輸入“inurl:?wsdl”來搜索Web服務。
圖21 wsdl搜索
圖22 Web服務WSDL
補丁
用于數(shù)據(jù)的安全傳輸?shù)腤eb應用程序從不依賴于其安全性如使得Web服務的URL,對于搜索引擎和公開內(nèi)容是隱藏的,并且對諸如機密性,完整性和真實性的特征進行嚴格保持。