Skip to content

Latest commit

 

History

History
446 lines (352 loc) · 20 KB

pentesting-cloud-methodology.md

File metadata and controls

446 lines (352 loc) · 20 KB

Pentesting Cloud Methodology

AWSハッキングをゼロからヒーローまで学ぶ htARTE (HackTricks AWS Red Team Expert)

HackTricksをサポートする他の方法:

基本的な方法論

各クラウドには独自の特徴がありますが、一般的には、クラウド環境をテストする際にペネトレーションテスターがチェックすべきいくつかの共通点があります:

  • ベンチマークチェック
  • これにより、環境の規模を理解し、使用されているサービスを把握できます
  • ほとんどのテストを自動化ツールで実行できるため、いくつかの速やかな誤設定を見つけることもできます
  • サービス列挙
  • ベンチマークテストを正しく実施した場合、ここで多くの誤設定を見つけることはないかもしれませんが、ベンチマークテストでは探されていなかったものを見つけることができるかもしれません。
  • これにより、クラウド環境で正確に何が使用されているかを知ることができます
  • これは次のステップに大いに役立ちます
  • 露出している資産のチェック
  • これは前のセクション中に行うことができます。インターネットに何らかの形で潜在的に露出しているすべてを見つけ出し、どのようにアクセスできるかを把握する必要があります。
  • ここでは、ウェブページや他のポートが露出しているインスタンスのような手動で露出したインフラと、露出するように設定できるクラウド管理サービス(DBやバケットなど)について取り上げています
  • 次に、そのリソースが露出してもよいかどうかをチェックする必要があります(機密情報?脆弱性?露出したサービスの誤設定?)
  • 権限のチェック
  • ここでは、クラウド内の各ロール/ユーザーのすべての権限を見つけ出し、それらがどのように使用されているかを把握する必要があります
  • 多くの高権限(すべてを制御)アカウント?使用されていない生成されたキー?... これらのチェックのほとんどは、すでにベンチマークテストで行われているはずです
  • クライアントがOpenIDやSAML、または他のフェデレーションを使用している場合、各ロールがどのように割り当てられているかについてさらに情報を求める必要があるかもしれません(管理者ロールが1ユーザーに割り当てられているのと100ユーザーに割り当てられているのとでは同じではありません)
  • 管理者権限を持つユーザーを見つけるだけでは十分ではありません "*:*"。使用されているサービスに応じて非常にセンシティブ他の権限がたくさんあります。
  • さらに、権限を悪用してプライベートエスカレーション(privesc)の方法があります。これらすべてのことを考慮に入れ、可能な限り多くのprivescパスを報告する必要があります。
  • 統合のチェック
  • クラウド環境内で他のクラウドやSaaSとの統合が使用されている可能性が非常に高いです。
  • 監査しているクラウドの他のプラットフォームとの統合については、その統合を(悪用して)使用することができるアクセス権を持つ人を通知し、実行されているアクションがどれだけセンシティブであるかを尋ねる必要があります。
    例えば、GCPがデータを取得しているAWSバケットに誰が書き込むことができるか(GCPがそのデータを扱うアクションがどれだけセンシティブかを尋ねる)。
  • 外部プラットフォームから監査しているクラウド内の統合については、その統合を外部から(悪用して)使用することができるアクセス権を持つ人を尋ね、そのデータがどのように使用されているかをチェックする必要があります。
    例えば、サービスがGCRでホストされているDockerイメージを使用している場合、そのイメージを変更するアクセス権を持つ人を尋ね、AWSクラウド内で実行されたときにそのイメージがどのような機密情報とアクセスを得るかをチェックする必要があります。

マルチクラウドツール

異なるクラウド環境をテストするために使用できるいくつかのツールがあります。このセクションでは、インストール手順とリンクが示されます。

クラウドおよびクラウド/SaaS間での悪い設定とprivescパスを特定するツール。

{% tabs %} {% tab title="インストール" %}

# You need to install and run neo4j also
git clone https://github.com/carlospolop/PurplePanda
cd PurplePanda
python3 -m venv .
source bin/activate
python3 -m pip install -r requirements.txt
export PURPLEPANDA_NEO4J_URL="bolt://neo4j@localhost:7687"
export PURPLEPANDA_PWD="neo4j_pwd_4_purplepanda"
python3 main.py -h # Get help

{% endtab %}

{% tab title="GCP" %}

export GOOGLE_DISCOVERY=$(echo 'google:
- file_path: ""

- file_path: ""
service_account_id: "some-sa-email@sidentifier.iam.gserviceaccount.com"' | base64)

python3 main.py -a -p google #Get basic info of the account to check it's correctly configured
python3 main.py -e -p google #Enumerate the env

{% endtab %} {% endtabs %}

AWS, GCP & Azure をサポートしています。各プロバイダーの設定方法については、https://docs.prowler.cloud/en/latest/#aws を確認してください。

# Install
pip install prowler
prowler -v

# Run
prowler <provider>
# Example
prowler aws --profile custom-profile [-M csv json json-asff html]

# Get info about checks & services
prowler <provider> --list-checks
prowler <provider> --list-services

AWS、Azure、Github、Google、Oracle、Alibaba

{% tabs %} {% tab title="インストール" %}

# Install
git clone https://github.com/aquasecurity/cloudsploit.git
cd cloudsploit
npm install
./index.js -h
## Docker instructions in github

{% endtab %}

{% tab title="GCP" %}

## You need to have creds for a service account and set them in config.js file
./index.js --cloud google --config </abs/path/to/config.js>

{% endtab %} {% endtabs %}

AWS、Azure、GCP、Alibaba Cloud、Oracle Cloud Infrastructure

{% tabs %} {% tab title="インストール" %}

mkdir scout; cd scout
virtualenv -p python3 venv
source venv/bin/activate
pip install scoutsuite
scout --help
## Using Docker: https://github.com/nccgroup/ScoutSuite/wiki/Docker-Image

{% endtab %}

{% tab title="GCP" %}

scout gcp --report-dir /tmp/gcp --user-account --all-projects
## use "--service-account KEY_FILE" instead of "--user-account" to use a service account

SCOUT_FOLDER_REPORT="/tmp"
for pid in $(gcloud projects list --format="value(projectId)"); do
echo "================================================"
echo "Checking $pid"
mkdir "$SCOUT_FOLDER_REPORT/$pid"
scout gcp --report-dir "$SCOUT_FOLDER_REPORT/$pid" --no-browser --user-account --project-id "$pid"
done

{% endtab %} {% endtabs %}

{% tabs %} {% tab title="インストール" %} Steampipeをダウンロードしてインストールしてください(https://steampipe.io/downloads)。またはBrewを使用します:

brew tap turbot/tap
brew install steampipe

{% endtab %}

{% tab title="GCP" %}

# Install gcp plugin
steampipe plugin install gcp

# Use https://github.com/turbot/steampipe-mod-gcp-compliance.git
git clone https://github.com/turbot/steampipe-mod-gcp-compliance.git
cd steampipe-mod-gcp-compliance
# To run all the checks from the dashboard
steampipe dashboard
# To run all the checks from rhe cli
steampipe check all
すべてのプロジェクトをチェックする

すべてのプロジェクトをチェックするためには、テストするすべてのプロジェクトを指示するgcp.spcファイルを生成する必要があります。以下のスクリプトの指示に従ってください

FILEPATH="/tmp/gcp.spc"
rm -rf "$FILEPATH" 2>/dev/null

# Generate a json like object for each project
for pid in $(gcloud projects list --format="value(projectId)"); do
echo "connection \"gcp_$(echo -n $pid | tr "-" "_" )\" {
plugin  = \"gcp\"
project = \"$pid\"
}" >> "$FILEPATH"
done

# Generate the aggragator to call
echo 'connection "gcp_all" {
plugin      = "gcp"
type        = "aggregator"
connections = ["gcp_*"]
}' >> "$FILEPATH"

echo "Copy $FILEPATH in ~/.steampipe/config/gcp.spc if it was correctly generated"

他のGCPインサイトをチェックするには(サービスの列挙に役立ちます)、以下を使用してください: https://github.com/turbot/steampipe-mod-gcp-insights

Terraform GCPコードをチェックするには: https://github.com/turbot/steampipe-mod-terraform-gcp-compliance

Steampipeのその他のGCPプラグイン: https://github.com/turbot?q=gcp {% endtab %}

{% tab title="AWS" %}

# Install aws plugin
steampipe plugin install aws

# Modify the spec indicating in "profile" the profile name to use
nano ~/.steampipe/config/aws.spc

# Get some info on how the AWS account is being used
git clone https://github.com/turbot/steampipe-mod-aws-insights.git
cd steampipe-mod-aws-insights
steampipe dashboard

# Get the services exposed to the internet
git clone https://github.com/turbot/steampipe-mod-aws-perimeter.git
cd steampipe-mod-aws-perimeter
steampipe dashboard

# Run the benchmarks
git clone https://github.com/turbot/steampipe-mod-aws-compliance
cd steampipe-mod-aws-compliance
steampipe dashboard # To see results in browser
steampipe check all --export=/tmp/output4.json

Terraform AWSコードをチェックするには: https://github.com/turbot/steampipe-mod-terraform-aws-compliance

Steampipeのその他のAWSプラグイン: https://github.com/orgs/turbot/repositories?q=aws {% endtab %} {% endtabs %}

AWS、GCP、Azure、DigitalOcean。
python2.7が必要で、メンテナンスされていないように見えます。

Nessus

Nessusには_Audit Cloud Infrastructure_ スキャンがあり、AWS、Azure、Office 365、Rackspace、Salesforceをサポートしています。Azureで追加の設定が必要で、Client Idを取得する必要があります。

Cloudlistは、クラウドプロバイダーからアセット(ホスト名、IPアドレス)を取得するためのマルチクラウドツールです。

{% tabs %} {% tab title="Cloudlist" %}

cd /tmp
wget https://github.com/projectdiscovery/cloudlist/releases/latest/download/cloudlist_1.0.1_macOS_arm64.zip
unzip cloudlist_1.0.1_macOS_arm64.zip
chmod +x cloudlist
sudo mv cloudlist /usr/local/bin

{% endtab %}

{% tab title="セカンドタブ" %}

## For GCP it requires service account JSON credentials
cloudlist -config </path/to/config>

{% endtab %} {% endtabs %}

Cartographyは、Neo4jデータベースによって提供される直感的なグラフビューでインフラストラクチャ資産とそれらの関係を統合するPythonツールです。

{% tabs %} {% tab title="インストール" %}

# Installation
docker image pull ghcr.io/lyft/cartography
docker run --platform linux/amd64 ghcr.io/lyft/cartography cartography --help
## Install a Neo4j DB version 3.5.*

{% endtab %}

{% tab title="GCP" %}

docker run --platform linux/amd64 \
--volume "$HOME/.config/gcloud/application_default_credentials.json:/application_default_credentials.json" \
-e GOOGLE_APPLICATION_CREDENTIALS="/application_default_credentials.json" \
-e NEO4j_PASSWORD="s3cr3t" \
ghcr.io/lyft/cartography  \
--neo4j-uri bolt://host.docker.internal:7687 \
--neo4j-password-env-var NEO4j_PASSWORD \
--neo4j-user neo4j


# It only checks for a few services inside GCP (https://lyft.github.io/cartography/modules/gcp/index.html)
## Cloud Resource Manager
## Compute
## DNS
## Storage
## Google Kubernetes Engine
### If you can run starbase or purplepanda you will get more info

{% endtab %} {% endtabs %}

Starbaseは、クラウドインフラストラクチャ、SaaSアプリケーション、セキュリティコントロールなどのサービスやシステムからアセットと関係を収集し、Neo4jデータベースに基づいた直感的なグラフビューにまとめます。

{% tabs %} {% tab title="インストール" %}

# You are going to need Node version 14, so install nvm following https://tecadmin.net/install-nvm-macos-with-homebrew/
npm install --global yarn
nvm install 14
git clone https://github.com/JupiterOne/starbase.git
cd starbase
nvm use 14
yarn install
yarn starbase --help
# Configure manually config.yaml depending on the env to analyze
yarn starbase setup
yarn starbase run

# Docker
git clone https://github.com/JupiterOne/starbase.git
cd starbase
cp config.yaml.example config.yaml
# Configure manually config.yaml depending on the env to analyze
docker build --no-cache -t starbase:latest .
docker-compose run starbase setup
docker-compose run starbase run

{% endtab %}

{% tab title="GCP" %}

## Config for GCP
### Check out: https://github.com/JupiterOne/graph-google-cloud/blob/main/docs/development.md
### It requires service account credentials

integrations:
-
name: graph-google-cloud
instanceId: testInstanceId
directory: ./.integrations/graph-google-cloud
gitRemoteUrl: https://github.com/JupiterOne/graph-google-cloud.git
config:
SERVICE_ACCOUNT_KEY_FILE: '{Check https://github.com/JupiterOne/graph-google-cloud/blob/main/docs/development.md#service_account_key_file-string}'
PROJECT_ID: ""
FOLDER_ID: ""
ORGANIZATION_ID: ""
CONFIGURE_ORGANIZATION_PROJECTS: false

storage:
engine: neo4j
config:
username: neo4j
password: s3cr3t
uri: bolt://localhost:7687
#Consider using host.docker.internal if from docker

{% endtab %} {% endtabs %}

スキャンされたAWSまたはAzure環境における最も権限のあるユーザーを発見します。これにはAWS Shadow Adminsも含まれます。powershellを使用します。

Import-Module .\SkyArk.ps1 -force
Start-AzureStealth

# in the Cloud Console
IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/cyberark/SkyArk/master/AzureStealth/AzureStealth.ps1')
Scan-AzureAdmins

トップクラウドプロバイダー(Amazon、Google、Microsoft、DigitalOcean、Alibaba、Vultr、Linode)上で、企業(ターゲット)のインフラストラクチャ、ファイル、アプリを見つけるツールです。

  • CloudFoxは、クラウドインフラストラクチャ(現在はAWSとAzureのみ対応、GCPは近日対応予定)内の攻撃可能なパスを見つけるツールです。
  • これは列挙ツールであり、手動のペネトレーションテストを補完することを目的としています。
  • クラウド環境内でデータを作成または変更することはありません。

クラウドセキュリティツールのさらなるリスト

Google

GCP

{% content-ref url="gcp-security/" %} gcp-security {% endcontent-ref %}

Workspace

{% content-ref url="workspace-security/" %} workspace-security {% endcontent-ref %}

AWS

{% content-ref url="aws-security/" %} aws-security {% endcontent-ref %}

Azure

{% content-ref url="azure-security/" %} azure-security {% endcontent-ref %}

攻撃グラフ

Stormspotter はAzureサブスクリプション内のリソースの「攻撃グラフ」を作成します。これにより、レッドチームとペネトレーションテスターは、テナント内の攻撃面とピボットの機会を視覚化し、ディフェンダーはインシデント対応作業を迅速に方向付け、優先順位を決定することができます。

Office365

Global Adminまたは少なくともGlobal Admin Reader(ただしGlobal Admin ReaderはいくつかのPSモジュールで制限があります)が必要です。ただし、これらの制限はウェブアプリケーション経由で機能にアクセスすることで回避できます。

htARTE (HackTricks AWS Red Team Expert)でAWSのハッキングをゼロからヒーローまで学ぶ こちら

HackTricksをサポートする他の方法: