<span id="7ztzv"></span>
<sub id="7ztzv"></sub>

<span id="7ztzv"></span><form id="7ztzv"></form>

<span id="7ztzv"></span>

        <address id="7ztzv"></address>

            原文地址:http://drops.wooyun.org/papers/8886

            0x00 綜述


            這個植入木馬由一個經過篡改的思科IOS鏡像組成,能允許攻擊者保持匿名性,同時從網絡上加載不同的功能模塊。這個植入木馬還使用了一個秘密的后門密碼,能給攻擊者提供非限制權限。每個模塊都能通過HTTP協議(不是HTTPS)來啟用,只需向路由器的接口發送一個特別制作的TCP數據包。這些數據包都使用了非標準的序列號和相應的承認號。而這些模塊可以把自己顯示成路由器IOS中獨立的可執行代碼或hook,提供的功能與后門密碼類似。后門密碼通過控制臺,遠程登陸協議和權限提升,使用enable命令,能提供對路由器的訪問。

            圖1:模塊更新 圖2:后門權限

            已知受影響的路由器:思科1841路由器,思科2811路由器,思科3825路由器

            注意:我們在識別之初發現,其他型號的一些路由器可能也受到了影響,因為這些路由器的核心功能、IOS代碼都很類似。

            0x01 維護


            這個植入木馬寄存于一個被篡改過的思科IOS鏡像,并且在加載后,植入就能維護自己,系統重啟也無法清除。但是,攻擊者之后載入的模塊就只能儲存在路由器的內存中,系統重啟后就沒有了。從分析的角度看,如果模塊是加載到內存中,分析人員就可以通過獲取路由器鏡像的核心轉儲來對這些模塊進行分析。

            0x02 檢測方法


            對于能發出命令并接收響應的組織來說,主機標識非常實用。但是只有一小部分的路由器是放置在比較容易接觸的網絡區域中,在這種情況下,這種方法就是可行的。

            對于更分散的組織和不能執行本地命令并接收響應的組織來說,網絡標識能起到幫助作用。

            最終來看,結合主機標識和網絡標識的方法基本上能用于判斷底層網絡的健康情況。

            0x03 攻擊者主要篡改了IOS二進制的下面四個函數:

            1. TLB讀寫屬性

              木馬會強制把TLB的所有與讀和寫相關的屬性都篡改成Read-Write(RW)。我們認為這種篡改是為了讓載入模塊hook到IOS的函數。如果沒有把TLB權限設置成RW,那么緩存頁篡改可能就無法影響到內存中的原始頁。

              遭到篡改的函數可能是IOS中疑似負責配置TLB的函數,攻擊者修改了函數中的兩個單字節,從而實現了對TLB屬性的篡改。在沒有篡改時,函數會把寄存器中的前兩位設置成1;篡改后,函數會把寄存器的前三位設置成1。曼迪昂特公司認為控制著TLB項寫入權限的就是第三位。圖3中是遭到篡改的指令。

              圖3-篡改TLB權限(上為未篡改,下為篡改后)

              這就聯系到了我們上面討論過的主機標識方法。使用enable模式命令 “show platform”就能檢查TLB屬性。如果IOS映像沒有遭到篡改,TLB就會輸出圖4中的內容。

              圖4-合法IOS鏡像的TLB項

              如果路由器中植入了篡改過的IOS鏡像,其RW屬性就會如下:

              圖5-篡改后IOS鏡像的TLB項

              視路由器硬件而定,內存地址的有些特定范圍一般是只讀的可執行代碼部分。檢測路由器是否遭篡改的最簡單方法就是使用命令“show platform | include RO, Valid”。如果沒有結果顯示,那么,IOS鏡像很可能就遭到了篡改,其目的是為了篡改可行代碼。

            2. 初始化木馬

              曼迪昂特公司認為,要想在IOS鏡像載入時執行木馬,肯定要修改一個與進程調度相關的函數。這是因為,在IOS啟動順序中,遭到篡改的函數會被更早地調用,并且只要IOS啟動正確,這個函數就一定會被調用。函數調用的目標地址經過篡改,指向了木馬的hook處理函數。我們的研究證明,hook處理函數先會檢查被篡改IOS中的調用函數是否是有效的,之后木馬就會初始化。現在,木馬就上線并運行了,并且會執行原來的IOS函數,這樣誰也不會懷疑。

              曼迪昂特公司認為,遭到篡改的函數與進程調度任務有關聯,當這個函數被調用時,函數就會進入一個無限循環。另外,它的幾個子函數也會引用與進程調度相關的字符串,比如 “Threshold: %s CPU Utilization(Total/Intr):…”。

            3. 替換成木馬的可執行代碼

              為了防止鏡像的文件大小發生變化,木馬會使用自己的可執行代碼覆蓋幾個合法的IOS函數。攻擊者還會檢查當前路由器的功能,然后判斷可以覆蓋哪些函數而不導致路由器發生問題。所以,在不同的部署中,可能會覆蓋不同的函數。

            4. 木馬的字符串和配置

              承接上文,因為鏡像的文件大小沒有變化,這個木馬還用自己的配置覆蓋了一些reporting字符串。這個入侵標識也可以用來檢測篡改。圖6中是被覆蓋的合法字符串。

              圖6-木馬覆蓋了這些與一個有效函數相關的字符串

              木馬就是用下面圖7中的內容覆蓋了圖6中的內容。這很明顯就是木馬的字符串(包括CC中使用的HTTP標頭),以及默認的密碼-我們故意抹去了。這樣,潛在的受害者就有時間來查看自己的網絡有沒有遭到入侵,從而修復這一問題。如果你懷疑你的系統被入侵了,請聯系我們的郵箱synfulknock [at] fireeye.com,我們會提供給你密碼。

              圖7-木馬字符串

              這個主機標識,也可以用于識別植入木馬。但是,首先需要找到配置字符串的位置,而在不同的部署中,其位置可能也不同。當運行一個常規的IOS命令時,篡改過的IOS鏡像會輸出一個非常可疑的結果,如下:

              視植入木馬而定,在運行了一個合法的IOS命令后,可能會顯示后門標頭。

            0x04 后門密碼


            攻擊者可以在三種不同的認證方案中,利用后門密碼。植入木馬首先會檢查用戶輸入的是不是后門密碼。如果是,則授予權限。否則,植入代碼就會傳遞憑據,以便驗證憑據的有效性。這就有些可疑了。在使用后門木馬時,下面的三個實例在經過驗證后就能啟用權限:

            但是,此次研究表明,SSH或HTTPS會話并不能給后門密碼提供權限。這可能是一個配置問題,在不同的入侵中,情況也可能發生變化。

            圖8-合法密碼驗證與后門密碼驗證之間的細微差別(上為合法密碼,下位后門密碼)

            0x05 網絡命令和控制


            植入木馬的CC部分是模塊化的,并且能在IOS中加載額外的功能。其CC功能是秘密進行的,因為CC功能需要一系列的TCP觸發數據包,木馬會監視這些數據包,尋找特定的TCP標頭值和內容。即使路由器啟用了過濾,木馬還是能處理TCP觸發數據包。木馬會響應從3個地址上發出的觸發數據包,分別是:路由器接口,廣播IP和網絡位置(子網中的第一個IP)。

            1. 要想初始化進程,必須向植入路由器的端口80發送一個特制的TCP SYN數據包。值得注意的是,序列號和承認號之間的差值必須設置成0xC123D。另外,ACK號不一定必須是0。

              圖9-TCP SYN序列號和承認號之間的差值是0xC123D

            2. 雖然,木馬通常有3種握手方式,會響應一個TCP SYN-ACK信息,承認第一個SYN信息。但是,要避免下面的情況:

              圖10-TCP SYN序列號和承認號之間的差值是0xC123E

            3. 當最終的 ACK 完成了3種方式的握手后,控制器接下來會發送下面的 TCP 信息:

              命令的格式如下:

              [4字節命令長度][CMD數據][4字節校驗和]

              [CMD 數據]使用了一個靜態密鑰,進行了異或。校驗和的算法是對解碼后的[CMD數據]進行4字節異或。

              圖11-控制器命令數據包

            4. 木馬響應就包含在下面的靜態HTTP/HTML服務器響應中。

              圖12-受害者響應

            0x06 受支持的命令


            我們之前提到過,這個植入木馬是分模塊的。下表中的前五個命令是用來在受害者的路由器上加載額外的模塊和功能。總共可以加載100個額外模塊,但是,這些模塊都是儲存在內存中,在重啟或重載后就沒有了。

            命令信息會把第一個WORD(4字節大端/大端字節序)設置成0。第二個WORD會識別命令類型(從0-4的值)。所有的信息類型都會以下面的8個字節開頭:

            00 00 00 00 00 00 00 [00 - 04] [可選參數]

            表3-受支持的命令

            如果信息的第一個WORD不是0,與第一個WORD模塊ID相關的代碼就會執行。這樣沒有hook到IOS函數的代碼就可以執行了。

            網絡檢測

            主動和被動網絡檢測都可以部署用來檢測并防止SYNful Knock的入侵。被動檢測可以整合到網絡防御傳感器上,同時也使用主動技術來獵捕后門。

            0x07 應對方法


            在確認遭到入侵后,最有效的應對辦法是下載一個干凈的鏡像,再刷到路由器上。保證新鏡像的哈希值,然后加強設備防御攻擊的能力。在綜述中提到過,初始入侵是由默認憑據或發現的憑據造成的,在修復了路由器后,重點就落在了網路上的其他部分上。如果路由器沒有默認的憑據,感染就一定是通過其他方式導致的。接下來就是對入侵進行評估。

            <span id="7ztzv"></span>
            <sub id="7ztzv"></sub>

            <span id="7ztzv"></span><form id="7ztzv"></form>

            <span id="7ztzv"></span>

                  <address id="7ztzv"></address>

                      亚洲欧美在线