1前言——NeoRPC漏洞之爭
12月1日下午16:34,騰訊湛盧實驗室宣布發現NEO的RPC漏洞。官微發文如下。
而NEO官方微博,在四個小時之后迅速回應如下,提出不同的看法。
誰對誰錯?公鏈RPC模塊安全情況如何?北京鏈安在此為您做詳細分析。
2RPC和RPC漏洞介紹
首先介紹下RPC。遠程過程調用是一個計算機通信協議。該協議允許運行于一臺計算機的程序調用另一臺計算機的子程序,而程序員無需額外地為這個交互作用編程。如果涉及的軟件采用面向對象編程,那么遠程過程調用亦可稱作遠程調用或遠程方法調用。
古老的如微軟的一些RPC漏洞,如MS08-067,通過畸形的RPC請求,觸發C/C++的字符串拷貝連接之類的問題,造成內存覆蓋,引發安全漏洞。因為漏洞的表現方式是與編程語言密切相關的。微軟的很多問題組件基本都是使用C/C++語言開發,所以存在內存覆蓋這樣的安全問題。但是伴隨著SDL的推廣,RPC在傳遞參數過程中,內存拷貝造成的安全問題很難再出現。
Neobank Cogni為加密錢包持有人推出含有KYC信息的NFT:金色財經報道,Neobank Cogni宣布正在向其加密錢包的持有者推出含有KYC信息的NFT。基于Polygon的NFT將把客戶在開戶時由銀行完成的 \"Web2 \"KYC驗證轉移到Web3環境中。
Cogni通過一家傳統的紐約銀行獲得了美國聯邦存款保險公司的承保,它在1月份推出了其非托管的多鏈路加密貨幣錢包。用戶可以在錢包中發送、接收和持有加密貨幣和NFTs。用戶可以選擇鑄造不可轉讓的NFT,然后DApps可以在所有者的許可下解密。[2023/4/27 14:31:04]
2.1公鏈和代幣使用的編程語言多樣
在區塊鏈上面,由于代幣和公鏈的開發語言多樣,如比特幣、EOS、XRP、XLM、DASH、XMR的主流客戶端使用C/C++開發,ethereum、bytom等的主流客戶端使用的是內存安全的Go語言實現。而很多志在構建基于分片、并行、分布式區塊鏈網絡的公鏈,從一開始就選擇的是函數式編程語言。如Rchain使用Scala語言開發,Aeternity使用Erlang語言開發。使用函數式語言開發的公鏈,除去邏輯類漏洞,語言層面就杜絕了過程式語言存在的一些安全隱患。
拉丁格拉美獎與Web3音樂平臺OneOf合作首發NFT:金色財經報道,第64屆拉丁格拉美獎與Web3音樂平臺OneOf合作,雙方簽訂了一份為期三年的合約并發布首個NFT系列,每個NFT都將與獲獎音樂相關,粉絲也將參與到塊拉丁格萊美獎,相關NFT將在11月18日頒獎典禮之前持續投放。另據Latin Recording Academy透露,Binance是其官方加密貨幣交易平臺。(cryptotimes)[2022/10/5 18:39:57]
2.2同一條公鏈存在不同語言的客戶端實現
一條公鏈存在各種語言實現的不同版本。比特幣節點的主流客戶端使用C/C++開發,如satoshi客戶端,但是同時還存在對開發者友好的客戶端。如javascript語言開發的bcoin,go語言開發的btcd。以太坊方面,主流的以太坊客戶端Geth使用Go語言實現,大概占所有節點的80%。基于Rust語言實現的Parity-ethereum占所有節點的20%,剩下的CPP-ethereum、Python-ethereum、Java-ethereum一般只存在研究價值,即使存在漏洞也不容易引發實際的安全問題。而此次騰訊號稱“存在問題”的Neo主流客戶端是由.net實現,一般運行在windows系統上。
動態 | 騰訊安全聯合實驗室:區塊鏈項目NEO存在遠程盜幣風險:騰訊安全聯合實驗室發微博稱,區塊鏈再爆盜幣危機!@騰訊湛瀘實驗室 監測到著名區塊鏈項目NEO(對應數字貨幣“小蟻幣”)存在遠程盜幣風險。用戶在利用默認配置啟動NEO網絡節點并打開錢包時,其數字貨幣可能慘遭遠程盜幣。騰訊安全湛瀘實驗室已向NEO開發社區提交風險預警,同時提醒NEO節點維護者及“小蟻幣”持有者,需關注錢包安全,及時更新客戶端版本,注意異常轉賬行為。
目前,小蟻幣持有者可通過采用以下方案來避免攻擊:
1. 升級到最高版本的NEO-CLI客戶端程序;
2. 避免使用遠程RPC功能,修改配置文件中BindAddress的地址為127.0.0.1;
3. 如有特殊需求,不得不使用遠程RPC功能,應采取修改RPC端口號、啟用基于Https的JSON-RPC接口、設置防火墻策略等方式保障節點安全。[2018/12/1]
以上幾點造成了RPC漏洞在區塊鏈上的表現方式差異極大。
3區塊鏈上的RPC和雞肋的區塊鏈RPC漏洞
首先介紹下區塊鏈中RPC接口使用的流程和場景。以比特幣舉例,交易所如何判斷用戶的比特幣的確充值成功了呢?一般會在內網中做網段和環境隔離,然后使用docker部署一個對應的全節點客戶端,如比特幣可以部署bcoin的全節點客戶端。然后對RPC接口調用權限進行設置,一般來說公鏈都會使用username和password的方式來確認調用者有權限調用RPC接口。此時程序鑒權成功后,通過調用bcoin客戶端提供的rpcapi接口Getblockbyheight,輪詢新區塊中是否有用戶充值的交易,然后等待對應的確認數后,返回給用戶成功充值的消息。
NEO官方發聲明澄清近期質疑:今日NEO創始人達鴻飛發布官方消息,澄清了近期關于NEO共識機制、出塊延遲、計劃分散共識節點的一些情況。1、對共識機制,官方表示當NEO的核心協議穩定下來時,期望看到NEO持有人選出一到幾十個共識節點,而在2018年,其預測共識節點的數量將保持在7至13。2、NEO延遲出塊并非高級研發經理Malcolm Lerider所描述的原因,實際原因更加復雜。3、區塊鏈的目標之一是建立可由任何人驗證的技術授權信任,分權是實現這一目標的一條重要途徑,但也有其他考慮和選擇,特別是在技術和行業還相對不成熟的情況下。NEO現全球均價112美元,24小時跌幅4.74%。[2018/3/6]
在這個RPC調用的過程中,重要的一點是鑒權,鑒權成功后才有權限調用對應的RPC接口。一般公鏈的都會提供CLI工具給使用者,用來配置RPC是否開放和開放后的鑒權方式,默認RPC接口在被本地調用的時候是不需要鑒權的,在被遠程IP調用的時候,即使對應的RPC接口存在漏洞,由于鑒權無法通過或者該RPC接口根本沒有配置開放,攻擊者也是沒有辦法觸發RPC漏洞的。
強勢反彈,NEO今日漲幅近50%:根據火幣交易平臺數據顯示,NEO最新成交價格為人民幣144.99美元,24小時最高價達人民幣151.1美元,最低價格為人民幣92美元,24小時成交量為187767NEO,漲幅達49.04%。NEO是利用區塊鏈技術和數字身份進行資產數字化,利用智能合約對數字資產進行自動化管理,實現“智能經濟”的一種分布式網絡。[2018/1/18]
BTC/DASH/XMR等Coin一般存在2個模塊,RPC模塊和P2P模塊。公鏈由于需要執行合約、通常圖靈完備,一般比Coin多兩個模塊,虛擬機和編譯器。而不管在Coin還是公鏈中都存在的RPC漏洞都很雞肋,原因就是RPC需要鑒權后才可調用,很難在真實環境中產生安全影響。
下面介紹下區塊鏈中曾經的或者還是“0day”的RPC漏洞。
3.1RPC鑒權設計引發的安全漏洞
目前來看,該類漏洞危害最大,但幾乎沒有。暫時也還沒有發生類似于路由器后門萬能密碼的漏洞。目前只在bitcoindandBitcoin-Qt早期版本有一個可以猜密碼的漏洞,CVE-2013-4165(注意此漏洞只影響這兩個版本的比特幣實現,并不影響go版本的btcd和javascript版本的bcoin)。
bitcoind0.8.1中bitcoinrpc.cpp中的HTTPAuthorized函數在檢測到密碼的第一個錯誤字節時提供有關身份驗證失敗的信息,這使遠程攻擊者更容易通過猜測爆破攻擊來確定密碼。
3.2Post過程中,觸發特定語言版本公鏈的RPC漏洞
表現的比較典型的就是cppethereum的CVE-2017-12119。前面已經說過,cppethereum是以太坊一個研究性版本,實際中幾無影響,并且rpc類漏洞,攻擊者必須鑒權后才能調用,更加大大削弱了該漏洞的實際影響。該漏洞由思科的talos團隊上報發現。https://www.talosintelligence.com/vulnerability_reports/TALOS-2017-0471
在調用cppethereum的rpc接口的時候,攻擊者可以Post傳遞一個畸形類型的參數,使得類型檢查不通過,可以直接導致cppethereum崩潰。
注意此類漏洞完全不影響以太坊主流客戶端geth和Parity-ethereum。
3.3RPC設計引發的邏輯類盜幣漏洞
目前來看以太坊和EOS都有類似問題。以以太坊舉例。
以太坊對于賬戶的RPC調用支持unlockaccountapi。
https://github.com/ethereum/go-ethereum/wiki/Managing-your-accounts
可以看到,需要提供地址,密碼和解鎖時間。問題就出在解鎖時間上面,一旦解鎖,該錢包若還暴露在公網上,在duration期間的錢包,任何人在duration這段期間都有權限將錢包中的eth轉走。
整個攻擊流程如下:攻擊者預先掃描8545端口、8546端口等開放的以太坊節點,遍歷區塊高度、錢包地址及余額,一旦有余額的地址處于unlockduration,重復調用eth_sendTransaction將余額轉空。
EOS也支持賬戶解鎖函數,見https://developers.eos.io/eosio-nodeos/v1.1.0/reference#wallet_unlock。邏輯和攻擊手法相同,不再分析。
3.4配置安全引發的問題
前面已經說過RPC調用是要鑒權的。如比特幣的bcoin客戶端,要遠程調用rpc接口必須提供用戶名和密碼。很多公鏈,如bytom,默認配置文件即是127.0.0.1,也即本地發起的rpc調用是不需要認證的,通過遠程IP發起的rpc調用必須提供用戶名和密碼,否則無法進行rpc調用。但是如果用戶錯誤配置rpc,如弱密碼或者取消鑒權此時就會帶來安全隱患。
3.5接口實現邏輯不嚴謹引發的漏洞
這里我們以Go語言實現的bytom舉例,其他公鏈若有類似邏輯請自行查證。
一般來說公鏈中都會支持錢包配置文件的備份和恢復,備份一般不會產生問題,但是此時的恢復,恢復本質上是接收外界的post參數,然后公鏈的進程要往所在的操作系統或者docker中的系統寫入一個文件,如果在post傳遞參數上傳遞的是跨目錄覆蓋掉系統關鍵文件的參數,結果如何呢?Bytom的早期的版本就存在這樣的一個漏洞,調用restore-wallet,傳遞畸形的post參數,在恢復錢包文件的時候可以引發系統關鍵文件被覆蓋,造成遠程代碼執行。但是注意,攻擊者想利用該漏洞也得通過RPC的鑒權,才有權限調用該接口。
修復起來就相對簡單。敏感性接口,邏輯實現上一定要禁止跨目錄的操作。
4總結
RPC模塊作為支付類幣種和公鏈都共有的模塊,會存在一些安全問題。但是由于RPC調用需要鑒權,使得RPC模塊即使存在漏洞,也是較難觸發利用的。此次的neo的rpc接口問題,官方默認配置已經不允許遠程無鑒權調用,除非用戶錯誤配置,影響極為有限。北京鏈安在此也提醒相關用戶,注意RPC的鑒權配置,避免產生RPC配置安全問題。
印度最大的電子商務公司之一Snapdeal上架了一種新商品——現金。事情是這樣的,為了打擊黑錢流動和假鈔,印度總理穆迪在11月8日晚突然宣布從該月9日起停用面額為500和1000盧比的貨幣,并發.
1900/1/1 0:00:00隨著我們進一步進入12月,加密市場仍處于不確定的位置。然而,這并不意味著團隊沒有忙于構建——讓我們來看看本周特別有趣的三個加密和區塊鏈項目.
1900/1/1 0:00:00中國基金報安曼 在北京時間11月22日晚進行的世界杯小組賽中,阿根廷1比2不敵沙特,這是阿根廷在世界杯上首次輸給亞洲球隊,爆出本屆世界杯第一個冷門.
1900/1/1 0:00:00撰文:雷達熊,DODO創始人一個有效的市場包含巨量信息,這些信息承載了市場對價格的判斷。但是鏈上計算資源有限,要在鏈上實現一個高度靈活的市場,就好像要把大象塞進冰箱.
1900/1/1 0:00:00最近本田思域TypeR可以說是火爆全網,CIVIC品牌上,不僅迎來了第十一代思域HATCHBACK的上市,本田思域TypeR也迎來國內上市,作為性能車小鋼炮,這款車的售價在42萬元人民幣.
1900/1/1 0:00:00中國海軍網北京4月21日電候融、記者王凌碩報道:今天上午,海軍與國家海洋局在京簽署軍民融合創新發展戰略合作框架協議.
1900/1/1 0:00:00