prowler - Prowlerは、AWSセキュリティのベストプラクティスの評価、監査、インシデント対応、継続的な監視、強化、フォレンジックの準備を実行するためのオープンソースのセキュリティツールです。CIS、PCI-DSS、ISO27001、GDPR、HIPAA、FFIEC、SOC2、AWS FTR、ENS、およびカスタムセキュリティフレームワークをカバーする240を超えるコントロールが含まれています。

(Prowler is an Open Source security tool to perform AWS security best practices assessments, audits, incident response, continuous monitoring, hardening and forensics readiness. It contains more than 240 controls covering CIS, PCI-DSS, ISO27001, GDPR, HIPAA, FFIEC, SOC2, AWS FTR, ENS and custom security frameworks.)

Created at: 2016-08-24 23:12:24
Language: Shell
License: Apache-2.0

&nbsp&nbsp&nbspprowler.proでProwlerのProバージョンを探索する


不和の盾 Dockerプル Docker Docker AWSECRギャラリー レポサイズ 線 問題 バージョン バージョン 寄稿者 ライセンス ツイッター

Prowlerは、AWSセキュリティのベストプラクティスの評価、監査、インシデント対応、継続的な監視、強化、フォレンジックの準備を実行するためのオープンソースのセキュリティツールです。CIS、PCI-DSS、ISO27001、GDPR、HIPAA、FFIEC、SOC2、AWS FTR、ENS、およびカスタムセキュリティフレームワークをカバーする240を超えるコントロールが含まれています。

目次

説明

Prowlerは、AWSのセキュリティ評価、監査、強化、インシデント対応を支援するコマンドラインツールです。

CIS Amazon Web Services Foundationsベンチマークのガイドライン(49チェック)に準拠しており、GDPR、HIPAA、PCI-DSS、ISO-27001、FFIEC、SOC2などに関連する190を超える追加チェックがあります。

CIS Amazon WebServicesFoundationsベンチマークv1.2.0についてもっと読む-2018年5月23日

特徴

+240のチェックは、すべてのAWSリージョンとほとんどのAWSサービスにわたるセキュリティのベストプラクティスをカバーし、次のグループに関連しています。

  • IDおよびアクセス管理[グループ1]
  • ロギング[グループ2]
  • モニタリング[グループ3]
  • ネットワーキング[グループ4]
  • CISレベル1[cislevel1]
  • CISレベル2[cislevel2]
  • エクストラはエクストラセクション[エクストラ]を参照してください
  • フォレンジック関連のチェックグループ[フォレンジック対応]
  • GDPR[gdpr]詳細はこちら
  • HIPAA[hipaa]詳細はこちら
  • 信頼境界[trustboundaries]詳細はこちら
  • 秘密
  • インターネットで公開されているリソース
  • EKS-CIS
  • PCI-DSS、ISO-27001、FFIEC、SOC2、ENS(スペインのEsquema Nacional de Seguridad)も含まれます。
  • AWSFTR[FTR]詳細はこちら

プラウラーを使用すると、次のことができます。

  • カラフルまたはモノクロの直接レポートを取得する
  • HTML、CSV、JUNIT、JSON、またはJSON ASFF(セキュリティハブ)形式のレポート
  • 調査結果をセキュリティハブに直接送信する
  • 特定のチェックとグループを実行するか、独自のチェックとグループを作成します
  • 複数のAWSアカウントを並行してまたは順次チェックします
  • AWSリソースのインベントリを取得する
  • もっと!以下の例をお読みください

高レベルのアーキテクチャ

Prowlerは、ワークステーション、EC2インスタンス、Fargate、またはその他のコンテナー、Codebuild、CloudShell、Cloud9から実行できます。

プラウラーの高レベルのアーキテクチャ

要件とインストール

Prowlerは、下にあるAWS-CLIを使用してbashで記述されており、Linux、Mac OS、またはcygwinまたは仮想化を備えたWindowsで動作します。また、正しく動作する必要が

jq
あります。
detect-secrets

  • AWS-CLIの最新バージョンがインストールされていることを確認してください。v1またはv2のいずれかで動作しますが、新しいリージョンを使用する場合は、Python pipが既にインストールされているSTSv2トークンやその他のコンポーネントが必要なため、最新のv2をお勧めします。

  • Amazon Linux(

    yum
    ベースのLinuxディストリビューションおよびAWS CLI v2)の場合:

    sudo yum update -y
    sudo yum remove -y awscli
    curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
    unzip awscliv2.zip
    sudo ./aws/install
    sudo yum install -y python3 jq git
    sudo pip3 install detect-secrets==1.0.3
    git clone https://github.com/prowler-cloud/prowler
    
  • Ubuntu Linux(

    apt
    ベースのLinuxディストリビューションおよびAWS CLI v2)の場合:

    sudo apt update
    sudo apt install python3 python3-pip jq git zip
    pip install detect-secrets==1.0.3
    curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
    unzip awscliv2.zip
    sudo ./aws/install
    git clone https://github.com/prowler-cloud/prowler
    

    注:detect-secretsのYelpバージョンはサポートされなくなり、IBMのバージョンが維持されるようになりました。以下に記載されているものまたは特定のYelpバージョン1.0.3を使用して、期待どおりに機能することを確認します(

    pip install detect-secrets==1.0.3
    ):

    pip install "git+https://github.com/ibm/detect-secrets.git@master#egg=detect-secrets"

    AWS-CLIは、他の方法を使用してインストールすることもできます。詳細については、公式ドキュメントを参照してください:https ://aws.amazon.com/cli/ 。ただし、または

    detect-secrets
    を使用してインストールする必要があります。
    pip
    pip3

  • Prowlerリポジトリのクローンが作成されたら、フォルダに移動して実行できます。

    cd prowler
    ./prowler
  • Prowlerは内部でAWSCLIを使用しているため、ここで説明する任意の認証方法に従うことができます。有効なアクセスキーとリージョンを使用してAWS-CLIを適切に設定したことを確認するか、AWS変数(またはインスタンスプロファイル/ロール)を適切に宣言します。

    aws configure

    また

    export AWS_ACCESS_KEY_ID="ASXXXXXXX"
    export AWS_SECRET_ACCESS_KEY="XXXXXXXXX"
    export AWS_SESSION_TOKEN="XXXXXXXXX"
  • これらの資格情報は、すべてのチェックを実行するための適切な権限を持つユーザーまたはロールに関連付けられている必要があります。確認するには、AWSマネージドポリシーであるSecurityAuditとViewOnlyAccessを使用しているユーザーまたはロールに追加します。ポリシーARNは次のとおりです。

    arn:aws:iam::aws:policy/SecurityAudit
    arn:aws:iam::aws:policy/job-function/ViewOnlyAccess

    追加の権限が必要です:ProwlerがグループExtrasに含まれるすべてのサービスをスキャンできるようにするには、使用しているロールにカスタムポリシーprowler-additions-policy.jsonも添付してください。Prowlerが結果をAWSSecurityHubに送信するようにする場合は、カスタムポリシーprowler-security-hub.jsonも添付してください。

使用法

  1. オプションなしでコマンドを実行し

    prowler
    ます(環境変数のクレデンシャルが存在する場合はそれを使用するか、デフォルトで
    ~/.aws/credentials
    ファイルを使用し、必要に応じてすべてのリージョンに対してチェックを実行します。デフォルトのリージョンはus-east-1です):

    ./prowler

    使用

    -l
    可能なすべてのチェックとそれらを参照するグループ(セクション)を一覧表示するために使用します。使用するすべてのグループを一覧表示し
    -L
    、グループのコンテンツを一覧表示するには、を使用します
    -l -g <groupname>

    依存関係のインストールを回避したい場合は、Dockerを使用して実行してください。

    docker run -ti --rm --name prowler --env AWS_ACCESS_KEY_ID --env AWS_SECRET_ACCESS_KEY --env AWS_SESSION_TOKEN toniblyx/prowler:latest

    Prowlerによって作成されたレポートを取得する場合は、以下の例のようにdockervolumeオプションを使用します。

    docker run -ti --rm -v /your/local/output:/prowler/output --name prowler --env AWS_ACCESS_KEY_ID --env AWS_SECRET_ACCESS_KEY --env AWS_SESSION_TOKEN toniblyx/prowler:latest -g hipaa -M csv,json,html
  2. カスタムAWS-CLIプロファイルとリージョンの場合、以下を使用します:(カスタムプロファイルを使用し、必要に応じてすべてのリージョンに対してチェックを実行します)::

    ./prowler -p custom-profile -r us-east-1
  3. シングルチェックの場合、オプションを使用します

    -c

    ./prowler -c check310

    Dockerの場合:

    docker run -ti --rm --name prowler --env AWS_ACCESS_KEY_ID --env AWS_SECRET_ACCESS_KEY --env AWS_SESSION_TOKEN toniblyx/prowler:latest "-c check310"

    またはコンマで区切られた複数のチェック:

    ./prowler -c check310,check722

    またはすべてのチェックですが、一部は次のとおりです。

    ./prowler -E check42,check43

    またはカスタムプロファイルと地域の場合:

    ./prowler -p custom-profile -r us-east-1 -c check11

    または、チェックのグループには、グループ名を使用します。

    ./prowler -g group1 # for iam related checks

    または、グループ内のいくつかのチェックを除外します。

    ./prowler -g group4 -E check42,check43

    有効なチェック番号はAWSCISベンチマークガイドに基づいているため、1.1はcheck11、3.10はcheck310です。

地域

デフォルトでは、Prowlerは使用可能なすべてのオプトインリージョンをスキャンします。これは、使用されるリソースとリージョンの数によっては、実行に時間がかかる場合があります。同じことがGovCloudまたは中国の地域にも当てはまります。例については、以下の事前使用法を参照してください。

Prowlerには、リージョンに関連する2つのパラメーターがあります。

-r
これはAWSサービスAPIエンドポイントのクエリに使用され(
us-east-1
デフォルトで使用され、GovCloudまたはChinaに必要です)、
-f
スキャンするリージョンのみをフィルター処理するオプションです。たとえば、ダブリンのみをスキャンする
-f eu-west-1
場合、およびダブリンとオハイオをスキャンする場合は
-f eu-west-1,us-east-1
、領域がコンマ区切り文字で区切られていることに注意してください(以前と同じように使用できます
-f 'eu-west-1,us-east-1'
)。

スクリーンショット

レポートを保存する

  1. 後で分析するためにレポートを保存する場合は、ネイティブでさまざまな方法があります(サポートされているテキスト、mono、csv、json、json-asff、junit-xml、およびhtml。詳細については、以下の注を参照してください)。

    ./prowler -M csv

    または同時に複数のフォーマットで:

    ./prowler -M csv,json,json-asff,html

    または、複数の形式のチェックのグループ:

    ./prowler -g gdpr -M csv,json,json-asff

    または、ソートされたダイナミックHTMLレポートが必要な場合は、次のようにします。

    ./prowler -M html

    ここで、.という名前

    -M
    のprowler
    output
    ディレクトリ内にファイルを作成します
    prowler-output-AWSACCOUNTID-YYYYMMDDHHMMSS.format
    。他に何も指定する必要はありません。パイプもリダイレクトもありません。

    または、出力を次のようなファイルに保存するだけです。

    ./prowler -M mono > prowler-report.txt

    JUnitレポートファイルを生成するには、junit-xml形式を含めます。これは、他の形式と組み合わせることができます。ファイルは、次の名前のプラウラールートディレクトリ内に書き込まれます

    junit-reports

    ./prowler -M text,junit-xml

    使用する出力形式に関する注意

    -M
    :「text」は色付きのデフォルトの形式、「mono」はデフォルトの形式と似ていますがモノクロ、「csv」はカンマ区切りの値、「json」はプレーンベーシックjson(行間にコンマなし)、「 json-asff "は、を使用してSecurityHubに送信できるAmazonSecurityFindingFormatのjsonでもあります
    -S

    レポートをS3バケットに保存するには、を使用

    -B
    してカスタム出力バケット
    -M
    を定義し、S3にアップロードされる出力形式を定義します。

    ./prowler -M csv -B my-bucket/folder/

    想定されるロールクレデンシャルではなく、レポートをS3バケットに配置するための初期クレデンシャルを使用する場合は、の

    -D
    代わりにを使用し
    -B
    ます。使用するクレデンシャルに、レポートがアップロードされるS3パスでs3:PutObject権限があることを確認してください。

    複数のフォーマットを生成してDockerを使用して実行する場合、レポートを取得するには、ローカルディレクトリをコンテナにバインドします。例:

    docker run -ti --rm --name prowler --volume "$(pwd)":/prowler/output --env AWS_ACCESS_KEY_ID --env AWS_SECRET_ACCESS_KEY --env AWS_SESSION_TOKEN toniblyx/prowler:latest -M csv,json
  2. CISプロファイル定義に基づいて評価を実行するには、

    -g
    フラグ付きのcislevel1またはcislevel2を使用できます。これについての詳細は、8ページを参照してください

    ./prowler -g cislevel1
  3. Prowlerを実行して複数のAWSアカウントを並行してチェックしたい(同時に最大4つ実行し

    -P 4
    たい)が、役割を引き受けて行うには、以下の「高度な使用法」セクションをお読みください。

    grep -E '^\[([0-9A-Aa-z_-]+)\]'  ~/.aws/credentials | tr -d '][' | shuf |  \
    xargs -n 1 -L 1 -I @ -r -P 4 ./prowler -p @ -M csv  2> /dev/null  >> all-accounts.csv
  4. 使用法の実行に関するヘルプ:

    ./prowler -h
    

データベースプロバイダーコネクタ

Prowlerの出力をさまざまなデータベースに送信できます(現在、PostgreSQLのみがサポートされています)。

使用するデータベースプロバイダーのセクションにジャンプし、必要な手順に従って構成します。

PostgreSQL

psqlをインストールします

  • Mac->
    brew install libpq
  • Ubuntu->
    sudo apt-get install postgresql-client 
  • RHEL / Centos->
    sudo yum install postgresql10

資格

PostgreSQLのクレデンシャルをProwlerに渡すには2つのオプションがあります。

.pgpassファイルの使用

~/.pgpass
次の形式を使用して、 Prowlerを起動するユーザーのルートフォルダー(pgpass file doc )にファイルを構成します。この中には、行末に、で区切られた追加のフィールドを含めて
:
、テーブルに名前を付けます。
hostname:port:database:username:password:table

環境変数の使用
  • 次の環境変数を構成します。
    • POSTGRES_HOST
    • POSTGRES_PORT
    • POSTGRES_USER
    • POSTGRES_PASSWORD
    • POSTGRES_DB
    • POSTGRES_TABLE

:postgresとは異なるスキーマを使用している場合は、次の

POSTGRES_TABLE
ように変数の先頭に含めてください。
export POSTGRES_TABLE=prowler.findings

PostgreSQLデータベースにテーブルを作成して、Prowlerのデータを保存します。次のSQLステートメントを使用してテーブルを作成できます。

CREATE TABLE  IF NOT EXISTS prowler_findings (
profile TEXT,
account_number TEXT,
region TEXT,
check_id TEXT,
result TEXT,
item_scored TEXT,
item_level TEXT,
check_title TEXT,
result_extended TEXT,
check_asff_compliance_type TEXT,
severity TEXT,
service_name TEXT,
check_asff_resource_type TEXT,
check_asff_type TEXT,
risk TEXT,
remediation TEXT,
documentation TEXT,
check_caf_epic TEXT,
resource_id TEXT,
prowler_start_time TEXT,
account_details_email TEXT,
account_details_name TEXT,
account_details_arn TEXT,
account_details_org TEXT,
account_details_tags  TEXT
);
  • -d
    フラグを使用し てProwlerを実行します。次に例を示します。
    ./prowler -M csv -d postgresql

    :このコマンドは、

    csv
    出力ファイルを作成し、Prowler出力を構成済みのPostgreSQLDBに保存します。これは一例であり、
    -d
    フラグを実行する必要はありません
    -M

高度な使用法

役割を引き受ける:

Prowlerは下にあるAWSCLIを使用するため、同じ認証方法を使用します。ただし、各ユースケースに応じて、IAMのロールの想定機能を使用して複数のアカウントに対してProwlerを実行する方法はいくつかあります。

~/.aws/config
引き受ける役割について必要なすべての情報を使用してカスタムプロファイルを内部に設定し、で呼び出すことができ
./prowler -p your-custom-profile
ます。さらに、を使用でき、Prowlerはを使用
-A 123456789012
してこれらの一時的なクレデンシャルを取得し、それらを環境変数として設定して、その特定のアカウントに対して実行します。CFNスタックまたはStackSetのいずれかとして、複数のアカウントでより簡単に引き受ける役割を作成するには、このCloudFormationテンプレートを確認し、それを適応させます。
-R RemoteRoleToAssume
aws sts assume-role

./prowler -A 123456789012 -R ProwlerRole
./prowler -A 123456789012 -R ProwlerRole -I 123456

セッション期間に関する注1:デフォルトでは、1時間(3600秒)有効な資格情報を取得します。実行するチェックの量とインフラストラクチャのサイズによっては、Prowlerが完了するまでに1時間以上かかる場合があります。オプション

-T <seconds>
を使用して、最大12時間(43200秒)を許可します。1時間以上許可するには、その特定の役割の「最大CLI / APIセッション期間」を変更する必要があります。詳細については、こちらをご覧ください

セッション期間についての注2:ロールチェーンによって引き継がれるロールを使用している場合、1時間という厳しい制限があることに注意してください。可能であれば、ロールチェーンを使用しないことを検討してください。詳細については、以下の表の下の注1を参照してください

たとえば、AWSアカウント123456789012からのバナーなしのRDSに関するすべてのチェックからCSV形式で失敗のみを取得し、役割RemoteRoleToAssumeを引き受けて、1時間の固定セッション期間を設定する場合:

./prowler -A 123456789012 -R RemoteRoleToAssume -T 3600 -b -M cvs -q -g rds

または特定の外部IDを使用:

./prowler -A 123456789012 -R RemoteRoleToAssume -T 3600 -I 123456 -b -M cvs -q -g rds

AWS組織内のすべてのアカウント、またはアカウントのリスト全体で役割を引き受けます。

Prowlerを実行する場合、またはAWS組織のすべてのアカウントでチェックまたはグループを実行する場合は、次のようにします。

まず、一時停止されていないアカウントのリストを取得します。

ACCOUNTS_IN_ORGS=$(aws organizations list-accounts --query Accounts[?Status==`ACTIVE`].Id --output text)

次に、Prowlerを実行して、各アカウントごとに役割(すべてのメンバーで同じ)を引き受けます。この例では、1つの特定のチェックを実行しているだけです。

for accountId in $ACCOUNTS_IN_ORGS; do ./prowler -A $accountId -R RemoteRoleToAssume -c extra79; done

同じforループを使用すると、次のような変数を持つアカウントのリストをスキャンできます。

ACCOUNTS_LIST='11111111111 2222222222 333333333'

AWS組織からAWSアカウントの詳細を取得します。

Prowler v2.8から、スキャンされたアカウントの追加情報をCSVおよびJSON出力で取得できます。単一のアカウントをスキャンすると、出力の一部としてアカウントIDが取得されます。これで、AWS組織があり、ロールの引き受け機能を使用して複数のアカウントをスキャンしている場合、Prowlerはアカウント名、メール、ARN、組織ID、タグなどのアカウントの詳細を取得でき、CSVとJSONのすべての検索結果の横に表示されます。出力。これを行うには、新しいオプションを使用できます。には、権限とが

-O <management account id>
必要です。次のサンプルコマンドを参照してください。
-R <role to assume>
organizations:ListAccounts*
organizations:ListTagsForResource

./prowler -R ProwlerScanRole -A 111111111111 -O 222222222222 -M json,csv

そのコマンドで、Prowlerはロールを

111111111111
引き受けてアカウントをスキャンし、同じロールを引き受けて
ProwlerScanRole
いるAWS Organizatiosn管理アカウントからアカウントの詳細を取得し、JSONとCSVでそれらの詳細を含む2つのレポートを作成します。
222222222222
ProwlerScanRole

以下のJSON出力(編集済み)では、base64でコード化されたタグを確認して、その形式が原因でCSVまたはJSONが破損しないようにしています。

  "Account Email": "my-prod-account@domain.com",
  "Account Name": "my-prod-account",
  "Account ARN": "arn:aws:organizations::222222222222:account/o-abcde1234/111111111111",
  "Account Organization": "o-abcde1234",
  "Account tags": "\"eyJUYWdzIjpasf0=\""

CSVヘッダー出力の追加フィールドは次のとおりです。

ACCOUNT_DETAILS_EMAIL,ACCOUNT_DETAILS_NAME,ACCOUNT_DETAILS_ARN,ACCOUNT_DETAILS_ORG,ACCOUNT_DETAILS_TAGS

GovCloud

ProwlerはGovCloudリージョンでも実行されます。正しいAPIエンドポイントを指していることを確認するには、またはの

-r
いずれ
us-gov-west-1
かを使用します
us-gov-east-1
。フィルタ領域が使用されていない場合、デフォルトで両方のGovCloud領域でリソースが検索されます。

./prowler -r us-gov-west-1

Security Hubの統合については、以下の「SecurityHub」セクションを参照してください。

カスタムチェック用のカスタムフォルダ

フラグ

-x /my/own/checks
には、その特定のディレクトリ内のチェックが含まれます(ファイルはチェックで開始する必要があります)。小切手の作成方法については、「カスタム小切手の追加」セクションを参照してください。

S3 URIは、カスタムチェック用のカスタムフォルダとしてもサポートされています

s3://bucket/prefix/checks
。Prowlerはフォルダをローカルにダウンロードし、デフォルトの実行で呼び出されたときにチェックを実行し
-c
ます
-g

使用するクレデンシャルに、カスタムチェックが配置されているS3パスでs3:GetObjectアクセス許可があることを確認してください。

失敗のみを表示またはログに記録する

ノイズを除去してFAILの結果のみを取得するために、

-q
ProwlerがFAILのみを表示してログに記録するようにするフラグがあります。 他のオプションと組み合わせることができます。 念のため、リソースが除外されると警告が表示されます。

# -q option combined with -M csv -b
./prowler -q -M csv -b

検出シークレットのエントロピー制限を設定します

環境変数から高エントロピーbase64文字列のエントロピー制限を設定します

BASE64_LIMIT
。値は0.0から8.0の間でなければならず、デフォルトは4.5です。 環境変数から高エントロピー16進文字列のエントロピー制限を設定します
HEX_LIMIT
。値は0.0から8.0の間でなければならず、デフォルトは3.0です。

export BASE64_LIMIT=4.5
export HEX_LIMIT=3.0

AWSCloudShellを使用してProwlerを実行する

Prowlerを実行してアカウントをスキャンする簡単な方法は、AWSCloudShellを使用することです。詳細を読み、ここでそれを行う方法を学びます。

セキュリティハブの統合

2020年10月30日(バージョンv2.3RC5)以降、Prowlerはネイティブにサポートし、公式の統合としてAWSSecurityHubに調査結果を送信します。この統合により、Prowlerはその結果をAWSSecurityHubにインポートできます。Security Hubを使用すると、Amazon GuardDuty、Amazon Inspector、Amazon Macie、AWS Identity and Access Management(IAM)Access Analyzerなどの複数のAWSサービスからのセキュリティアラートまたは結果を集約、整理、優先順位付けする単一の場所ができます。 、およびAWS Firewall Manager、AWSパートナーソリューションおよびProwlerから無料で。

調査結果をProwlerに送信する前に、次の手順を実行する必要があります。

  1. Security Hubはリージョンベースのサービスであるため、必要な1つまたは複数のリージョンで有効にします。十分な権限がある場合は、AWSマネジメントコンソールを使用するか、次のコマンドでAWSCLIを使用します。
    • aws securityhub enable-security-hub --region <region>
  2. パートナー統合統合としてProwlerを有効にします。十分な権限がある場合は、AWSマネジメントコンソールを使用するか、次のコマンドでAWSCLIを使用します。
    • aws securityhub enable-import-findings-for-product --region <region> --product-arn arn:aws:securityhub:<region>::product/prowler/prowler
      (ARN内でもリージョンを変更します)。
    • AWSマネジメントコンソールの使用: スクリーンショット2020-10-29at10 26 02 PM
  3. 「カスタムIAMポリシー」のセクションで説明したように、Prowlerがその結果をAWS Security Hubにインポートできるようにするには、Prowlerを実行しているロールまたはユーザーに以下のポリシーを追加する必要があります。

有効にすると、以下のコマンドを実行するのと同じくらい簡単です(すべての地域で)。

./prowler -M json-asff -S

または、eu-west-1のような1つのフィルタリングされた領域のみ:

./prowler -M json-asff -q -S -f eu-west-1

注1:セキュリティハブに失敗のみを送信することをお勧めします。これは

-q
コマンドに追加することができます。

注2:Prowlerはデフォルトですべてのリージョンに対してチェックを実行するため、上記の例に示すように、SecurityHub統合を実行するときにリージョンでフィルタリングする必要がある場合があります。

aws securityhub enable-security-hub --region <region>
オプションを指定してProwlerを呼び出して実行することにより、必要な1つまたは複数のリージョンでSecurity Hubを有効にすることを忘れないでください
-f <region>
(リージョンが使用されていない場合は、すべてのリージョンハブで結果をプッシュしようとします)。

注3:Security Hubの結果を更新するには、Prowlerを定期的に実行する必要があります。1日1回または一定時間ごと。

初めて調査結果を実行すると、調査結果セクションにプラウラーの調査結果が表示されます。

スクリーンショット2020-10-29at10 29 05 PM

GovCloudリージョンのセキュリティハブ

GovCloudでProwlerとSecurityHubの統合を使用するには、追加の要件があり

-r
ます。APIクエリを適切なAPIエンドポイントにポイントするためにを使用する必要があります。失敗した結果のみをリージョンのSecurityHubに送信するサンプルコマンドを次に示します
us-gov-west-1

./prowler -r us-gov-west-1 -f us-gov-west-1 -S -M csv,json-asff -q

中国地域のセキュリティハブ

中国地域でProwlerとSecurityHubの統合を使用するには、追加の要件があり

-r
ます。APIクエリを適切なAPIエンドポイントにポイントするためにを使用する必要があります。失敗した結果のみをリージョンのSecurityHubに送信するサンプルコマンドを次に示します
cn-north-1

./prowler -r cn-north-1 -f cn-north-1 -q -S -M csv,json-asff

CodeBuildの展開

Prowlerを1回実行するか、スケジュールに基づいて実行するかのいずれかで、このテンプレートを使用すると非常に簡単になります。このテンプレートは、CodeBuild環境を作成し、Prowlerを直接実行して、すべてのレポートをバケットに残し、ProwlerからのJUnit出力に基づいてCodeBuild内にもレポートを作成します。CloudWatchイベントルール(またはEventbridge)がここで使用されるため、スケジューリングはcronベースのようにすることも

cron(0 22 * * ? *)
レートベースのようにすることもできます。
rate(5 hours)

それを行うのに役立つクラウド形成テンプレートはここにあります。

これは、1つのアカウントを監視するための簡単なソリューションです。マルチアカウントについては、マルチアカウントと継続的な監視を参照してください。

許可リストまたはリソースからの失敗の削除

時々、特定の方法で意図的に構成されたリソースを見つけることがありますが、それは悪い習慣かもしれませんが、それで問題ありません。たとえば、Webサイトをホストするインターネットに開いているS3バケット、または開いているポートを備えたセキュリティグループが必要です。あなたのユースケースでは。これで、次のコマンドのようにリソースを使用

-w allowlist_sample.txt
および追加できます。
checkID:resourcename

./prowler -w allowlist_sample.txt

S3 URIは、許可リストファイルとしてもサポートされています。

s3://bucket/prefix/allowlist_sample.txt

使用するクレデンシャルに、allowlistファイルが配置されているS3パスでs3:GetObjectアクセス許可があることを確認してください。

DynamoDBテーブルARNは、allowlistファイルとしてもサポートされています。

arn:aws:dynamodb:us-east-1:111111222222:table/allowlist

テーブルに

account_id
パーティションキーと
rule
ソートキーがあり、使用されているクレデンシャル
dynamodb:PartiQLSelect
にテーブル内のアクセス許可があることを確認してください。

画像

このフィールド

account_id
には、アカウントIDまたは
*
(このテーブルをホワイトリストとして使用するすべてのアカウントに適用されます)のいずれかを含めることができます。従来のallowlistファイルと同様に、
rule
フィールドには
checkID:resourcename
パターンが含まれている必要があります。

画像

Allowlistオプションは他のオプションと一緒に機能し、の

WARNING
代わりに
INFO
PASS
または
FAIL
を除くすべての出力形式に追加します
json-asff

在庫

Prowlerを使用すると、AWSリソースのインベントリを取得できます。これを行うには、実行

./prowler -i
して、AWSアカウントにデプロイしたAWSリソースを確認します。この機能は、このAPI呼び出しに基づいて、すべてのリージョンのほぼすべてのリソースを一覧表示します。リソースタイプの100%をカバーしていないことに注意してください。

インベントリは

csv
、デフォルトで、共通のProwler
output
フォルダの下の出力ファイルに次の形式で保存されます。
prowler-inventory-${ACCOUNT_NUM}-${OUTPUT_DATE}.csv

すべてのFAILを修正する方法

レポートを確認し、 https://d0.awsstatic.com/whitepapers/compliance/AWS_CIS_Foundations_Benchmark.pdfのチェックごとに特定のガイドラインに従って問題を修正してください。

トラブルシューティング

STS期限切れトークン

AWS-CLIにSTSトークンを使用していて、セッションの有効期限が切れている場合は、次のエラーが発生する可能性があります。

A client error (ExpiredToken) occurred when calling the GenerateCredentialReport operation: The security token included in the request is expired

これを修正するには、AWS APIに対して再度認証してトークンを更新してください。MFAを使用している場合は、以下の次のセクションを参照してください。

MFAで保護されたクレデンシャルを使用してProwlerを実行する

MFAを必要とするプロファイルを使用してProwlerを実行するには、事前にセッショントークンを取得する必要があります。次のコマンドを使用していることを確認してください。

aws --profile <YOUR_AWS_PROFILE> sts get-session-token --duration 129600 --serial-number <ARN_OF_MFA> --token-code <MFA_TOKEN_CODE> --output text

トークンを取得したら、それを環境変数としてエクスポートできます。

export AWS_PROFILE=YOUR_AWS_PROFILE
export AWS_SESSION_TOKEN=YOUR_NEW_TOKEN
AWS_SECRET_ACCESS_KEY=YOUR_SECRET
export AWS_ACCESS_KEY_ID=YOUR_KEY

or set manually up your

~/.aws/credentials
file properly.

There are some helpfull tools to save time in this process like aws-mfa-script or aws-cli-mfa.

AWS Managed IAM Policies

ViewOnlyAccess

  • Use case: This user can view a list of AWS resources and basic metadata in the account across all services. The user cannot read resource content or metadata that goes beyond the quota and list information for resources.
  • Policy description: This policy grants List*, Describe*, Get*, View*, and Lookup* access to resources for most AWS services. To see what actions this policy includes for each service, see ViewOnlyAccess Permissions

SecurityAudit

  • Use case: This user monitors accounts for compliance with security requirements. This user can access logs and events to investigate potential security breaches or potential malicious activity.
  • Policy description: This policy grants permissions to view configuration data for many AWS services and to review their logs. To see what actions this policy includes for each service, see SecurityAudit Permissions

Custom IAM Policy

Prowler-Additions-Policy

Some new and specific checks require Prowler to inherit more permissions than SecurityAudit and ViewOnlyAccess to work properly. In addition to the AWS managed policies, "SecurityAudit" and "ViewOnlyAccess", the user/role you use for checks may need to be granted a custom policy with a few more read-only permissions (to support additional services mostly). Here is an example policy with the additional rights, "Prowler-Additions-Policy" (see below bootstrap script for set it up):

Prowler-Security-Hub Policy

Allows Prowler to import its findings to AWS Security Hub. More information in Security Hub integration:

Bootstrap Script

Quick bash script to set up a "prowler" IAM user with "SecurityAudit" and "ViewOnlyAccess" group with the required permissions (including "Prowler-Additions-Policy"). To run the script below, you need a user with administrative permissions; set the

AWS_DEFAULT_PROFILE
to use that account:

export AWS_DEFAULT_PROFILE=default
export ACCOUNT_ID=$(aws sts get-caller-identity --query 'Account' | tr -d '"')
aws iam create-group --group-name Prowler
aws iam create-policy --policy-name Prowler-Additions-Policy --policy-document file://$(pwd)/iam/prowler-additions-policy.json
aws iam attach-group-policy --group-name Prowler --policy-arn arn:aws:iam::aws:policy/SecurityAudit
aws iam attach-group-policy --group-name Prowler --policy-arn arn:aws:iam::aws:policy/job-function/ViewOnlyAccess
aws iam attach-group-policy --group-name Prowler --policy-arn arn:aws:iam::${ACCOUNT_ID}:policy/Prowler-Additions-Policy
aws iam create-user --user-name prowler
aws iam add-user-to-group --user-name prowler --group-name Prowler
aws iam create-access-key --user-name prowler
unset ACCOUNT_ID AWS_DEFAULT_PROFILE

The

aws iam create-access-key
command will output the secret access key and the key id; keep these somewhere safe, and add them to
~/.aws/credentials
with an appropriate profile name to use them with Prowler. This is the only time the secret key will be shown. If you lose it, you will need to generate a replacement.

This CloudFormation template may also help you on that task.

Extras

We are adding additional checks to improve the information gather from each account, these checks are out of the scope of the CIS benchmark for AWS, but we consider them very helpful to get to know each AWS account set up and find issues on it.

Some of these checks look for publicly facing resources may not actually be fully public due to other layered controls like S3 Bucket Policies, Security Groups or Network ACLs.

To list all existing checks in the extras group run the command below:

./prowler -l -g extras

There are some checks not included in that list, they are experimental or checks that take long to run like

extra759
and
extra760
(search for secrets in Lambda function variables and code).

To check all extras in one command:

./prowler -g extras

or to run just one of the checks:

./prowler -c extraNUMBER

or to run multiple extras in one go:

./prowler -c extraNumber,extraNumber

Forensics Ready Checks

このチェックグループを使用して、Prowlerは、ログ機能または監査機能を備えた各サービスで、インシデントが発生した場合の最終的なデジタルフォレンジック調査のために必要なすべての証拠が記録および収集されていることを確認できるかどうかを確認します。このグループの一部であるチェックのリスト(ですべてのグループを表示することもできます

./prowler -L
)。チェックのリストは、次のグループファイルで確認できます。

groups / group8_forensics

チェックの

forensics-ready
グループは、既存のチェックと追加のチェックを使用します。フォレンジック準備レポートを取得するには、次のコマンドを実行します。

./prowler -g forensics-ready

GDPRチェック

このグループのチェックで、ProwlerはGDPRに関連するチェックの結果を表示します。詳細については、こちらをご覧ください。チェックのリストは、次のグループファイルで確認できます。

groups / group9_gdpr

チェックの

gdpr
グループは、既存のチェックと追加のチェックを使用します。GDPRレポートを取得するには、次のコマンドを実行します。

./prowler -g gdpr

AWSFTRチェック

このチェックグループを使用すると、ProwlerはAWS FoundationalTechnicalReviewに関連するチェックの結果を表示します。詳細についてはこちらをご覧ください。チェックのリストは、次のグループファイルで確認できます。

groups / group25_ftr

チェックの

ftr
グループは、既存のチェックと追加のチェックを使用します。AWS FTRレポートを取得するには、次のコマンドを実行します。

./prowler -g ftr

HIPAAチェック

このチェックグループを使用して、Prowlerは、45CFRサブパートC-パート160の電子的に保護された医療情報の保護に関するセキュリティ基準-で定義されている医療保険の相互運用性と説明責任に関する法律(別名HIPAA )の「セキュリティルール」に関連する管理の結果を示します。一般的な管理要件とパート164のサブパートAおよびサブパートC-セキュリティとプライバシー

元のPRの詳細については、こちらをご覧ください。

ビジネスアソシエイト補遺(BAA)に関する注記

HIPAA規制では、AWSなどのクラウドサービスプロバイダー(CSP)はビジネスアソシエイトと見なされます。Business Associate Addendum(BAA)は、AWSが保護された医療情報(PHI)を適切に保護することを保証するために、HIPAAルールの下で必要とされるAWS契約です。BAAは、AWSとお客様の関係、およびAWSが実行しているアクティビティやサービスに基づいて、AWSによるPHIの許可された使用と開示を明確にし、必要に応じて制限する役割も果たします。お客様は、HIPAAアカウントとして指定されたアカウントで任意のAWSサービスを使用できますが、ビジネスアソシエイト補遺(BAA)で定義されているHIPAA適格サービスでのみ、保護された医療情報(PHI)を処理、保存、および送信する必要があります。HIPAAに適格なAWSサービスの最新リストについては、を参照してください。HIPAA適格サービスリファレンス

AWSとHIPAAの詳細については、こちらをご覧ください

このグループが示したチェックのリストは次のとおりです。これらは主にサブセクション164.306セキュリティ標準:一般規則および164.312技術的保護手段に関連します。プラウラーは、これらのサブセクションで概説されている技術要件の精神でのみチェックを行うことができ、必要なすべての手順管理をカバーすることはできません。それらは、次のグループファイルにあります。

groups / group10_hipaa

チェックの

hipaa
グループは、既存のチェックと追加のチェックを使用します。HIPAAレポートを取得するには、次のコマンドを実行します。

./prowler -g hipaa

信頼境界チェック

定義と用語

The term "trust boundary" is originating from the threat modelling process and the most popular contributor Adam Shostack and author of "Threat Modeling: Designing for Security" defines it as following (reference):

Trust boundaries are perhaps the most subjective of all: these represent the border between trusted and untrusted elements. Trust is complex. You might trust your mechanic with your car, your dentist with your teeth, and your banker with your money, but you probably don't trust your dentist to change your spark plugs.

AWS is made to be flexible for service links within and between different AWS accounts, we all know that.

This group of checks helps to analyse a particular AWS account (subject) on existing links to other AWS accounts across various AWS services, in order to identify untrusted links.

Run

To give it a quick shot just call:

./prowler -g trustboundaries

Scenarios

Currently, this check group supports two different scenarios:

  1. Single account environment: no action required, the configuration is happening automatically for you.
  2. Multi account environment: in case you environment has multiple trusted and known AWS accounts you maybe want to append them manually to groups/group16_trustboundaries as a space separated list into
    GROUP_TRUSTBOUNDARIES_TRUSTED_ACCOUNT_IDS
    variable, then just run prowler.

Coverage

Current coverage of Amazon Web Service (AWS) taken from here:

Topic Service Trust Boundary
Networking and Content Delivery Amazon VPC VPC endpoints connections (extra786)
VPC endpoints allowlisted principals (extra787)

All ideas or recommendations to extend this group are very welcome here.

Detailed Explanation of the Concept

The diagrams depict two common scenarios, single account and multi account environments. Every circle represents one AWS account. The dashed line represents the trust boundary, that separates trust and untrusted AWS accounts. The arrow simply describes the direction of the trust, however the data can potentially flow in both directions.

Single Account environment assumes that only the AWS account subject to this analysis is trusted. However, there is a chance that two VPCs are existing within that one AWS account which are still trusted as a self reference. 単一アカウント環境

Multi Account environments assumes a minimum of two trusted or known accounts. For this particular example all trusted and known accounts will be tested. Therefore

GROUP_TRUSTBOUNDARIES_TRUSTED_ACCOUNT_IDS
variable in groups/group16_trustboundaries should include all trusted accounts Account #A, Account #B, Account #C, and Account #D in order to finally raise Account #E and Account #F for being untrusted or unknown. マルチアカウント環境

Custom Checks

Using

./prowler -c extra9999 -a
you can build your own on-the-fly custom check by specifying the AWS CLI command to execute.

Omit the "aws" command and only use its parameters within quotes and do not nest quotes in the aws parameter, --output text is already included in the check.

Here is an example of a check to find SGs with inbound port 80:

./prowler -c extra9999 -a 'ec2 describe-security-groups --filters Name=ip-permission.to-port,Values=80 --query SecurityGroups[*].GroupId[]]'

新しいチェックを追加するには、extrasグループまたは他のグループに新しい追加のチェックを自由に作成してください。これを行うには、次の手順に従う必要があります。

  1. ファイル内の構造に従う
    checks/check_sample
  2. 小切手に既存のグループまたは新しいグループの番号部分で名前を付けます
  3. 変更を保存して、次のように実行します
    ./prowler -c extraNN
  4. プルリクエストを送ってください!:)

カスタムグループを追加する

  1. ファイル内の構造に従う
    groups/groupN_sample
  2. グループに存在しない番号を付けます
  3. 変更を保存して、次のように実行します
    ./prowler -g extraNN
  4. プルリクエストを送ってください!:)
  • また、会社で実行するチェックのみを含むグループを作成することもできます。たとえば、
    group9_mycompany
    気になるチェックまたは特定のコンプライアンスが適用されるチェックのリストのみを含む名前のグループを作成できます。

サードパーティの統合

電報

Javier Peceteは、ProwlerとTelegramを統合する素晴らしい仕事をしました。詳細については、 https://github.com/i4specete/ServerTelegramBotをご覧ください。

クラウドセキュリティスイート

SecurityFTWのメンバーは、他の優れたセキュリティツールとともにクラウドセキュリティスイートにProwlerを追加しましたhttps://github.com/SecurityFTW/cs-suite

ライセンス

Prowlerは、各ファイルで指定されているApacheLicense2.0としてライセンスされています。ライセンスのコピーは http://www.apache.org/licenses/LICENSE-2.0で入手できます。

私はとにかくCIS組織とは関係がありません。私は、世界中の企業がクラウドインフラストラクチャをより安全にするのを支援するために、Prowlerを作成して維持しています。

私に連絡したい場合は、 https ://blyx.com/contactにアクセスするか、Twitterhttps://twitter.com/prowler-cloudでフォローしてください。私のDMは開いています。