Perfil autenticado do Cognito excessivamente permissivo - AWS IoT Device Defender

Perfil autenticado do Cognito excessivamente permissivo

Uma política anexada a um perfil autenticado do banco de identidades do Amazon Cognito é considerada excessivamente permissiva porque ela concede permissão para executar as seguintes ações de AWS IoT:

  • Gerenciar ou modificar objetos.

  • Gerenciar dados ou recursos não relacionados o objetos.

Ou, porque ela concede permissão para executar as seguintes ações da AWS IoT em um amplo conjunto de dispositivos:

  • Ler dados administrativos das objetos.

  • Usar MQTT para se conectar/publicar/assinar tópicos reservados (incluindo shadow ou dados de execução de trabalhos).

  • Usar comandos de API para ler ou modificar shadow ou dados de execução de trabalhos.

Em geral, os dispositivos que se conectam usando um perfil autenticado do banco de identidades do Amazon Cognito só devem ter permissão limitada para ler dados administrativos específicos de objetos, publicar e assinar tópicos do MQTT específicos de objetos ou usar os comandos de API para ler e modificar dados específicos de objetos relacionados a dados de execução de trabalhos ou sombra.

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

Gravidade: Crítica

Detalhes

Para essa verificação, o AWS IoT Device Defender audita todos os bancos de identidade do Amazon Cognito que foram usados para se conectar ao agente de mensagens de AWS IoT durante os 31 dias anteriores à realização da auditoria. Todos os bancos de identidades do Amazon Cognito a partir dos quais uma identidade autenticada ou não autenticada do Amazon Cognito é conectada são incluídos na auditoria.

Os códigos de motivo a seguir são retornados quando essa verificação encontra um perfil autenticado e não compatível do banco de identidades do Amazon Cognito:

  • ALLOWS_BROAD_ACCESS_TO_IOT_THING_ADMIN_READ_ACTIONS

  • ALLOWS_ACCESS_TO_IOT_NON_THING_ADMIN_ACTIONS

  • ALLOWS_ACCESS_TO_IOT_THING_ADMIN_WRITE_ACTIONS

Por que isso importa?

Se uma identidade autenticada estiver comprometida, ela poderá usar ações administrativas para modificar as configurações da conta, excluir recursos ou obter acesso a dados sigilosos.

Como corrigir

Uma política anexada a um perfil autenticado do banco de identidades do Amazon Cognito deve conceder somente as permissões necessárias para um dispositivo fazer seu trabalho. Recomendamos as seguintes etapas:

  1. Criar uma nova função compatível.

  2. Criar um novo banco de identidades do Amazon Cognito e anexar o perfil compatível a ele.

  3. Verificar se suas identidades podem acessar a AWS IoT usando o novo grupo.

  4. Após a conclusão da verificação, anexar o perfil ao banco de identidades do Amazon Cognito que foi sinalizado como incompatível.

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

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

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

Gerenciar ou modificar objetos

As seguintes ações de API da AWS IoT são usadas para gerenciar ou modificar objetos para que a permissão para executá-las não seja concedida a dispositivos que se conectem por meio de um banco de identidades não autenticadas do Amazon Cognito:

  • AddThingToThingGroup

  • AttachThingPrincipal

  • CreateThing

  • DeleteThing

  • DetachThingPrincipal

  • ListThings

  • ListThingsInThingGroup

  • RegisterThing

  • RemoveThingFromThingGroup

  • UpdateThing

  • UpdateThingGroupsForThing

Qualquer função que conceda permissão para executar essas ações em até mesmo um único recurso é considerada não compatível.

Gerenciar não objetos

Os dispositivos que se conectam por meio de um banco de identidades autenticadas do Amazon Cognito não devem receber permissão para executar ações de API da AWS IoT além das discutidas nessas seções. Para gerenciar sua conta com um aplicativo que se conecta por meio de um banco de identidades do Amazon Cognito, crie um banco de identidades separado não usado pelos dispositivos.

Ler dados administrativos das objetos

As seguintes ações de API da AWS IoT são usadas para ler dados de objetos para que os dispositivos que se conectem por meio de um banco de identidades autenticadas do Amazon Cognito tenham permissão para executá-las em apenas um conjunto limitado de objetos:

  • DescribeThing

  • ListJobExecutionsForThing

  • ListThingGroupsForThing

  • ListThingPrincipals

  • 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:DescribeThing", "iot:ListJobExecutionsForThing", "iot:ListThingGroupsForThing", "iot:ListThingPrincipals" ], "Resource": [ "arn:aws:iot:region:account-id:/thing/MyThing" ] } ] }

    Isso permite que o dispositivo execute as ações especificadas em apenas um objeto.

  • compatível:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:DescribeThing", "iot:ListJobExecutionsForThing", "iot:ListThingGroupsForThing", "iot:ListThingPrincipals" ], "Resource": [ "arn:aws:iot:region:account-id:/thing/MyThing*" ] } ] }

    É compatível, pois, embora o recurso seja especificado com um caractere curinga (*), ele é precedido por uma string específica, e isso limita o conjunto de objetos acessadas àqueles com nomes que têm um determinado prefixo.

  • 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:DescribeThing", "iot:ListJobExecutionsForThing", "iot:ListThingGroupsForThing", "iot:ListThingPrincipals" ], "Resource": [ "arn:aws:iot:region:account-id:/thing/MyThing" ] } ] }

    Isso permite que o dispositivo execute as ações especificadas em apenas um objeto.

  • compatível:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:DescribeThing", "iot:ListJobExecutionsForThing", "iot:ListThingGroupsForThing", "iot:ListThingPrincipals" ], "Resource": [ "arn:aws:iot:region:account-id:/thing/MyThing*" ] } ] }

    É compatível, pois, embora o recurso seja especificado com um caractere curinga (*), ele é precedido por uma string específica, e isso limita o conjunto de objetos acessadas àqueles com nomes que têm um determinado prefixo.

Assinar/publicar em tópicos do MQTT

As mensagens do MQTT são enviadas por meio do agente de mensagens da AWS IoT e são usadas pelos dispositivos para executar muitas ações diferentes, incluindo acessar e modificar o estado de shadow 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 menos que iot:Connection.Thing.IsAttached seja definido como true nas chaves de condição, é equivalente ao curinga * 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 do recurso contém uma variável que corresponde ao nome do dispositivo usado para se conectar, e a declaração de condição restringe ainda mais a permissão, verificando se o certificado usado pelo cliente MQTT corresponde ao 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/exclua o shadow 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:topicfilter/$aws/things/*

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

Ler ou modificar dados de sombra ou 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.