The Pirate Bay をブロックしながらソフトウェアの海賊行為を監視する自警団型マルウェア

特殊なマルウェアが検出されました。このマルウェアは、パスワードを盗んだり、コンピュータの所有者から身代金を要求したりするのではなく、感染したシステムの HOSTS ファイルを変更することで、感染したユーザーのコンピュータがソフトウェアの不正コピーの提供を目的とした多数の Web サイトにアクセスできないようにします。

研究所の同僚が最近、通常のマルウェアとは異なる目的を持ち、ここ数年で最も奇妙と言えるマルウェアキャンペーンについて教えてくれました。このマルウェアは、パスワードを盗んだり、コンピュータの所有者から身代金を要求したりするのではなく、感染したシステムの HOSTS ファイルを変更することで、感染したユーザーのコンピュータがソフトウェアの不正コピーの提供を目的とした多数の Web サイトにアクセスできないようにします。

また、このマルウェアは、2 つ目のマルウェアペイロードである ProcessHacker.jpg という名前の実行ファイルをダウンロードして配信します。

MHOSTS ファイルの変更は、コンピュータが Web アドレスに到達できないようにするための、粗雑ですが効果的な方法です。粗雑というのはつまり、この方法は効果的ではあるものの、マルウェアには永続的なメカニズムがないからです。 HOSTS ファイルに追加されたエントリーは、誰でも削除することができ、削除されたままになります (プログラムを再度実行しない限り)。実は自分が 10 年以上前に、ほぼ同じ動作をするマルウェアを発見し、その分析結果をまとめたことがあるので、個人的にも非常に馴染み深いものでした。

偽の Among Us マルウェアの実行ファイルが HOSTS ファイルを変更している処理が記録されているプロセスモニターのログ

このマルウェアの出所を特定することはできませんでしたが、その動機は明確であると思われます。つまり、ソフトウェアの海賊版サイトへのアクセスを ( 一時的にせよ ) 阻止し、ユーザーが使用しようとしていた海賊版ソフトウェアの名前を Web サイトに送信し、さらに二次的なペイロードを配信するのです。このファイルは、数百から 1000 以上の Web ドメインを HOSTS ファイルに追加しており、ローカルホストのアドレスである 127.0.0.1 を指すようにします。

Discord の偽のゲーム

このマルウェアの少なくとも一部は、さまざまなソフトウェアパッケージの海賊版を装い、ゲームチャットサービスである Discord でホストされていました。また、Bittorrent で配布された他のコピーには、人気のあるゲームや生産性向上ツール、さらにはセキュリティ製品の名前が付けられており、The Pirate Bay の有名なファイル共有アカウントから発信されたと思われる追加ファイル (これらについては本文の後半で詳しく説明します) が添付されていました。

VirusTotal はこのファイルの出所を Discord としている。

Virustotal で関連する検体を検索したところ、ファイル名で使用されているソフトウェアブランドは数百種類にも及んでいます。 Left 4 Dead 2 (v2.2.0.1Last Stand + DLCs + MULTi19) ” や “Minecraft 1.5.2 Cracked [Full Installer][Online][Server List]” といったファイルは、一般的なファイルの命名規則を模倣してラベル付けされています。

Discord のファイル共有でホストされていると思われる多くのファイルは、単独の実行ファイルとなっています。 Bittorrent で配布されているものは、海賊版ソフトウェアが Bittorrent プロトコルで共有されるのと同じようにパッケージ化されています。テキストファイルやその他の補助ファイルを含む圧縮ファイルに追加され、The Pirate Bay を指す昔ながらのインターネットショートカットファイルも含まれています。

マルウェアの実行ファイルの多くは、すべてではないにせよ、偽のコード署名者によってデジタル署名されていました。これにより、暗号の有効性に関わらず、ファイルが署名されているかどうかの初歩的なチェックは通過することができるかもしれませんが、これらの署名付きファイルは精査には耐えません。署名には、たった 18 文字の大文字のランダムな文字列である署名者の名前が付けられています。証明書の有効期限は、ほとんどのファイルがダウンロード可能になった最初の日かその前後に開始され、2039 年 12 月 31 日に失効するように設定されています。

同様に、マルウェアの実行ファイルのプロパティシートは、マルウェアのファイル名が示すものとは一致しません。ほとんどのファイルは、ゲームや生産性向上ソフトウェアのフル機能のライセンスコピーのインストーラーであると表示されていましたが、実際のファイルの多くは、”AVG remediation exe”、”BitLocker Drive Encryption”、”Microsoft Office Multi-Msi ActiveDirectory Deployment Tool” など、「ファイルの説明」欄にはまったく異なる名前が表示されていました。

上の画像ではプロパティシートのデータとバイナリのファイル名 (タイトルバー参照) が一致しない

マルウェアの作成者は、これらのプロパティシートがファイル名と一致していないことを気にしてはいないようで、あまりこだわっていないようでした。別の異ソフトウェアパッケージのインストーラーを装ったアーカイブもいくつか見つかりましたが、その中には同じマルウェアの実行ファイルが別の名前で入っていました。

同じマルウェアがさまざまな異なるプログラムに見せかけてパッケージ化されている。

マルウェアの実行内容

エンドユーザーがこのマルウェアを実行しても、あまり影響を受けているようには感じないかもしれません。ダブルクリックすると、「MSVCR100.dllがコンピュータに存在しないため、プログラムを開始できません。この問題を解決するには、プログラムを再インストールしてください」という内容の偽のエラーメッセージが表示されます。

プロセスモニターを使用したところ、このファイルについて Windows API を問い合わせることさえしていませんでした。マルウェアの実行内容を確認するために、この古い DLL の有効なコピー (チェックアウト済み) をプログラム本体のあるフォルダにドロップしましたが、いずれにしても偽のダイアログが表示されました。

このマルウェアは実行時にいくつかの処理を行います。まず、外部にネットワーク接続できるかどうかを確認します。接続できる場合は、1flchier[.]com. というドメインの URI に接続しようとします。このドメインは、クラウドストレージプロバイダーである 1fichier のタイポスクワッティングのようであり、名前の 3 文字目が I ではなく L になっています。

このマルウェアは、これらのリクエストに同じ Mozilla/5.0 Gecko/41.0 Firefox/41.0 というユーザーエージェント文字列を使用していました。ただ、ファイルの中には別のユーザーエージェント文字列も埋め込まれていました。

皮肉なことに、HOSTS ファイルの変更によって、ユーザーが正規の 1fichier の Web ドメインにアクセスできないようになっているものがいくつかありました。

この検体では、このドメインに対して 2 つの HTTP GET リクエストを実行しました。 1 つ目は、ProcessHacker.jpg という名前の二次的な実行ファイルのペイロードを取得するもので、2 つ目は、実行された実行ファイルのファイル名を Web サイトの運営者に送信するためのクエリ文字列を使用しています。残念ながら、このサイトの所有者が誰なのかはわかりませんし、もはやリクエストには応答せず、DNS レコードもありません。それにもかかわらず、このサイトにアクセスしようとするマルウェアは、今でもダウンロードリンクやトレントから入手可能です。

ProcessHacker のバイナリには、whoareyoutellmeandilltellyouwho のミューテックスを設定して、自分のコピーを 1 つだけ実行するようにしているなど、興味深い特徴があります。

ProcessHacker.jpg のペイロードによる動作の MITRE ATT&CK マトリクス

いくつかの検体は、実行時にキルスイッチを持っているように見えました。これらの検体は、最初に実行されると、環境変数 %PATH% で定義された場所のどこかで、いくつかの特定のファイル名を検索します。その両方を見つけた場合、ソフトウェアは終了します。

海賊版防止のためのキルスイッチ

探すファイル名は、7686789678967896789678412412512512512 です。これらの名前を付けた 0 バイトのファイルを作成し、%PATH% フォルダに貼り付けたところ、ソフトは起動時に停止し、HOSTS ファイルも変更されませんでした。

また、多くの検体では、通常の Windows にはない特定のキーについて、Windows レジストリのクエリを実行しています (HKLM\System\CurrentControlSet\Control\CI\Disable26178932)。そのDisable という名前になっていることから、これもキルスイッチの 1 つではないかと思われましたが、そのキーを手動で作成して検体を実行してみると、マルウェアはそのキーが存在するかどうかを確認し、OS から確認の応答を得たのち、そのまま実行に移すことがわかりました。

最後に、HOSTS ファイルの変更を行います。最近の Windows コンピュータでは、マルウェアは権限を昇格して、管理者権限のあるユーザーでなければ、実行できなくなっています。ほとんどのマルウェアは、Windows で権限を昇格するようにトリガーしましたが、すべてのマルウェアが昇格するわけではありません。自動的に権限の昇格を要求しなかった検体は、通常の実行では HOSTS ファイルの変更に失敗しましたが、管理者として実行してみると、変更に成功しました。

偽のバルクが含まれる Bittorrent のバンドル

インストーラーに同梱されているこれらのファイルを詳しく見てみると、アーカイブを Bittorrent で共有されているファイルのような外観にして、ランダムなデータを追加してハッシュ値を修正する以外に、実用的な利点がないことがわかります。

Readme!.txt ファイルは、すべての検体で同一。

各アーカイブには、次のように書かれた修正版の Readme!.txt ファイルが含まれています (下記以外の内容も含みます)。

フォルダ内の .EXE を使ってインストールしてください。すべては data.dat を使って起動されます!

.EXE が見つからない場合は、アンチウイルスや Windows Defender によって削除された可能性があります。

アンチウイルスによる検出を回避するため、ダウンロードとインストールの間は無効にしておき、インストール後に再度有効にしてください。

アーカイブには、Readme!.txt に記載されているように、data.dat というファイルが含まれています。よく見てみると、それは森林の JPEG 画像です。これで何かが起動するとは思えません。

また、このアーカイブには、約 90kb から 200kb 以上の大きさのファイルが含まれています。このファイルには、ランダムなファイル名と .nfo というファイル拡張子が付いており、ほとんどが意味のないデータで埋め尽くされています。他の Bittorrent アーカイブでは、これらの .nfo ファイルは、通常、アーカイブにバンドルされている特定のソフトウェアに関する追加情報を含むプレーンテキストファイルです。.

しかし、これらのマルウェアにバンドルされている .nfo ファイルには、最初の 1150 バイトにごみが入っており、その後に印刷不可能な文字が続くため、メモ帳のようなテキストエディタではその文字に続く部分がすべて見えなくなってしまいます。

Bittorrent で共有された悪意のあるアーカイブの内容

バイナリエディタで見ると、このファイルには、最初の 1150 バイトに続いて、人種差別用語が1000 回以上繰り返されたものが含まれており (次の 16kb のスペースを占める)、その後、ランダムなサイズの大きなアルファベット文字のブロックが続きます。ランダムな長さの目的のないファイルでアーカイブをパディングすることは、単にアーカイブのハッシュ値を修正するために行われるのかもしれません。人種差別的な言葉でパディングされているところから、この作成者がどんな人物か完全に察することができました。

検知とクリーンアップ

ソフォスのエンドポイント製品は、独自のランタイムパッカーを検知してこの脅威を識別します。このランタイムパッカーは、別の無関係なマルウェアファミリーである Qbot が Mal/EncPk-APVとして使用しているものと同じです。

これらのファイルを誤って実行してしまったユーザーは、手動で HOSTS ファイルをクリーンアップすることができます。メモ帳を管理者権限で実行し、c:Windows\System32\Drivers\etchosts にあるファイルを修正して、「127.0.0.1」で始まり、さまざまな ThePirateBay (およびその他の) サイトを参照している行をすべて削除します。

SophosLabs は、ファイルのハッシュ値を含む、この記事に関連する IOC を SophosLabs Github に公開しています。SophosLabs は、この奇妙なマルウェアを発見した Threat Research のシニアマネージャー Richard Cohen 氏に感謝します。

コメントを残す

Your email address will not be published. Required fields are marked *