Shamoon 2: 舞い戻ってきたDisttrackワイパー

By

Category: Unit 42

Tags: , , , ,

This post is also available in: English (英語)

2012年8月、Shamoonとして知られる攻撃活動が、サウジアラビアのエネルギー関連企業を標的としてDisttrackというマルウェアを配信しました。Disttrackはワームのような振る舞いを見せる多目的のツールで、盗んでおいた管理者の資格情報を用いてローカル ネットワーク上の他システムへと感染拡大を試みます。それよりも重大なのは、データを破壊し、感染の被害を受けたシステムを使用不能の状態にできるというのがDisttrackの十八番だということです。4年前の攻撃では、最終的に30,000以上のシステムが被害に遭いました。

先週、Unit 42は最新の攻撃活動で使われてきたと思われる新型のDisttrackサンプルに遭遇しました。攻撃では少なくともサウジアラビアにある1つの組織 が標的となりました。これは初期のShamoon攻撃の標的の選び方と一致します。新型Disttrackのサンプルの目的はひとえに、破壊に的を絞っていたように見えます。その証拠に、サンプルは稼働していないC2サーバを連絡先に設定しており、ちょうど2016/11/17の20:45にデータ消去処理を開始するよう設定されていました。もうひとつShamoonと似ているのは、この日がサウジアラビアでは平日最後の日 (現地の平日は日曜日から木曜日まで) であるため、マルウェアが感染を拡大するために週末をまるまる使った可能性がある点です。このShamoon攻撃は、イスラム教徒にとって一年で最も神聖な夜であるLailat al Qadr (ライラトルカドル、カドルの夜) に起きました。従業員たちが働いていないだろうと攻撃者たちが確信していた可能性のあることも肯けます。

Disttrackの構成

Disttrackはドロッパー コンポーネント、通信コンポーネント、ワイパー コンポーネントの3つの異なる部品から構成されています。メインのDisttrack実行ファイルはドロッパーで、埋め込み済みリソースからさらにツールを取り出し、それらをいつ保存し実行するかを調整します。各Disttrackサンプルに埋め込まれているのは、C2サーバとの通信を担当するコンポーネントおよびデータ消去機能を実行するのに使われる別のコンポーネントです。

ドロッパーは通信コンポーネントとワイパー コンポーネントを、それぞれ“PKCS7”、“PKCS12”という名前のリソースから抽出します。一方、x86サンプルは“X509”という名前のリソースからDisttrackのx64亜種を抽出します。これらのコンポーネントを抽出するため、ドロッパーはリソース内の特定のオフセットを探し、特定数のバイトを読み、特定のキーを使って中身を復号化するよう設定されています。キーはサンプル内にbase64エンコード処理された文字列として存在します。ドロッパーはこの文字列をデコードした後、得られた文字列の各バイトを使って、リソースから取得してあったデータに対するXOR (排他的論理和) 演算処理を行います。リソース内の暗号文の位置を算出する際、難読化の追加層として、ドロッパーはサンプルの設定におけるオフセット値から14を減算します。表1はDisttrackのx86サンプル内にあるリソースとサンプルに含まれるコンポーネントと中身を復号化するのに必要な値を示しています。

コンポーネント リソース名 オフセット サイズ Base64キー
x64亜種 X509 812 -14 = 798 717312 5tGLQqku0m02…
通信 PKCS7 879 -14 = 865 159744 UPi0IzQOAyiL…
ワイパー PKCS12 792 -14 = 778 282112 3Lmqr/nJgzFZ7…

表1 Disttrackコンポーネントを含むリソース

Disttrackの機能

Disttrackは主に、データ破壊と出来る限り多くのシステムに損害を与えることに的を絞っています。この目的を実現するために、盗まれたものである可能性の高い管理者の資格情報を用いて、ネットワーク上の別のシステムに感染を広げようとします。これもまた2012年のShamoon攻撃と似ています。2012年のShamoon攻撃でも、攻撃前に入手された、セキュリティ侵害を受けてはいるが正規である資格情報が、マルウェアを拡散するためにマルウェア内でハード コードされていました。Disttrackには追加のアプリケーションをシステムにダウンロードし実行する機能や、リモートからシステム消去処理を開始する日付を設定する機能も備わっています。

ローカル ネットワークでの感染拡大

Disttrackマルウェアは、盗んでおいた資格情報を用いて他のシステムに自動的に感染を広げます。私たちが分析したDisttrack には、標的に選ばれた組織と関連する、内部利用目的のドメイン名と管理者の資格情報が含まれていました。内部利用目的のドメイン名と資格情報は、このツールが作成されるよりも前に盗まれたようです。その根拠として、パブリック ドメインでないこと、資格情報が類推や総当たり攻撃、辞書攻撃などによって入手できるような弱いものでないことが挙げられます。

Disttrackはこれらの内部利用目的のドメイン名と資格情報を用いて、同一のネットワーク セグメント上のリモート システムにログインします。標的システムに関連するローカル ネットワーク セグメントの割り出し (gethostnameの呼び出し) を、標的システムのIPアドレス取得 (gethostbynameの呼び出し) により行います。その後、標的システムのIPアドレスを用いて、標的システムとネットワークで繋がっている/24ネットワーク(x.x.x.0-255)を逐一洗い出し、これらのリモート システムのそれぞれに感染を広げようと試みます。

次に、ドロッパーは各リモート システム上のサービス マネージャーをオープンしてRemoteRegistryサービスを開始しますが、RemoteRegistryサービスにはRegConnectRegistryW関数を用いて接続します。接続後、ドロッパーは下記のレジストリキーの値を“1”に設定することで、UAC (ユーザー アクセス制御) のリモート制限の無効化を図ります。

SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\LocalAccountTokenFilterPolicy

UACの無効化後、ドロッパーはリモート システムに接続し (NetUseAddを使用)、盗んだ資格情報をコードに埋め込んでおいたものを用いてログインします。次に、“\system32\csrss.exe”のオープンを試みることでリモート システム上で管理者権限を有しているか確認します。この試みにより、リモート システム上の“\system32”フォルダーにドロッパーのペイロードを書き込むことができるか判断可能となります。このとき、ドロッパーには2つの方法があるのですが、この方法でドロッパーはリモート システムに軸足を置くことができます。

1つ目の方法では、ドロッパーがリモート システム上の“\system32\ntssrvr32.exe”に自分自身を書き込むことが必要となります。リモート システムに自分自身を書き込んだ後、ドロッパーは“ntssrv”という名のサービスを作成しますが、このサービスは、表示名が“Microsoft Network Realtime Inspection Service”、説明が“Helps guard against time change attempts targeting known and newly discovered vulnerabilities in network time protocols (既知または新たに発見されたネットワークタイムプロトコルの脆弱性を標的として時刻を変更しようとする試みに対して、防御を支援します)”となっており、ペイロードを実行します。

2つ目の代替方法は、ドロッパーがリモート システム上の“\system32\ntssrvr32.exe”に自分自身をコピーすることが必要となりますが、リモート サービスを作成する代わりに、Windows netapi32ライブラリ内のNetScheduleJobAdd関数を呼び出して、ペイロードを実行するためにスケジュールされたタスクを作成します。スケジュールされたタスクにはタスクの実行時刻が必要です。タスクの実行時刻は、リモート システムから時刻を取得する関数NetRemoteTODを呼び出すことで決めます。ドロッパーはリモート システムの時刻の値に90秒を加算し、この値を“JobTime”として用いて3分後にタスクを実行します。これによりリモート システム上でペイロードが実行されます。下記の疑似コードはスケジュールされたタスクを作成するプロセスを示しています。

C2通信

Disttrackは通信コンポーネントを“PKCS7”という名のリソースから取り出し、これを復号化して、結果として得られる平文をファイル%WINDOWS%\system32\netinit.exeに保存します。

通信モジュールはHTTPリクエストを使ってC2サーバと対話を行います。私たちが分析したDisttrackのx86およびx64亜種の両者における通信モジュールは、自身のC2サーバ用に“1.1.1.1:8080”を用いるよう設定されていましたが、このIPアドレスでは稼働するDisttrack C2サーバが提供されていません。稼働するC2サーバが無いということから、攻撃者は、感染したシステムへのリモート アクセスは望んでおらず、むしろ、その代わりにシステムを使用不能の状態にしようと試みていたことが伺えます。仮に、稼働するC2サーバを使ってモジュールが設定してあるならば、モジュールは下記のようなHTTP GETリクエストを生成すると思われます。

shamoon_1

上記のリクエストの興味深いところは、ホスト“server”、URL “category/page.php”、パラメータ“shinu”、およびユーザエージェント“Mozilla/5.0 (MSIE 7.1; Windows NT 6.0)”がツールにハードコード化されている点です。“shinu”パラメータのデータは、システムのティック数、ローカルIPアドレス、オペレーティング システムのバージョン、キーボード レイアウト、および%WINDOWS%\inf\netimm173.pnfの内容を組み合わせたものです。C2サーバは、このHTTPリクエストに次の2つのコマンドのどちらかで応答できます。

コマンド 説明
E システム上で稼働する実行ファイルを提供します。実行可能ファイルは、%TEMP%\Temp\filer\.exeに保存されます。
T 日付を%WINDOWS%\inf\usbvideo324.pnfに書き込むことで、システムのワイプを開始する時間を設定します。

“server”のHTTPホスト値および非稼働の“1.1.1.1” C2アドレスは、通信モジュールがビルダー ツールを使用して作成されていることを示唆していると確信しています。この場合は、攻撃者は誤って、または意図的にこのモジュールの作成時にアクティブなC2サーバを提供しませんでした。これは完全に憶測の域を出ませんが、パラメータとして使用されている“shinu”という語は、“what”のアラビア語のスラング、およびイラン北西部の村の名前を指していると思われます。

Disttrackのデータ破壊

Disttrackドロッパーは、このトロイの木馬のワイパー コンポーネントをインストールする役目を担っていますが、システム時間が事前に設定された日付を超えている場合は、単に、このコンポーネントを有効化するだけです。ドロッパーは、特定のファイルを読み取るか、ハードコード化されたタイムスタンプ“2016/11/17 20:45”を使用して、ワイプ機能の有効化に使用された日付を取得します。このタイムスタンプが含まれるファイルの名前は“\inf\usbvideo324.pnf”で、最初はインストールされず、通信モジュールに“T”コマンドが送信された場合に、C2サーバによって提供されます。“usbvideo324.pnf”ファイルの構造は次のとおりです。

BYTE year;
BYTE month;
BYTE day;
BYTE hour;
BYTE year;
BYTE minute;

ドロッパーは、システム日付が指定された日付を超えていると判断した場合、ワイパー コンポーネントを“PKCS12”という名前のリソースから抽出し、それを次のファイル名のいずれかに“.exe”拡張子を付加して、“system32”フォルダーに保存します。

  • caclsrv
  • certutl
  • clean
  • ctrl
  • dfrag
  • dnslookup
  • dvdquery
  • event
  • findfile
  • gpget
  • ipsecure
  • iissrv
  • msinit
  • ntfrsutil
  • ntdsutl
  • power
  • rdsadmin
  • regsys
  • sigver
  • routeman
  • rrasrv
  • sacses
  • sfmsc
  • smbinit
  • wcscript
  • ntnw
  • netx
  • fsutl
  • extract

その後、ドロッパーは、コマンド ライン引数“1”を指定してワイパー コンポーネントを実行します。ワイパー コンポーネントは、リソース セクションからドライバを抽出し、226バイトのXORキーを使用して、それを復号化します。ワイパーは、抽出したドライバを“C:\Windows\System32\Drivers\drdisk.sys”に保存し、次のコマンドラインのコマンドで“drdisk”という名前のサービスを作成することで、カーネル ドライバをインストールします。

カーネル ドライバは、EldoS CorporationのRawDiskという、ファイル、ディスク、パーティションへの直接アクセスを提供する市販の製品で、攻撃者はこれを悪用しています。“drdisk.sys”ドライバ(SHA256:4744df6ac02ff0a3f9ad0bf47b15854bbebb73c936dd02f7c79293a2828406f6)は、2012年のShamoon攻撃で使用されたものとまったく同じドライバであることを示しています。カーネル ドライバがインストールされると、ワイパーは、マスターブートレコード(MBR)やストレージ ボリュームのパーティション テーブルなど保護されたシステムの場所に書き込みを開始できます。ワイパーは、“F”、“R”または“E”の構成設定によって指定される3通りの方法でファイルを上書きするように設定できます。“F”が設定されると、ワイパーはAJKEOAという名前のリソースをロードします。これは、ファイルとパーティション テーブルを上書きするために使用するJPEG画像を抽出します。ワイパーに“E”が設定されている場合は、RC4アルゴリズムと、キーとしてランダム値を使用して、ファイルの内容を暗号化します。“R”が設定されている場合は、ワイパーは“E”でキーとして使用されたランダム値でファイルを上書きします。

分析したサンプルには、“F”が設定されていました。つまり、リソース セクションから取得した画像でファイルを上書きします。抽出された画像は、2015年9月2日に溺死した、Alan Kurdiという名前のシリア人少年の写真です。この事件は、継続するシリア難民の危機的状況について国際的な注目を集めました。2012年の以前のShamoon攻撃では、燃えるアメリカ国旗の画像が使用されており、画像に込められた政治的なテーマは引き継がれています。

機能の点では、ワイパーはEldoSのRawDiskドライバに依存して、システム上のファイルを上書きしています。このアクティビティの間、私たちは、ワイパーがシステム時間を2012年8月に変更していることに気がつきました。これは、RawDiskドライバの一時ライセンスキーで、システム時間が一時ライセンスキーの期限切れとなる8月を超えてはならないからです。このシステム時間の変更は以前の攻撃でも見られ、ワイパー コンポーネント内の一時ライセンスキーは、2012年の攻撃のワイパー コンポーネントとまったく同じものです。ワイパー自体が、次のレジストリキーをクエリして、上書きするパーティションのリストを取得します。

ワイパーはこれらのパーティションに加え、次のフォルダー内のファイルとサブフォルダの上書きを試みます。

これらのファイルとパーティション テーブルを上書きした後、ワイパーは次のコマンドを実行して、システムを再起動します。

上記の“shutdown”コマンドで使用される引数とスイッチは、実行中のアプリケーションをすべて強制終了し、2秒後 (‘-t 2’) にシステムをリブート (‘-r’) します。このコマンドの結果、図1に示すダイアログ プロンプトが表示され、ユーザーにシステムをシャットダウン中であることが通知されます。

図1 ワイパー コンポーネントが‘shutdown’コマンドを実行したときに表示されるダイアログ プロンプト
図1 ワイパー コンポーネントが‘shutdown’コマンドを実行したときに表示されるダイアログ プロンプト

パーティション テーブルが上書きされると、それ以降、システムは適切に起動せずに使用不能になります。分析中、私たちの分析システムも使用できなくなりました。これは図2に示すように、仮想マシンが起動時にオペレーティング システムを検出できなくなったためです。

図2 Disttrackワイパーの実行後、起動できなくなった分析仮想マシン
図2 Disttrackワイパーの実行後、起動できなくなった分析仮想マシン

結論

4年間の空白の後、Shamoon攻撃に関与していたと見られる攻撃者たちは、サウジアラビアの組織を最低でも1つ標的にするためにDisttrackマルウェアを使用しました。現在の攻撃は、特に標的とタイミングの面で、本来のShamoon攻撃とTTPのいくつかの点で重複しています。また、最近の攻撃で使用されたDisttrackマルウェアは、まったく同じRawDiskデバイス ドライバ (同じ一時ライセンスキーに至るまで) を使用する2012年の攻撃で使用された亜種と非常によく似ています。Disttrackマルウェアの主な目的は、データを破壊するためにファイルとストレージ パーティションを上書きし、システムを使用不能にすることです。Disttrackツールは最大限に破壊するため、盗んだ管理者の認証情報を使用して、ネットワーク上の他のシステムへの感染拡大を試みます。このことは、攻撃者が以前にネットワークにアクセスしたか、Disttrackを使用した攻撃の前にフィッシング攻撃に成功していることを示唆しています。

しかし、Palo Alto Networksのお客様は、以下通り、Disttrackの攻撃から保護されています。

  • 既知のサンプルはすべて、WildFireで悪意のあるものとして判定されます。
  • AutoFocusのお客様は、Disttrackタグを介してDisttrackの活動を監視できます。

セキュリティ侵害の痕跡

Disttrackドロッパー

47bb36cd2832a18b5ae951cf5a7d44fba6d8f5dca0a372392d40f51d1fe1ac34 (x64)
394a7ebad5dfc13d6c75945a61063470dc3b68f7a207613b79ef000e1990909b
(x86)

通信コンポーネント

772ceedbc2cacf7b16ae967de310350e42aa47e5cef19f4423220d41501d86a5 (x64)
61c1c8fc8b268127751ac565ed4abd6bdab8d2d0f2ff6074291b2d54b0228842 (x86)

ワイパー コンポーネント

c7fc1f9c2bed748b50a599ee2fa609eb7c9ddaeb9cd16633ba0d10cf66891d8a (x64)

128fa5815c6fee68463b18051c1a1ccdf28c599ce321691686b1efa4838a2acd (x86)

EldoS RawDiskサンプル

5a826b4fa10891cf63aae832fc645ce680a483b915c608ca26cedbb173b1b80a (x64)
4744df6ac02ff0a3f9ad0bf47b15854bbebb73c936dd02f7c79293a2828406f6 (x86)