摘要:傳統僵尸網絡傳統僵尸網絡圖例無論使用或是其他協議,傳統僵尸網絡的構成都是相同的。盡管這些節點僅僅從技術上可以作為服務器,但是可以利用它們防止僵尸網絡被摧毀。
當前人們正大肆宣傳ZeroAccess(一種惡意程序)被攻克的消息,我認為是時候介紹一下P2P僵尸網絡(botnets)了。包括它們是如何工作的,以及通常怎么應對它們。
傳統僵尸網絡
傳統僵尸網絡圖例
無論使用HTTP、IRC或是其他協議,傳統僵尸網絡的構成都是相同的。所有的僵尸主機(bot)都通過一個或多個域名連接到一個或多個服務器。盡管網絡結構可能千差萬別,或一目了然,或錯綜復雜,通過各服務器間良好的協作,都可以輕易摧毀僵尸網絡。
恢復僵尸主機正常工作最常見的辦法,就是奪取它所使用的域名或服務器的控制權。然而有些時候由于某些原因我們無法向僵尸主機發送指令,就需要另一種手段。當然嘗試關閉命令與控制服務器(C&C Server)一般情況下都是浪費時間的做法,因為主控者(botmaster)不需要花多少時間,就可以找到另一個服務器,并將域名重定向到它上面。于是我們就只有在域名上做文章來應對了。
高手操縱的僵尸網絡通常會使用多個域名,當其中一個被關閉時,僵尸主機會連接到另一個。想要徹底破壞這樣的僵尸網絡,有兩個辦法:1、暫時關閉所有和這個僵尸網絡相關的域名(需要在短時間內完成,以防主控者操作僵尸主機定向到新的域名);2、把僵尸網絡使用的域名定向到一個有特殊功能的服務器(如Sinkhole路由器),使僵尸主機遠離正常的控制服務器,從而切斷主控者對它們的控制。
P2P不同于傳統僵尸網絡在域名或服務器被奪取控制權時表現出的脆弱,P2P僵尸網絡會建立一個相對分散的網絡環境。思路就是所有的僵尸主機都互相連接并且進行通信,從而不再需要一個中心服務器,但實際上并不單純是這樣。
指令
如果所有的僵尸主機都能互相通信,那么主控者需要確保只有他能向這些主機發送指令,通常的解決辦法是數字簽名。這個簽名是由不對稱加密算法生成的,需要兩個密鑰(公鑰和私鑰)。如果其中一個密鑰用于加密消息,那么必須使用另一個來解密。于是主控者可以自己持有一個密鑰(私鑰),將另一個(公鑰)發放到僵尸主機上。他使用私鑰對指令進行加密,然后僵尸主機使用公鑰解密。沒有私鑰,任何人都無法正確加密指令。
網絡架構
圖1
大部分人眼中P2P僵尸網絡的構造和圖1類似,所有僵尸主機通過IP地址互相連接,互相發送命令,完全不需要中心服務器或者域名。很遺憾,這種表述是錯誤的。
那些使用NAT、防火墻,或者代理訪問網絡的計算機,無法接受連入的請求,它們只能向外發送消息,這會導致大多數僵尸主機無法被另一個直接連接。在傳統僵尸網絡中,這根本不是問題,因為僵尸主機都是連接到服務器的。因此在P2P網絡中,我們仍然需要服務器,只不過形式不同罷了。
圖2
把那些可以接受連入請求的僵尸主機(沒有使用代理、NAT或防火墻)作為服務器(通常稱作節點),同時那些不能連入的主機(通常稱作worker,暫譯工作機)將向一個或多個節點發起連接,從而獲取指令(圖2)。盡管這些節點僅僅從技術上可以作為服務器,但是可以利用它們防止僵尸網絡被摧毀。辦法就是:所有的工作機在節點間是分布式連接的,這使它們在某個節點失效時,能夠輕易轉移到另一個節點上。有時關閉所有的節點是一件不切實際的事情,于是P2P僵尸網絡得以持續工作。不幸的是,這些節點都是合法的普通計算機,它們可不能像服務器一樣隨意被我們控制。
每個節點都維護著一個IP列表,它包含所有和自身有相同工作機的節點。然后工作機再獲取這個列表,于是它們就能夠在其中某個節點失效時轉向另一個。在這個階段,數個僵尸主機成為一組,并且連接到許多不同的節點,但整個僵尸網絡還無法接受指令。為了使指令能夠抵達網絡中各臺主機,需要僵尸主機連接到多個節點并把接受到的指令發送到其他節點,或者節點之間相互連接同時相互傳遞指令,亦或者把兩者結合起來。
引導增殖要將一臺主機擁入僵尸網絡的懷抱,它至少需要獲取一個節點的IP地址,這時引導增殖的過程便開始了。僵尸程序里硬編碼了一系列可提供自身繁衍所需信息的服務器(暫譯引導服務器),當程序第一次在被感染的計算機上運行時,它就會連接到這些服務器。引導服務器的工作就是維護一個海量的節點地址,將其中一部分發放到僵尸主機上(把主機引入僵尸網絡)。通常來說,引導服務器使用某種簽名,防止被安全人員劫持,也避免提供無效的節點地址。
顯然引導服務器是中心要點,就像傳統僵尸網絡一樣,他們可以被破壞,然而這也不算什么大不了的事。如果所有的引導服務器在一瞬間被全部拿下,這也不會影響到已經存在的僵尸主機,只是阻止了新僵尸的加入。主控者可以從容地暫停感染新機器,直到他設置好新的引導服務器。因此這個辦法只能算是一個臨時措施,去攻擊僵尸網絡的引導增殖系統意義并不大。
拆解僵尸網絡攻擊引導服務器只是臨時地阻止了網絡的感染,而包含數字簽名的指令使得除了主控者以外的人無法操縱僵尸主機,同時節點數量又太多以至于很難同時被擊破,那么我們還能做什么呢?
投下慢性毒藥幾乎所有的P2P僵尸網絡都有一個弱點,那就是所有的對等主機會使用相同的運行機制。像之前描述過的那樣,節點主機需要維護包含其他節點的列表,同時共享給工作機,使它們能夠分布式地連接到一系列節點上。如果主控者手動為每個節點提供其他節點的地址,將耗費難以估計的時間,甚至是不可能做到的,因此交給節點自動完成。當一個僵尸節點被認定可以接受連入請求時,節點主機便連接到它,并給它共享一個節點列表。
那么如果你引入一臺對僵尸網絡來說居心叵測的計算機呢,它有條件作為節點主機,并且向其他節點共享一個包含無效IP的列表。很可能效果不是很大,節點會校驗新獲取的IP以確保它們可用。但是既然想到了這點,離成功也就不遠了!
安全人員可以引入許多這樣的“惡意”計算機,并非提供無效的節點IP,而是提供它們各自的IP。資源充足的情況下,“惡意”計算機會成為僵尸網絡中重要的一部分,并且把僵尸主機和節點主機分離。通過這樣的方式,可以使工作機只能獲取“惡意”的節點,從而顯著降低它們重新成為僵尸網絡一員的可能性。在一定的時間內,“惡意”節點會阻止正常節點傳播命令,于是工作機也無法接收到指令,打了主控者一個措手不及。這個辦法不太可能將所有的工作機分離出來,但已大大削弱了僵尸網絡的影響程度。保持“惡意”節點持續運行能夠將更多的主機占為己有,也時刻監視著那些可能存有“正常”節點IP地址的僵尸主機。
原文:Peer-to-Peer Botnets for Beginners
轉載于:伯樂在線 - 蔣生武
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/11135.html
摘要:本文主要介紹了本地的程序如何連接主網。連接主網添加種子節點這時我們看上去似乎沒啥問題了,之后出來的也是主網,一切看上去歲月靜好。這要靠顯示聲明的種子節點來解決,這些種子節點通常是的創建者和運營者。 本文主要介紹了本地的eos程序如何連接主網。 1. 我們在EOS主網上么 這時我們在命令行中輸入: cleos get info 會顯示如下界面:showImg(https://segmen...
閱讀 3588·2021-09-13 10:28
閱讀 1937·2021-08-10 09:43
閱讀 1010·2019-08-30 15:44
閱讀 3178·2019-08-30 13:14
閱讀 1830·2019-08-29 16:56
閱讀 2938·2019-08-29 16:35
閱讀 2843·2019-08-29 12:58
閱讀 864·2019-08-26 13:46