Übermäßig permissive AWS IoT-Richtlinien - AWS IoT Device Defender

Übermäßig permissive AWS IoT-Richtlinien

Eine AWS IoT-Richtlinie gewährt Berechtigungen, die zu weit gefasst oder uneingeschränkt sind. Sie berechtigt zum Senden oder Empfangen von MQTT-Nachrichten für eine breite Palette von Geräten oder zum Aufrufen oder Ändern von Shadow- und Auftragsausführungsdaten für eine breite Palette von Geräten.

Im Allgemeinen sollte eine Richtlinie für ein Gerät den Zugriff auf Ressourcen gewähren, die nur dem betreffenden Gerät und keinem anderen oder nur sehr wenigen anderen Geräten zugeordnet sind. Bis auf einige Ausnahmen gilt die Verwendung eines Platzhalters (z. B. „*“) zur Angabe von Ressourcen in einer solchen Richtlinie als zu weit gefasst oder uneingeschränkt.

Diese Prüfung wird wie IOT_POLICY_OVERLY_PERMISSIVE_CHECK in der CLI und API angezeigt.

Schweregrad: Kritisch

Details

Der folgende Ursachencode wird zurückgegeben, wenn diese Prüfung eine nicht-konforme AWS IoT-Richtlinie findet:

  • ALLOWS_BROAD_ACCESS_TO_IOT_DATA_PLANE_ACTIONS

Warum dies wichtig ist

Ein Zertifikat, eine Amazon Cognito-Identität oder eine Objektgruppe mit einer übermäßig großzügigen Richtlinie kann sich, sofern kompromittiert, auf die Sicherheit Ihres gesamten Kontos auswirken. Ein Angreifer könnte einen solchen umfassenden Zugriff zum Lesen oder Ändern von Schatten, Aufträgen oder Auftragsausführungen für alle Ihre Geräte verwenden. Alternativ könnte ein Angreifer ein kompromittiertes Zertifikat verwenden, um böswillige Geräte zu verbinden oder einen DDoS-Angriffen in Ihrem Netzwerk zu starten.

So lässt es sich beheben

Gehen Sie wie folgt vor, um alle nicht konformen Richtlinien zu korrigieren, die an Objekte, Objektgruppen oder andere Entitäten angefügt sind:

  1. Verwenden Sie CreatePolicyVersion zum Erstellen einer neuen, konformen Version der Richtlinie. Legen Sie das Flag setAsDefault auf „true“ fest. (Dies macht diese neue Version operativ für alle Entitäten, die die Richtlinie verwenden.)

  2. Fordern Sie mit ListTargetsForPolicy eine Liste von Zielen (Zertifikate, Objektgruppen) an, an die die Richtlinie angefügt ist, und bestimmen Sie, welche Geräte in den Gruppen enthalten sein oder welche die Zertifikate zum Herstellen einer Verbindung verwenden sollen.

  3. Stellen Sie sicher, dass alle zugeordneten Geräte in der Lage sind, eine Verbindung mit AWS IoT herzustellen. Wenn ein Gerät keine Verbindung herstellen kann, führen Sie mit SetPolicyVersion ein Rollback der Standardrichtlinie auf die vorherige Version durch, überarbeiten Sie die Richtlinie und versuchen Sie es erneut.

Sie können mit Abhilfemaßnahmen für Folgendes verwenden:

  • Wenden Sie die Abhilfemaßnahme REPLACE_DEFAULT_POLICY_VERSION auf Ihre Prüfungsergebnisse an, um diese Änderung vorzunehmen.

  • Wenden Sie die Abhilfemaßnahme PUBLISH_FINDINGS_TO_SNS an, wenn Sie eine benutzerdefinierte Antwort als Antwort auf die Amazon SNS-Nachricht implementieren möchten.

Weitere Informationen finden Sie unter Abschwächungsaktionen.

Verwenden Sie AWS IoT Core-Richtlinienvariablen, um dynamisch auf spezifische AWS IoT-Ressourcen in Ihren Richtlinien zu verweisen.

MQTT-Berechtigungen

MQTT-Nachrichten werden über den AWS IoT Message Broker gesendet und von Geräten für die Ausführung zahlreicher Aktionen verwendet, darunter zum Abrufen und Ändern des Schattenstatus und des Aufgabenausführungsstatus. Eine Richtlinie, die ein Gerät zum Verbinden mit und Veröffentlichen oder Abonnieren von MQTT-Nachrichten berechtigt, sollte diese Aktionen wie folgt auf bestimmte Ressourcen einschränken:

Verbinden
  • Nicht regelkonform:

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

    Das Platzhalterzeichen „*“ erlaubt jedem Gerät, eine Verbindung mit AWS IoT herzustellen.

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

    Außer wenn iot:Connection.Thing.IsAttached in den Bedingungsschlüsseln auf „true“ gesetzt wurde, ist dies gleichbedeutend mit dem Platzhalter „*“ im vorherigen Beispiel.

  • Regelkonform:

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

    Die Ressourcenspezifikation enthält eine Variable, die dem Gerätenamen entspricht, der zum Herstellen der Verbindung verwendet wurde. Die Bedingungsanweisung schränkt die Berechtigung weiter ein, indem überprüft wird, ob das vom MQTT-Client verwendete Zertifikat mit dem übereinstimmt, das dem Objekt mit dem verwendeten Namen zugewiesen ist.

Veröffentlichen
  • Nicht regelkonform:

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

    Dies berechtigt das Gerät dazu, den Shadow eines jeden beliebigen Geräts zu aktualisieren (* = alle Geräte).

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

    Dies berechtigt das Gerät dazu, den Schatten eines beliebigen Geräts zu lesen, aktualisieren oder löschen.

  • Regelkonform:

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

    Die Ressourcenspezifikation enthält einen Platzhalter, dieser findet als Übereinstimmung aber nur schattenbezogene Themen für das Gerät, dessen Objektname zum Herstellen der Verbindung verwendet wird.

Abonnieren
  • Nicht regelkonform:

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

    Dies berechtigt das Gerät dazu, reservierte Shadow- oder Auftragsthemen für alle Geräte zu abonnieren.

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

    Vergleichbar mit dem vorherigen Beispiel, aber mit dem #-Platzhalter.

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

    Dies berechtigt das Gerät dazu, Schattenaktualisierungen auf jedem beliebigen Gerät (+ = alle Geräte) anzuzeigen.

  • Regelkonform:

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

    Die Ressourcenspezifikationen enthalten Platzhalter, diese finden als Übereinstimmung aber nur schattenbezogene Themen und auftragsbezogene Themen für das Gerät, dessen Objektname zum Herstellen der Verbindung verwendet wird.

Empfangen
  • Regelkonform:

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

    Dies ist konform, da das Gerät nur Nachrichten von Themen empfangen kann, für die es über die Berechtigung zum Abonnieren verfügt.

Schatten- und Auftragsberechtigungen

Eine Richtlinie, die ein Gerät dazu berechtigt, eine API-Aktion zum Aufrufen oder Ändern von Device Shadows oder Auftragsausführungsdaten auszuführen, sollte diese Aktionen auf bestimmte Ressourcen einschränken. Im Folgenden sind die API-Aktionen aufgeführt:

  • DeleteThingShadow

  • GetThingShadow

  • UpdateThingShadow

  • DescribeJobExecution

  • GetPendingJobExecutions

  • StartNextPendingJobExecution

  • UpdateJobExecution

Beispiele

  • Nicht regelkonform:

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

    Dies berechtigt das Gerät dazu, die angegebene Aktion für ein beliebiges Objekt auszuführen.

  • Regelkonform:

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

    Dies berechtigt das Gerät dazu, die angegebenen Aktionen für nur zwei bestimmte Objekte auszuführen.