02_sample遠控

A_zha0發表於2020-11-07
sample.exe分析報告

0x00 概述

基本資訊

樣本名稱sample.exe
樣本型別遠控、蠕蟲病毒
樣本大小27.5KB(28,160位元組)
MD54D049BC 19B03572EF8A00980050BAFFF

簡介

經過分析,該病毒樣本是一個遠控與蠕蟲病毒的結合體,通過弱口令進行爆破區域網內的主機,進行傳播。並通過訪問兩個C&C伺服器接收遠端指令,根據接收到的指令執行不同的操作,包括:下載檔案並執行,更新自身,DDOS等任務。

流程圖

sample.exe

0x01 樣本細節詳細分析

樣本行為分析

大量網路行為

執行樣本後, 該樣本進行了大量的網路請求,其中不斷嘗試與內網IP地址192.168.1.107:83進行連線。如圖1

1568536102575

圖1

然後通過fiddler抓取到,該樣本訪問異常URL,下載telnet.exe。並且不斷嘗試與內網網段進行連線,如圖2:

1568537695315

圖2

樣本詳細分析

脫殼

首先用查殼工具查下殼,發現該樣本是UPX殼。如圖:

1568193338945

然後嘗試用OD進行脫殼,F8單步執行一次,然後在ESP下硬體斷點,F9執行到該硬體斷點處,再單步幾次就到了OEP處。然後dump下來,並用ImportREC工具修復IAT,但發現再該OEP處無法找到有用的資訊。如圖:

1568193802608

這時再拿查殼工具查一下dump出來的檔案,發現還有一層UPX殼,如下圖:

1568195358436

所以目前的IAT表肯定是無法修復的,繼續用OD單步跟,尋找下一個OEP。單步幾步就會發現,該殼程式通過LoadLibrary和GetProcAddress獲取了一些殼所需要的API,如圖:

1568203038353

隨後繼續單步,發現該殼程式通過獲取到的virtualAlloc開闢了一段空間,並往裡儲存了一些資料,然後將其全部釋放掉了。這裡我們不管,我們只尋找下一個pushad。再走沒幾步,就發現了pushad,這裡再進行一次UPX脫殼

1568203614365

然後繼續單步,直到一個大跳便會跳到函式入口。出現如下圖的55 8BEC。便可以dump下來,修復IAT表了。

1568204331597

建立互斥體

先建立名為121212的互斥體,然後進行判斷,若互斥體存在,則退出當前程式。若不存在則執行主要行為函式sub_404BD7。如圖:

1568537469886

建立服務

建立一個名為.Net CLR的服務,並設定該服務的狀態。建立服務的目的可能是用來守護該程式。

1568538257839

再次建立互斥體

再次建立名為.Net CLR的互斥體,如圖:

1568539531920

列舉資源

通過呼叫上圖中的EnumResourceNames函式,列舉二進位制模組中的資源,並將讀取到的資源寫入hra33.dll中。如圖:

1568540312153

更新資源段

先檢索登錄檔項HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\.Net CLR中的ImagePath的值。

1568541164659

然後更新從ImagePath中獲取的檔案的資源段資料。

1568541902631

載入釋放的檔案

先拼接出hra33.dll,再通過LoadLibrary載入該模組。如圖:

1568545252074

建立三個執行緒

連續建立了3個執行緒,其中第三個執行緒是一個死迴圈,不斷建立執行執行緒3。如圖:

1568547969803

執行緒1:傳播擴散

  • 初始化字典

    首先初始化了一個簡單的字典,後面用來弱口令爆破,如圖:

    1568548103805

  • 將主機號與網路號拼接成IP地址

    通過圖中gethostbyname函式獲取當前主機的IP地址資訊,然後獲取當前主機IP地址的所處的網段資訊(網路號),並與初始化的主機號:inc_IP_408724進行拼接,將網路號與主機號進行拼接,IP地址:10.95.16.1

    1568548635418

  • 弱口令爆破該網段的所有主機

    利用如圖黃色標識的主機號:inc_IP_408724,然後與當前主機所在的網段(網路號)拼接出的IP地址。通過呼叫如下圖函式WNetAddCon_copy_exec_402A40,利用之前初始話的字典,進行爆破傳播。然後執行完一個IP後,主機號自加1,爆破該網段的下一個地址。直到主機號為254時停止。如下圖:

    1568549042369

  • 爆破傳播函式WNetAddCon_copy_exec_402A40

    WNetAddCon_copy_exec_402A40傳入了三個值,分別是IP地址,使用者名稱,密碼。通過呼叫WNetAddConnection函式,用之前初始化的字典(使用者名稱,密碼),對該網段的網路資源進行連線。

    若連線成功,將自身檔案拷貝到網路共享資源的多個碟符中,看哪個碟符可以拷貝成功。當拷貝成功便跳到LABEL_14:再兩分鐘後執行復制後的程式,從而達到通網段的傳播。拷貝的目標碟符,如下表:

    拷貝的目標碟符:
    \10.95.16.1\admin$\g1fd.exe
    \10.95.16.1\c$\NewArean.exe
    \10.95.16.1\D$\g1fd.exe
    \10.95.16.1\E$\g1fd.exe
    \10.95.16.1\F$\g1fd.exe

    建立網路資源連線,複製自身程式碼如下圖:

    1568550413617

執行緒2:與遠控伺服器通訊,執行指令

首先初始化了winsock服務,然後是迴圈,獲取當前系統時間,並進行了判斷當日期大於2013年2月21日後,便不斷建立執行緒2.1,建立套接字連結遠端伺服器,獲取指令執行命令。如圖:

1568552086331

執行緒2.1:與遠控伺服器通訊,獲取指令並執行

初始化套接字,並建立連結

現通過htons函式將整型變數8090轉換成網路位元組順序,初始化埠。

然後通過Swap_init_IPaddr將域名“arwah.uy1433.com”轉換為IP地址,然後初始化socket,然後通過函式connect連線該套接字。如下圖:

1568554186815

  • 其中Swap_init_IPaddr,轉化IP的程式碼如圖:

1568554466165

獲取主機資訊併傳送致遠控伺服器

先與套接字建立連線,然後執行get_info_405150獲取主機資訊。包括版本資訊,記憶體大小,CPU資訊,以及介面卡資訊等。然後將這些資訊,通過套接字傳送到遠控伺服器上。

將獲取到的資料傳送給遠端伺服器,如下圖:

1568599865588

獲取到的主機資訊,如下圖:

1568601803942

  • 其中get_info_405150獲取系統資訊函式,如下:
    • 1.判斷當前作業系統版本
    • 通過Getversion函式,獲取作業系統資訊,再根據獲取到的作業系統資訊,判斷當前作業系統的版本,如圖:

1568552954567

    • 2.獲取CPU頻率
    • 通過獲取登錄檔中的鍵值,來獲取CPU的頻率資訊。

1568552888140

    • 3.獲取物理和虛擬記憶體資訊
    • 通過GlobalMemoryStatsEx來獲取系統物理和虛擬記憶體資訊。

1568553016127

    • 4.獲取介面卡資訊
    • 通過GetAdaptersInfo檢索本地計算機的介面卡資訊,然後獲取到網路介面卡的網路資訊。

1568553326893

接收指令執行操作

建立死迴圈,通過呼叫receive_info_4036C8來接收遠控伺服器下發的指令,然後根據下發的指令進行相應的操作,如圖:

1568598189550

  • 其中receive_info_4036C8函式,通過函式rec來接收遠控伺服器下發的指令或資料,如圖:

1568562440939

接收的指令為:0x10,下載並執行

當接收到是0x10時,通過URLDownloadToFileA將接收的資料寫入臨時資料夾下,並以系統自啟動以來的毫秒數來命名。當下載完後,執行下載後的程式。如圖:

1568562998892

接收的指令為:0x12,更新自身

先關閉之前建立的.Net CLR互斥體,通過URLDownloadToFileA將接收的資料寫入臨時資料夾下,並以隨機字串命名。然後關閉之前建立的.Net CLR服務,並刪除登錄檔項.Net CLR,然後再刪除自身,執行下載後的程式。這裡推測是更新自身

  • 關閉之前建立的互斥體如圖:

1568601120782

  • 下載檔案,並以隨機字串命名如圖:

1568601212938

  • 關閉服務如圖:

1568601292710

  • 刪除登錄檔項和自身檔案,並執行下載後的檔案,如圖:

1568601380109

接收的指令為:0x14,開啟IE

開啟Iexplore.exe,並執行接收到的引數,初步推斷為訪問某些特殊的網站刷流量。如圖:

1568601454250

接受的指令為:0x06,刪除自身

先關閉之前建立的互斥體.Net CLR,關閉服務.NET CLR,然後再刪除登錄檔項.Net CLR,刪除自身,退出程式。

  • 關閉互斥體,關閉服務,如圖:

1568602630773

  • 刪除登錄檔項,刪除自身,退出程式,如圖:

1568602700057

接收的指令小於0x06時,進行DDOS攻擊

當收到的指令小於6時,再次進行switch case判斷。根據接收的引數,構造套接字,或是請求包頭來進行連線。推測是進行DDOS攻擊,如圖:

1568605182440

  • 其中當接收的指令為:0x02,執行sub_4030A5,根據收到的資料,初始化不同的套接字,並最終都交由LABEL_29來建立迴圈,不斷進行連結,如圖:

1568604291694

  • 其中當接收的指令為:0x03時,執行sub_4031F0,根據接收到的引數,構造請求包頭,並最終建立死迴圈不斷進行連線,如圖:

    1568605639197

    • 其中sub_406C60構造的比較特殊的請求包頭,如圖:
    • 1568605762398

執行緒3:與執行緒2.1基本一樣,只是遠控伺服器地址為內網IP

執行緒3與執行緒2.1大體上都是一致的,唯一的區別在於遠控伺服器不再是arwah.uy1433.com,而變成了寫死的內網IP:192.168.1.107:83。而且該IP地址是通過解密函式獲取到的,如圖:

1568605994098

除黃色標識處不同外,其他部分都與執行緒2.1一致,這裡便不再分析。

1568606079331

0x02 樣本溯源

C&C伺服器
arwah.uy1433.com
192.168.1.107:83

0x03 查殺、防禦技術方案

關閉服務

由於該樣本設定了一個服務.Net CLR,所以首先先關閉服務,並刪除該服務。

修復登錄檔

由於上面提到的該樣本建立了服務,對登錄檔進行了修改,所以這裡需要對登錄檔進行修復,操作如下:

  • 刪除登錄檔項HKEY_LOCAL_MACHINE\system\currentcontrolset\services.Net CLR中的所有內容。

刪除病毒檔案

  • 刪除樣本本身。

  • 刪除釋放出來的hra33.dll。

  • 檢視下錶中的檔案路徑,若該檔案存在,則刪除。

    拷貝的目標碟符:
    \10.95.16.1\admin$\g1fd.exe
    \10.95.16.1\c$\NewArean.exe
    \10.95.16.1\D$\g1fd.exe
    \10.95.16.1\E$\g1fd.exe
    \10.95.16.1\F$\g1fd.exe
  • 檢查臨時資料夾,是否存在以隨機數命名的檔案,且大小hash與該樣本一致,若存在直接刪除。

0x04 總結

這個樣本是一個遠控和蠕蟲病毒的結合體,釋放hra33.dll,由於該樣本無法正常跑起來,因此沒法詳細分析該釋放出來的hra33.dll。這次分析的蠕蟲病毒是通過初始化一個簡單的字典,通過爆破區域網內的主機來進行傳播的。並且該蠕蟲病毒可以通過C&C伺服器獲取指令,執行不同操作,主要操作有:下載檔案並執行,更新自身,DDOS攻擊等。

相關文章