ブログ(脅威調査)

世界で猛威を振るうランサムウェア「Locky」の再来

~分析・サンドボックス回避機能が追加された新型「Locky」、 6月は一時的に約半数の攻撃が日本に集中~

背景:2016年におけるLockyの活動状況
ファイア・アイは、世界で猛威を振るっているランサムウェア「Locky」について、今年3月に顕著な上昇を観察していました。図1の通り、4月から5月にかけては増減を繰り返しながらも活動が途切れることはありませんでしたが、6月1日から3週間近くにわたり一時停止しました。しかし、ファイア・アイのDynamic Threat Intelligence(DTI)は、6月21日に新たな分析・サンドボックス回避機能が追加された「Locky」によるスパム・キャンペーンを検知し、現在の活動量は2016年上半期の水準まで回復しています。

図1: 2016年におけるランサムウェア「Locky」の活動量

概要:「Locky」の新しいスパム・キャンペーンが日本に集中
図2の通り、6月21日~23日に検出されたLockyのスパムメールの大半は、日本、米国、韓国で観測されたものです。注目すべき点として、約半数(45.99%)の攻撃が日本に集中しています。攻撃対象の内訳もテレコム(33.23%)、サービス・コンサル(20.94%)製造業(15.74%)、交通(8.78%)、保険(6.33%)と、多岐にわたる産業が標的にされています。

図2:Lockyスパムの国別状況(期間:2016年6月21日~23日)

次のスパムメールのサンプル(図3)は、未払いの請求書の送付を装う内容です。実際に添付されているのは請求書ではなく、ZIPアーカイブ形式のファイルにJavaScriptで記述されたLockyのダウンローダーが格納されています。

図3:Lockyのスパムメールのサンプル(英語)

図4:Lockyに感染したPC画面のサンプル(日本語)

技術情報:「Locky」に追加された分析・サンドボックス回避機能
Lockyのスパム・キャンペーンは現在も進行中で、今回は新たに分析・サンドボックス回避機能が追加されました。ファイア・アイでは、スパム・キャンペーンのさらなる展開を予想しており、ユーザーには定期的なデータのバックアップを呼びかけるとともに、顧客企業の保護に向けて引き続きLockyの動向に警戒しています。

新しい分析・サンドボックス回避機能について、具体的にはJavaScriptベースのダウンローダーとLockyのペイロードの両方に複数のアップデートが見られ、分析を試みるとプログラムがクラッシュする仕組みになっています。なお、ファイア・アイにはセキュリティの専門家が待機しておりますので、技術的な内容に関する質問がございましたら、資料末尾に記載されたお問い合せ先までご連絡ください。

JavaScriptダウンローダーの仕組みは、次の通りです。

  1. LockyのペイロードをホストするURLの配列を反復処理します。
  2. URLの1つに対する接続が失敗した場合、JavaScriptは1,000msスリープした後、URLの配列の反復処理を継続します。
  3. XOR方式のカスタム復号化ルーチンを使用し、Lockyのペイロードを復号化します。
  4. 復号化バイナリを所定のサイズに収めます。図5の場合、復号化バイナリのサイズは、143,360バイトより大きく、153,660バイトより小さいことが実行条件でした。

    図5:JavaScriptによるペイロードのダウンロード関数

  5. バイナリの最初の2バイトに、ヘッダーのシグネチャ「MZ」が格納されていることを確認します(図6)

    図6:「MZ」ヘッダーのチェック

  6.  コマンドラインパラメータ「123」を渡し、復号化ペイロードを実行します。

Lockyペイロードのアップデート
今回のキャンペーンでダウンロードされたLockyランサムウェアを適切に実行するには、コマンドライン引数が必要です。次の分析済みサンプルのコマンドラインパラメータ「123」は、第1段階のJavaScriptベース・ダウンローダーにより、バイナリに渡されます。このコマンドラインパラメータ値は、ランサムウェアのコード解凍段階で使用されます。正規のバイナリは、渡される引数の数を検証するか、コマンドラインパラメータを予想値と比較し、チェックが不正に終わった場合にグレースフルイグジットを行うのが一般的です。しかし、今回のLockyランサムウェアのケースでは、プログラムはイグジットを行わず(図7)、コマンドラインパラメータとして受け取った値は、バイナリで定められた定数値に加算されます。定数値とパラメータ値の合計は、復号化ルーチンに使用されます(図8)。コマンドラインパラメータが渡されない場合、定数には0が加算されます。

図8:復号化ルーチン

コマンドラインパラメータが渡されない場合、暗号化ルーチンの定数は不正となります。この結果、復号化コードは無効となり、プログラムのクラッシュが発生します。図9と図10はそれぞれ、コマンドラインパラメータが存在する場合と、そうでないない場合の復号化コードセクションです。

図9:正規の復号化コード

この手法を使用することで、Lockyの作成者は、第二段階を適切に実行するのに第一段階のダウンローダーが必要な状況を作り出しています。このような第二段階のペイロードが直接分析されると、クラッシュが発生します。

関連資料(英語) LOCKY IS BACK ASKING FOR UNPAID DEBTS