2016年2月、新しいランサムウェア「Locky」の大流行がインターネット界隈を震撼させました。この身代金要求型のトロイの木馬Lockyは、カスペルスキー製品ではTrojan-Ransom.Win32.Lockyとして検知されるもので、現在でも活発に拡散を続けています。Lockyによる感染の試みは、カスペルスキー製品によって世界114か国で検知されています。
サンプルの解析結果から、これは1からコーディングされた、まったく新しいランサムウェアであることが判明しました。さて、このLockyとは如何なるもので、この脅威から身を守るにはどうすればいいのでしょうか?
感染経路
Lockyを拡散するためにサイバー犯罪者が取った方法は、悪意あるローダーを添付したスパムメールの大量送信でした。
当初、この悪意あるスパムメールにはマクロの仕込まれたDOCファイルが添付されており、このマクロがLockyをリモートサーバーからダウンロードして実行していました。
悪意ある文書が添付された初期のスパムメッセージ
悪意あるマクロの一部
カスペルスキー製品は、悪意あるマクロが添付されたファイルを、以下のとおり検知してブロックします:
Trojan-Downloader.MSWord.Agent
HEUR:Trojan-Downloader.Script.Generic
最近のバージョンのMicrosoft Officeでは、セキュリティ上の理由から、マクロは自動実行されないようになっています。しかし実際には、知らない差出人から届いた文書であっても、受け取った人が手動でマクロを有効化することがしばしばであり、結果として何らかの損害を受けることがあるようです。
この原稿を書いている時点では、悪意あるスパムの発信は依然として続いています。ただし、添付されているのはDOCファイルではなく、JavaScriptで書かれた1つまたは複数の難読化スクリプトを圧縮したZIPアーカイブです。メール本文は英語である場合がほとんどですが、2言語のバージョンも現れています。
圧縮ファイルが添付されたスパムメール(英語)
圧縮ファイルが添付されたメール(英語とドイツ語)
受信者は、スクリプトを手動で起動するように促されます。
メールに添付された圧縮ファイルの内容
アーカイブされたスクリプトの一部
このスクリプトを起動すると、リモートサーバーからLockyがダウンロードされて起動されます。
カスペルスキー製品は、これらのスクリプトローダーを、以下のとおり検知してブロックします:
Trojan-Downloader.JS.Agent
HEUR:Trojan-Downloader.Script.Generic
攻撃を受けた地域
Kaspersky Security Networkによると、Lockyの攻撃は114か国で観測されています。
上位10か国
国名 | 攻撃を受けたユーザーの数 |
フランス | 469 |
ドイツ | 340 |
インド | 267 |
米国 | 224 |
南アフリカ共和国 | 182 |
イタリア | 171 |
メキシコ | 159 |
ブラジル | 156 |
中国 | 126 |
ベトナム | 107 |
ただし、この統計に含まれているのは、実際にLockyが検知されたケースだけです。悪意あるスパム、または悪意あるダウンロードとして報告された初期段階での検知は含まれていません。
Trojan-Ransom.Win32.Lockyによる攻撃の地理的分布(攻撃を受けたユーザーの数)
ご覧のとおり、Lockyは事実上、世界のあらゆる地域で攻撃を繰り広げています。サイバー犯罪者がどの国を主たる標的と見ているかは、身代金支払い用Webページで使用されている言語のリストから推定できます(詳細は後述)。
仕組み
トロイの木馬Lockyは実行ファイルで、サイズは約100KBです。C++でSTLを使って記述され、Microsoft Visual Studioでコンパイルされています。起動すると、自身を%TEMP%svchost.exeにコピーし、そのコピーからNTFSデータストリームとZone.Identifierを削除します。これは、Lockyのファイルを起動したときに、インターネットからダウンロードされた危険なファイルの可能性があるという通知をWindowsが表示しないようにするためです。その後、Lockyは%TEMP%から起動します。
起動後、Lockyは以下のレジストリキーの有無と、その内容をチェックします。
パス | 型 | 値 |
HKEY_CURRENT_USERSoftwareLockyid | REG_SZ | 感染ID |
HKEY_CURRENT_USERSoftwareLockypubkey | REG_BINARY | MSBLOB形式のRSA公開鍵 |
HKEY_CURRENT_USERSoftwareLockypaytext | REG_BINARY | 標的向けに表示されるテキスト |
HKEY_CURRENT_USERSoftwareLockycompleted | REG_DWORD | ステータス(暗号化が完了したかどうか) |
レジストリキー内にデータがすでに存在する場合(以前、Lockyが起動したが、何らかの理由で起動セッションが中断された場合)、Lockyはそのデータを読み取り、感染プロセスを続行します。
初めて起動されたときに、Lockyは次のように動作します:
- 指令サーバー(C&C)と通信し、感染を報告する。
- 指令サーバーからRSA-2048公開鍵と感染IDを受け取り、レジストリに保存する。
- 感染したOSの言語に関する情報を送信し、身代金要求テキスト(標的ユーザーが見るのはこのテキスト)を受信し、受信したテキストをレジストリに保存する。
- ローカルディスクドライブ内で、特定の拡張子を持つファイルを探し出して暗号化する。
- ファイルのシャドウコピーを削除する。
- 自動実行プログラムとして自らをHKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRunに登録する。
- ネットワークドライブ内、およびドライブ文字の割り当てられていないネットワークファイルリソース内で、特定の拡張子を持つファイルを探し出して暗号化する。
- サイバー犯罪者の身代金要求テキストを、標的に対して表示する。
- プロセスを終了し、自身を削除する。
OSの言語を判断する部分のコード
ファイルの暗号化
Lockyは指定の拡張子を持つファイルを検索し、見つかったファイルを下記のとおり暗号化します。
暗号化の対象となるファイル拡張子
リストアップされた拡張子を持つファイルそれぞれについて、Lockyは新たに128ビット鍵を生成し、ファイルの中身をAES-128アルゴリズムのCTRモードで暗号化します。暗号化されたファイルには、「<16桁の16進数文字列のID><16桁のランダムな16進数文字列>.locky」という名前がつけられます。ファイルの末尾には、次の構造体が追加されます。
Lockyにより暗号化されたファイルの末尾に追加される構造体
C言語のシンタックスでは、この構造体は次のように記述できます。
struct file_data
{
uint32_t start_marker; //Structure start marker = 0x8956FE93
char id[16]; //Infection ID
uint8_t aes_key[256]; //AES key encrypted with RSA-2048
uint32_t name_marker; //Name start marker encrypted with AES
(= 0xD41BA12A after decryption)
uint8_t orig_name[520]; //Original file name encrypted with AES
WIN32_FILE_ATTRIBUTE_DATA attr; //Original file attributes encrypted with AES
};
C言語のシンタックスで記述された追加の構造体
身代金要求
ファイルの暗号化後、Lockyは身代金要求を含むメッセージを表示します。
身代金要求(英語)
身代金要求(ドイツ語)
身代金要求メッセージには、サイバー犯罪者の「秘密のサーバー」のアドレスが記載されています。このサーバーには、復号プログラムと引き換えに要求する身代金についての情報が格納されています。メッセージにある4種類のリンクはすべて、Torネットワークにある同じWebサイトへとリンクしています。
初期のスパム活動では、身代金支払いページの外見は次のとおりでした。
Lockyの初期の身代金支払いページ
このページでは、暗号化されてしまったファイルを復号するには身代金をBitcoinで支払うように、と述べています。また、Bitcoinの入手方法についても説明があります。
このページの内容とデザインは、変更を重ねています。現在は20以上の言語で表示可能となっており(言語はドロップダウンリストから選択可能)、外見も次のように変わっています。
Lockyの最新の身代金支払いページ
どの言語に対応しているのかは、ページのソースコードで確認できます。これらの言語を使用している国がLockyのメインターゲットであるのは、明らかです。興味深いことに、ロシア語など独立国家共同体(バルト3国を除く旧ソ連諸国12カ国の共同体)の言語はリストに含まれていません。何らかの理由で、サイバー犯罪者は、これらの言語が話されている国のユーザーを標的にすることに乗り気ではなかったようで、これはKSNの統計にも表れています。
Lockyの身代金支払いページが対応している言語のリスト
C&Cサーバーとの通信
Lockyのコードには、C&Cサーバーの IPアドレスが1つから3つ含まれています。さらに、このコードには、その当日の年月日に応じてC&Cサーバーのアドレスを新たに生成するアルゴリズム(DGA:Domain Generation Algorithm)も含まれています。このアルゴリズムによって、毎日6つのC&Cアドレスが生成されます。下のスクリーンショットで赤囲みされているのは、DGA Lockyアルゴリズムを示す疑似コードです。
Locky C&Cドメイン生成アルゴリズムの疑似コード
C&Cサーバーとの通信は、HTTPプロトコルを使って行われます。Lockyは、「http://<C&CへのURL>/main.php」という形式のアドレスにPOST要求を送信します。送信されたデータは、シンプルな対称アルゴリズムを使って暗号化されます。
送信されたパラメータとして、考えられるタイプを見てみましょう。
- 感染に関する通知と鍵の要求。
id=<感染ID>
&act=getkey&affid=<Lockyの本文に含まれるパートナーID>
&lang=<OSの言語>
&corp=<OSはコーポレートOSか>
&serv=<OSはサーバーOSか>
&os=<OSのバージョン>
&sp=<OSのサービスパックのバージョン>
&x64=<OSは32ビットか64ビットか>Lockyは、affidパラメータに指定されたアフィリエイト、つまりパートナーシッププログラム経由で配布されます。 - 暗号化したパス一覧の送信。
id=<感染ID>
&act=report&data=<パス一覧>Lockyは処理したディスクドライブ別に暗号化した全ファイルへのパスの一覧を作り、C&Cサーバーへ送信します。 - 処理したディスクドライブそれぞれのデータを送信。
id=<感染ID>
&act=stats&path=<パス>
&encrypted=<暗号化したファイルの数>
&failed=<エラーの数>
&length=<暗号化したファイルの合計サイズ>
サイバー犯罪者が感染ごとに非常に詳しくデータを収集していることは、注目に値します。これまでに当社が分析したランサムウェアファミリーの中で、これほど徹底的にデータを収集しているものはありません。
対策
カスペルスキー製品は、ランサムウェアLockyによる攻撃を、あらゆる段階で検知します:
- アンチスパムモジュール – Lockyの配信プログラムが発信したメールを検知。
- メールの静的シグネチャおよびヒューリスティックシグネチャ、ファイルアンチウイルス – スクリプトローダーをTrojan-Downloader.MSWord.Agent、Trojan-Downloader.JS.Agent、HEUR:Trojan-Downloader.Script.Genericの検知名で検知。
- ファイルアンチウイルス – シグネチャを使って、Lockyの実行ファイルをTrojan-Ransom.Win32.Locky検知名で検知。
- システムウォッチャーモジュール – Lockyの未知のサンプルをPDM:Trojan.Win32.Genericとしてプロアクティブに検知。
感染を防ぐには
Lockyは典型的なトロイの木馬型ランサムウェアであり、内部配列や動作原則は他のランサムウェアファミリーとほぼ同じです。しかし、非常に活発な活動を見せ、攻撃が広範囲に及ぶことから、リサーチャーの注意を引くこととなりました。KSNのデータによると、カスペルスキー製品は、世界の100を超える国でLockyの攻撃をブロックしています。これほど多くの国に対して、一度に攻撃を仕掛けたランサムウェアは、過去に例がありません。
このトロイの木馬型ランサムウェアから身を守るには、次の保護対策を推奨します:
- 心当たりのない送信元から届いたメールの添付ファイルは開かない。
- 定期的にファイルをバックアップし、コンピューター上ではなく、取り外し可能な記憶装置またはクラウドにバックアップコピーを保管する。
- 定義データベース、OS、コンピューターにインストールされているソフトウェアは、定期的に更新する。
- 共有ネットワークフォルダーへのアクセスを管理する場合は、ユーザーごとにネットワークフォルダーを分ける。
トロイの木馬型ランサムウェアから身を守る方法の詳細は、こちらをご覧ください。