Scout Suiteを用いた、パブリッククラウドの監査方法

Scout Suiteとは
Scout Suiteは、クラウド環境のセキュリティポスチャ評価を可能にするオープンソースのマルチクラウドセキュリティ監査ツールです
近年、パブリッククラウド上での設定ミスや、パブリッククラウドキーの流出によって、パブリッククラウド上の資産が脅かされたり、多大なる請求が行われたりしております。
これを未然に防ぐために、パブリッククラウドのアカウントを自動的に監査し、セキュリティリスクを洗い出してまとめてくれるのがScout Suiteになります。
ちなみに見慣れない言葉として、セキュリティポスチャという言葉が上記にありますが、ポスチャ(Posture)は「姿勢・態度」という意味があり、セキュリティポスチャは言い換えると、セキュリティ体制という意味合いになるかと思います
セキュリティポスチャについてもう少し詳しく知りたい方は以下のページをご参照ください
クラウドセキュリティポスチャ管理とは一体何なのか
英辞郎:Posture
また、Scout Suiteの出力結果はHTMLで表示されますので、レポートとして利用することも可能です。
この記事では、導入方法の解説と、AWSアカウントへのスキャン、実際に企業などで運用を行う際の案を記載したいと思います。
前提環境
今回はWindows10上のWindows Subsystem for Linux(WSL)を用いて、Ubuntu20.04 LTSをMS Storeからインストールし、自己AWSアカウントへ上に監査を行いました。
またAWSアカウントの作成方法や、AWS上での各種インスタンスなどの作成方法、加えてPythonやgitコマンドの利用等についても解説いたしません。
必要な環境は以下になります。
- Python3.6以上
- pip3
- git(git cloneで利用)
- AWS CLI(この説明ではAWSに対してチェックを行うため)
上記で用いているAWS CLIとは以下のようなものになります。
AWS コマンドラインインターフェース (CLI) は、AWS サービスを管理するための統合ツールです。ダウンロードおよび設定用の単一のツールのみを使用して、コマンドラインから AWS の複数のサービスを制御し、スクリプトを使用してこれらを自動化することができます
導入準備
導入準備として、監査対象のAWSアカウントの各種リソースへのアクセス権限を持つIAMユーザを作成します
今回はAWS CLIのprofileをsaiというものに設定してコマンドを実行しております。
aws iam create-user --user-name scout --tags Key=Name,Value=scout
作成に成功すると、以下のようなレスポンスがあります。
{ "User": { "Path": "/", "UserName": "scout", "UserId": "xxxxxxxxxxx", "Arn": "arn:aws:iam::acountidxxxxx:user/scout", "CreateDate": "2021-05-07T02:59:03+00:00", "Tags": [ { "Key": "Name", "Value": "scout" } ] } }
レスポンスがうまく帰ってこない場合はAWS CLI の設定を見直してください。
続いて今作成したアカウントに対して、すでにAWS側で用意されているSecurityAuditというポリシーをアタッチします。
aws iam attach-user-policy --user-name scout --policy-arn arn:aws:iam::aws:policy/SecurityAudit --profile sai
こちらのコマンドは正常に実行できると、何もレスポンスはありません。
アタッチできたことを確認するために、以下のコマンドを実行します。
aws iam list-attached-user-policies --user-name scout --profile sai
成功していればSecurityAuditがアタッチされていることが確認できます。
{ "AttachedPolicies": [ { "PolicyName": "SecurityAudit", "PolicyArn": "arn:aws:iam::aws:policy/SecurityAudit" } ] }
次に作成したユーザで監査を行うためにAWS CLIでアクセス可能なアクセスキーを作成します。
aws iam create-access-key --user-name scout --profile sai
{ "AccessKey": { "UserName": "scout", "AccessKeyId": "AKIAWYETICYSINJ76D5Z", "Status": "Active", "SecretAccessKey": "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", "CreateDate": "2021-05-07T03:49:40+00:00" } }
次に帰ってきたクレデンシャル情報でAWS CLIに再度プロファイルを作成します。
aws configure --profile scout aws sts get-caller-identity --profile scout
正常に動作すれば、レスポンスが帰ってきます。
加えて、AWS側に今回あえて事故を想定して、セキュリティ的に問題があるセキュリティグループを作成しておきます。
作成したセキュリティグループの情報は以下で、Mysqlのポートを任意の送信元より許可しております。
{ "SecurityGroups": [ { "Description": "scout test security group", "GroupName": "scout-test-security-group", "IpPermissions": [ { "FromPort": 3306, "IpProtocol": "tcp", "IpRanges": [ { "CidrIp": "0.0.0.0/0" } ], "Ipv6Ranges": [], "PrefixListIds": [], "ToPort": 3306, "UserIdGroupPairs": [] } ], "OwnerId": "464165279268", "GroupId": "sg-073c4900b12d95171", "IpPermissionsEgress": [ { "IpProtocol": "-1", "IpRanges": [ { "CidrIp": "0.0.0.0/0" } ], "Ipv6Ranges": [], "PrefixListIds": [], "UserIdGroupPairs": [] } ], "VpcId": "vpc-8855beee" } ]
Scout Suiteの導入
導入自体はすごく簡単です。
大まかに分けると、
1. Githubからリポジトリをclone
2. 依存関係のコンポーネントをインストール
3. スキャンの実行
になります。
まずgithubから公式リポジトリのcloneを行います。
これで導入は完了です。
git clone https://github.com/nccgroup/ScoutSuite.git
cloneが完了したら、リポジトリに移動し、依存関係のパッケージインストールを行います。
cd ScoutSuite pip3 install -r requirements.txt
環境への実行
導入が完了したら、自分のAWS環境へのスキャンを行います。
プロファイルの設定をしている場合は-p profile-name
で実行可能です。
python3 scout.py aws -p scout
ぞろぞろとスキャン情報が表示されますので、スキャンが終わるのを待ちます。
スキャン結果は以下のPathに出力されているので、自己環境に置き換えて確認してみてください。
ScoutSuite/scoutsuite-report/aws-live.html
スキャン結果のHTMLファイルを移動させずに、そのままブラウザ等で表示させると、以下のような形で結果を見ることができます。

ここでEC2の部分などに赤色の!マークがでていて、これが危険であることを表しております。
先程追加したEC2のセキュリティグループを確認するためにEC2の部分をクリックしてみます。
すると、Mysqlのポートが空いている旨が記載されております。

開いてみると、詳細がわかります。

このようにして、セキュリティ的に問題がある部分が検出されることがわかりました。
実際の業務で利用した場合、このあとに脆弱なセキュリティグループはなぜ設定されているのか、削除対応を取るのか、制限を行うのかなどの考慮が出てくるかと思います。
このような対応フローについては、セキュリティの観点やサービス影響を踏まえた上で個別に判断していくことになります。
終わりに
ここで紹介致しました監査項目は一部でしたが、実際のPDFの画像を見ていただければわかる通り、他の監査項目も多数ございます。
オープンソースであり、誰でも無料で利用できるため、パブリッククラウドの監査を容易に行うことができ、セキュリティリスクをへらすことができるかと思います