Politiques AWS IoT trop permissives - AWS IoT Device Defender

Politiques AWS IoT trop permissives

Une stratégie AWS IoT accorde des autorisations qui sont trop larges ou illimitées. Elle accorde l'autorisation d'envoyer ou de recevoir des messages MQTT pour une large gamme d'appareils, ou accorde l'autorisation d'accéder aux données shadow et d'exécution des tâches (ou de les modifier) pour un vaste éventail d'appareils.

En général, une stratégie pour un appareil doit accorder l'accès à des ressources associées pratiquement à ce seul appareil. Avec certaines exceptions, l'utilisation d'un caractère générique (par exemple, « * ») pour spécifier des ressources dans une telle stratégie est considérée comme trop large ou illimitée.

Cette vérification apparaît comme IOT_POLICY_OVERLY_PERMISSIVE_CHECK dans la CLI et l'API.

Gravité : critique

Détails

Le code de motif suivant est renvoyé lorsque ce contrôle trouve une stratégie AWS IoT non conforme :

  • ALLOWS_BROAD_ACCESS_TO_IOT_DATA_PLANE_ACTIONS

Pourquoi est-ce important ?

Un certificat, une identité Amazon Cognito ou un groupe d'objets avec une stratégie trop permissive, peuvent influer, en cas de compromission, sur la sécurité de l'ensemble de votre compte. Un pirate informatique pourrait utiliser un tel accès étendu pour lire ou modifier les shadows, les tâches ou les exécutions de tâche de tous vos appareils. Ou un pirate peut utiliser un certificat mis en danger pour connecter des appareils malveillantes ou lancer une attaque DDOS sur votre réseau.

Comment réparer

Suivez ces étapes pour corriger les stratégies non conformes attachées à des objets, des groupes d’objets ou d’autres entités :

  1. Utilisez CreatePolicyVersion pour créer une nouvelle version conforme de la stratégie. Définissez l’indicateur setAsDefault sur true. (Cela rend cette nouvelle version opérationnelle pour toutes les entités qui utilisent la stratégie.)

  2. Utilisez ListTargetsForPolicy pour obtenir la liste des cibles (certificats, groupes d'objets) auxquelles la stratégie est attachée et déterminer les appareils qui sont inclus dans les groupes ou qui utilisent les certificats pour se connecter.

  3. Vérifiez que tous les appareils associés sont en mesure de se connecter à AWS IoT. Si un appareil n’est pas en mesure de se connecter, utilisez SetPolicyVersion pour restaurer la version précédente de la politique par défaut, révisez la politique et faites une nouvelle tentative.

Vous pouvez utiliser des actions d’atténuation pour effectuer les actions suivantes :

  • Appliquer l’action d’atténuation REPLACE_DEFAULT_POLICY_VERSION sur vos résultats d’audit pour effectuer ce changement.

  • Appliquer l’action d’atténuation PUBLISH_FINDINGS_TO_SNS si vous souhaitez mettre en œuvre une réponse personnalisée pour répondre au message Amazon SNS.

Pour plus d’informations, consultez Actions d'atténuation.

Consultez Variables de stratégie AWS IoT Core pour faire référence de manière dynamique aux ressources AWS IoT dans vos politiques.

Autorisations MQTT

Les messages MQTT sont envoyés via l’agent de messages AWS IoT et sont utilisés par les appareils afin d’effectuer diverses actions, dont l’accès à l’état du shadow et sa modification, ainsi que l’état de l’exécution des tâches. Une stratégie qui accorde l’autorisation à un appareil de se connecter à des messages MQTT, de les publier ou de s’y abonner, doit limiter ces actions à des ressources spécifiques comme suit :

Connexion
  • non conforme :

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

    Le caractère générique « * » permet à n’importe quel appareil de se connecter à AWS IoT.

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

    Sauf si iot:Connection.Thing.IsAttached est défini sur true dans les clés de condition, c'est l'équivalent du caractère générique « * » comme dans l'exemple précédent.

  • conforme :

    { "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" } } } ] }

    La spécification de ressource contient une variable qui correspond au nom de l’appareil utilisé pour la connexion. L’instruction de condition limite encore l’autorisation en vérifiant que le certificat utilisé par le client MQTT correspondent à celui attaché à l’objet avec le nom utilisé.

Publication
  • non conforme :

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

    Cela permet à l’appareil de mettre à jour le shadow de n’importe quel appareil (* = tous les appareils).

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

    Cela permet à l’appareil de lire, mettre à jour ou supprimer le shadow de n’importe quel appareil.

  • conforme :

    { "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/*" ], } ] }

    La spécification de ressource contient un caractère générique, mais il correspond uniquement à une rubrique liée au shadow pour l’appareil dont le nom d’objet est utilisé pour la connexion.

Abonnement
  • non conforme :

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

    Cela permet à l’appareil de s’abonner aux rubriques de shadow ou de tâche réservées pour tous les appareils.

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

    Identique à l’exemple précédent, mais à l’aide du caractère générique #.

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

    Cela permet à l’appareil d’afficher les mises à jour du shadow sur n’importe quel appareil (+ = tous les appareils).

  • conforme :

    { "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/*" ], } ] }

    La spécification de ressource contient des caractères génériques, mais ils correspondent uniquement à une rubrique liée au shadow ou à une tâche pour l’appareil dont le nom d’objet est utilisé pour la connexion.

Réception
  • conforme :

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

    Conforme, car l'appareil peut uniquement recevoir des messages à partir de rubriques auxquelles il est autorisé à s'abonner.

Autorisations de tâche et de shadow

Une stratégie qui accorde l’autorisation à un appareil d’exécuter une action d’API pour accéder aux données des device shadows ou d’exécution des tâches, ou les modifier, doit limiter ces actions à des ressources spécifiques. Voici les actions d’API :

  • DeleteThingShadow

  • GetThingShadow

  • UpdateThingShadow

  • DescribeJobExecution

  • GetPendingJobExecutions

  • StartNextPendingJobExecution

  • UpdateJobExecution

Exemples

  • non conforme :

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

    Cela permet à l’appareil d’effectuer l’action spécifiée sur n’importe quel objet.

  • conforme :

    { "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" ] } ] }

    Cela permet à l’appareil d’effectuer les actions spécifiées sur deux objets uniquement.