區塊鏈瀏覽器可以逃離DoS的九陰白骨爪嗎?

買賣虛擬貨幣

說到瀏覽器,大家腦海裡蹦出來的一定是“百度一下,你就知道”、“上網從搜狗開始”......

這些家喻戶曉甚至大爺都說的上來的瀏覽器,是網際網路的代言人,更是網際網路的入口。

但是如果說有誰和網際網路是勾肩搭背的關係,那就是現今如日中天的區塊鏈技術了。

網際網路改變生活,區塊鏈技術改變網際網路。那麼毫無疑問,作為網際網路的入口,瀏覽器必然也與區塊鏈技術脫不開關係。由此誕生的區塊鏈瀏覽器,作為大家耳熟能詳的落地產品,更是為區塊鏈使用者帶來了相當程度的便利。

區塊鏈瀏覽器

安全性如何

區塊鏈瀏覽器是區塊鏈的搜尋引擎,使用者可使用此工具搜尋區塊鏈上的特定資訊。

舉個例子,Etherscan是以太坊的區塊鏈瀏覽器,透過Etherscan,使用者可以輕鬆獲取以以太坊上的區塊、地址、交易和其他活動的資訊。也就是說,區塊鏈瀏覽器,更像是一個區塊鏈官方查詢網站。

那麼在如今大部分割槽塊鏈應用都面臨安全威脅的場景下,區塊鏈瀏覽器的安全性又如何呢?

區塊鏈瀏覽器應用程式的可被攻擊點相對較少。原因如下:

不涉及身份驗證或授權,因此不會洩漏任何私人資訊;

Web框架(如Vue和React)的廣泛使用使得XSS(跨站點指令碼漏洞)的發生可能性降低;

這代表著區塊鏈瀏覽器不會受到攻擊嗎?

還是說,被攻擊了也沒事?

答案是:No

區塊鏈瀏覽器

攻擊型別分類

先來看看區塊鏈瀏覽器可能會受到什麼型別的攻擊。

因為區塊鏈瀏覽器中的大多數功能都涉及從後端資料庫中搜尋資料,或直接從區塊鏈節點中查詢資料。而當提到搜尋查詢功能時,大家一般會想到兩個可能存在的漏洞:

SQL隱碼攻擊;

DoS(Denial-of-service拒絕服務攻擊);

然而,在考察不同的瀏覽器時,CertiK技術團隊僅發現一例SQL隱碼攻擊, 另外超過50%的區塊鏈瀏覽器面臨著被DoS攻擊的危險。

DoS攻擊是什麼

舉個通俗易懂的例子,某白鬍子爺爺眼看某小丑大叔店的炸雞越賣越好,因此找了幾個混混去搞事情。他們站在點餐檯前,顧左右而言他,提出了各種問題和需求,店員焦頭爛額,點了兩個小時的餐也不知道混混到底想要什麼,飢腸轆轆的客人等不下去紛紛離店了。這還不夠,如果小丑大叔店內部本來店員脾氣就不好,一旦被外部矛盾激化,直接上演全武行,店鋪一片狼藉..................

DoS:Denial of Service的簡稱,既拒絕服務,造成DoS的攻擊行為被稱為DoS攻擊,往往是被用來阻止系統向合法使用者提供服務。

在伺服器裡,有一個事實就是:客戶端可以不費任何力氣傳送HTTP請求,但是伺服器可能需要消耗大量資源對請求進行處理和響應。應用層DoS正是利用這樣的特性來進行攻擊。

一般來說,DoS攻防類似於就像是這樣的過程,最終結果取決於誰擁有更多的資源。但是,如果後端程式碼實現有漏洞,單個請求就足以讓伺服器崩潰了。

本文即將為你分享:DoS攻擊的一些案例、DoS攻擊的影響以及保護應用程式的相關建議。

DoS攻擊案例分析

對伺服器進行DoS攻擊的途徑多種多樣。一般來說,目標會選擇:

消耗所有CPU和記憶體資源;

佔用所有的網路連結;

下面對一些可被DoS攻擊的伺服器進行案例分析,其中一些是由於程式碼實現錯誤引起的,而另一些是由於配置錯誤而引起的:

1. 資源訪問API缺少數量限制

https://fake.sample.com/api/v1/blocks?limit=10

以上請求以“limit”引數中指示的數量獲取區塊資訊。當限制設定為10時,它將返回最後10個區塊的資訊。當數字較小時,該請求可以正常工作。

但是,後端可能沒有對“limit”引數設定上限。當CertiK技術團隊將“limit”引數設定為9999999併傳送請求時,請求在被處理很久之後回覆了“504 gateway time-out”錯誤。在伺服器處理以上請求的同時,其他API的響應時間顯著增加。

9999999也超過了該鏈中的區塊總數。

假設是後端嘗試獲取區塊鏈中每個區塊的資料。如果攻擊者傳送了大量的高“limit”引數的請求,該伺服器會無法對正常請求進行響應甚至可能直接崩潰。

2. 巢狀的GraphQL查詢

在調查過程中,CertiK技術團隊遇到了一些使用GraphQL的區塊鏈資源。GraphQL是一種用於API的查詢語言。相比於典型的 REST API 使用多個請求來請求多個資源,GraphQL以透過一次請求就獲取應用所需的所有資料。GraphQL的使用率很高,但是如果使用過程中沒有部署相應的保護措施,很可能會存在安全隱患。

測試區塊鏈瀏覽器時,CertiK技術團隊發現了其中一個瀏覽器使用了GraphQL介面,其定義的兩個型別存在著相互包含的關係,這就允許使用者構造一個非常複雜的的巢狀查詢。

傳送這樣的巢狀查詢可能會導致伺服器上的CPU使用率大幅上升。一般情況下,幾個這樣的請求就能使CPU使用率提高到100%以上,從而導致伺服器無法響應正常使用者的請求。

當伺服器處理此類Graphql請求時的CPU使用率

下圖的“dos_query”展示了巢狀graphql的例子:

這樣惡意的GraphQL請求對伺服器造成的影響取決於查詢的複雜性和伺服器的效能,伺服器可能在花費很多時間之後最終能夠成功響應查詢,但也有可能由於CPU使用率過高,伺服器直接崩潰。如果你想了解有關GraphQL安全性的更多資訊,可以訪問文章末尾的參考連結1。

3. 直接暴露的Cosmos RPC API

https://fake.cosmos.api.com/txs?message.action=send&limit=100&tx.minheight=1

上面的Cosmos API從區塊1開始搜尋100筆傳送出去的交易。截至目前,Cosmos主網中已經有2712445個區塊。在CosmosHub中暴露了RPC API節點裡,我們找不到任何節點可以處理該請求。接受到此請求的伺服器在一段時間後,將返回“502 Bad Gateway”錯誤,表明請求失敗。

節點的RPC伺服器如果在幾秒鐘內收到數百個上面描述的搜尋請求,將會對所有的API請求返回以下錯誤。一些節點伺服器可以錯誤中自行恢復,而另一些則需要被重啟。

為了使讀者更好地理解上述問題並演示其效果,CertiK技術團隊設定了一個完全同步的Cosmos全節點,並使用上面提到的查詢攻擊該節點:“https://fake.cosmos.api.com/txs?message.action=send&limit = 100&tx.minheight = 1”。

Grafana CPU使用率面板

該圖可以分為三個階段:

節點已啟動並正在執行,系統的CPU使用率為35%

節點面臨DoS攻擊,系統CPU使用率達到97%

節點崩潰,無法將新資料提供給Grafana

該圖顯示在DoS攻擊下,伺服器在短短几分鐘內就崩潰了。由於伺服器崩潰後無法使用SSH連線到伺服器,操作員不得不重新啟動伺服器。

4.請求處理程式有缺陷

https://fake.sample.com/api/v1?feature=Always_time_out

CertiK技術團隊遇到了一個會不停載入,過了一會兒就顯示超時的API, 但是向伺服器傳送多個請求並不會影響其他API的響應時間。初步猜測是該特定API的處理方法不佔用CPU或記憶體。由於此區塊鏈瀏覽器不是開源的,因此無法獲得有關API程式碼實現的相關資訊,也無法根據其名稱確定該API端點的用途。

儘管攻擊此API不太可能使伺服器崩潰,但攻擊者可以透過傳送這類“Always hang and time out”請求來佔用所有網路連線,從而阻止其他使用者訪問此伺服器上的API。

舉個例子,“sleep_to_handle_request”函式演示了一個請求可以消耗很少的CPU和記憶體,但是會載入很長時間並佔用網路連線的情況。

與其他三個伺服器完全崩潰,或需要很長時間才能恢復的案例相比,此案例中的伺服器在攻擊停止後立即恢復了。

DoS攻擊的影響

遇到DoS攻擊時,易受攻擊的伺服器將無法響應正常的使用者請求。一些伺服器可以在攻擊停止後立即或在一段時間後恢復到正常狀態,而另一些伺服器將完全崩潰並需要重新啟動。

無法使用區塊鏈瀏覽器會給使用者帶來很大的困擾。因為使用者無法輕易的獲取有關鏈上活動的資訊。此外,在基於Cosmos的鏈上,如果節點遭受DoS攻擊,不僅連線的區塊鏈瀏覽器無法從該節點獲取資料,使用者也無法使用API執行諸如傳送代幣或將代幣委託給驗證者的操作。

建議

任何應用程式都存在被DoS攻擊的威脅,世界上不存在一種解決方案可以完美的防範DoS攻擊。但有些方法可以用來增加攻擊成本從而使潛在的攻擊者難以執行攻擊操作,並降低區塊鏈瀏覽器應用中的存在漏洞的概率。

在這裡,CertiK技術團佇列出了一些建議,以最大程度地減少應用程式被攻擊的機率:

1.速率限制

即使後端API在實現上足夠安全,攻擊者也可以透過向伺服器傳送大量請求來進行攻擊。因此,API在任何情況下都應該設定速率限制來暫時或永久遮蔽惡意IP。

雖然速率限制並不能完全解決問題,但操作起來相對便捷,可以構成針對DoS攻擊的第一道防線。

2.改良設計和實現

良好的程式設計和程式碼實現能在相同的硬體條件下表現出更好的效能,這種效果在與資料庫搜尋和資料處理相關的功能方面表現得更加突出。但是在考慮效能之前,首先要確保程式碼沒有錯誤。

因此,在API部署到生產環境前編寫單元測試上投入大量時間是非常值得的,以此來確保它們能夠按預期工作。

3.輸入驗證和引數限制

不對使用者提供的變數進行驗證和限制,那麼攻擊者就可以濫用API。

在確定程式碼能夠按預期工作之後,下一步要做的是確保攻擊者不能利用非常規的輸入濫用API。類似於獲取9999999區塊的資料或處理1000級迴圈的GraphQL查詢的請求不應該被允許。

因此,所有使用者輸入均應被視為不可信的,伺服器應在處理使用者輸入之前對其進行驗證。

在上文提到的案例中,GraphQL API可以設定最大層數限度以有效防禦迴圈查詢的DoS攻擊,而塊資料獲取API則可以將最大塊數限制為像50這樣的合理數值。

開發人員可以根據程式碼實現和程式設計,總結出最合適當前程式的的輸入驗證和限制的方案。

4.不要暴露節點RPC

並非所有API的程式碼實現都在開發人員的控制之下。

比如,開發人員並不推薦去改Cosmos RPC API的程式碼。Cosmos SDK中某些搜尋查詢的效能不是很好,那麼該怎麼辦?

解決方案之一:圍繞Cosmos RPC API建立一層包裝API,並建立一個儲存區塊鏈資料的資料庫,該資料庫從節點同步區塊鏈資料。外層的包裝API向公眾公開,並接收和處理使用者請求,隨後再將請求傳遞到Cosmos RPC或在後端資料庫中搜尋資料。新增外層API有效地防止了使用者直接與節點RPC API進行互動。資料庫可以防止節點被搜尋查詢請求所淹沒,並且開發人員可以按照他們所希望的方式最佳化資料庫。

在Cosmos論壇上,使用者“kwunyeung”也提出了一種解決方案:使用HTTP代理(例如Nginx或Caddy)來保護RPC埠。總的來說想表達的觀點是一致的:RPC埠不能直接向公眾公開,同時還要採取保護措施。

5.符合建議的硬體要求

即使部署了上述所有防禦機制,使用者還是需要注意執行API伺服器或例如Tendermint(詳見參考連結2)這樣的穩定節點對硬體的最低要求。如果伺服器在處理來自普通使用者訪問網站所產生請求就有困難的時候,那麼管理員需要考慮升級硬體了。

總結

DoS攻擊可能會使諸如區塊鏈瀏覽器之類的應用程式陷入崩潰,這對大部分企業來說可以稱得上是致命的威脅。

CertiK專業的安全技術團隊在應用程式漏洞評估,針對諸如Solidity、RUST和Go等不同語言的程式碼審計,以及以太坊,Cosmos和Substrate等平臺的安全維護方面擁有豐富的經驗和專業的安全知識。

針對包括區塊鏈瀏覽器、錢包、交易所、智慧合約,甚至底層區塊鏈協議的實現在內的區塊鏈相關業務,如需進行全面的安全審計,CertiK擁有多年的實戰防護經驗及最先進的形式化驗證技術,將是你最值得信賴的安全專家。

附錄

這是一個示例指令碼,用於測試Cosmos節點是否容易受到DOS攻擊。透過修改“url”變數可以測試不同的應用程式。

請不要對未經許可的應用程式執行。

import requestsimport threading import urllib3 urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) #Modify the url url ="https://fake.cosmos.api/txs?message.action=send&limit=100&tx.minheight=1"def dos_thread(): while(1): response = requests.request("GET", url, verify=False) print(response.text.encode('utf8')) if __name__ == "__main__": for i in range(300): t = threading.Thread(target=dos_thread) t.start()

參考連結:

1.

https://www.apollographql.com/blog/securing-your-graphql-api-from-malicious-queries-16130a324a6b/

2. https://github.com/tendermint/tendermint/blob/master/docs/tendermint-core/running-in-production.md#hardware

往期回顧

來自火星的天問一號“拍了拍”你

CTK安全激勵:神荼遊戲正式上線

黑你之後還整倒計時?750萬美元不按時交,贖金加倍!

CTK安全激勵:神荼遊戲正式上線

“336枚BTC去哪兒”後續追蹤,Cashaa交易所錢包被盜事件進一步分析

Staking業務新型節點運營產品:NoOps正式上線

神荼激勵測試網正式啟動,是時候撒點CTK了!

CertiK聯合知名公鏈專案aelf共同主辦全球駭客懸賞活動,等你挑戰!

推特大規模被黑,蘋果、亞馬遜,甚至前總統都被殃及?

DeFi專案又雙叒叕出么蛾子,BZRX IDO事件解析及防範建議

哥大校友會分享問答:從直升機到NASA,軍用級安全護盾的區塊鏈應用

請點選“閱讀原文”訪問CertiK官方網站

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;