
Tencent CloudとAWS向けに、異常検知、ブラックリストルール、ベースライン分析を使用してクラウドプラットフォームのログを定期的に監査し、AK/SK認証情報の不正使用を検出する自動化されたクラウドセキュリティ監査ツール。
cloud-audit(クラウド監査アシスタント)は、パブリッククラウドベンダーのAK/SK漏洩が悪用されることを検出するツールです。定期的にクラウドプラットフォームのAPIを呼び出して監査ログを取得し、異常な動作/ブラックパターン/ベースラインに基づいて不正侵入の疑いを発見します。
現在はTencent CloudとAWSのみサポートしています。
第一歩:コマンドを実行して依存関係をインストール
cd /opt/ && git clone https://github.com/al0ne/cloud-audit
cd cloud-audit && pip3 install -r requirements.txt
第二歩:.env設定ファイルを作成して修正
cp .env.example .env
各自の実際の設定に応じて.envファイルに入力します
# 腾讯云のAK/SK情報。APIを呼び出してログを取得するためにAK/SKが必要です。
TencentAccessKey="xxx"
TencentSecretKey="xxx"
# 腾讯云で監視するAK/SKのリスト
AccesskeyList="xxx,xxx,xxx"
# AWSのAK/SK情報
AWS_ACCESS_KEY_ID="xxx"
AWS_SECRET_ACCESS_KEY="xxx"
# Discord通知情報
discord_webhook_url=""
# 企業微信ロボット通知
weixin_webhook_url=""
第三歩:プログラムの重要な設定
# 信頼済みネットワークセグメント。非信頼ネットワークセグメントからの機密操作は直接アラートを発します。
while_cidr = ["192.168.0.0/16", "172.16.0.0/12", "10.0.0.0/8"]
# AWSで注目するリージョン。このリージョン以外のイベントはクエリされません。
aws_region = [
"us-east-1",
"us-east-2",
"ap-northeast-1",
"ap-southeast-1"
]
実行
python3 cloud-audit.py
プログラムは15分ごとに検索結果を実行します。
AWSのログはAWS CloudTrailサービスを使用して読み取り・監査しているため、アカウントのIAM権限にAWSCloudTrail_ReadOnlyAccessが付与されていることを必ず確認してください。これがないと、以下のようなエラーメッセージが表示されます。
botocore.exceptions.ClientError: An error occurred (AccessDeniedException) when calling the LookupEvents operation: User: arn:aws:iam::xxxxx:user/test is not authorized to perform: cloudtrail:LookupEvents because no identity-based policy allows the cloudtrail:LookupEvents action
AWS IAMコンソールにアクセスし、ユーザー→権限の項目で権限を追加してください。
クラウドプラットフォーム向けの悪用ツールを使用する場合、そのようなツールの典型的な動作には、全リージョンのRDSインスタンスの有無をスキャンしたり、全リージョンのECSインスタンスやコンテナをスキャンしたり、サブアカウントを作成/削除したり、コマンドを実行したりすることが含まれます。これらの動作自体が比較的機密性の高い操作であるため、各クラウドプラットフォームのログインターフェースを通じてこれらの動作を取得します。
もう一つの方法は、信頼できないネットワークセグメントからの機密操作を検出するものです。通常はIDC内部ネットワークまたはIDC出口IPから呼び出されますが、企業の信頼できるネットワークセグメント以外からAK/SK呼び出しが発生し、かつそれが高リスク操作である場合は直接アラートを発します。
一般的な機密性の高い主要操作の例:
Tencent CloudとAWSのAPI呼び出しにおける最大の違いは、Tencent CloudではAPIを通じて特定のAK IDの詳細な動作を照会できるのに対し、AWSではプラットフォーム上で検索するしかなく、AK/SKを使って特定のAK IDの最近の実行情報を照会できない点です。
そのため、Tencent CloudのAK/SK悪用を検出するには、監視対象のオンライン業務で使用されているAK IDのリストを入力し、定期的に特定のAK IDが実行した動作を確認する必要があります。
AWSではリージョンと動作に基づいてログを取得するしかなく、AK/SKを使ってCloudTrailインターフェースを呼び出し、特定のリージョンの特定の動作にログがあるかどうかを確認します。
そのため、AWSでは主にベースラインに基づいて判断します。
def DescribeInstances(CloudTrailEvent: dict):
"""
AK/SKを使用してec2情報をリストする動作を検出
:param CloudTrailEvent:
:return: None
"""
accessKeyId = CloudTrailEvent.get('userIdentity').get('accessKeyId')
arn = CloudTrailEvent.get('userIdentity').get('arn')
eventTime = utc_to_china_tz(CloudTrailEvent.get('eventTime'))
eventName = CloudTrailEvent.get('eventName')
awsRegion = CloudTrailEvent.get('awsRegion')
sourceIPAddress = CloudTrailEvent.get('sourceIPAddress')
userAgent = CloudTrailEvent.get('userAgent')
sip_verify = False
for cidr in while_cidr:
if ipaddress.ip_address(sourceIPAddress) in ipaddress.ip_network(cidr):
sip_verify = True
if not sip_verify and 'aws-internal' not in userAgent:
message = f"{text_title}\n時間:{eventTime}\nアカウントID:{arn}\nリージョン:{awsRegion}\nAccessKey ID:{accessKeyId}\n"
f"実行アクション:{eventName}\nIPアドレス:{sourceIPAddress}\nUser-Agent:{userAgent}\n\n"
f"外部IPがインスタンス情報のリストを要求していることを検出しました。攻撃者による悪用の可能性に注意してください!"
send_message(message)
Discord通知スクリーンショット



現時点では動作ベースの検出のみですが、今後はベースラインに基づいた検出も追加する予定です。