Ruolo Cognito autenticato eccessivamente permissivo - AWS IoT Device Defender

Ruolo Cognito autenticato eccessivamente permissivo

Una policy collegata a un ruolo di un pool di identità Amazon Cognito autenticato è considerata troppo permissiva perché concede l'autorizzazione per eseguire le operazioni AWS IoT seguenti:

  • gestire o modificare gli oggetti

  • gestire le risorse o i dati non correlati agli oggetti

Oppure, perché concede l'autorizzazione per eseguire le operazioni AWS IoT seguenti su un'ampia gamma di dispositivi:

  • leggere i dati amministrativi degli oggetti

  • usare MQTT per connettersi a/pubblicare/sottoscrivere argomenti riservati (tra cui dati di esecuzione dei processi o copie shadow)

  • usare comandi API per leggere o modificare dati di esecuzione dei processi o copie shadow

In generale, i dispositivi che si connettono usando un ruolo di un pool di identità Amazon Cognito autenticato devono avere solo autorizzazioni limitate per leggere i dati amministrativi specifici degli oggetti, pubblicare/sottoscrivere argomenti MQTT specifici degli oggetti o usare comandi API per leggere/modificare dati specifici degli oggetti correlati a dati di esecuzione dei processi o copie shadow.

Questo controllo viene visualizzato come AUTHENTICATED_COGNITO_ROLE_OVERLY_PERMISSIVE_CHECK nell’interfaccia a riga di comando e nell’API.

Gravità: Critico

Informazioni

Per questo controllo, AWS IoT Device Defender esegue l'audit di tutti i pool di identità Amazon Cognito che sono stati usati per la connessione al broker di messaggi AWS IoT durante gli ultimi 31 giorni precedenti l'esecuzione dell'audit. Tutti i pool di identità Amazon Cognito da cui si è connessa un'identità Amazon Cognito autenticata o non autenticata vengono inclusi nell'audit.

Quando questo controllo trova un ruolo di un pool di identità Amazon Cognito autenticato non conforme, vengono restituiti i codici motivo seguenti:

  • 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

Perché è importante

Se un'identità autenticata viene compromessa, potrebbe usare le operazioni amministrative per modificare le impostazioni dell'account, eliminare le risorse o ottenere l'accesso a dati sensibili.

Come risolvere il problema

Una policy collegata a un ruolo di un pool di identità Amazon Cognito autenticato deve concedere solo le autorizzazioni di cui un dispositivo necessita. È consigliabile eseguire le operazioni seguenti:

  1. Creare un nuovo ruolo conforme.

  2. Creare un nuovo pool di identità Amazon Cognito e collegare a esso il ruolo conforme.

  3. Verificare che le identità possano accedere a AWS IoT usando il nuovo pool.

  4. Una volta completata la verifica, collegare il nuovo ruolo conforme al pool di identità Amazon Cognito contrassegnato come non conforme.

Puoi anche usare le operazioni di mitigazione per:

  • Applicare l'operazione di mitigazione PUBLISH_FINDINGS_TO_SNS per implementare una risposta personalizzata al messaggio di Amazon SNS.

Per ulteriori informazioni, consultare Operazioni di mitigazione.

Gestire o modificare gli oggetti

Le operazioni API di AWS IoT seguenti vengono usate per gestire o modificare gli oggetti in modo che non sia necessario concedere le autorizzazioni per l'esecuzione di queste operazioni ai dispositivi che si connettono tramite un pool di identità Amazon Cognito autenticato:

  • AddThingToThingGroup

  • AttachThingPrincipal

  • CreateThing

  • DeleteThing

  • DetachThingPrincipal

  • ListThings

  • ListThingsInThingGroup

  • RegisterThing

  • RemoveThingFromThingGroup

  • UpdateThing

  • UpdateThingGroupsForThing

Qualsiasi ruolo che concede l'autorizzazione per eseguire queste operazioni anche su una singola risorsa è considerato non conforme.

Gestire non-oggetti

I dispositivi che si connettono tramite un pool di identità Amazon Cognito autenticato non devono avere il permesso di eseguire operazioni API AWS IoT diverse da quelle discusse in queste sezioni. Per gestire l'account con un'applicazione che si connette tramite un pool di identità Amazon Cognito autenticato, crea un pool di identità separato non usato dai dispositivi.

Leggere i dati amministrativi degli oggetti

Le operazioni API di AWS IoT seguenti vengono usate per leggere i dati degli oggetti in modo che ai dispositivi che si connettono tramite un pool di identità Amazon Cognito autenticato vengano concesse le autorizzazioni per l'esecuzione di queste operazioni solo su un set limitato di oggetti:

  • DescribeThing

  • ListJobExecutionsForThing

  • ListThingGroupsForThing

  • ListThingPrincipals

  • noncompliant:

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

    Questo esempio permette al dispositivo di eseguire l'operazione specificata su qualsiasi oggetto.

  • conforme:

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

    Questo esempio permette al dispositivo di eseguire le operazioni specificate solo su un oggetto specifico.

  • conforme:

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

    Questo esempio è conforme perché, sebbene la risorsa sia specificata con un carattere jolly (*), il carattere è preceduto da una stringa specifica, che limita il set di oggetti accessibili a quelli con i nomi che hanno il prefisso specificato.

  • noncompliant:

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

    Questo esempio permette al dispositivo di eseguire l'operazione specificata su qualsiasi oggetto.

  • conforme:

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

    Questo esempio permette al dispositivo di eseguire le operazioni specificate solo su un oggetto specifico.

  • conforme:

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

    Questo esempio è conforme perché, sebbene la risorsa sia specificata con un carattere jolly (*), il carattere è preceduto da una stringa specifica, che limita il set di oggetti accessibili a quelli con i nomi che hanno il prefisso specificato.

Sottoscrivere/pubblicare argomenti MQTT

I messaggi MQTT vengono inviati tramite il broker di messaggi AWS IoT e sono usati dai dispositivi per eseguire numerose operazioni, tra cui l'accesso allo stato delle copie shadow e dell'esecuzione dei processi e la modifica di tali stati. Una policy che concede a un dispositivo l'autorizzazione di connessione, pubblicazione o sottoscrizione per i messaggi MQTT deve limitare queste operazioni a risorse specifiche, come illustrato di seguito:

Connessione
  • noncompliant:

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

    Il carattere jolly * permette a qualsiasi dispositivo di connettersi a AWS IoT.

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

    Se iot:Connection.Thing.IsAttached non è impostato su "true" nelle chiavi delle condizioni, questo equivale al carattere jolly* dell'esempio precedente.

  • 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 specifica della risorsa contiene una variabile che corrisponde al nome del dispositivo usato per la connessione e l'istruzione di condizione limita ulteriormente l'autorizzazione controllando che il certificato usato dal client MQTT corrisponda a quello collegato all'oggetto con il nome usato.

Pubblicare
  • noncompliant:

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

    Questo esempio permette al dispositivo di aggiornare la copia shadow di qualsiasi dispositivo (* = tutti i dispositivi).

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

    Questo esempio permette al dispositivo di leggere/aggiornare/eliminare la copia shadow di qualsiasi 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 specifica della risorsa contiene un carattere jolly, che tuttavia corrisponde solo agli argomenti correlati alla copia shadow per il dispositivo il cui nome di oggetto viene usato per la connessione.

Subscribe
  • noncompliant:

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

    Questo esempio permette al dispositivo di sottoscrivere le copie shadow riservate o gli argomenti dei processi per tutti i dispositivi.

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

    Equivale all'esempio precedente, ma con l'uso del carattere jolly #.

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

    Questo esempio permette al dispositivo di visualizzare gli aggiornamenti delle copie shadow di qualsiasi dispositivo (+ = tutti i dispositivi).

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

    Le specifiche della risorsa contengono caratteri jolly, che tuttavia corrispondono solo agli argomenti correlati alla copia shadow e agli argomenti correlati ai processi per il dispositivo il cui nome di oggetto viene usato per la connessione.

Ricezione
  • conforme:

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

    si dice conforme perché il dispositivo può ricevere solo i messaggi dagli argomenti per i quali ha l'autorizzazione alla sottoscrizione.

Leggere o modificare i dati shadow o delle attività

Una policy che concede a un dispositivo l'autorizzazione per eseguire un'operazione API per l'accesso a o la modifica di copie shadow dei dispositivi o dati di esecuzione dei processi deve limitare queste operazioni a risorse specifiche. Di seguito sono riportate le operazioni API:

  • DeleteThingShadow

  • GetThingShadow

  • UpdateThingShadow

  • DescribeJobExecution

  • GetPendingJobExecutions

  • StartNextPendingJobExecution

  • UpdateJobExecution

Examples (Esempi)

  • noncompliant:

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

    Questo esempio permette al dispositivo di eseguire l'operazione specificata su qualsiasi oggetto.

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

    Questo esempio permette al dispositivo di eseguire le operazioni specificate solo su due oggetti specifici.