この記事は、 Austin McBride、Brad Antoniewicz、Colin Seale、David Rodriguez によるブログ「The Hours of WannaCry」(2017/5/16)の抄訳です。
わずか 10 日間のうちに、自己増殖可能な 2 つの大規模な攻撃が世界のニュースをにぎわせました。1 つは、Google ドキュメントの共有リクエストに偽装したフィッシング キャンペーンで、Google アカウントへのアクセス権を取得し、感染者の連絡先に拡散するものです。そして今、WannaCry という強力なランサムウェア キャンペーンが、インターネットでリークされたエクスプロイトを利用して脆弱なシステムに自律的に感染しています。
この攻撃の最初の段階から Umbrella チームは、Talos の担当者と連携して、WannaCry の動作を分析し、お客様の保護に取り組みました。特に、Umbrella の調査製品が、MalwareTech をサポートして WannaCry の影響を軽減できたことを誇りに思っています。このブログでは、このイベントのクリティカルな初期の時間に遡って、Umbrella チームが確認した内容の分析結果について説明します。
タイムライン
WannaCry は、この攻撃に至る数ヵ月におよぶ大規模な一連のイベントがなければそれほど大きな影響を及ぼすものではありませんでした。Umbrella チームがそれらのイベントを分析して、お客様を保護した方法を以下のインフォグラフィックにまとめました。
拡散
250,000 件以上の感染が、さまざまなニュース記事やソーシャル メディアへの投稿で取り上げられました。インターネットに対するシスコ独自の視点によって、これらの感染が時間を追ってどのように拡散していったかを可視化することができます。つまり、「キル スイッチ」ドメインに対するクエリを分析することで可視化するのです。まず、Talos のブログでこれらのドメインについて説明しましたので、次のセクションでもう少し詳細に見ていきます。下の図は、リゾルバを使用して(感染した、もしくは感染に関与したと思われる)これらのドメインにクエリを実行したマシンが存在する国を時間の経過と共に示しています。各国のクエリのパーセンテージは、各期間に相当するものです。
https://youtu.be/ynEvavCgmko
検出
注:チームは、TCP 445 ポートがオープンになっているマシンのポートの変化をモニタリングしています。その結果、下のグラフに影響を与える可能性のある変動を確認しています。新たな情報が確認でき次第更新します。
また、このブログの執筆時点で、インターネットに対して TCP 445 をオープンにしていたホストの数も確認しています。このポートは重要です。というのは、このポートをリッスンする SMB サービスがエクスプロイトの最初のターゲットになっているからです(MS17-010、CVE-2017-0143)。ご想像のとおり、これらのマシンの大部分が TCP 445 をオープンにしており、また、依然として脆弱な可能性があります。
上のグラフは、最初の 2 つのキル スイッチ ドメインを対象にしています。このブログの執筆中に 3 つめのドメインも登場し始めました。
- iuqerfsodp9ifjaposdfjhgosurijfaewrwergwea[.]com
- ifferfsodp9ifjaposdfjhgosurijfaewrwergwea[.]com
- ayylmaotjhsstasdfasdfasdfasdfasdfasdfasdf[.]com
これらのドメインへのクエリは、システムがマルウェアに侵害されたことを示していますが、まだ感染はしていません。Umbrella がリクエストをブロック ページにリダイレクトしたからです。これらのドメインのクエリ件数から劇的な経緯が明らかになります。
これらの既知のキル スイッチ ドメインへのクエリ件数は急増を続けていますが、キル スイッチをクエリしている実際のマシンの数に関する情報が欠けています。1 台のマシンがこれらのドメインを複数回クエリしている可能性があります。これを明らかにするために、過去 168 時間にキル スイッチ ドメインをクエリしたマシンの数(1 時間あたり)を確認してみましょう。
それぞれのマシンの数
3 つのキル スイッチ ドメインの開始時期と、その規模には明確な法則があることがおわかりでしょう。つまり、iuq…ドメインが最も大規模で、iff… は少し規模が小さく、ayy… が一番小規模です。さまざまな理由から、これが偶然の結果ではないと言えます。まず、iuq…は WannaCry が利用した最初のキル スイッチ ドメインです。iff… が2 番目で、ayy… が最後です。
しかし、もう 1 つの興味深い結果は、その規模です。各ドメインにクエリするマシンの数から見ると、キル スイッチ ドメインが増えていくにつれ、それぞれのキル スイッチの影響範囲が縮小していきます。ある意味、ランサムウェアに広く共通する一種の法則が、ここからみてとれます。すなわち、攻撃キャンペーンが成功した状態であっても、繰り返し行われると、その成功率は前よりも下がっていくということです。
繰り返し
これらのクエリに関するもう 1 つの重要な視点は、時間ごとに見た、繰り返しを行うマシンの数です。ここで過去 168 時間の情報を示します。
ayy.. ドメインの急激な増加が目につきます。これは、前の1 時間にクエリを実行していたマシンのすべて(100 %)が 次の時間もクエリを実行したことを意味します。この急増は、この特定のドメインの存続期間のかなり初期の段階に発生しています。このドメインに対するクエリがごく少数のマシンに限定されていた時点です。これは、マルウェアの再感染やマルウェアの拡散の拡大を示している可能性もありますし、単にそのドメインを調査していた調査員のものかもしれません。
リスク
クエリ件数を確認する際に考慮すべき最後のデータ ポイントは、キル スイッチ ドメインをクエリしているマシンが他のドメインをクエリしている件数の中央値です。これでわかることは、ある特定のマシンがアクティブになるほど、何か悪意のある攻撃に遭遇している可能性が高いということです。
前のグラフと同じように、ayy.. ドメインがここでも異常値を示しているのは興味深いことです。ayy.. ドメインをクエリしているマシンは、さらに多くの他のドメインもクエリしているようです。
調査員
WannaCry は、キル スイッチ ドメインをリクエストする際、InternetOpenUrl 関数を使用します。この関数は、User-Agent HTTP リクエスト ヘッダーを省略するため、HTTP リクエストは次のようになります。
GET / HTTP/1.1
Host: www.iuqerfsodp9ifjaposdfjhgosurijfaewrwergwea.com
Cache-Control: no-cache
view rawInternetOpenUrl hosted with ❤ by GitHub
チームは、User-Agent ストリングがあったリクエストのブロック率と、ストリングのなかったリクエストのブロック率を比較しました。ここでは、User-Agent ストリングがあったリクエストはドメインを参照するユーザのもので、なかったものはマルウェア自体からのものであるとみなしています。これら 2 つのグループを時系列にプロットすると、感染が減速してからまた戻っていった興味深い谷間の時期がわかります。
キル スイッチ
WannaCry で最も興味深い部分は、おそらくキル スイッチです。キル スイッチのような仕組みがマルウェアの一部で発見されたのは初めてではありませんが(Necurs など)、その目的は非常に興味深いものです。これは攻撃者がワームを制御するためのものだと思われます。つまり、シンクホールされたことやサンドボックスの回避に失敗したことなどを攻撃者がチェックして、攻撃が発見されたことを把握するために使用している可能性があります。理由はともかく、キル スイッチは感染を阻止するのに大きな役割を果たしました。
検出のテスト
Umbrella の新たに確認されたドメインは、多くのお客様を保護する上で大きな役割を果たしました。ただし、多くのお客様が、ドメインをブロックすることが実際には感染を引き起こすのではないかと懸念されていました。チームは、お役に立てればと思い、WannaCry のロジックを再現するために簡単なテストを作成ました。
/*
A simple test to check the behavior of WannaCry's Kill Switch
functionality. Compile with Visual Studio.
@brad_anton
Example Run:
Set DNS to 208.67.222.222
C:\Users\user\Desktop\WannaCryTest\Debug>WannaCryTest.exe
GOOD: WannaCry would have been aborted!
Add hosts file (C:\Windows\System\drivers\etc\hosts) entry:
127.0.0.1 www.iuqerfsodp9ifjaposdfjhgosurijfaewrwergwea.com
C:\Users\user\Desktop\WannaCryTest\Debug>WannaCryTest.exe
NOT GOOD: WannaCry would have executed and further infected!!!
*/
#include "stdafx.h"
#include <Windows.h>
#include <wininet.h>
#pragma comment(lib, "wininet.lib")
void main()
{
HANDLE hInt;
HANDLE hUrl;
hInt = InternetOpen(NULL, INTERNET_OPEN_TYPE_DIRECT,
NULL, NULL, 0);
hUrl = InternetOpenUrl(hInt, L"http://www.iuqerfsodp9ifjaposdfjhgosurijfaewrwergwea.com", NULL, 0, INTERNET_FLAG_RELOAD | INTERNET_FLAG_NO_CACHE_WRITE, NULL);
if (hUrl)
{
printf("GOOD: WannaCry would have been aborted!");
InternetCloseHandle(hUrl);
}
else {
printf("NOT GOOD: WannaCry would have executed and further infected!!!");
}
InternetCloseHandle(hInt);
}
view rawWannaCryTest.cpp hosted with ❤ by GitHub
view rawWannaCryTest.exe hosted with ❤ by GitHub
view rawwannacrytest_samplerun.png hosted with ❤ by GitHub
Visual Studio に慣れていない方は、gist に添付されているバイナリを使用できます(32 ビットの Windows 8.1 で VS2015 を使用してテスト済み)。
ドメインの構造
Talos のブログ記事で説明したように、ドメインの構造には興味を引かれます。誰かがキーボードの上の方のキーをいくつか叩きつけたらできたような感じです。興味本位で文字間の距離と頻度をプロットしてみました。
ドメインがどのように作成されたのかを正確に言い当てることはできませんが、誰かが両手をキーボードのホーム ポジションにおいて、ほとんど動かさずに何度か移動させただけのように思われます。中指が届く上の行の 9 つのキーの中で、よりランダムなものにしようと意識していたかのようです。
亜種
模倣したものが発生するのは常であり、WannaCry も例外ではありませんでした。これらの亜種は、まるで Frank Abagnale のように、別のキル スイッチ ドメインや別のビットコインの支払い先アドレスを含むようにバイナリを修正し、ワームを拡散させました。チームは引き続きこれらの亜種の出現を監視します。
これらのドメインは非常に類似しており、新しい亜種を生成する上でいかに少しの作業で模倣が可能かを、レーベンシュタイン距離の計算を通じて示してみます。どれも距離が短く、簡単に模倣している様子を数値化することで見て取れます。
簡単なパターン マッチングで発見したドメインのリストを次に示します。ほとんどが同じ長さです。
- iuqerfsodp9ifjaposdfjhgosurijfaewrwergwea[.]de
- iuqerfsod9ifjaposdfjhgosurijfaewergwea[.]com
- iuqerfsodp9ifjaposdfjhgosurijfaewrwergwea[.]info
- iuqerfsodp9ifjaposdfjhgosurijfaewrwergwea[.]net
- dp9ifjaposdfjhgosurijfaewrwergwea[.]com
- iuqerfsodp9ifjaposdfjhgosurijfaewrwergwea[.]world
- iuqerfsodp9ifjaposdfjhgosurijfaewrwergwea[.]us
- iuqssfsodp9ifjaposdfjhgosurijfaewrwergwea[.]com
- iuqerfsodp9ifjaposdfjhgosurijfaewrwergwea[.]co
- ifferfsodp9ifjaposdfjhgosurijfaewrwergwea[.]com
- iuqerfsodp9ifjaposdfjhgosurijfaewrwergwea[.]org
- iaaerfsodp9ifjaposdfjhgosurijfaewrwergwea[.]com
- iuqerfsodp9ifjaposdfjhgosurijfaewrwergwea[.]com
- iuqerfsodp9ifjaposdfjhgosurijfaewrwergweb[.]com
- iuqerfsodp9ifjaposdfjhgosurijfaewrwergwea[.]xyz
- iuqerfsodp9ifjaposdfjhgosurijfaewrwergwea[.]kr
- iuqerfsodp9ifjaposdfjhgosurijfaewrwergwea[.]cn
- ayylmaotjhsstasdfasdfasdfasdfasdfasdfasdf[.]com
感染した WEB サイト
ほとんどのランサムウェアの感染に共通するのは、マルウェアがシステムのファイルを暗号化した際に身代金要求メッセージを表示するということです。WannaCry は、独自の実行可能ファイル @WanaDecryptor@.exe を使用して、これを行っています。チームは、この実行可能ファイルをホスティングしている Web サイトを探し、その一連のサイトを特定しようとしました。その Web サイトが実際に侵害されていたか、何か別のことが発生していたかは完全にはわかりませんが、判明したことについて少し詳細に見てみましょう。次のグラフは、実行ファイルを保持していることが判明している 10 個のドメインに対するクエリの件数を示しています。実際に感染していることを考慮してドメイン名は伏せています。
これらのドメインでは、すべてこの 3 日間(およびその前後)でアクティビティの件数が増えていることがわかります。実際に、直近の期間(最終日付近)のアクティビティの件数をみると、これまでで最も頻度が高くなっています。このことから次の 2 つの可能性が導き出されます。1)WannaCry キャンペーンは依然最盛期の勢いを保っている。2)WannaCry キャンペーンは、セキュリティ調査者がマルウェアを解明して優位に立つにつれ勢いが衰えている。
どちらの解釈が成り立つかにかかわらず、これらの 10 個のドメインによって、キル スイッチと @WanaDecryptor@.exe をホストするドメインの違いがわかります。最も大きな点は、@WanaDecryptor@.exe をホスティングしているこれらのドメインに対するクエリの割合が、キル スイッチ ドメインに対するクエリ件数の中で最小のものよりも著しく少ないということです。ただし、件数は少ないものの、@WanaDecryptor@.exe の各ドメインには一定の件数のクエリがあります。つまり、1 つ、または 2 つのドメインですべてのクエリを受けているわけではないということです。@WanaDecryptor@.exe 含むドメインがこのように均一に分布しているという情報から、ランサムウェアのダウンロードに必要なペイロードの保管に使用されるインフラストラクチャについて、ある程度の推測を行うことができます。
まとめ
チームはお客様を保護するため、今後もこのイベントやその他のイベントを監視していきます。引き続きご注目ください。