インフラストラクチャ攻撃における最も重要なステップの1つは、ターゲットの環境内で攻撃を続けることです。パーシステンスは、獲得したアクセスレベルにもよりますが、多くの場合、何度も確立する必要があります。セキュリティシステムは、さまざまな形態の永続化メカニズムを検出できるほどスマートになっています。そのため、攻撃者は標的の環境に侵入し続けるための新しくて独創的な方法を模索し続けています。
Google Workspace Apps Scriptは、Gmailアカウントを持つすべてのユーザーがビジネスアプリケーションを自動化し、アプリケーションが相互にやり取りできるようにする機能です。その下で Apps Script アプリをデプロイすると、そのアカウントが所属する GCP 組織に GCP プロジェクトが作成されます。プロジェクト ID の形式は別として、これらのプロジェクトは通常の GCP プロジェクトとそれほど変わりません。つまり、攻撃者はこれらのプロジェクトのうちの 1 つを使用してリソースをホストし、ターゲットに持続させることができるということです。また、Apps Script プロジェクトと同じ名前形式の GCP プロジェクトを作成して、正規の Apps Script プロジェクトになりすまして検出を回避することもできます。
このブログでは、Apps Scriptプロジェクトの仕組みと、攻撃者がApps Scriptプロジェクトを利用してターゲットの環境で存続する方法について説明します。次に、攻撃者がこれらの手法を悪用できないように、これらの手法を検出して防止する方法について見ていきます。
アプリスクリプトの詳細
エンドポイントに関連付けられた Google Workspace アプリスクリプト script.google.comはローコードソリューションであり、Gmail アカウントを持っている人なら誰でも Google Workspace と統合するビジネスアプリケーションを自動化できます。JavaScript を使用するスクリプトインターフェイスを備えており、Google のサービスを統合して軽量な自動化を構築できます。

アプリスクリプトは非常に柔軟です。これを使うと、次のことが可能になります。
- Google ドキュメント、スプレッドシート、フォームでカスタムメニュー、ダイアログ、サイドバーを作成する
- Google スプレッドシート用のカスタム関数とマクロを開発する
- ウェブアプリをスタンドアロンアプリケーションとして、または Google サイトに埋め込んで公開する
- AdSense、アナリティクス、カレンダー、ドライブ、Gmail、マップなど、他の Google サービスと連携する
- 軽量なアドオンを作成し、Google Workspace マーケットプレイスで共有しましょう

アプリスクリプトが作成されると、プレフィックス付きのプロジェクト システム- 自動的に作成されます。これらのプロジェクトはコンソールの組織のプロジェクトリストには表示されませんが、これは理にかなっています。組織プロジェクトとは見なされないからです。

ただし、プロジェクトはターミナルツール () から表示できます。gcloud) 実行権限を持つIDによる リソースマネージャー.プロジェクト.リスト。

App Script プロジェクトが作成されると、GCP はデフォルトで Resource Manager フォルダとサブフォルダを組織内に次の名前で作成します。 システムスイート/アプリスクリプト。ここでも、コンソールで見ると、これらのフォルダにはプロジェクトがないようです。

ただし、CLIを使用すると、App Scriptプロジェクトが内部に表示されます アプリスクリプト サブフォルダー。作成後、App Script プロジェクトが格納される場所です。

GCP 組織におけるアプリスクリプトのなりすましの悪用
クリプトマイニングインスタンス
アプリスクリプトプロジェクトは、次の ID 形式に従います。 システム-<26 numbers>。GCP では、プロジェクトを作成してアクセスできる任意のフォルダーまたはサブフォルダーに保存できます。また、ASCII 文字、数字、ハイフンが含まれていて、6 ~ 30 文字であれば、プロジェクト名は何でも設定できます。の組み合わせ システム-<26 numbers> はちょうど 30 文字で、数字、文字、ハイフンが含まれています。

私たちが見つけた違いの 1 つは、保存場所によってプロジェクトがどのように表示されるかということでした。プロジェクトが組織レベルで保存されている場合、そのプロジェクトの ID 形式は システム-<26 numbers>、コンソール (プロジェクト) に表示されます sys-99990000000000)。ただし、内部で作成した場合 アプリスクリプト フォルダ、アプリはコンソール(プロジェクト)にプロジェクトとして表示されません sys-1111111111111111111111)。

以下の場合、プロジェクトは引き続き一覧表示されます。 リソースマネージャー.プロジェクト.リスト ターミナルで実行されます。

以下の権限を持つ攻撃者 リソースマネージャ. プロジェクト. 作成 App Scriptプロジェクトが他のプロジェクトのように表示されないという事実を利用して、ターゲットの組織にプロジェクトを作成し、そこにリソースを保存できます。各プロジェクトには、作成者が指定できる名前を付けることもできます。攻撃者は、標的の組織内の他のプロジェクトを調べて、そのプロジェクトにふさわしい名前を見つけることもできます。

たとえば、悪意のある攻撃者がこの隠しプロジェクトを利用して大規模なインスタンスを作成し、それをクリプトマイニングハーベスターとして使用する可能性があります。そのためには、以下のことが必要です。
- プロジェクトの課金を有効にする
- コンピュート API を有効にする
- インスタンスを作成

攻撃者は、クリプトマイニングハーベスターとして使用できる高性能インスタンスを制御するようになりました。
非表示のプロジェクト内のサービスアカウントを使用して組織に存続する
永続性により、攻撃者は理想的には高権限のIDとしてターゲットのインフラストラクチャに戻ることができます。GCP 組織で存続するにはさまざまな方法があります。たとえば、ユーザー作成サービスアカウントの作成、永続的な認証情報の作成、高権限の ID が割り当てられたリソースの作成などです。永続化メカニズムをプロジェクト内で作成できる場合は、App Script を装ったプロジェクトに作成することもできます。たとえば、サービスアカウントを作成してそのキーを作成し、組織や他のプロジェクトに高い権限を持つ役割を割り当てて、後で使用できるように保管しておくことができます。

さらに悪いことに、IDはプロジェクト名がわかっている場合にのみ表示されます。さらに、誰もサービスアカウントにアクセスできないようにするポリシーをプロジェクトに設定することもできます。これは「解読不可能な」防止策ではありませんが、サービスアカウントをクリーンアップしようとする試みが妨げられる可能性があります。特に、これらのプロジェクトは Google が作成および管理しているように見えるためです。
name: organizations/ORG_ID/denyPolicies/deny-service-account-all
displayName: "Restrict all SA usage"
rules:
- denyRule:
deniedPrincipals:
- principalSet://goog/public:all
deniedPermissions:
- iam.serviceAccounts.*なぜアプリスクリプトプロジェクトになりすますのか?
その下にあるApps Scriptプロジェクトは通常の GCP プロジェクトです。通常のプロジェクトと異なる点は、デフォルトでは Google が管理する 1 つの ID を除き、どの ID にも適切なアクセス権が付与されない点です。サービスアカウント appsdev-apps-dev-script-auth@system.gserviceaccount.com は Apps Script プロジェクトを作成するユニバーサルアイデンティティであり、Google のみが管理しています。デフォルトで Apps Script プロジェクトとそのリソースを管理できる唯一の ID です。

適切な権限を持つ攻撃者は、プロジェクトのIAMポリシーを変更して、このプロジェクトで必要なすべてのサービスで任意のリソースをホストできるようにすることができます。

たとえば、悪役は次のような行為をする可能性があります。
- サービスアカウントを作成し、それに組織ポリシーを割り当てて、対象組織で存続できるようにする
- プロジェクトを請求先アカウントにリンクし、クリプトマイニング用の大規模なリソースを作成します
アプリスクリプトプロジェクトの不正利用の検知
プロジェクトの請求情報を調べてプロジェクトのなりすまし行為を発見する
GCP にはさまざまなリソース請求タイプがあり、中には無制限の無料請求タイプもあります。IAM ID はこのようなリソースの好例です。無料リソースのその他の例としては、IAM リソースマネージャー組織、アーティファクトレジストリ、VPC 基本ネットワークなどがあります。
特定のサービスとそのリソースを使用できるようにするには、組織のオーナーはプロジェクトを請求先アカウントにリンクする必要があります。プロジェクトを請求先アカウントにリンクするのは、「プロジェクトに支払い方法を決める」というお洒落な言い方です。請求先アカウントは支払い方法をプロジェクトにリンクし、毎月、リソースの使用状況に基づいてプロジェクトのオーナーが支払いを行い、請求先アカウントは費用の請求書を各自に渡します。
大規模なコンピューティングインスタンスを作成できるということは、請求先アカウントをプロジェクトにリンクする必要があるということです。App Script プロジェクトが攻撃者によって作成され、大規模なリソースのホストとして使用されているかどうかを検出する 1 つの方法は、プロジェクトが請求先アカウントにリンクされているかどうかを確認することです。以下の例では、project sys-22222222222222222222222222攻撃者が作成した大規模なコンピュートインスタンスを含むプロジェクトには、請求先アカウントがリンクされます (フィールドで確認できます)。 請求先アカウント名 そして 請求有効ただし、正規の App Script プロジェクト (プロジェクト) sys-14600875379148140018929136) には請求先アカウントへのリンクは必要ありません。

請求情報を変更してプロジェクトに溶け込ませる
この検出を回避する方法の 1 つは、請求先アカウントからプロジェクトのリンクを解除することです。攻撃者がインスタンス (または任意の有料サービス) を作成したい場合、プロジェクトは請求先アカウントに含まれている必要があります。そのため、無料利用枠で提供されていないリソースやサービスは、請求先アカウントがリンクされたプロジェクトにデプロイする必要があります。
請求先アカウントからプロジェクトのリンクを解除すると、リソースが削除されます。

IAM サービスアカウントは有料リソースの範囲には該当しないため、請求先アカウントにリンクされていないプロジェクトでも永続的なサービスアカウントが含まれる可能性があり、以前の検出が妨げられます。

有効な API サービスによる App Script プロジェクトのなりすましの発生箇所の検出
API を使用してプロジェクトで特定のサービスを使用できるようにするには ( gcloud uses) の場合は、サービス API を有効にする必要があります。デフォルトでは、新しいプロジェクトでは複数のサービスが有効化され、これを使用してさらに多くのサービスを有効化または無効化できます。 サービス使用.サービス.有効化 または サービス使用状況.サービス.無効化。
一方、Apps Script プロジェクトでは、デフォルトではサービスは有効になっていませんが、必要に応じて有効にすることができます。プロジェクトが実際に Apps Script プロジェクトではないかどうかを調べる方法の 1 つは、有効になっているサービスを調べることです。

API エンドポイントを無効化することによるブレンド
この検出方法の問題の 1 つは、Apps Script プロジェクトが実行するタスクによっては、一部のサービスを有効にする必要がある場合があることです。攻撃者は、使用していないサービスをすべて無効にして、プロジェクトをもう少し正当なものに見せかけることができます。

たとえば、プロジェクトでコンピュートインスタンスを作成できるようにするには、 計算します そして oslogin サービスを有効にする必要があります。リソースが存在しているときに無効にすると、実行は失敗し、現在のプロジェクトの使用状況が表示されます。それ以外にも、ターゲットの環境でタスクを実行するたびに、攻撃者は残りのサービスを無効にしてから一時的に再び有効にすることができます。

もう 1 つの問題は、サービス API がプロジェクトで有効になっていなくても、一部のサービス API がプロジェクトで機能することです。そのため、IAM などのサービスや基本的なストレージコマンドだけでなく、サービス利用 API (プロジェクトでサービス API を有効または無効にできるようにする) や Resource Manager も許可されます。
- IAM
- クラウドリソースマネージャー
- サービス利用API
- Cloud Storage (基本機能はいつでも利用できます。課金を有効にすると、より詳細な制御、請求、指標が可能になります)。
つまり、サービスが有効になっていないプロジェクトでも、攻撃者が永続化メカニズムとして使用できるサービスアカウントをホストできるということです。
App Script プロジェクトのなりすまし行為の発生箇所をログで検出する
もう 1 つの検出方法は、ログを調べることです。 アプリスクリプト フォルダ。以下の例では、攻撃者が作成したプロジェクト (sys-1111111111111111111111 そして sys-22222222222222222222222222)持っている プリンシパルメール フィールドは作成者のユーザーメールアドレスに設定され、Googleが作成したフィールドには次のメールアドレスが設定されています appsdev-apps-dev-script-auth@system.gserviceaccount.com。イベントはフォルダのイベントにのみ表示され、組織のイベントには表示されないため、注意が必要です。

組織ポリシーによるプロジェクト偽装の制限
Apps Script プロジェクトを作成すると、ID 形式は システム-<26 random digits>。Apps Script になりすましているユーザーのプロジェクト作成を防ぐ方法の 1 つは、の ID 形式のプロジェクトの作成と更新を拒否することです。 システム-<26 random digits> 次のポリシーを使用します。
name: >-
organizations/012345678912/customConstraints/custom.denyAppsScriptProjectImpersonation
resource_types: cloudresourcemanager.googleapis.com/Project
method_types:
- CREATE
- UPDATE
condition: 'resource.projectId.matches(''sys-[0-9]{26}'')'
action_type: DENY
display_name: Deny Apps Script Project Impersonation
description: ''攻撃者がその形式のプロジェクトを作成しようとすると、組織のポリシーによって実行が拒否されます。

組織ポリシーにより、ID形式のプロジェクトの作成は拒否されます システム-<26 random digits>(Google がエンドポイントを通じて作成した正規のものを含む) script.google.com。

Exaforce によるアプリスクリプトプロジェクトの不正使用の検出
エクサフォース は、なりすましや悪用などによる Apps Script プロジェクトの悪質な使用を検出して阻止するための階層化されたカバレッジを提供します。当社のアプローチでは、高度な異常検出を活用して環境内のエンティティのベースライン動作を把握し、異常な動作を特定します。この調査の結果、お客様を保護するためにいくつかの新しい検出が可能になりました。
- Exaforceは、通常とは異なるAPIサービス、ラベル、またはポリシーバインディングを使用するGoogle Apps Scriptプロジェクトを検出し、オンボーディング時にフラグが立てられます。
- Exaforceは、攻撃者がApps Scriptプロジェクトのように見えるプロジェクトを作成しようとするプロジェクト偽装の試みを検出します。
以下は、App Script プロジェクトになりすまそうとするシナリオの例です。

検出概要には、Exabot(AIエージェント)によるアラートの自動トリアージの要約と結論が表示されます。問題のプリンシパルなどの重要な情報の概要が示されます。

このプリンシパルの関連イベントをセッションにまとめるので、このプロジェクトが作成された背景や、このプリンシパルが行ったその他のアクティビティをわかりやすく把握して、包括的な影響分析を行うことができます。

影響を受けるすべての関連イベントとリソースは、簡単に調査できるようにグラフに視覚的にマッピングされます。
予防的管理
Exaforceの検出により、この潜在的な問題を確実に把握できます。また、ID が一致するプロジェクトの作成をブロックする前述の組織ポリシーを適用することもお勧めします。 システム-[0-9] {26} アプリスクリプトが組織で使用されていない場合。これにより、攻撃対象領域が縮小され、組織のセキュリティ体制が大幅に改善されます。
ステルスパーシスタンスとディフェンス
Apps Script プロジェクトは、監視されないままにしておくと、ステルスパーシスタンスメカニズムとして機能する可能性があります。攻撃者はこれらになりすまして、クリプトマイニング、特権サービスアカウント、またはその他の悪意のあるリソースを環境内に隠すことができます。
ディフェンダーは、Apps Script プロジェクトの内部での仕組みと、潜在的な悪用を検出してブロックする方法を理解する必要があります。Exaforce が提供しているような組織のポリシーと強力な検出機能を活用することで、この永続的なベクトルが包括的にカバーされます。


































