Zum Hauptinhalt springen

2.4. SNMP Messages Using this Security Model (SNMP-Nachrichten unter Verwendung dieses Sicherheitsmodells)

2.4. SNMP Messages Using this Security Model (SNMP-Nachrichten unter Verwendung dieses Sicherheitsmodells)

Dieser Abschnitt beschreibt das Format und die Struktur von SNMP-Nachrichten bei Verwendung des benutzerbasierten Sicherheitsmodells.

SNMPv3 Message Format (SNMPv3-Nachrichtenformat)

Eine SNMPv3-Nachricht unter Verwendung von USM hat folgende Struktur:

SNMPv3Message ::= SEQUENCE {
msgVersion INTEGER (3),
msgGlobalData HeaderData,
msgSecurityParameters OCTET STRING,
msgData ScopedPduData
}

Message Components (Nachrichtenkomponenten)

1. msgVersion (Nachrichtenversion)

  • Typ (Type): INTEGER
  • Wert (Value): 3 (für SNMPv3)
  • Zweck (Purpose): Identifiziert die SNMP-Version

2. msgGlobalData (HeaderData) (Globale Nachrichtendaten)

Enthält globale Nachrichtenkopfzeileninfo:

HeaderData ::= SEQUENCE {
msgID INTEGER (0..2147483647),
msgMaxSize INTEGER (484..2147483647),
msgFlags OCTET STRING (SIZE(1)),
msgSecurityModel INTEGER (1..2147483647)
}

Felder (Fields):

  • msgID (Nachrichten-ID): Eindeutige Kennung zur Koordinierung von Anfrage- und Antwortnachrichten

    • Bereich: 0 bis 2147483647
    • Wird vom Anfrage/Antwort-Modell verwendet, um Antworten mit Anfragen abzugleichen
  • msgMaxSize (Maximale Nachrichtengröße): Maximale Nachrichtengröße, die der Absender akzeptieren kann

    • Minimum: 484 Oktette
    • Wird für die Nachrichtengrößenverhandlung verwendet
  • msgFlags (Nachrichtenflags): OCTET STRING von 1 Oktett mit Bit-Flags

    • Bit 0 (LSB): authFlag - 1, wenn Authentifizierung verwendet wird, sonst 0
    • Bit 1: privFlag - 1, wenn Datenschutz (Verschlüsselung) verwendet wird, sonst 0
    • Bit 2: reportableFlag - 1, wenn bei Fehler ein Report-PDU gesendet werden soll
    • Bits 3-7: Reserviert, müssen Null sein
  • msgSecurityModel (Nachrichtensicherheitsmodell): Identifiziert das verwendete Sicherheitsmodell

    • Wert: 3 für benutzerbasiertes Sicherheitsmodell (USM)

3. msgSecurityParameters (Nachrichtensicherheitsparameter)

Für USM ist dies ein OCTET STRING, der die BER-kodierten UsmSecurityParameters enthält:

UsmSecurityParameters ::= SEQUENCE {
msgAuthoritativeEngineID OCTET STRING,
msgAuthoritativeEngineBoots INTEGER (0..2147483647),
msgAuthoritativeEngineTime INTEGER (0..2147483647),
msgUserName OCTET STRING (SIZE(0..32)),
msgAuthenticationParameters OCTET STRING,
msgPrivacyParameters OCTET STRING
}

Felder (Fields):

  • msgAuthoritativeEngineID (Autoritative Engine-ID): Die snmpEngineID der autoritativen SNMP-Engine

    • Für Anfragen: Die engineID des Befehlsresponders
    • Für Benachrichtigungen: Die engineID des Benachrichtigungsinitiators
    • Für Antworten: Die engineID des Befehlsresponders
    • Für Berichte: Die engineID des Berichtsenders
  • msgAuthoritativeEngineBoots (Autoritative Engine-Starts): Boot-Zähler der autoritativen Engine

    • Bereich: 0 bis 2147483647
    • Wird bei Neuinitialisierung der Engine inkrementiert
    • Wird für Replay-Schutz verwendet
  • msgAuthoritativeEngineTime (Autoritative Engine-Zeit): Anzahl der Sekunden seit dem letzten Start

    • Bereich: 0 bis 2147483647
    • Wird jede Sekunde inkrementiert
    • Wird für Replay-Schutz und Zeitfenster-Verifizierung verwendet
  • msgUserName (Benutzername): Der Benutzer (Principal), in dessen Namen die Nachricht gesendet wird

    • Länge: 0 bis 32 Oktette
    • Muss in der usmUserTable der autoritativen Engine existieren
    • Groß-/Kleinschreibung beachtend
  • msgAuthenticationParameters (Authentifizierungsparameter): Authentifizierungs-Digest

    • Länge hängt vom Authentifizierungsprotokoll ab:
      • HMAC-MD5-96: 12 Oktette
      • HMAC-SHA-96: 12 Oktette
    • Leer (Null-Länge), wenn keine Authentifizierung
    • Über die gesamte Nachricht berechnet (mit diesem Feld zunächst auf Null gesetzt)
  • msgPrivacyParameters (Datenschutzparameter): Datenschutzprotokollparameter

    • Für CBC-DES: 8 Oktette (Salzwert)
    • Leer (Null-Länge), wenn kein Datenschutz
    • Wird verwendet, um unterschiedliche Cipher-Initialisierungsvektoren sicherzustellen

4. msgData (ScopedPduData) (Nachrichtendaten)

Die Nachrichtennutzlast, die entweder Klartext oder verschlüsselt sein kann:

ScopedPduData ::= CHOICE {
plaintext ScopedPDU,
encryptedPDU OCTET STRING
}

Wenn Datenschutz NICHT verwendet wird (privFlag = 0):

  • msgData enthält plaintext ScopedPDU (Klartext)

Wenn Datenschutz verwendet wird (privFlag = 1):

  • msgData enthält encryptedPDU (OCTET STRING)
  • Die verschlüsselten Daten sind das BER-kodierte ScopedPDU

ScopedPDU Format (ScopedPDU-Format)

ScopedPDU ::= SEQUENCE {
contextEngineID OCTET STRING,
contextName OCTET STRING,
data ANY -- PDU from RFC 3416
}

Felder (Fields):

  • contextEngineID (Kontext-Engine-ID): Die snmpEngineID für den Kontext

    • Typischerweise gleich msgAuthoritativeEngineID für Nicht-Proxy-Szenarien
    • Kann in Proxy-Szenarien abweichen
  • contextName (Kontextname): Der Kontextname

    • Wird mit contextEngineID verwendet, um die Verwaltungsinformationen zu identifizieren
    • Ermöglicht mehrere virtuelle SNMP-Kontexte auf einer einzelnen Engine
  • data (Daten): Das tatsächliche SNMP-PDU

    • GetRequest, GetNextRequest, GetBulkRequest, SetRequest, InformRequest, SNMPv2-Trap, Response oder Report

Security Level Combinations (Sicherheitsstufen-Kombinationen)

Die msgFlags bestimmen drei Sicherheitsstufen:

  1. noAuthNoPriv (Keine Authentifizierung, kein Datenschutz): authFlag=0, privFlag=0

    • Keine Authentifizierung, kein Datenschutz
    • msgAuthenticationParameters ist leer
    • msgPrivacyParameters ist leer
    • msgData ist Klartext
  2. authNoPriv (Authentifizierung ohne Datenschutz): authFlag=1, privFlag=0

    • Authentifizierung ohne Datenschutz
    • msgAuthenticationParameters enthält Digest
    • msgPrivacyParameters ist leer
    • msgData ist Klartext
  3. authPriv (Authentifizierung mit Datenschutz): authFlag=1, privFlag=1

    • Authentifizierung und Datenschutz
    • msgAuthenticationParameters enthält Digest
    • msgPrivacyParameters enthält Datenschutzparameter
    • msgData ist verschlüsselt

Hinweis: Datenschutz ohne Authentifizierung (authFlag=0, privFlag=1) ist nicht erlaubt. Solche Nachrichten müssen abgelehnt werden.

Message Flow Examples (Nachrichtenfluss-Beispiele)

Beispiel 1: noAuthNoPriv Entdeckungsanfrage

SNMPv3Message {
msgVersion: 3,
msgGlobalData: {
msgID: 12345,
msgMaxSize: 65507,
msgFlags: 0x04 (reportableFlag gesetzt),
msgSecurityModel: 3
},
msgSecurityParameters: {
msgAuthoritativeEngineID: "",
msgAuthoritativeEngineBoots: 0,
msgAuthoritativeEngineTime: 0,
msgUserName: "",
msgAuthenticationParameters: "",
msgPrivacyParameters: ""
},
msgData: plaintext ScopedPDU {
contextEngineID: "",
contextName: "",
data: GetRequest-PDU
}
}

Beispiel 2: authPriv Authentifizierte und verschlüsselte Anfrage

SNMPv3Message {
msgVersion: 3,
msgGlobalData: {
msgID: 12346,
msgMaxSize: 65507,
msgFlags: 0x07 (authFlag, privFlag, reportableFlag),
msgSecurityModel: 3
},
msgSecurityParameters: {
msgAuthoritativeEngineID: 0x80001F8880...,
msgAuthoritativeEngineBoots: 15,
msgAuthoritativeEngineTime: 3045678,
msgUserName: "admin",
msgAuthenticationParameters: 0x9F3B7A2E... (12 Oktette),
msgPrivacyParameters: 0x0000000012345678 (8 Oktette)
},
msgData: encryptedPDU (verschlüsseltes ScopedPDU)
}

Message Size Considerations (Überlegungen zur Nachrichtengröße)

Die minimale Nachrichtengröße, die Implementierungen unterstützen müssen, beträgt 484 Oktette. Dies gewährleistet:

  1. Platz für Nachrichtenkopfzeilen
  2. Mindestens minimalen PDU-Inhalt
  3. Sicherheitsparameter einschließlich Authentifizierungs-Digest

Implementierungen sollten größere Nachrichten unterstützen (z.B. 65507 Oktette für UDP auf IPv4), um Folgendes zu ermöglichen:

  • Große Variablenbindungen
  • GetBulk-Antworten mit vielen Elementen
  • Verschlüsselte Nachrichten mit Padding-Overhead

Special Message Cases (Spezielle Nachrichtenfälle)

Report Messages (Berichtsnachrichten)

Report-PDUs sind spezielle Antworten, die für Fehlerbenachrichtigung und Informationsaustausch (Entdeckung, Zeitsynchronisation) verwendet werden. Sie:

  • Können ohne Authentifizierung gesendet werden (für Entdeckung)
  • Können mit Authentifizierung gesendet werden (für andere Fehler)
  • Enthalten eine einzelne Variablenbindung mit einer Fehlerzähler-OID
  • Verwenden die msgID aus der Nachricht, die den Bericht verursacht hat

Notification Messages (Benachrichtigungsnachrichten)

Für InformRequest- und SNMPv2-Trap-PDUs:

  • Der Benachrichtigungsinitiator (notification originator) ist die autoritative Engine
  • msgAuthoritativeEngineID ist die engineID des Initiators
  • Der Benachrichtigungsempfänger muss die Zeitwerte des Initiators zwischenspeichern

Dies ist das Gegenteil des Befehlsresponder-Modells, bei dem der Befehlsresponder autoritativ ist.