Políticas de AWS IoT demasiado permisivas - AWS IoT Device Defender

Políticas de AWS IoT demasiado permisivas

Una política de AWS IoT otorga permisos que son demasiado amplios o no están sujetos a restricciones. Otorga permiso para enviar o recibir mensajes de MQTT para un amplio conjunto de dispositivos, u otorga permiso para obtener acceso a los datos de ejecución de sombras y de trabajos o modificarlos para un amplio conjunto de dispositivos.

En general, una política para un dispositivo debería otorgar acceso a recursos asociados con ese dispositivo y sin otros dispositivos o con muy pocos. Con algunas excepciones, el uso de un carácter comodín (por ejemplo, "*") para especificar recursos en dicha política se considera demasiado amplio o sin restricciones.

Esta comprobación aparece como IOT_POLICY_OVERLY_PERMISSIVE_CHECK en la CLI y la API.

Gravedad: crítica

Detalles

Se devuelve el siguiente código de motivo cuando esta comprobación encuentra una política de AWS IoT no conforme:

  • ALLOWS_BROAD_ACCESS_TO_IOT_DATA_PLANE_ACTIONS

¿Por qué importa?

Un certificado, una identidad de Amazon Cognito o un grupo de objetos con una política excesivamente permisiva puede, en caso de ponerse en riesgo, afectar a la seguridad de toda su cuenta. Un atacante podría usar un acceso tan amplio para leer o modificar sombras, trabajos o ejecuciones de trabajos para todos sus dispositivos. O un atacante podría usar un certificado atacado para conectar dispositivos maliciosos o lanzar un ataque DDOS en su red.

Cómo solucionarlo

Siga estos pasos para corregir las políticas no conformes asociadas a objetos, grupos de objetos u otras entidades:

  1. Utilice CreatePolicyVersion para crear une nueva versión conforme de la política. Establezca la marca setAsDefault en true. (Esto hace que esta nueva versión funcione para todas las entidades que utilizan la política).

  2. Utilice ListTargetsForPolicy para obtener una lista de destinos (certificados o grupos de objetos) a los que la política está asociada y determinar qué dispositivos están incluidos en los grupos o cuáles utilizan los certificados para conectarse.

  3. Verifique que todos los dispositivos asociados puedan conectarse a AWS IoT. Si un dispositivo no puede conectarse, utilice SetPolicyVersion para devolver la política predeterminada a la versión anterior, revisar la política e intentarlo de nuevo.

Puede utilizar acciones de mitigación para:

  • Aplicar la acción de mitigación REPLACE_DEFAULT_POLICY_VERSION en los resultados de la auditoría para realizar este cambio.

  • Aplicar la acción de mitigación PUBLISH_FINDINGS_TO_SNS si desea implementar una respuesta personalizada en respuesta al mensaje de Amazon SNS.

Para obtener más información, consulte Acciones de mitigación.

Utilice las variables de política de AWS IoT Core para hacer referencia de forma dinámica a los recursos de AWS IoT en las políticas.

Permisos de MQTT

Los mensajes MQTT se envían a través del agente de mensajes de AWS IoT y los dispositivos los usan para realizar muchas acciones, incluido el acceso y la modificación del estado de la sombra y el estado de ejecución del trabajo. Una política que otorga permiso a un dispositivo para conectarse, publicar o suscribirse a mensajes de MQTT debe restringir estas acciones a recursos específicos de la siguiente manera:

Conectar
  • no conforme:

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

    El carácter comodín * permite que cualquier dispositivo se conecte a AWS IoT.

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

    A menos que iot:Connection.Thing.IsAttached se establezca en true en la claves de condición, es equivalente al carácter comodín * del ejemplo anterior.

  • 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 especificación de recursos contiene una variable que coincide con el nombre del dispositivo que se utiliza para conectarse. La instrucción de condición restringe aún más el permiso al comprobar que el certificado utilizado por el cliente de MQTT coincida con el que está asociado al objeto con el nombre utilizado.

Publicación
  • no conforme:

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

    Esto permite que el dispositivo actualice la sombra de cualquier dispositivo (* = todos los dispositivos).

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

    Esto permite que el dispositivo lea, actualice o elimine la sombra de cualquier dispositivo.

  • 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 especificación del recurso contiene un comodín, pero solo coincide con cualquier tema relacionado con la sombra para el dispositivo cuyo nombre de objeto se utilice para conectarse.

Suscribirse
  • no conforme:

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

    Esto permite que el dispositivo se suscriba a temas de sombra o de trabajo reservados para todos los dispositivos.

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

    Lo mismo que el ejemplo anterior, pero usando el comodín #.

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

    Esto permite que el dispositivo vea las actualizaciones de la sombra en cualquier dispositivo (+ = todos los dispositivos).

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

    Las especificaciones de recursos contienen caracteres comodín pero solo coinciden con cualquier tema relacionado con la sombra y cualquier tema relacionado con el trabajo para el dispositivo cuyo nombre de objeto se use para conectarse.

Recibir
  • conforme:

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

    Esto es conforme porque el dispositivo solo puede recibir mensajes de temas en los que tiene permiso para suscribirse.

Permisos de trabajo y sombras

Una política que concede permiso a un dispositivo para realizar una acción de la API para obtener acceso a datos de ejecución de sombras o trabajos o modificarlos debe restringir estas acciones a recursos específicos. Las acciones de la API son las siguientes:

  • DeleteThingShadow

  • GetThingShadow

  • UpdateThingShadow

  • DescribeJobExecution

  • GetPendingJobExecutions

  • StartNextPendingJobExecution

  • UpdateJobExecution

Ejemplos

  • no conforme:

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

    Esto permite al dispositivo realizar la acción especificada en cualquier objeto.

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

    Esto permite al dispositivo realizar las acciones especificadas solo en dos objetos.