胡曉艷,童鐘奇,吳樺,許昱瑋
〔1.東南大學(xué)網(wǎng)絡(luò)空間安全學(xué)院,江蘇南京 211189;2.計算機網(wǎng)絡(luò)和信息集成教育部重點實驗室(東南大學(xué)),江蘇南京 211189;3.網(wǎng)絡(luò)空間國際治理研究基地(東南大學(xué)),江蘇南京 211189;4.網(wǎng)絡(luò)通信與安全紫金山實驗室,江蘇南京 211111〕
區(qū)塊鏈是一種由多方共同維護,能夠?qū)崿F(xiàn)數(shù)據(jù)一致存儲、不可篡改、多方訪問、去中心化的記賬技術(shù),也稱為分布式賬本技術(shù)。區(qū)塊鏈技術(shù)誕生于中本聰名為《比特幣:一種點對點式的電子現(xiàn)金系統(tǒng)》[1]的論文中,它為進一步解決互聯(lián)網(wǎng)中的信任問題、安全問題和效率問題提供了新的解決方案,也為金融等行業(yè)的發(fā)展帶來了新的機遇和挑戰(zhàn)。近年來,區(qū)塊鏈技術(shù)的應(yīng)用逐漸廣泛,據(jù)Cisco預(yù)測[2],2027年區(qū)塊鏈行業(yè)將占全球GDP的10%,但隨之而來的監(jiān)管問題也變得愈發(fā)突出。區(qū)塊鏈匿名性和多方維護的設(shè)計,使得區(qū)塊鏈的有效監(jiān)管十分棘手。
作為區(qū)塊鏈中的代表性應(yīng)用,以太坊在中本聰提出的區(qū)塊鏈結(jié)構(gòu)基礎(chǔ)上,引入了私有RLPx加密協(xié)議對數(shù)據(jù)打包和加密,進一步加強了其匿名性,這也使得以太坊成為了驅(qū)使網(wǎng)絡(luò)安全事件發(fā)生的催化劑。據(jù)PeckShield統(tǒng)計[3],僅2019年就有超177起區(qū)塊鏈安全事件發(fā)生,造成的經(jīng)濟損失高達76.79億美元。因此,監(jiān)管以太坊流量從而及時發(fā)現(xiàn)攻擊行為對以太坊的穩(wěn)定運行至關(guān)重要,而以太坊流量監(jiān)管的第一步就是對以太坊加密流量的識別。
已有研究中的加密流量識別方法可以分為數(shù)據(jù)分組負載隨機性檢測方法[4,5]、基于有效負載的識別方法[6,7]和基于機器學(xué)習(xí)的識別方法[8]。數(shù)據(jù)分組隨機性檢測方法需要對數(shù)據(jù)流中不完全隨機加密特征字段進行識別;基于有效負載的識別方法分析提取數(shù)據(jù)中未加密部分進行識別;基于機器學(xué)習(xí)的識別方法通過提取加密流特征,結(jié)合機器學(xué)習(xí)方法,實現(xiàn)加密流量識別。而國內(nèi)外涉及以太坊加密流量的研究集中在對以太坊應(yīng)用的識別和對以太坊拓撲結(jié)構(gòu)的構(gòu)建上。對以太坊應(yīng)用識別主要是對在以太坊平臺上開發(fā)的Dapps的識別[11],其本質(zhì)還是對傳統(tǒng)TLS流量的分類,不是針對以太坊私有協(xié)議加密流量的研究;對以太坊節(jié)點拓撲的構(gòu)建是通過NetFlow流[12]或者主動探測[13]的方法收集以太坊節(jié)點信息,構(gòu)建以太坊拓撲結(jié)構(gòu),這些方案也沒有對以太坊加密流量進行深入研究,無法準確識別以太坊加密流量。
綜上所述,為夯實以太坊網(wǎng)絡(luò)監(jiān)管的第一步,本文提出一種基于活躍節(jié)點的以太坊加密流量識別方法,通過活躍節(jié)點庫過濾以太坊節(jié)點,提高了識別效率,進一步實現(xiàn)以太坊加密流量準確識別。
以太坊的基本機構(gòu)如圖1所示,一般將其分為自底向上的6層結(jié)構(gòu)。數(shù)據(jù)層定義了區(qū)塊內(nèi)部數(shù)據(jù)存儲格式、區(qū)塊的鏈式相連方式以及以太坊錢包地址采用的非對稱加密方法;網(wǎng)絡(luò)層則定義了以P2P為基礎(chǔ)的RLPx數(shù)據(jù)格式化打包和數(shù)據(jù)傳播協(xié)議;共識層則采用了POW(Proof of Work,工作量證明)和POA(Proof of Authority,授權(quán)證明)共識方法;激勵層定義了礦工成功打包區(qū)塊和運行以太坊合約時的獎勵方法;合約層包含了以太坊所有的智能合約,是以太坊實現(xiàn)自定義的、具備圖靈完備性的分布式應(yīng)用的基礎(chǔ),它運行在獨立的以太坊虛擬機EVM上;應(yīng)用層是在以太坊平臺上,使用智能合約編寫的不同的去中心化應(yīng)用。本文主要關(guān)注的是以太坊的網(wǎng)絡(luò)層中RLPx協(xié)議的加密方法和通信過程,因此,下面將主要介紹RLPx協(xié)議的基本概念和相關(guān)內(nèi)容。
圖1 以太坊分層結(jié)構(gòu)
RLPx跟隨RLP(Recursive Length Prefix)命名,RLP是以太坊中采用的數(shù)據(jù)序列格式化的方法。RLPx協(xié)議中定義了基于UDP的不加密節(jié)點發(fā)現(xiàn)過程和基于TCP的加密數(shù)據(jù)傳輸過程。
圖2是RLPx連接建立過程的示意圖。由于以太坊基于P2P設(shè)計,因此當(dāng)一個節(jié)點加入以太坊網(wǎng)絡(luò)時,首先是節(jié)點的發(fā)現(xiàn)過程。RLPx基于UDP實現(xiàn)了其他節(jié)點的發(fā)現(xiàn)。起始時通過Ping內(nèi)部預(yù)置的一些公開節(jié)點,對返回Pong的節(jié)點進一步發(fā)送請求獲取鄰居節(jié)點信息,并用K桶保存這些節(jié)點信息。
在建立TCP連接前,會通過UDP的Ping-Pong來確認連接的可用性。連接建立過程中首先會通過Enchandshake握手過程確定此次連接的臨時通信密鑰。EncHandshake握手過程中雙方使用自身信息隨機的各自生成一個私鑰,然后將對應(yīng)公鑰發(fā)送給另一方,最后雙方通過手中的私鑰和對方的公鑰生成一個共享密鑰,此次連接的信道上將會使用此共享密鑰加密傳輸信息。該共享密鑰只在本次通信過程中保持有效,保證了以太坊的完備的前向安全性。隨后將會進行狀態(tài)的同步和區(qū)塊同步等操作,保證節(jié)點與整個以太坊信息的一致。
由于以太坊通信內(nèi)容都采用了RLP方法進行序列格式化,并且定義的通信內(nèi)容格式間也存在著相似性,導(dǎo)致UDP報文在大小和內(nèi)容之間存在著很多的重復(fù)性,TCP報文在握手過程和通信內(nèi)容大小上也存在很多的相似,這些相似的內(nèi)容為識別以太坊加密流量提供了可用的特征。本文因此提出了一種基于以太坊活躍節(jié)點的以太坊加密流量識別方法。下一章將會介紹算法的整體設(shè)計。
本文將會介紹基于活躍節(jié)點庫的以太坊加密流量識別方法的具體設(shè)計。圖3是整個算法實現(xiàn)的結(jié)構(gòu)圖。
圖2 RLPx協(xié)議通信過程
圖3 以太坊加密流量識別算法結(jié)構(gòu)圖
算法包含了兩個主要部分,節(jié)點庫設(shè)計部分和流量處理部分。核心節(jié)點庫存儲支撐以太坊運行的核心節(jié)點信息,活躍節(jié)點庫基本覆蓋區(qū)域內(nèi)所有的以太坊節(jié)點。因此,可以認為區(qū)域內(nèi)所有的以太坊流量不是從活躍節(jié)點庫中發(fā)出的就是以活躍節(jié)點庫中的節(jié)點為目的地址。算法首先判斷流量源宿地址是否在活躍節(jié)點庫中存在記錄,對存在記錄的流量轉(zhuǎn)入流量處理部分。在流量處理部分會分別對UDP流量和TCP流量進行識別,將以太坊UDP報文識別結(jié)果作為TCP識別的基礎(chǔ),同時采用UDP和TCP識別結(jié)果共同更新維護活躍節(jié)點庫中信息。下面是對這兩部分的詳細介紹。
以太坊節(jié)點庫包含以太坊核心節(jié)點庫和以太坊活躍節(jié)點庫。以太坊維護機構(gòu)為保證以太坊POW共識算法的可靠性,維持以太坊的正常運行,設(shè)置了部分以太坊節(jié)點并公開了這些節(jié)點的信息。此外,以太坊會在Geth等工具中內(nèi)置一些以太坊節(jié)點以保證新節(jié)點加入時能與鄰居節(jié)點建立連接。本文引入核心節(jié)點庫存儲這兩種節(jié)點信息,在算法起始時填充活躍節(jié)點庫。
活躍節(jié)點庫包含了當(dāng)前區(qū)域內(nèi)所有活躍的以太坊節(jié)點的信息,活躍節(jié)點庫初始由核心節(jié)點庫填充,隨著算法的運行,活躍節(jié)點庫不斷趨于收斂,最終實現(xiàn)對整個區(qū)域內(nèi)以太坊活躍節(jié)點的記錄。不同區(qū)域中活躍節(jié)點庫的信息可能有所區(qū)別,而整個以太坊的核心節(jié)點庫信息保持一致。
由于以太坊流量中包含了UDP流量和TCP流量,因此針對兩者采用不同的處理方式。以太坊在建立TCP連接前會通過UDP的Ping-Pong探測節(jié)點的可用性或獲取相關(guān)的鄰居節(jié)點信息,因此,算法首先會針對UDP流量進行識別。
如圖4所示,以太坊UDP定義了四種結(jié)構(gòu),包括Ping、Pong、FindNode和Neighbors。以太坊Ping-Pong過程是對等節(jié)點對某另一個節(jié)點可用性的探測過程。FindNode用來向自己的鄰居節(jié)點查詢距離目的節(jié)點比較近的鄰居節(jié)點。Neighbors是對FindNode的回應(yīng),包含了該節(jié)點中距離目的節(jié)點較近的節(jié)點的信息。此外,以太坊RLPx協(xié)議中對UDP流量是不加密的,因此以太坊的UDP流量表現(xiàn)出了極高的相似性,報文大小、報文順序等都有著極高的統(tǒng)一性。
對于探測節(jié)點是否可用的Ping-Pong過程,一條UDP流中可能會包含一次或多次重復(fù)的Ping-Pong,Ping報文的內(nèi)容大小約為127B,而Pong包內(nèi)容稍大,約為150B;針對鄰居節(jié)點信息獲取的過程,首先會是一次或者多次的節(jié)點可用性的探測,當(dāng)節(jié)點可用時會發(fā)送一個FindNode報文,對等節(jié)點也返回一個Neighbors報文,該次的鄰居節(jié)點信息獲取過程結(jié)束。其中,F(xiàn)indNode內(nèi)容大小固定為171B,且返回的Neighbors是固定的兩個1057B和425B的報文。此外,以太坊會選用較高的通信端口,初始的默認端口號為30303,若端口號30303被占用會重新選擇端口,一般選用10000以上的端口號。
針對以太坊TCP流量,其RLPx協(xié)議一共定義了以太坊TCP中的12種報文格式,為區(qū)分其中的相似報文,在發(fā)送相似報文前會發(fā)送一個固定大小的標(biāo)識報文標(biāo)識將要發(fā)送的報文格式。此外,以太坊TCP的Enchandshake是通信的第一步,由連接發(fā)起方開始,雙方交換一次大小約500B的自身信息實現(xiàn)Enchandshake握手。
圖4 以太坊UDP報文數(shù)據(jù)結(jié)構(gòu)
綜上,當(dāng)一個待識別流的源、宿地址在以太坊活躍節(jié)點庫中存在記錄時,轉(zhuǎn)入以太坊流量識別過程。首先判斷雙方是否存在UDP流量,進而判斷UDP端口是否是較高端口,其次結(jié)合UDP的Ping-Pong報文大小、Ping-Pong報文順序以及NodeFide報文Neighbors報文的大小、順序進一步確定是否是以太坊UDP流量。對確認存在以太坊UDP流量的節(jié)點進行記錄,更新活躍節(jié)點庫信息,轉(zhuǎn)入對TCP流量的識別。對于TCP流量,首先通過高端口號初步判斷是否是以太坊TCP流量,在TCP握手后判斷是否進行Enchandshake握手過程,最后,對傳輸內(nèi)容的報文大小進行統(tǒng)計,設(shè)置閾值,該閾值反映了流量中標(biāo)識報文和相似行為報文的出現(xiàn)頻率,滿足高端口特性、進行了Enchandshake并且統(tǒng)計結(jié)果高于閾值的即為以太坊TCP流量,同時更新以太坊活躍節(jié)點庫中信息。
為獲取以太坊核心節(jié)點信息,本文使用網(wǎng)絡(luò)爬蟲方法爬取以太坊節(jié)點統(tǒng)計網(wǎng)站ethernodes.org中公開節(jié)點,共爬取了5,672個公開節(jié)點填充核心節(jié)點庫。由于缺乏可用的以太坊流量數(shù)據(jù)集,本文參考使用了文獻[13]中NodeFinder的設(shè)計,同時為了保證收集到足夠可用的TCP流量,本文延長了NodeFinder中的連接保持時間至2min,一般會在此時間內(nèi)完成多次交易的轉(zhuǎn)發(fā)和區(qū)塊的同步。為保證最終實驗結(jié)果的準確性,需要保證活躍節(jié)點庫達到收斂。考慮到現(xiàn)實情況中識別是一個持續(xù)的過程,本文采用兩組數(shù)據(jù)進行實驗,第一組數(shù)據(jù)是模擬現(xiàn)實環(huán)境對活躍節(jié)點庫進行填充。第二組數(shù)據(jù)中混入背景流量,測試實驗結(jié)果。本文設(shè)置了兩臺位于同一子網(wǎng)中的設(shè)備分別抓取了實驗數(shù)據(jù)一和實驗數(shù)據(jù)二,具體實驗數(shù)據(jù)如表1所示。
表1 實驗數(shù)據(jù)
為研究UDP中報文大小范圍設(shè)置對結(jié)果的影響,在排除425B和1057B的固定大小的UDP報文的影響后,本文分別設(shè)置算法中UDP報文大小范圍從[110,200]至[110,320],實驗結(jié)果如圖5所示。為研究TCP中閾值對實驗準確率的影響,本文分別對閾值為7%至15%進行了實驗,實驗結(jié)果如圖6所示。
圖5 報文范圍對UDP識別結(jié)果的影響
由圖5可以看出,隨著UDP報文大小范圍的增加,準確率先降低再升高再降低,精確率持續(xù)降低,召回率在[110,300]處提升明顯。這是因為以太坊UDP報文在剔除425B、1057B兩種固定大小的報文后,主要分布在[110,200]和[280,300]的區(qū)間內(nèi),而報文大小范圍的增加會導(dǎo)致將非以太坊流量誤判為以太坊流量的比例增加。因此,準確率會在[110,280]和[280,300]之間提升,而整體呈現(xiàn)下降趨勢,精確率則會因為誤判的增加而持續(xù)降低,召回率在[110,280]和[280,300]也會有顯著提升而整體呈現(xiàn)緩慢上升趨勢。
由圖6可以看出,隨著閾值的不斷升高,準確率和精確率不斷上升,而召回率程現(xiàn)下降趨勢。這是因為隨著閾值的提升,將以太坊流量誤判為非以太坊流量的比例不斷上升,將非以太坊流量誤判為以太坊流量的比例都不斷下降,但將以太坊流量誤判為非以太坊流量的上升趨勢較將非以太坊流量誤判為以太坊流量的下降趨勢更不明顯,因此整體呈現(xiàn)的效果就是準確率和精確率緩慢提升,而召回率不斷下降。
圖6 閾值對TCP結(jié)果的影響
本文進行了以太坊加密流量識別的研究,提出了一種基于以太坊活躍節(jié)點庫的以太坊加密流量識別方法,在獲取區(qū)域內(nèi)以太坊節(jié)點信息構(gòu)建以太坊活躍節(jié)點庫的基礎(chǔ)上,針對以太坊UDP和TCP流量分別進行了識別,在實驗中得到了較高的識別準確率、精確率和召回率。
但是,由于目前尚無針對以太坊加密流量識別的工作,因而實驗結(jié)果中缺乏對比實驗,針對這一缺憾,本文后續(xù)工作將會跟進學(xué)術(shù)界最新進展,在出現(xiàn)了相關(guān)研究工作時進行對比實驗。