ADOKit
説明
Azure DevOps Services 攻撃ツールキット - ADOKit は、利用可能な REST API を活用して Azure DevOps Services を攻撃するために使用できるツールキットです。このツールは、攻撃モジュールを指定し、それぞれの Azure DevOps Services インスタンスの有効な資格情報(API キーまたは盗難された認証クッキー)を指定することができます。サポートされている攻撃モジュールには、偵察、権限昇格、永続化が含まれます。ADOKit はモジュール方式で構築されているため、情報セキュリティコミュニティが将来新しいモジュールを追加できるように設計されています。
ADOKit が使用する手法の詳細は、X-Force Red のホワイトペーパーに記載されています。
Black Hat USA Arsenal 2024
プレゼンテーションスライドとデモは、このリポジトリの BHUSA Arsenal 2024 フォルダに含まれています。
リリース
- ADOKit バージョン 1.4.1 はリリースページから入手できます。
目次
インストール/ビルド
使用ライブラリ
このプロジェクトでは以下のサードパーティライブラリを使用しています。
プリコンパイル済み
- リリースページのプリコンパイル済みバイナリを使用してください。
自分でビルドする
以下の手順で Visual Studio を設定し、自分でプロジェクトをコンパイルします。これには NuGet パッケージマネージャーからインストールできる 2 つの .NET ライブラリが必要です。
- Visual Studio プロジェクトを開き、「ツール」→「NuGet パッケージマネージャー」→「パッケージマネージャーの設定」に移動します。
- 「NuGet パッケージマネージャー」→「パッケージソース」に移動します。
- URL
https://api.nuget.org/v3/index.json でパッケージソースを追加します。
- Costura.Fody NuGet パッケージをインストールします。
Install-Package Costura.Fody -Version 3.3.3
- Newtonsoft.Json パッケージをインストールします。
Install-Package Newtonsoft.Json
- これでプロジェクトを自分でビルドできます!
コマンドモジュール
- 偵察
- check - 組織が Azure DevOps を使用しているか、および資格情報が有効かを確認します。
- whoami - 現在のユーザーとそのグループメンバーシップを表示します。
- listorgs - Azure DevOps 内のアクセス可能なすべての組織を一覧表示します。
- listrepo - すべてのリポジトリを一覧表示します。
- searchrepo - 指定されたリポジトリを検索します。
- listproject - すべてのプロジェクトを一覧表示します。
- searchproject - 指定されたプロジェクトを検索します。
- searchcode - 検索語を含むコードを検索します。
- searchfile - 検索語に基づいてファイルを検索します。
- listuser - ユーザーを一覧表示します。
- searchuser - 指定されたユーザーを検索します。
- listteam - チームを一覧表示します。
- searchteam - 指定されたチームを検索します。
- getteammembers - 指定されたチームのチームメンバーを取得します。
- listgroup - グループを一覧表示します。
- searchgroup - 指定されたグループを検索します。
- getgroupmembers - 指定されたグループのすべてのグループメンバーを一覧表示します。
- getpermissions - 指定されたプロジェクトにアクセスできるユーザーの権限を取得します。
- creds - コード内の資格情報を検索します(キーワードは以下にリスト)。
"pw OR pwd OR passwrod OR password OR \"-----BEGIN PGP PRIVATE KEY BLOCK-----\" OR \"-----BEGIN EC PRIVATE KEY-----\" OR \"-----BEGIN DSA PRIVATE KEY-----\" OR \"-----BEGIN OPENSSH PRIVATE KEY-----\" OR \"-----BEGIN RSA PRIVATE KEY-----\" OR ANSIBLE_VAULT OR AWS_ACCESS_KEY_ID OR AWS_SECRET_ACCESS_KEY OR ACCESS_TOKEN OR API_KEY OR Authorization OR db_password"
- getbuildlogs - 1つまたはすべてのプロジェクトのビルドログをダウンロードします。
- listbuildlogs - 1つまたはすべてのプロジェクトのビルドログを一覧表示します。
- searchbuildlogs - 指定された検索語でビルドログを検索します。
- 永続化
- createpat - ユーザーの個人用アクセストークンを作成します。
- listpat - ユーザーの個人用アクセストークンを一覧表示します。
- removepat - ユーザーの個人用アクセストークンを削除します。
- createsshkey - ユーザーの公開 SSH 鍵を作成します。
- listsshkey - ユーザーの公開 SSH 鍵を一覧表示します。
- removesshkey - ユーザーの公開 SSH 鍵を削除します。
- 権限昇格
- addprojectadmin - 指定されたプロジェクトの「プロジェクト管理者」グループにユーザーを追加します。
- removeprojectadmin - 指定されたプロジェクトの「プロジェクト管理者」グループからユーザーを削除します。
- addbuildadmin - 指定されたプロジェクトの「ビルド管理者」グループにユーザーを追加します。
- removebuildadmin - 指定されたプロジェクトの「ビルド管理者」グループからユーザーを削除します。
- addcollectionadmin - 「プロジェクトコレクション管理者」グループにユーザーを追加します。
- removecollectionadmin - 「プロジェクトコレクション管理者」グループからユーザーを削除します。
- addcollectionbuildadmin - 「プロジェクトコレクションビルド管理者」グループにユーザーを追加します。
- removecollectionbuildadmin - 「プロジェクトコレクションビルド管理者」グループからユーザーを削除します。
- addcollectionbuildsvc - 「プロジェクトコレクションビルドサービスアカウント」グループにユーザーを追加します。
- removecollectionbuildsvc - 「プロジェクトコレクションビルドサービスアカウント」グループからユーザーを削除します。
- addcollectionsvc - 「プロジェクトコレクションサービスアカウント」グループにユーザーを追加します。
- removecollectionsvc - 「プロジェクトコレクションサービスアカウント」グループからユーザーを削除します。
- getpipelinevars - 指定されたプロジェクトで使用されているすべてのパイプライン変数を取得します。
- getpipelinesecrets - 指定されたプロジェクトで使用されているすべてのパイプラインシークレットの名前を取得します。
- getvariablegroups - 指定されたプロジェクトで使用されている変数グループと対応する変数を取得します。
- getserviceconnections - 指定されたプロジェクトで使用されているサービス接続を取得します。
引数/オプション
- /credential: - 認証用の資格情報(PAT または Cookie)。すべてのモジュールに適用可能。
- /url: - Azure DevOps URL。すべてのモジュールに適用可能。
- /search: - 検索キーワード。すべてのモジュールに適用可能ではありません。
- /project: - アクションを実行するプロジェクト。すべてのモジュールに適用可能ではありません。
- /user: - 特定のユーザーに対するアクションを実行。すべてのモジュールに適用可能ではありません。
- /id: - 永続化モジュールで使用され、特定のトークン ID に対するアクションを実行。すべてのモジュールに適用可能ではありません。
- /group: - 特定のグループに対するアクションを実行。すべてのモジュールに適用可能ではありません。
認証オプション
ADOKit を使用して Azure DevOps インスタンスに認証する場合の認証オプションは以下のとおりです。
- 盗難された Cookie - UserAuthentication - これは、ユーザーのマシン上の
.dev.azure.com ドメインの UserAuthentication Cookie です。
/credential:UserAuthentication=ABC123
- 盗難された Cookie - AadAuthentication - これは、ユーザーのマシン上の
.dev.azure.com ドメインの AadAuthentication Cookie です。
- 個人用アクセストークン (PAT) - これは、単一の文字列となるアクセストークン/API キーです。
- 盗難されたアクセストークン - 適切なアクセストークンを盗んだり更新したりできる場合、それも使用できます。アクセストークンを使用する場合、Azure Resource Manager (ARM) リソース (
"aud":"https://management.core.windows.net/") または Azure DevOps ("aud":"499b84ac-1321-427f-aa17-267ca6975798") に対して有効である必要があります。
モジュール詳細表
以下の表は、各モジュールに必要な権限を示しています。