Políticas de AWS IoT excessivamente permissivas - AWS IoT Device Defender

Políticas de AWS IoT excessivamente permissivas

Uma política do AWS IoT concede permissões que são muito amplas ou irrestritas. Ela concede permissão para enviar ou receber mensagens MQTT para um amplo conjunto de dispositivos ou concede permissão para acessar ou modificar dados de execução de trabalhos e sombra para um amplo conjunto de dispositivos.

Em geral, uma política para um dispositivo deve conceder acesso a recursos associados a apenas esse dispositivo e nenhum outro ou a muito poucos dispositivos. Com algumas exceções, o uso de um curinga (por exemplo,"*") para especificar recursos em uma política é considerado muito amplo ou irrestrito.

Essa verificação aparece como IOT_POLICY_OVERLY_PERMISSIVE_CHECK na CLI e na API.

Gravidade: Crítica

Detalhes

O código de motivo a seguir é retornado quando essa verificação encontra uma política incompatível do AWS IoT:

  • ALLOWS_BROAD_ACCESS_TO_IOT_DATA_PLANE_ACTIONS

Por que isso importa?

Um certificado, uma identidade do Amazon Cognito ou um grupo de objetos com uma política excessivamente permissiva podem, se comprometidos, afetar a segurança de toda a sua conta. Um invasor pode usar esse amplo acesso para ler ou modificar sombras, trabalhos ou execuções de trabalhos de todos os seus dispositivos. Ou um invasor pode usar um certificado comprometido para conectar dispositivos mal-intencionados ou ativar um ataque DDOS na rede.

Como corrigir

Siga estas etapas para corrigir todas as políticas que não estão em conformidade anexadas o objetos, grupos de objetos ou outras entidades:

  1. Use CreatePolicyVersion para criar uma nova versão compatível da política. Defina o sinalizador setAsDefault como verdadeiro. (Isso torna essa nova versão operacional para todas as entidades que usam a política.)

  2. Use ListTargetsForPolicy para obter uma lista de destinos (certificados, grupos de objetos) aos quais a política está anexada e determine quais dispositivos estão incluídos nos grupos ou que usam os certificados para se conectar.

  3. Verifique se todos os dispositivos associados podem se conectar à AWS IoT. Se um dispositivo não conseguir se conectar, use SetPolicyVersion para reverter a política padrão para a versão anterior, revise-a e tente novamente.

Você pode usar ações de mitigação para:

  • Aplicar a ação de mitigação REPLACE_DEFAULT_POLICY_VERSION em suas descobertas de auditoria para fazer essa mudança.

  • Aplicar a ação de mitigação PUBLISH_FINDINGS_TO_SNS se você desejar implementar uma resposta personalizada em resposta à mensagem do Amazon SNS.

Para ter mais informações, consulte Ações de mitigação.

Use as variáveis da política do AWS IoT Core para fazer referência dinâmica aos recursos do AWS IoT nas suas políticas.

Permissões MQTT

As mensagens do MQTT são enviadas por meio do agente de mensagens do AWS IoT e são usadas pelos dispositivos para executar muitas ações, incluindo acessar e modificar o estado de sombra e o estado de execução de trabalhos. Uma política que concede permissão para um dispositivo se conectar, publicar ou assinar mensagens do MQTT deve restringir essas ações a recursos específicos da seguinte forma:

Conectar
  • incompatível:

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

    O curinga * permite que qualquer dispositivo se conecte ao AWS IoT.

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

    A não ser que iot:Connection.Thing.IsAttached seja definido como true nas chaves de condição, isso é equivalente ao curinga* como no exemplo anterior.

  • compatível:

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

    A especificação de recurso contém uma variável que corresponde ao nome do dispositivo usado para se conectar. A declaração de condição restringe ainda mais a permissão, verificando se o certificado usado pelo cliente MQTT corresponde ao que é anexado ao objeto com o nome usado.

Publicar
  • incompatível:

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

    Isso permite que o dispositivo atualize o shadow de qualquer dispositivo (* = todos os dispositivos).

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

    Isso permite que o dispositivo leia, atualize ou exclua a sombra de qualquer dispositivo.

  • compatível:

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

    A especificação do recurso contém um caractere curinga, mas apenas corresponde a qualquer tópico relacionado a shadow para o dispositivo cujo nome do objeto é usado para se conectar.

Assinar
  • incompatível:

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

    Isso permite que o dispositivo assine tópicos de shadow ou de trabalho reservados para todos os dispositivos.

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

    O mesmo do exemplo anterior, mas usando o curinga #.

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

    Isso permite que o dispositivo veja as atualizações de shadow de qualquer dispositivo (+ = todos os dispositivos).

  • compatível:

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

    As especificações de recursos contêm caracteres curinga, mas eles apenas correspondem a qualquer tópico relacionado a shadow e a trabalho para o dispositivo cujo nome do objeto é usado para se conectar.

Receber
  • compatível:

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

    Isso é compatível porque o dispositivo só pode receber mensagens de tópicos nos quais ele tem permissão para assinar.

Permissões de sombra e trabalho

Uma política que concede permissão para um dispositivo executar uma ação de API para acessar ou modificar shadows de dispositivos ou dados de execução de trabalhos deve restringir essas ações a recursos específicos. Estas são as ações da API:

  • DeleteThingShadow

  • GetThingShadow

  • UpdateThingShadow

  • DescribeJobExecution

  • GetPendingJobExecutions

  • StartNextPendingJobExecution

  • UpdateJobExecution

Exemplos

  • incompatível:

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

    Isso permite que o dispositivo realize a ação especificada em qualquer objeto.

  • compatível:

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

    Isso permite que o dispositivo execute as ações específicas em apenas duas objetos.