最近、セキュリティ関係のセミナーに参加して、「Scout Suite」というクラウド環境のセキュリティ監査ツールの存在を知り、個人のAWS環境にわざと緩めの設定を追加してチェックしてみたので、その際の手順を残しておきます。
Scout Suiteとは?
GitHubの「Description」にて「Scout Suite is an open source multi-cloud security-auditing tool」と説明されているように、AWS、Azure、GCPなどの複数のクラウド事業者(GitHubの「Cloud Provider Support」を参照)に対応しているセキュリティ監査ツールです。
チェックを行いたいクラウド事業者の環境に対してScout Suiteのコマンドを実行すると、所定のディレクトリに「この設定はヤバいんじゃないの?」といった内容のHTML形式のレポートファイルを出力してくれます。
必要なパッケージ
- AWS CLI(今回はAWS環境に対してチェックを行うため)
- python3(3.6以上)
- pip3(
pip3 install --upgrade pip
しておくことがオススメ) - Git(Scout Suiteのインストールを
git clone
で行う場合)
事前準備
今回は監査対象がAWSのため、AWSの各リソースの読み込み権限を持つIAMユーザーを作成する必要があります。
AWSはまさにこういった用途のための「SecurityAudit」というIAMポリシーが準備されているので、この権限を付与したユーザーを作ります。
そのものズバリな「SecurityAudit」というユーザー名にしました。今回はAWS CLIやAPI呼び出しのためにしか利用しないので、「プログラムによるアクセス」にのみチェックしておきます。
「既存のポリシーを直接アタッチ」を選択して、「SecurityAudit」にチェックします。
「Name」というキー名に「SecurityAudit」を設定します。(このステップはスキップしてもOKです)
上記手順で作成したIAMユーザーの認証情報を aws configure
で設定するか export
で環境変数にセットします。
aws configure
で設定する場合は常時利用しているデフォルト設定を上書きしないように引数に --profile プロファイル名
を指定するのがオススメです。
今回は既存の「~/.aws/config」、「~/.aws/credentials」を更新せずに一時的な利用としたかったので、 export
コマンドで対応しました。
環境変数をセットします。
$ export AWS_ACCESS_KEY_ID=XXXXXXXXXXXXXXXXXXXX
$ export AWS_SECRET_ACCESS_KEY=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
$ export AWS_DEFAULT_REGION=ap-northeast-1
意図したIAMユーザーで接続できているか確認します。
$ aws sts get-caller-identity
{
"UserId": "XXXXXXXXXXXXXXXXXXXXX",
"Account": "999999999999",
"Arn": "arn:aws:iam::999999999999:user/SecurityAudit"
}
Scout Suiteを実行するにあたり「ゆるゆるのセキュリティグループ」も準備しておきます。
今回は全TCPポートで全IPを許可する大変ゆるやかなインバウンドルールを設定した「high_risk」というセキュリティグループを作成しました。
Scout Suiteのインストール
準備が整ったのでScout Suiteのインストールを行います。
インストール手順についてはGitHubのwikiに pip
でバイナリをインストールする方法と git clone
で持ってくる方法が説明されていますが、今回は git clone
でやってみます。
GitHubからcloneしてきます。
$ git clone https://github.com/nccgroup/ScoutSuite.git
ScoutSuiteディレクトリに移動します。
$ cd ScoutSuite
ScoutSuiteの実行に必要な依存パッケージをインストールします。
$ pip3 install -r requirements.txt
macOS環境で以下のようなエラーが表示される場合
$ pip3 install -r requirements.txt
・
・
・
Could not install packages due to an EnvironmentError: [Errno 13] Permission denied: '/Library/Python/3.7'
Consider using the `--user` option or check the permissions.
表示されているメッセージの通りに「--user」を付与して実行します。
「Successfully installed」と表示されたら問題ないはずです。
$ pip3 install -r requirements.txt --user
Collecting python-dateutil<2.8.1,>=2.1 (from -r requirements.txt (line 2))
Using cached https://files.pythonhosted.org/packages/41/17/c62faccbfbd163c7f57f3844689e3a78bae1f403648a6afb1d0866d87fbb/python_dateutil-2.8.0-py2.py3-none-any.whl
Collecting netaddr>=0.7.11 (from -r requirements.txt (line 3))
Using cached
・
・
・
Successfully installed PyJWT-1.7.1 adal-1.2.4 aliyun-python-sdk-actiontrail-2.0.3 aliyun-python-sdk-core-2.13.32 aliyun-python-sdk-ecs-4.23.10 aliyun-python-sdk-kms-2.14.0 aliyun-python-sdk-ocs-0.0.4 aliyun-python-sdk-ram-3.2.0 aliyun-python-sdk-rds-2.5.10 aliyun-python-sdk-sts-3.0.2 aliyun-python-sdk-vpc-3.0.12 applicationinsights-0.11.9 argcomplete-1.12.2 asyncio-throttle-0.1.1 azure-cli-core-2.12.0 azure-cli-telemetry-1.0.6 azure-common-1.1.26 azure-core-1.13.0b1 azure-graphrbac-0.61.1 azure-mgmt-authorization-0.60.0 azure-mgmt-compute-5.0.0 azure-mgmt-core-1.2.0 azure-mgmt-keyvault-1.1.0 azure-mgmt-monitor-0.5.2 azure-mgmt-network-2.5.1 azure-mgmt-nspkg-3.0.2 azure-mgmt-redis-6.0.0 azure-mgmt-resource-10.2.0 azure-mgmt-security-0.4.1 azure-mgmt-sql-0.11.0 azure-mgmt-storage-7.1.0 azure-mgmt-web-0.47.0 azure-nspkg-3.0.2 bcrypt-3.2.0 boto3-1.17.38 botocore-1.20.38 cachetools-4.2.1 certifi-2020.12.5 cffi-1.14.5 chardet-4.0.0 cheroot-8.5.2 cherrypy-18.6.0 cherrypy-cors-1.6 colorama-0.4.4 coloredlogs-10.0 configparser-4.0.2 crcmod-1.7 cryptography-3.4.7 google-api-core-1.26.2 google-api-python-client-2.0.2 google-auth-1.28.0 google-auth-httplib2-0.1.0 google-cloud-container-2.4.0 google-cloud-core-1.6.0 google-cloud-iam-2.1.0 google-cloud-kms-1.3.0 google-cloud-logging-2.3.1 google-cloud-monitoring-1.1.0 google-cloud-resource-manager-0.30.3 google-cloud-storage-1.37.0 google-crc32c-1.1.2 google-resumable-media-1.2.0 googleapis-common-protos-1.53.0 grpc-google-iam-v1-0.12.3 grpcio-1.36.1 httpagentparser-1.9.1 httplib2-0.19.0 httplib2shim-0.0.3 humanfriendly-9.1 idna-2.10 importlib-metadata-3.7.3 isodate-0.6.0 jaraco.classes-3.2.1 jaraco.collections-3.2.0 jaraco.functools-3.2.1 jaraco.text-3.5.0 jmespath-0.10.0 knack-0.7.2 libcst-0.3.17 more-itertools-8.7.0 msal-1.0.0 msal-extensions-0.1.3 msrest-0.6.21 msrestazure-0.6.4 mypy-extensions-0.4.3 netaddr-0.8.0 oauth2client-4.1.3 oauthlib-3.1.0 oci-2.34.0 oss2-2.14.0 packaging-20.9 paramiko-2.7.2 pkginfo-1.7.0 policyuniverse-1.3.3.20210223 portalocker-1.7.1 portend-2.7.1 proto-plus-1.18.1 protobuf-3.15.6 pyasn1-0.4.8 pyasn1-modules-0.2.8 pycparser-2.20 pycryptodome-3.10.1 pygments-2.8.1 pynacl-1.4.0 pyopenssl-20.0.1 pyparsing-2.4.7 python-dateutil-2.8.0 pytz-2021.1 pyyaml-5.4.1 requests-2.25.1 requests-oauthlib-1.3.0 rsa-4.7.2 s3transfer-0.3.6 sqlitedict-1.7.0 tabulate-0.8.9 tempora-4.0.1 typing-extensions-3.7.4.3 typing-inspect-0.6.0 uritemplate-3.0.1 urllib3-1.26.4 zc.lockfile-2.0 zipp-3.4.1
macOS環境に限り、GitHubに実行時のヒントが書いてあるので、指示通りに以下のコマンドを実行しておきます。
このようにulimitで一度に開くファイル数を制限しておかないと、認証情報は正しいはずなのに ERROR ec2.py L134: Failed to get snapshots: Could not connect to the endpoint URL: "https://ec2.eu-west-3.amazonaws.com/"
といった謎のエラーに悩まされることになります。
$ ulimit -Sn 1000
Scout Suiteを実行
すべての準備が整ったので、いよいよScout Suiteの実行です。
IAMの認証情報を aws configure
で設定した場合、もしくは、 export
で環境変数にセットした場合は python3 scout.py aws
でOK。
aws configure --profile プロファイル名
で個別にプロファイルを作成した場合は python3 scout.py aws -p プロファイル名
もしくは python3 scout.py aws --profile プロファイル名
で実行可能です。
実行後、しばらくすると「scoutsuite-report」ディレクトリ配下( --report-dir ディレクトリ名
で変更可能)にレポートファイルが作成され、ブラウザが自動的に起動してレポートが表示されます。
$ python3 scout.py aws
2021-03-27 21:43:22 akase244 scout[2932] INFO Launching Scout
2021-03-27 21:43:22 akase244 scout[2932] INFO Authenticating to cloud provider
2021-03-27 21:43:26 akase244 scout[2932] INFO Gathering data from APIs
2021-03-27 21:43:26 akase244 scout[2932] INFO Fetching resources for the ACM service
2021-03-27 21:43:26 akase244 scout[2932] INFO Fetching resources for the Lambda service
・
・
・
2021-03-27 21:43:46 akase244 scout[2932] INFO Fetching resources for the VPC service
2021-03-27 21:43:46 akase244 scout[2932] INFO Fetching resources for the Secrets Manager service
2021-03-27 21:45:26 akase244 scout[2932] INFO Running pre-processing engine
2021-03-27 21:45:26 akase244 scout[2932] INFO Running rule engine
2021-03-27 21:45:28 akase244 scout[2932] INFO Applying display filters
2021-03-27 21:45:28 akase244 scout[2932] INFO Running post-processing engine
2021-03-27 21:45:28 akase244 scout[2932] INFO Saving data to scoutsuite-report/scoutsuite-results/scoutsuite_results_aws-999999999999.js
2021-03-27 21:45:28 akase244 scout[2932] INFO Saving data to scoutsuite-report/scoutsuite-results/scoutsuite_exceptions_aws-999999999999.js
2021-03-27 21:45:28 akase244 scout[2932] INFO Creating scoutsuite-report/aws-999999999999.html
2021-03-27 21:45:28 akase244 scout[2932] INFO Opening the HTML report
いくつか赤く表示されているリソースがあって非常に不穏ですが。。。
今回ゆるゆるに設定したセキュリティグループ「high_risk」についてのレポートを見てみると、「Opens All Ports to All」としてしっかり警告されていました。
まとめ
今回は意図的にゆるゆるに設定したセキュリティグループを準備してScout Suiteを実行したわけですが、実は未使用のキーペアやIAM、セキュリティグループなど、以前作ったんだけど使ってないリソースを放置してることに気づけました。。。
こういった不用心なリソースは攻撃者に対して手招きをしているようなものです。クラウド環境は非常に便利ではありますが、デフォルト設定だったり、あまり理解せずに利用していると非常に危険な状態をインターネットに公開していることになります。
Scout Suiteをはじめ、他にも便利なセキュリティ監査ツールはたくさんあるので、こういったツールを活用しながら常日頃からセキュリティについては気をつけていきたいですね。