2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWS SNSにメッセージを不正に送受信してみる。AWS SNS設定ミスの危険性

Posted at

はじめに

本記事ではAWS SNSの設定ミスとそれによって発生しうる攻撃、そしてその対策を記載します。

目次

いきなりまとめ

SNSトピックアクセスポリシーの設定を怠ると、第三者がメッセージを送受信できるようになってしまうので気を付けよう!

コード紹介

今回テーマとして取りあげるアーキテクチャはCDKで定義しています。Githubへのリンクを置いておくので気軽に検証にお使いください。SNSを1つ作成し、トピックポリシーをパブリックアクセス可能な設定にしている簡単なコードです。

アーキテクチャ紹介

今回の構成は以下の通りです。
攻撃者側のCloudShellからSNSを不正に操作し、サブスクライブの登録とメッセージの送受信を行います。

architecture.png

不正にパブリッシュとサブスクライブしてみる

では実際に不正な操作をしてみましょう。
攻撃者役として、SNSトピックを作成したアカウントとは別のアカウントのCloudShellを用います。

今回はSNSトピックのARNが漏洩しているor攻撃者がある程度推測できるという前提で進めます。

サブスクライブ

まずはサブスクライブ、つまりSNSメッセージ受け取りエンドポイントの設定です。攻撃者はこれを行うことで、SNSトピックを通る機密情報を不正に入手することができます。今回はメールアドレスをサブスクライブ設定します。

攻撃者側のCloudShellを開き、以下コマンドを入力します。
パラメータとしてトピックARNと通知先のメールアドレスを指定します。

$ aws sns subscribe --topic-arn arn:aws:sns:ap-northeast-1:XXXXXXXXXXXX:PublicSnsStack-SampleTopicXXXXXXXX-XXXXXXXXXXXX --protocol email --notification-endpoint  XXXXXXXX@XXXXXXXXX
{
    "SubscriptionArn": "pending confirmation"
}

すると以下のようなメールが届くのでConfirm subscriptionをクリックします。

{1E8B05CD-C14D-47D9-9E4B-79634088DA76}.png

ブラウザが開いて、サブスクリプションの確認ができたことが表示されます。

{7C32F736-A933-4444-B7E7-B9E1D845F9CC}.png

SNSのコンソールを開くと無事にサブスクライブされていることが分かります。

{2B171619-9F87-4DDA-A7EF-5512C3D05CC9}.png

これで攻撃者は標的の業務上のメッセージを不正に取得できるようになりました。

パブリッシュ

続いてパブリッシュ、つまりSNSトピックにメッセージを送信してみます。攻撃者はこれを行うことでSNSトピックに対してDoS攻撃をしたり、偽のメッセージを送信することができます。

攻撃者側のCloudShellを開き、以下コマンドを入力します。
トピックARNを指定し、流したいメッセージをmessageに入力します。

$ aws sns publish --topic-arn arn:aws:sns:ap-northeast-1:XXXXXXXXXXXX:PublicSnsStack-SampleTopicXXXXXXXX-XXXXXXXXXXXX --message "Hacked!"
{
    "MessageId": "6f9f8c90-351e-5f46-a78d-edecdbe7398a"
}

しばらくすると、先ほどサブスクライブしたメールアドレス宛にメールが届いているはずです。

{CE2F28A4-5B4D-43D5-A7C6-07A06E362D19}.png

これで攻撃者はSNSを経由して偽の情報を送信したり、DoS攻撃を仕掛けられるようになりました。

対策

ではここからはSNSトピックの設定ミスを是正しましょう。措置は基本的にサブスクライブ・パブリッシュで同様なのでまとめて対応します。

コンソールからであれば、以下のように設定を修正します。
Amazon SNS > トピック > PublicSnsStack-SampleTopicXXXXXXXX-XXXXXXXXXXXX > トピックの編集から、アクセスポリシーの編集を行います。

プリンシパルでSNSにアクセスできるAWSアカウントを制限しましょう。

{
  "Version": "2008-10-17",
  "Id": "__default_policy_ID",
  "Statement": [
    {
      "Sid": "__default_statement_ID",
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": [
        "SNS:Publish",
        "SNS:RemovePermission",
        "SNS:SetTopicAttributes",
        "SNS:DeleteTopic",
        "SNS:ListSubscriptionsByTopic",
        "SNS:GetTopicAttributes",
        "SNS:AddPermission",
        "SNS:Subscribe"
      ],
      "Resource": "arn:aws:sns:ap-northeast-1:XXXXXXXXXXXX:PublicSnsStack-SampleTopicXXXXXXXX-XXXXXXXXXXXX",
      "Condition": {
        "StringEquals": {
          "AWS:SourceAccount": "XXXXXXXXXXXX"
        }
      }
    },
    {
      "Sid": "__console_pub_0",
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "1111111111111",
          "222222222222"
        ]
      },
      "Action": "SNS:Publish",
      "Resource": "arn:aws:sns:ap-northeast-1:XXXXXXXXXXXX:PublicSnsStack-SampleTopicXXXXXXXX-XXXXXXXXXXXX"
    },
    {
      "Sid": "__console_sub_0",
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "1111111111111",
          "222222222222"
        ]
      },
      "Action": [
        "SNS:Subscribe"
      ],
      "Resource": "arn:aws:sns:ap-northeast-1:XXXXXXXXXXXX:PublicSnsStack-SampleTopicXXXXXXXX-XXXXXXXXXXXX"
    }
  ]
}

ではこの状態で再度攻撃者アカウントからSNSにアクセスしてみましょう。

$ aws sns subscribe --topic-arn arn:aws:sns:ap-northeast-1:XXXXXXXXXXXX:PublicSnsStack-SampleTopicXXXXXXXx-XXXXXXXXXXXX --protocol email --notification-endpoint XXXXXXXXX@XXXXXXX

An error occurred (AuthorizationError) when calling the Subscribe operation: User: arn:aws:sts::XXXXXXXXXXXX:assumed-role/AWSReservedSSO_AWSAdministratorAccess_XXXXXXXXXXXXXXXX/XXXXXXXXX@XXXXXXX.com is not authorized to perform: SNS:Subscribe on resource: arn:aws:sns:ap-northeast-1:XXXXXXXXXXXX:PublicSnsStack-SampleTopicXXXXXXXx-XXXXXXXXXXXX because no resource-based policy allows the SNS:Subscribe action

トピックポリシーを設定したお陰でアクセスを拒否することができました!

最後に

ここまでアクセスポリシーに設定ミスがあるSNSトピックをテーマに、不正にメッセージを送受信する攻撃とその対策をまとめました。サーバレスアーキテクチャで出番の多いSNSの設定を見直し、セキュアな環境構築を意識しましょう。

この記事がどなたかの役に立てれば幸いです。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?