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&nbspProバージョンのProバージョンを探索 prowler.pro


スラックシールド ドッカープル 港湾労働者 港湾労働者 AWS ECR ギャラリー リポジトリのサイズ 台詞 問題 バージョン バージョン 貢献 ライセンス 囀る

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

目次

説明: __________

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

これは、CISアマゾンウェブサービス基盤ベンチマーク(49チェック)のガイドラインに従い、GDPR、HIPAA、PCI-DSS、ISO-27001、FFIECおよびSOC2などに関連するものを含む190を超える追加チェックがあります。

CISアマゾンウェブサービス基盤ベンチマークv1.2.0 - 05-23-2018についてもっと読む

プラウラーコンテナバージョン

プラウラーの利用可能なバージョンは次のとおりです。

  • 最新:マスターブランチと同期しています(安定バージョンではないことに注意してください)
  • <x.y.z>(リリース):あなたはここでリリースを見つけることができます、それらは安定したリリースです。
  • stable: このタグは常に最新リリースを指します。

コンテナー イメージは、次の場所から入手できます。

顔立ち

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

  • ID およびアクセス管理 [グループ 1]
  • ロギング [グループ 2]
  • モニタリング [グループ 3]
  • ネットワーキング [グループ 4]
  • CIS レベル 1 [シスレベル 1]
  • CIS レベル 2 [シスレベル 2]
  • エクストラはエクストラセクション[エクストラ]を参照してください
  • フォレンジック関連チェックグループ [フォレンジック対応]
  • GDPR [GDPR] 詳しくはこちらをご覧ください
  • HIPAA [HIPAA] もっと読む
  • 信頼境界 [信頼境界] 詳しくはこちら
  • 秘密
  • インターネットに公開されているリソース
  • EKS-CIS
  • PCI-DSS、ISO-27001、FFIEC、SOC2、ENS(スペインのエスケマ・ナシオナル・デ・セグリダッド)も含まれます。
  • AWS FTR [FTR] 詳しくはこちらをご覧ください

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

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

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

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

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

要件とインストール

Prowlerは、AWS-CLIを使用してbashで書かれており、cygwinまたは仮想化を備えたLinux、Mac OS、またはWindowsで動作します。また必要 砂 正しく動作します。

jq
detect-secrets

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

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

    yum

    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 (ベースの Linux ディストリビューションおよび AWS CLI v2) の場合:

    apt

    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
    

    注:シークレットの検出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/、を使用してインストールする必要がありますor。

    detect-secrets
    pip
    pip3

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

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

    aws configure

    又は

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

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

    追加のアクセス許可が必要: Prowler がグループエクストラに含まれるすべてのサービスをスキャンできるようにするには、使用しているロールにカスタムポリシーprowler-additions-policy.jsonもアタッチしてください。Prowler からAWS Security Hub に結果を送信する場合は、カスタムポリシーprowler-security-hub.json もアタッチしてください。

使い

  1. オプションなしでコマンドを実行します(環境変数の資格情報が存在する場合はそれらを使用するか、デフォルトでファイルを使用し、必要に応じてすべてのリージョンに対してチェックを実行します)。デフォルトのリージョンは us-east-1 です)。

    prowler
    ~/.aws/credentials

    ./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によって作成されたレポートを取得する場合は、以下の例のようなdockerボリュームオプションを使用します。

    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 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

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

地域

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

Prowlerには、地域に関連する2つのパラメーターがあります:AWSサービスAPIエンドポイントのクエリに使用されます(デフォルトで使用し、GovCloudまたは中国に必要です)と、スキャンするリージョンのみをフィルタリングするオプションです。たとえば、ダブリンのみをスキャンする場合は使用し、ダブリンとオハイオをスキャンする場合は、地域がコンマ区切り文字で区切られていることに注意してください(以前と同じように使用できます)。

-r
us-east-1
-f
-f eu-west-1
-f eu-west-1,us-east-1
-f 'eu-west-1,us-east-1'

スクリーンショット

  • 既定のコンソール レポートの最初のコマンド行のサンプル スクリーンショット:

    ./prowler

  • html 出力のサンプル スクリーンショット:

    -M html

    プラウラーhtml
  • Quicksight ダッシュボードのサンプルスクリーンショットについては、quicksight-security-dashboard.workshop.aws を参照してください。

    クイックサイト付きプラウラー
  • コードビルドでの junit-xml 出力のサンプルスクリーンショット:

    -M junit-xml

レポートを保存する

  1. 後で分析するためにレポートを保存する場合は、ネイティブにさまざまな方法があります(サポートされているテキスト、モノラル、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

    今という名前のprowlerディレクトリ内にファイルを作成します。他に何も指定する必要はなく、パイプもリダイレクトも指定する必要はありません。

    -M
    output
    prowler-output-AWSACCOUNTID-YYYYMMDDHHMMSS.format

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

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

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

    junit-reports

    ./prowler -M text,junit-xml

    使用する出力形式に関する注意:「テキスト」は色付きのデフォルトの形式であり、「モノラル」はデフォルトのようですがモノクロ、「csv」はカンマ区切り値、「json」プレーンな基本json(行間にコンマなし)および「json-asff」も、セキュリティハブに出荷できるAmazonセキュリティ検出形式のjsonです。

    -M
    -S

    レポートを S3 バケットに保存するには、カスタム出力バケットを定義するには S3 にアップロードする出力形式を定義します。

    -B
    -M

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

    引き受けたロールの認証情報ではなく、レポートをS3バケットに入れるための初期認証情報を使用したくない場合は、代わりに。使用する認証情報に、レポートがアップロードされる S3 パスの s3:PutObject アクセス許可があることを確認します。

    -D
    -B

    複数の形式を生成し、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 プロファイル定義に基づいて評価を実行するには、cislevel1 または cislevel2 withフラグを使用できます。

    -g

    ./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をインストールする

  • マック->
    brew install libpq
  • ウブンツ->
    sudo apt-get install postgresql-client 
  • RHEL/Centos ->
    sudo yum install postgresql10

監査 ID フィールド

Prowler は、データベースで行われた各監査を識別するオプションフィールドを追加できます。これを行うには、プラウラーコマンドにフラグ。

audit_id
-u audit_id

資格 情報

PostgreSQL 資格情報を Prowler に渡すには、次の 2 つのオプションがあります。

.pgpass ファイルを使用する

構成する ファイルを Prowler を起動するユーザーのルート フォルダーに格納します (pgpass ファイル ドキュメント)、行末に追加のフィールドを含め、次の形式を使用してテーブルに名前を付けます。

~/.pgpass
:
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拡張機能を有効にする必要があります。

uuid

CREATE EXTENSION IF NOT EXISTS "uuid-ossp";

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

CREATE TABLE  IF NOT EXISTS prowler_findings (
id uuid,
audit_id uuid ,
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,
account_details_email text,
account_details_name text,
account_details_arn text,
account_details_org text,
account_details_tags text,
prowler_start_time text
);
  • プラウラーの実行フラグ、例えば:
    -d
    ./prowler -M csv -d postgresql

    : このコマンドは、出力ファイルを作成し、設定された PostgreSQL DB に Prowler 出力を格納します。これは例ですが、フラグは必要ありません実行します。

    csv
    -d
    -M

出力形式

Prowlerは、次の出力形式をネイティブにサポートしています。

  • .CSV
  • ティッカー
  • JSON-ASFF
  • .HTML
  • JUNIT-XML

以下に、それぞれの構造を示します。

.CSV

プロフィール ACCOUNT_NUM 地域 TITLE_ID CHECK_RESULT ITEM_SCORED ITEM_LEVEL TITLE_TEXT CHECK_RESULT_EXTENDED CHECK_ASFF_COMPLIANCE_TYPE CHECK_SEVERITY CHECK_SERVICENAME CHECK_ASFF_RESOURCE_TYPE CHECK_ASFF_TYPE CHECK_RISK CHECK_REMEDIATION CHECK_DOC CHECK_CAF_EPIC CHECK_RESOURCE_ID PROWLER_START_TIME ACCOUNT_DETAILS_EMAIL ACCOUNT_DETAILS_NAME ACCOUNT_DETAILS_ARN ACCOUNT_DETAILS_ORG ACCOUNT_DETAILS_TAGS

ティッカー

{
  "Profile": "ENV",
  "Account Number": "1111111111111",
  "Control": "[check14] Ensure access keys are rotated every 90 days or less",
  "Message": "us-west-2: user has not rotated access key 2 in over 90 days",
  "Severity": "Medium",
  "Status": "FAIL",
  "Scored": "",
  "Level": "CIS Level 1",
  "Control ID": "1.4",
  "Region": "us-west-2",
  "Timestamp": "2022-05-18T10:33:48Z",
  "Compliance": "ens-op.acc.1.aws.iam.4 ens-op.acc.5.aws.iam.3",
  "Service": "iam",
  "CAF Epic": "IAM",
  "Risk": "Access keys consist of an access key ID and secret access key which are used to sign programmatic requests that you make to AWS. AWS users need their own access keys to make programmatic calls to AWS from the AWS Command Line Interface (AWS CLI)- Tools for Windows PowerShell- the AWS SDKs- or direct HTTP calls using the APIs for individual AWS services. It is recommended that all access keys be regularly rotated.",
  "Remediation": "Use the credential report to  ensure  access_key_X_last_rotated  is less than 90 days ago.",
  "Doc link": "https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_getting-report.html",
  "Resource ID": "terraform-user",
  "Account Email": "",
  "Account Name": "",
  "Account ARN": "",
  "Account Organization": "",
  "Account tags": ""
}

注: 各検出結果はオブジェクトです。

json

JSON-ASFF

{
  "SchemaVersion": "2018-10-08",
  "Id": "prowler-1.4-1111111111111-us-west-2-us-west-2_user_has_not_rotated_access_key_2_in_over_90_days",
  "ProductArn": "arn:aws:securityhub:us-west-2::product/prowler/prowler",
  "RecordState": "ACTIVE",
  "ProductFields": {
    "ProviderName": "Prowler",
    "ProviderVersion": "2.9.0-13April2022",
    "ProwlerResourceName": "user"
  },
  "GeneratorId": "prowler-check14",
  "AwsAccountId": "1111111111111",
  "Types": [
    "ens-op.acc.1.aws.iam.4 ens-op.acc.5.aws.iam.3"
  ],
  "FirstObservedAt": "2022-05-18T10:33:48Z",
  "UpdatedAt": "2022-05-18T10:33:48Z",
  "CreatedAt": "2022-05-18T10:33:48Z",
  "Severity": {
    "Label": "MEDIUM"
  },
  "Title": "iam.[check14] Ensure access keys are rotated every 90 days or less",
  "Description": "us-west-2: user has not rotated access key 2 in over 90 days",
  "Resources": [
    {
      "Type": "AwsIamUser",
      "Id": "user",
      "Partition": "aws",
      "Region": "us-west-2"
    }
  ],
  "Compliance": {
    "Status": "FAILED",
    "RelatedRequirements": [
      "ens-op.acc.1.aws.iam.4 ens-op.acc.5.aws.iam.3"
    ]
  }
}

注: 各検出結果はオブジェクトです。

json

高度な使用法

役割を引き受ける:

プラウラーは下の AWS CLI を使用するため、同じ認証方法を使用します。ただし、各ユースケースに応じて、IAMロール引き受け機能を使用して複数のアカウントに対してProwlerを実行する方法がいくつかあります。カスタムプロファイルを内部に設定するだけで、引き受ける役割に関するすべての必要な情報を使用して呼び出します。さらに、Prowlerはこれらの一時的な資格情報を使用して取得し、環境変数として設定し、その特定のアカウントに対して実行できます。複数のアカウントで引き受けるロールを CFN スタックまたはスタックセットとして簡単に作成するには、この CloudFormation テンプレートを見て適応させます。

~/.aws/config
./prowler -p your-custom-profile
-A 123456789012
-R RemoteRoleToAssume
aws sts assume-role

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

セッション期間に関する注1:デフォルトでは、1時間(3600秒)有効な資格情報を取得します。実行するチェックのマウントとインフラストラクチャのサイズによっては、Prowlerが完了するまでに1時間以上かかる場合があります。オプションを使用して最大12時間(43200秒)を許可します。1時間以上許可するには、その特定のロールの「CLI / APIセッションの最大期間」を変更する必要があります。

-T <seconds>

セッション期間に関する注2:ロールチェーンによって引き受けられるロールを使用している場合は、1時間のハード制限があるため、可能であればロールチェーンを使用しないことを検討してください。

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

./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 Organizations のすべてのアカウント、またはアカウントのリストのみに渡ります。

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 Organizations があり、ロール引き受け機能を使用して複数のアカウントをスキャンしている場合、Prowler はアカウント名、E メール、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はアカウントをスキャンします役割を引き受け、AWS Organizatiosn管理アカウントからアカウントの詳細を取得します同じ役割を引き受け、JSONとCSVでそれらの詳細を含む2つのレポートを作成します。

111111111111
ProwlerScanRole
222222222222
ProwlerScanRole

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

  "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 runs in GovCloud regions as well. To make sure it points to the right API endpoint use

-r
to either
us-gov-west-1
or
us-gov-east-1
. If not filter region is used it will look for resources in both GovCloud regions by default:

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

For Security Hub integration see below in Security Hub section.

Custom folder for custom checks

Flag

-x /my/own/checks
will include any check in that particular directory (files must start by check). To see how to write checks see Add Custom Checks section.

S3 URIs are also supported as custom folders for custom checks, e.g.

s3://bucket/prefix/checks
. Prowler will download the folder locally and run the checks as they are called with default execution,
-c
or
-g
.

Make sure that the used credentials have s3:GetObject permissions in the S3 path where the custom checks are located.

Show or log only FAILs

In order to remove noise and get only FAIL findings there is a

-q
flag that makes Prowler to show and log only FAILs. It can be combined with any other option. Will show WARNINGS when a resource is excluded, just to take into consideration.

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

Set the entropy limit for detect-secrets

Sets the entropy limit for high entropy base64 strings from environment variable

BASE64_LIMIT
. Value must be between 0.0 and 8.0, defaults is 4.5. Sets the entropy limit for high entropy hex strings from environment variable
HEX_LIMIT
. Value must be between 0.0 and 8.0, defaults is 3.0.

export BASE64_LIMIT=4.5
export HEX_LIMIT=3.0

Run Prowler using AWS CloudShell

An easy way to run Prowler to scan your account is using AWS CloudShell. Read more and learn how to do it here.

Security Hub integration

Since October 30th 2020 (version v2.3RC5), Prowler supports natively and as official integration sending findings to AWS Security Hub. This integration allows Prowler to import its findings to AWS Security Hub. With Security Hub, you now have a single place that aggregates, organizes, and prioritizes your security alerts, or findings, from multiple AWS services, such as Amazon GuardDuty, Amazon Inspector, Amazon Macie, AWS Identity and Access Management (IAM) Access Analyzer, and AWS Firewall Manager, as well as from AWS Partner solutions and from Prowler for free.

Before sending findings to Prowler, you need to perform next steps:

  1. Since Security Hub is a region based service, enable it in the region or regions you require. Use the AWS Management Console or using the AWS CLI with this command if you have enough permissions:
    • aws securityhub enable-security-hub --region <region>
      .
  2. Enable Prowler as partner integration integration. Use the AWS Management Console or using the AWS CLI with this command if you have enough permissions:
    • aws securityhub enable-import-findings-for-product --region <region> --product-arn arn:aws:securityhub:<region>::product/prowler/prowler
      (change region also inside the ARN).
    • Using the AWS Management Console: Screenshot 2020-10-29 at 10 26 02 PM
  3. As mentioned in section "Custom IAM Policy", to allow Prowler to import its findings to AWS Security Hub you need to add the policy below to the role or user running Prowler:

Once it is enabled, it is as simple as running the command below (for all regions):

./prowler -M json-asff -S

or for only one filtered region like eu-west-1:

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

Note 1: It is recommended to send only fails to Security Hub and that is possible adding

-q
to the command.

Note 2: Since Prowler perform checks to all regions by defaults you may need to filter by region when runing Security Hub integration, as shown in the example above. Remember to enable Security Hub in the region or regions you need by calling

aws securityhub enable-security-hub --region <region>
and run Prowler with the option
-f <region>
(if no region is used it will try to push findings in all regions hubs).

Note 3: to have updated findings in Security Hub you have to run Prowler periodically. Once a day or every certain amount of hours.

Once you run findings for first time you will be able to see Prowler findings in Findings section:

Screenshot 2020-10-29 at 10 29 05 PM

Security Hub in GovCloud regions

To use Prowler and Security Hub integration in GovCloud there is an additional requirement, usage of

-r
is needed to point the API queries to the right API endpoint. Here is a sample command that sends only failed findings to Security Hub in region
us-gov-west-1
:

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

Security Hub in China regions

To use Prowler and Security Hub integration in China regions there is an additional requirement, usage of

-r
is needed to point the API queries to the right API endpoint. Here is a sample command that sends only failed findings to Security Hub in region
cn-north-1
:

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

CodeBuild deployment

Either to run Prowler once or based on a schedule this template makes it pretty straight forward. This template will create a CodeBuild environment and run Prowler directly leaving all reports in a bucket and creating a report also inside CodeBuild basedon the JUnit output from Prowler. Scheduling can be cron based like

cron(0 22 * * ? *)
or rate based like
rate(5 hours)
since CloudWatch Event rules (or Eventbridge) is used here.

The Cloud Formation template that helps you to do that is here.

This is a simple solution to monitor one account. For multiples accounts see Multi Account and Continuous Monitoring.

Allowlist or remove a fail from resources

Sometimes you may find resources that are intentionally configured in a certain way that may be a bad practice but it is all right with it, for example an S3 bucket open to the internet hosting a web site, or a security group with an open port needed in your use case. Now you can use

-w allowlist_sample.txt
and add your resources as
checkID:resourcename
as in this command:

./prowler -w allowlist_sample.txt

S3 URIs are also supported as allowlist file, e.g.

s3://bucket/prefix/allowlist_sample.txt

Make sure that the used credentials have s3:GetObject permissions in the S3 path where the allowlist file is located.

DynamoDB table ARNs are also supported as allowlist file, e.g.

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

Make sure that the table has

account_id
as partition key and
rule
as sort key, and that the used credentials have
dynamodb:PartiQLSelect
permissions in the table.

image

The field

account_id
can contain either an account ID or an
*
(which applies to all the accounts that use this table as a whitelist). As in the traditional allowlist file, the
rule
field must contain
checkID:resourcename
pattern.

image

Allowlist option works along with other options and adds a

WARNING
instead of
INFO
,
PASS
or
FAIL
to any output format except for
json-asff
.

Inventory

With Prowler you can get an inventory of your AWS resources. To do so, run

./prowler -i
to see what AWS resources you have deployed in your AWS account. This feature lists almost all resources in all regions based on this API call. Note that it does not cover 100% of resource types.

The inventory will be stored in an output

csv
file by default, under common Prowler
output
folder, with the following format:
prowler-inventory-${ACCOUNT_NUM}-${OUTPUT_DATE}.csv

How to fix every FAIL

Check your report and fix the issues following all specific guidelines per check in https://d0.awsstatic.com/whitepapers/compliance/AWS_CIS_Foundations_Benchmark.pdf

Troubleshooting

STS expired token

If you are using an STS token for AWS-CLI and your session is expired you probably get this error:

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

To fix it, please renew your token by authenticating again to the AWS API, see next section below if you use MFA.

Run Prowler with MFA protected credentials

To run Prowler using a profile that requires MFA you just need to get the session token before hand. Just make sure you use this command:

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

Once you get your token you can export it as environment variable:

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

With this group of checks, Prowler looks if each service with logging or audit capabilities has them enabled to ensure all needed evidences are recorded and collected for an eventual digital forensic investigation in case of incident. List of checks part of this group (you can also see all groups with

./prowler -L
). The list of checks can be seen in the group file at:

groups/group8_forensics

The

forensics-ready
group of checks uses existing and extra checks. To get a forensics readiness report, run this command:

./prowler -g forensics-ready

GDPR Checks

With this group of checks, Prowler shows result of checks related to GDPR, more information here. The list of checks can be seen in the group file at:

groups/group9_gdpr

The

gdpr
group of checks uses existing and extra checks. To get a GDPR report, run this command:

./prowler -g gdpr

AWS FTR Checks

With this group of checks, Prowler shows result of checks related to the AWS Foundational Technical Review, more information here. The list of checks can be seen in the group file at:

groups/group25_ftr

The

ftr
group of checks uses existing and extra checks. To get a AWS FTR report, run this command:

./prowler -g ftr

HIPAA Checks

With this group of checks, Prowler shows results of controls related to the "Security Rule" of the Health Insurance Portability and Accountability Act aka HIPAA as defined in 45 CFR Subpart C - Security Standards for the Protection of Electronic Protected Health Information within PART 160 - GENERAL ADMINISTRATIVE REQUIREMENTS and Subpart A and Subpart C of PART 164 - SECURITY AND PRIVACY

More information on the original PR is here.

Note on Business Associate Addendum's (BAA)

Under the HIPAA regulations, cloud service providers (CSPs) such as AWS are considered business associates. The Business Associate Addendum (BAA) is an AWS contract that is required under HIPAA rules to ensure that AWS appropriately safeguards protected health information (PHI). The BAA also serves to clarify and limit, as appropriate, the permissible uses and disclosures of PHI by AWS, based on the relationship between AWS and our customers, and the activities or services being performed by AWS. Customers may use any AWS service in an account designated as a HIPAA account, but they should only process, store, and transmit protected health information (PHI) in the HIPAA-eligible services defined in the Business Associate Addendum (BAA). For the latest list of HIPAA-eligible AWS services, see HIPAA Eligible Services Reference.

More information on AWS & HIPAA can be found here

The list of checks showed by this group is as follows, they will be mostly relevant for Subsections 164.306 Security standards: General rules and 164.312 Technical safeguards. Prowler is only able to make checks in the spirit of the technical requirements outlined in these Subsections, and cannot cover all procedural controls required. They be found in the group file at:

groups/group10_hipaa

The

hipaa
group of checks uses existing and extra checks. To get a HIPAA report, run this command:

./prowler -g hipaa

Trust Boundaries Checks

Definition and Terms

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. single-account-environment

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. multi-account-environment

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[]]'

In order to add any new check feel free to create a new extra check in the extras group or other group. To do so, you will need to follow these steps:

  1. Follow structure in file
    checks/check_sample
  2. Name your check with a number part of an existing group or a new one
  3. Save changes and run it as
    ./prowler -c extraNN
  4. Send me a pull request! :)

Add Custom Groups

  1. Follow structure in file
    groups/groupN_sample
  2. Name your group with a non existing number
  3. Save changes and run it as
    ./prowler -g extraNN
  4. Send me a pull request! :)
  • You can also create a group with only the checks that you want to perform in your company, for instance a group named
    group9_mycompany
    with only the list of checks that you care or your particular compliance applies.

Third Party Integrations

Telegram

Javier Pecete has done an awesome job integrating Prowler with Telegram, you have more details here https://github.com/i4specete/ServerTelegramBot

Cloud Security Suite

The guys of SecurityFTW have added Prowler in their Cloud Security Suite along with other cool security tools https://github.com/SecurityFTW/cs-suite

License

Prowler is licensed as Apache License 2.0 as specified in each file. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0

I'm not related anyhow with CIS organization, I just write and maintain Prowler to help companies over the world to make their cloud infrastructure more secure.

If you want to contact me visit https://blyx.com/contact or follow me on Twitter https://twitter.com/prowler-cloud my DMs are open.