AWS-IoT-Core

AWS IoT Device Defenderで IoT ポリシーの監査をしてみた

はじめに

こんにちは、omkです。
セキュリティ気にしてますか?

今回はAWS IoTで利用する「IoT ポリシー」が適切であるかを確認するために「Device Defender」でのセキュリティ監査をやってみました。
検証で利用する際に過剰な権限を付与しがちなので改めてちゃんと管理していきましょう。

おさらい

IoTポリシーは、AWS IoTの証明書、アイデンティティ、モノのグループに設定出来て、それらに対してAWS IoTの操作権限を付与します。
例えばMQTTのメッセージブローカーに接続する権限です。
要はIoTデバイス用のIAMポリシーのようなものです。

Device DefenderはAWS IoTのセキュリティに対する監査を実施します。
2023年6月現在では以下の監査チェックが設定可能です。

  • CA 証明書のキー品質
  • CA 証明書は取り消されましたが、デバイス証明書は依然としてアクティブです
  • IoT ポリシーが過度に許容されている
  • アクティブなデバイス証明書について、中間 CA が取り消されました
  • デバイス証明書のキー品質
  • デバイス証明書共有
  • ロールのエイリアスが過度に許容されている
  • 認証された Cognito ロールが過度に許容されている
  • 認証されていない Cognito ロールが過度に許容されている
  • MQTT クライアント ID の競合
  • CA 証明書の有効期限が切れます
  • IoT ポリシーが正しく設定されていない可能性がある
  • デバイス証明書の有効期限が切れる
  • ロールのエイリアスは、未使用のサービスへのアクセスを許可する
  • 取り消されたデバイス証明書がまだアクティブである
  • ログ記録が無効

これらの評価を行ったうえで事前に設定された重大~低までの重要度で振り分けられます。
自動で監査ジョブをスケジュールでき、実行結果をSNSで通知できるので、セキュリティに問題が生じた際に即座に気づいて結果に従って対応することが可能となります。

今回は「IoT ポリシーが過度に許容されている」の監査項目に重きを置いて確認していきます。

やってみた

AWS IoTにMQTTで接続してトピックに対してメッセージのパブリッシュを行うIoTデバイスの接続に利用する証明書用のポリシーという設定で動作検証します。

わざと過剰な権限を付与したポリシー「IoTSecureConnectionPolicy」を作成しました。
すべてのアクションをすべてのリソースに許可するポリシーが設定されています。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "*",
      "Resource": "*"
    }
  ]
}

これを証明書にアタッチして監査を実行してみます。

この状態で監査を実行したところ、やはり「IoT ポリシーが過度に許容されている」で引っかかりました。

(今回作成したものの他にも準拠していないリソースがあるのは内緒、あとでこっそり直ってます)

対象ポリシーのページからも確認可能です。

重大な問題とのことでやはり対応が必要かと思われます。

結果の理由を確認していきます。
次の理由で非準拠とされていました。
「Policy allows broad access to IoT data plane actions: [iot:Subscribe, iot:StartNextPendingJobExecution, iot:Connect, iot:UpdateJobExecution, iot:GetThingShadow, iot:UpdateThingShadow, iot:DeleteThingShadow, iot:GetPendingJobExecutions, iot:DescribeJobExecution, iot:Publish].」

対象のアクションに対してのリソースの制限が無いことが問題視されているようです。

そもそも今回は段落冒頭で述べたようにAWS IoTのメッセージブローカーに接続できて、MQTTトピックにパブリッシュ出来ればよいのでそれらにアクションを絞っていきます。
そのうえで問題となっているリソースにワイルドカードが割当たっている点に対して対処します。

以下になりました。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "iot:Connect",
        "iot:Publish"
      ],
      "Resource": "arn:aws:iot:ap-northeast-1:{AWSアカウントID}:cert/{証明書名}"
    }
  ]
}

アクションを必要な2つに限定してリソースはそのままです。
これをアクティブなバージョンに設定して再度監査ジョブを実行します。

問題が検出されないようになりました。

監査ジョブのステータスにも「準拠」明記されています。

ということで必要なリソースのみに権限を与えるように設定したところ非準拠が解消されました。

おわりに

AWSで管理されているとはいえ外部のデバイスからAWSに接続するので権限管理は特に大事ですね。
以上、最後までお付き合いありがとうございました。

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA