AWS IoT 政策過度寬鬆 - AWS IoT Device Defender

AWS IoT 政策過度寬鬆

AWS IoT 政策提供的許可太寬鬆或不受限制。它授與許可給一組廣泛的裝置傳送或接收 MQTT 訊息,或授與許可給一組廣泛的裝置存取或修改影子和任務執行資料。

一般來說,裝置政策應授與其相關聯資源的存取許可,並且其他裝置不允許存取或是極少。在某些例外狀況下,使用萬用字元 (例如,「*」) 來指定資源的政策已視為太寬鬆或不受限制。

此檢查會以 IOT_POLICY_OVERLY_PERMISSIVE_CHECK 出現在 CLI 和 API 中。

嚴重性:關鍵

詳細資訊

當此檢查發現不合規的 AWS IoT 政策時,將會傳回下列原因代碼:

  • ALLOWS_BROAD_ACCESS_TO_IOT_DATA_PLANE_ACTIONS

為什麼它很重要

憑證、Amazon Cognito 身分或物件群組使用過度寬鬆的政策,如果遭入侵會影響您的整個帳戶。攻擊者可以使用這類廣泛存取來讀取或修改您的所有裝置的影子、任務或任務執行。或者,攻擊者可以使用入侵的憑證連接到惡意裝置或啟動 DDOS 對您的網路進行攻擊。

如何修正它

遵循以下步驟以修正任何附加到物件、物件群組或其他實體不合規的政策:

  1. 使用 CreatePolicyVersion 來建立合規的新政策版本。將 setAsDefault 旗標設為 true。(這可讓此新版本適用於使用該政策的所有實體。)

  2. 使用 ListTargetsForPolicy 取得政策所附加至的目標清單 (憑證、物件群組),以及判斷那些裝置包含在群組中或使用憑證來連接。

  3. 驗證所有相關的裝置可以連接到 AWS IoT。如果裝置無法連接,則復原到預設政策之前的版本,使用 SetPolicyVersion 將預設政策還原為先前版本,修訂政策,然後重試。

您可以使用緩解動作:

  • 套用 REPLACE_DEFAULT_POLICY_VERSION 緩解行動到稽核結果來產生此變更。

  • 如果您要實作自訂回應以回應 Amazon SNS 訊息,套用 PUBLISH_FINDINGS_TO_SNS 緩解動作。

如需詳細資訊,請參閱緩解動作

使用 AWS IoT Core 政策變數以動態參考您政策中的 AWS IoT 資源。

MQTT 許可

會透過 AWS IoT 訊息代理程式傳送 MQTT 訊息,並裝置會使用該訊息來執行許多動作,包括存取和修改影子狀態和任務執行狀態。與裝置連接、發佈或訂閱 MQTT 訊息許可的政策,應該對特定資源加以限制這些動作如下所示:

連線
  • 不合規:

    arn:aws:iot:region:account-id:client/*

    萬用字元 * 可讓任何裝置連接到 AWS IoT。

    arn:aws:iot:region:account-id:client/${iot:ClientId}

    除非 iot:Connection.Thing.IsAttached 在條件索引鍵中設定為 true,這相當於先前範例中的萬用字元 *。

  • 合規:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Connect" ], "Resource": [ "arn:aws:iot:region:account-id:client/${iot:Connection.Thing.ThingName}" ], "Condition": { "Bool": { "iot:Connection.Thing.IsAttached": "true" } } } ] }

    資源規範包含與連接所用的裝置名稱相符的變數。條件陳述式會檢查 MQTT 用戶端所用的憑證是否與連接到具有所用名稱的物件相符,進一步限制許可。

發佈
  • 不合規:

    arn:aws:iot:region:account-id:topic/$aws/things/*/shadow/update

    這可讓裝置更新任何裝置 (* = 所有裝置) 的影子。

    arn:aws:iot:region:account-id:topic/$aws/things/*

    這可讓裝置讀取、更新或刪除任何裝置 (* = 所有裝置) 的影子。

  • 合規:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Publish" ], "Resource": [ "arn:aws:iot:region:account-id:topic/$aws/things/${iot:Connection.Thing.ThingName}/shadow/*" ], } ] }

    資源規格包含萬用字元,但只符合任何影子相關主題物件名稱連線的裝置。

訂閱
  • 不合規:

    arn:aws:iot:region:account-id:topicfilter/$aws/things/*

    這可讓裝置為所有裝置訂閱保留影子或任務主題。

    arn:aws:iot:region:account-id:topicfilter/$aws/things/*

    前述範例相同,但使用 # 萬用字元。

    arn:aws:iot:region:account-id:topicfilter/$aws/things/+/shadow/update

    這可讓裝置看到任何裝置 (+ = 所有裝置) 的影子更新。

  • 合規:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Subscribe" ], "Resource": [ "arn:aws:iot:region:account-id:topicfilter/$aws/things/${iot:Connection.Thing.ThingName}/shadow/*" "arn:aws:iot:region:account-id:topicfilter/$aws/things/${iot:Connection.Thing.ThingName}/jobs/*" ], } ] }

    資源規格包含萬用字元,但只會針對物件名稱用於連線的裝置,比對任何影子相關主體與任何任務相關主題。

接收
  • 合規:

    arn:aws:iot:region:account-id:topic/$aws/things/*

    這是合規的,因為裝置只能從已訂閱許可的主題接收訊息。

影子和任務許可

授與裝置執行 API 動作的許可以存取或修改裝置影子或任務執行資料的政策,應該於特定的資源限制這些動作。以下是 API 動作:

  • DeleteThingShadow

  • GetThingShadow

  • UpdateThingShadow

  • DescribeJobExecution

  • GetPendingJobExecutions

  • StartNextPendingJobExecution

  • UpdateJobExecution

範例

  • 不合規:

    arn:aws:iot:region:account-id:thing/*

    這可讓裝置在任何物件上執行指定的動作。

  • 合規:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:DeleteThingShadow", "iot:GetThingShadow", "iot:UpdateThingShadow", "iot:DescribeJobExecution", "iot:GetPendingJobExecutions", "iot:StartNextPendingJobExecution", "iot:UpdateJobExecution" ], "Resource": [ "arn:aws:iot:region:account-id:/thing/MyThing1", "arn:aws:iot:region:account-id:/thing/MyThing2" ] } ] }

    這可讓裝置僅在兩個物件上執行指定的動作。