ちょっと話題の記事

[AWS]監査ログを悪意ある削除から守る

あたなの AWSの監査ログ(CloudTrail)は削除から保護されていますか?実は保存してるけど、Admin権限を持つ悪意ある者が削除できる状況が大半ではないかと思ってます。今回は悪意ある者からCloudTrailを守る方法を実装してみました。
2021.06.10

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

コンニチハ、千葉です。

監査ログを悪意ある削除から、何が何でも守っていくぞのコーナーです。

みなさんは、AWSの監査ログ(CloudTrail)をどのように保護していますか?

CloudTrail を保護するために

が考えられます。

よし、保護している!って思っても、ユーザーが Admin 権限を持っている場合、暗号化していようが整合性チェックしていようがデータは削除可能です。しかも、 CloudTrail のレコーディング自体を停止 もできちゃいます。つまり、監査ログが保存されなくなり、何が行われたのか調査が難しくなります。

もしも、万が一、強い 権限がある Admin が第3者に渡ったとしても、大切なログを守りたいです。Admin権限という強い権限に制限かけられるの?と思うかもですが、実は Admin 権限があっても操作できないようにする方法があるので、色々検討してみました。

みなさんの環境を見直し、監査ログを守るきっかけになると嬉しいです。

守る対象の整理

大切な監査ログを守るために何をするかを考えてみます。何を守るのか。

CloudTrail が監査ログを出力し続けられ、保存されたログが改ざんや削除されないことをゴールにしたいと思います。 また、IAM ユーザーに Admin 権限があったとしても保護できるようにします。

ここから以下を考えるとよさそうです

  • Admin 権限があっても CloudTrail を オフにさせない
  • Admin 権限があっても 保存された S3 上の CloudTrail ログ を 削除させない

実装方法

Admin 権限って、つよつよ権限のため何でも操作が可能です。一見この Admin 権限の操作制限はできないように見えます。 ここで、SCP(サービスコントロールポリシー)の登場です。Admin 権限は SCP(サービスコントロールポリシー) を利用することで制限できます。SCP は Organizations の機能の1つで、OUや AWS アカウントに対して 実行する API を制限できます。ルートユーザーでさえ制限可能です。

SCPの詳細はこちらを参照ください。

AWS OrganizationsのSCP(サービスコントロールポリシー)を理解する

この SCP を利用し、特定の CloudTrail と特定の S3 バケットに対して制限をしたいと思います。

制限対象

では、どんな操作を制限するとよいでしょうか。やりたいことは以下でした。

  • Admin 権限があっても CloudTrail を オフにさせない
  • Admin 権限があっても 保存された S3 上の CloudTrail ログ を 削除させない

ということで、以下の API を制限すると良さそうです。

  • S3:Delete*
  • cloudtrail: DeleteTrail
  • cloudtrail: StopLogging
  • cloudtrail: UpdateTrail

やってみた

設定する

要件と方式が固まったので、実際に SCP を設定し、攻撃者が悪さできないようになっているかチェックしてみましょう。 今回、2つの AWS アカウントが登場しします。管理アカウントメンバーアカウントです。

  • 管理アカウント:Organizations を 管理している親アカウント
  • メンバーアカウント:Organizations から 管理される子アカウント

管理アカウントでの設定

まずは管理アカウントにログインし、Organizations へ移動します。ポリシーを選択し、サービスコントロールポリシーを選択します。

ポリシーを作成を選択します。

ポリシー名とポリシーの説明、実際のポリシーを入力し保存します。

入力するポリシーは以下です。ハイライトしている Resource については、適宜環境に合わせて変更してください。

{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Sid": "Statement1",
			"Effect": "Deny",
			"Action": [
				"s3:Delete*"
			],
			"Resource": [
				"arn:aws:s3:::bucket-for-cloudtrail”
			]
		},
		{
			"Sid": "Statement2",
			"Effect": "Deny",
			"Action": [
				"cloudtrail:DeleteTrail",
				"cloudtrail:StopLogging",
				"cloudtrail:UpdateTrail"
			],
			"Resource": [
				"arn:aws:cloudtrail:*:*:trail/cloudtrail”
			]
		}
	]
}

ポリシーが作成できたら、適用する OU またはアカウントを選択しましょう。作成したポリシーを選択し、ターゲットタブからアタッチをクリックします。制限したい OU または アカウントにポリシーをアタッチしましょう。

メンバーアカウントで動作検証

設定が完了したので、実際に動作確認してみます。メンバーアカウントにログインします。メンバーアカウントにログインしたIAMユーザーにはAdmin ポリシーがアタッチされています。

CloudTrail の記録を停止してみます。

権限がないエラーになって停止できません!設定変更やCloudTrail自体の削除を行ってもアクセス権限がなく操作できませんでした。

次に、CloudTrail ログが保存されている S3 のデータを削除してみます。

削除できませんでした。これで、監査ログを削除から保護できました!

注意事項

SCPは、メンバーアカウントに対して制限をかけられますが、管理アカウントに制限はかかりません。

SCP は管理アカウントのユーザーやロールには影響しません。組織内のメンバーアカウントのみに影響します。

参考: https://docs.aws.amazon.com/ja_jp/organizations/latest/userguide/orgs_manage_policies_scps.html

管理アカウントは特別なアカウントとして、以下を実施するとよいでしょう。

  • 管理アカウントではシステムを構築せず、Organizations のみを利用する
  • IAMユーザーは必要最低限作成し、アクセスキーを発行しない
  • IAMユーザーに付与する権限は必要最低限にする
  • すべてのIAMユーザーに MFA を必須にする(ハードウェアMFAを利用するとなおよい)

参考: https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/best-practices.html

最後に

CloudTrail で設定した監査ログを削除から保護するということを検討してやってみました。大事なログが消されると調査もできなくなり、お手上げになります。今一度環境を見直してみましょう!!