yamada_yoshiki Posted by

おはようございます!こんにちは!こんばんは!おやすみなさい!
山田です。

前回のpart5【勉強会の内容編(Level5)】に続きまして、今回はLevel6の問題を解説します。

↓参加した勉強会のグループになります↓
AWSハッキング(1月18日)&大和セキュリティ新年会

問題

いよいよ最後の問題です!
セキュリティ監査ポリシーが付与されたユーザーのアクセスキーを取得した』とのことです。

セキュリティ監査とは

セキュリティホールの洗い出し、セキュリティ問題につながる脆弱な設定、または攻撃者にとって意味があるデータの収集が可能かどうかを技術的な側面から監査すること

ポリシーとは

AWSIAMサービスでは、各AWSサービスへの操作をアクセス制御するためにポリシーという概念があります。

ポリシー『誰が』『どのAWSサービスの』『どのリソースに対して』『どんな操作を』『許可する(許可しない)』といったことをJSON形式で記述します。

記述したポリシーユーザー(IAMユーザー、IAMグループ、IAMロール)や、AWSリソースに関連づけることでアクセス制御を実現しています。

例えば、JSONAWS側で用意しているAmazonS3ReadOnlyAccessという名前のポリシーS3のリソースに対する参照操作を許可しています。
このポリシーEC2インスタンスに関連づけると(正確にはIAMロールを経由して関連づける)、そのEC2インスタンス上のプログラム(AWS CLI、AWS SDKを利用したプログラム)から、S3リソースに対する参照操作(Get、List)可能となります。

セキュリティ監査ポリシーとは

セキュリティ要件の遵守についてアカウントをモニタリングしたり、潜在的なセキュリティ侵害悪意のある行為を調査するためのログおよびイベントアクセスする許可を付与します。

ヒント

アカウント情報を調査


今までと同様にクレデンシャルを設定して、aws sts get-calleridentityコマンドでアカウント情報を調査ます。
aws sts get-caller-identity –profile 設定したプロファイル名

アタッチされているIAMポリシーを見てみる

以下コマンドを利用し、先ほど取得したユーザ名を指定するとアタッチされているポリシーが判明します。
aws iam list-attached-user-policies –profile 設定したプロファイル名 –user-name Level6

SecurityAudit(セキュリティ監査)と思われるポリシー以外にlist_apigatewasysというポリシーアタッチされていることがわかります。

list_apigatewaysについて調べてみる

list_apigatewaysは独自に作成したポリシーです。
get-policyコマンドを利用して、先ほど取得したARNを指定し、さらにポリシーを調査してみます。

取得したDefaultVersionIdキーの値から管理ポリシーバージョンIDが分かります。

ポリシーの詳細を調査


get-policy-versionコマンドを利用して、バージョンIDARNを指定し、list_apigatewaysポリシーのより詳細情報を取得してみます。

ここまでの調査結果から分かること

get-policy-versionコマンドの結果で、このAWSアカウント上AmazonApiGatewayサービスREST および WebSocket APIを簡単に利用できるマネージドサービス)を使用していることが推測されます。

ポリシーの内容からは、ユーザー(Level6)は以下のARNのリソースに対してAPI GatewayGETアクションを許可されていることが分かります。
arn:aws:apigateway:us-west-2::/restapis/*

もう一つのMySecurityAuditポリシーの内容も同様の手法で詳細情報を確認することができます。
その結果、 API Gatewayと非常に親和性の高いあるサービスを利用している可能性が推測されます。

MySecurityAuditポリシーを調査すると


MySecurityAuditポリシーアタッチされたユーザーには全てのリソースに対してLambda関数におけるListFunctions、GetAccountSettings、GetPolicyの権限が与えられていることが分かります。
aws iam get-policy-version –policy-arn arn:aws:iam::975426262029:policy/MySecurityAudit –version-id v1 –profile 認証情報のプロファイル名

AWS Lambda

AWSに関するイベントをトリガとして、事前に設定しておいた処理を自動的に実行させる環境を提供してくれるサービス

実行したいプログラム(Node.js, Java, C#, Python,Ruby, Go, PowerShell をサポート)をLambda関数として定義します。
近年ではAWSにおけるいわゆるサーバレスアーキテクチャー(サーバーを必要としないアプリケーション実行環
境)に利用されています。

Lambda関数使っているのでは?

APIGatewayを使用する場合はLambdaを連携させるパターンは多いです。
もしかしたらLambda関数を利用してAPIを叩いたりしているのでないだろうかと推測されます。
ということで次のアプローチはLambda関数関連について調査してみましょう!

Lambda関数の一覧を取得

list-functionsコマンドを利用してLambda関数の一覧を取得してみます。
aws lambda list-functions –profile 設定したプロファイル名
Level6というLambda関数が存在することが分かります。

Lambda関数のポリシーを確認


関数名level6を使用してポリシー情報を取得してみます。
aws lambda get-policy –function-name Level6 –profile 設定したプロファイル名

ポリシーを見るとAPI GatewayからLambda関数が呼び出されていることが推測されます。

該当のAPI ARNが取得でき、rest-api-idが『s33ppypa75』であることが分かります。

このREST APIを叩くにはどうすれば?


このAPIは非常に怪しい。

どうすればアクセスすることができるのか?
後はステージ名がわかればAPIを叩けるかもしれない

ステージ名を取得する

get-stagesコマンドを用いて、API IDを指定し、調査するとステージ名が判明します。
aws apigateway get-stages –rest-api-id “s33ppypa75“ –profile 設定したプロファイル名
ステージ名は『Prod』です。

これで最後のパーツがそろいました!

回答

得られた情報を元に判明したURLにアクセス

得られた情報を元にするとAPIのURLが以下だと分かります。
https://s33ppypa75.execute-api.us-west-2.amazonaws.com/Prod/level6
アクセスしに行くとゴールURLが表示されます。

この問題から学べること

なんらかの方法にてアクセスキーを入手されてしまった場合に、設定されているIAMポリシーなどによっては、様々な環境についての情報を収集され、セキュリティ不備などを攻撃されてしまう可能性があります。

最後に

今回はflaws.cloudLevel6の内容をまとめました。

これで勉強会で学んだことは以上になります。

勉強会のおかげでAWSについての基礎知識とセキュリティに関する知識が学ぶことができました。

今後はWebページを作るまでを目標にAWSを色々触ってみようと思います!!