ALMA MATER STUDIORUM - UNIVERSITA' DI BOLOGNA FACOLTA' DI INGEGNERIA - SEDE DI CESENA LABORATORIO DI INFORMATICA Network Management 7. Infrastruttura amministrativa e SNMPv2C (community-based) Claudio Salati Copyright © 2001 by Claudio Salati 1 INFRASTRUTTURA AMMINISTRATIVA • I PDU SNMP scambiati fra manager e agent e le operazioni eseguite di conseguenza dalla entita’ che emette o riceve un PDU dipendono in realta’ dal quadro amministrativo che regola il rapporto tra un manager ed un agent. • Autorizzazione - Un particolare manager ha diritto di eseguire sulla MIB (istanza) di un certo agent tutte le operazioni consentite dalla definizione della MIB (schema), o i suoi diritti possono essere limitati per via amministrativa? • Autenticazione – come si puo’ essere sicuri dell’identita’ di chi ha generato un PDU SNMP che si e’ ricevuto? (anche per attribuirgli il giusto livello di autorizzazione!) • Privacy – come si puo’ garantire che lo scambio di messaggi fra un manager ed un agent non sia intercettato da una terza parte? (che magari vuole conoscere lo stato del sistema per poterlo danneggiare) 2 AUTORIZZAZIONE (da RFC 1909) For security reasons, it is often valuable to be able to restrict the access rights of some management applications to only a subset of the management information in the management domain. To provide this capability, access to a context (la MIB di un sistema gestito) is via a MIB view which details a specific set of managed object types (and optionally, the specific instances of object types) within that context. For example, for a given context, there will typically always be one MIB view which provides access to all management information in that context, and often there will be other MIB views each of which contains some subset of the information. Since managed object types (and their instances) are identified via the tree-like naming structure of ISO's OBJECT IDENTIFIERs, it is convenient to define a MIB view as the combination of a set of view subtrees, where each view subtree is a sub-tree within the managed object naming tree. 3 AUTORIZZAZIONE (da RFC 1909) - continua In addition to restricting access rights by identifying (sub-)sets of management information, it is also valuable to restrict the requests allowed on the management information within a particular context. For example, one management application might be prohibited from write-access to a particular context, while another might be allowed to perform any type of operation (diversi access mode). So, by providing access rights to a management application in terms of the particular (subset) MIB view it can access for that context, then the management application is restricted in the desired manner. 4 AUTENTICAZIONE e PRIVACY (da RFC 1909) The enforcement of access rights requires the means not only to identify the entity on whose behalf a request is generated but also to authenticate such identification. Another security capability which is (optionally) provided is the ability to protect the data within an SNMPv2 operation from disclosure (i.e., to encrypt the data). This is particularly useful when sensitive data (e.g., passwords, or security keys) are accessed via SNMPv2 requests. 5 PROBLEMI di SECURITY Mascheramento Un terzo pretende falsamente di essere una enita’ autorizzata. Si deve avere la possibilita’ di accertare con certezza (autenticare) l’identita’ di chi ha generato un messaggio. Integrita’ Un terzo intercetta e modifica un messaggio prima di prolungarlo alla destinazione. Si deve avere la possibilita’ di riconoscere un messaggio alterato. Replay Un terzo intercetta i messaggi fra entita' autorizzate e li duplica e ritrasmette quando vuole lui. Si deve poter riconoscere un messaggio che sia stato ritardato o duplicato (dalla rete o da un terzo). Privacy (intercettamento) Un terzo puo' intercettare e comprendere i messaggi scambiati tra entita' autorizzate. I messaggi devono poter essere confezionati cosi' da risultare comprensibili solo al destinatario legittimo. 6 CONTROLLO DI ACCESSO (da RFC 1909) An access control policy specifies • the types of SNMPv2 requests • and associated MIB views • which are authorized • for a particular (id-)entity (on whose behalf a request is generated) • when using a particular level of security • to access a particular context (la MIB di un sistema gestito). 7 SECURITY MODEL (da RFC 1909) A security model defines the mechanisms used to achieve an administratively-defined level of security for protocol interactions: 1. by defining the security parameters associated with a communication, including the authentication and privacy algorithms and the security keys (if any) used. 2. by defining how entities on whose behalf requests are generated are identified. 3. by defining how contexts are identified. 4. by defining the mechanisms by which an access control policy is derived whenever management information is to be accessed. Per poter implementare il suo security model, una infrastruttura amministrativa definisce un proprio messaggio SNMP che incapsula il PDU SNMP e che contiene tutte le altre informazioni necessarie diverse infrastrutture amministrative definiranno in generale diversi messaggi SNMP 8 INFRASTRUTTURE AMMINISTRATIVE in SNMPv2 • Community based • Normalmente indicata come SNMPv2C • Derivata dall'infrastruttura amministrativa di SNMPv1 • Specificata in RFC 1901 (con riferimento a RFC 1157 di SNMPv1) • E' l'infrastruttura standard di SNMPv2 e quella piu' largamente implementata • User based • Normalmente indicata come SNMPv2U o USEC (User-based Security Model) • Specificata in RFC 1910 • Riutilizzata anche in SNMPv3 • Diffusamente implementata • Party based • Infrastruttura originale di SNMPv2 • poi abortita, oggi solo di valore storico 9 Community-based SNMPv2 (SNMPv2C) identita’ dell’entita’ che genera una richiesta • una community e' una relazione tra un agent e un insieme di manager • una community e' individuata da una OCTET STRING (community name) • ogni agent puo’ definire diverse community uno stesso manager puo’ appartenere a diverse community su un singolo agent • una community e’ definita localmente ad un agent diversi agent possono associare diversi insiemi di manager e di diritti di accesso/MIB view ad uno stesso community name • ogni manager deve tenere registrate tutte le community cui appartiene nell’accedere ai sistemi gestiti sotto suo controllo un manager puo’ utilizzare diversi community name per interagire con un medesimo agent a seconda dell’identita’ (log-in) dell’operatore che lo sta utilizzando 10 Community-based SNMPv2 (SNMPv2C) MIB view e access mode: diritti di accesso • una MIB view e’ definita come insieme di sottoalberi della MIBistanza • sono definiti due access mode: READ-ONLY e READ-WRITE • community profile: coppia { access mode, MIB view } • specifica le operazioni amministrativamente possibili su una certa MIB view • notare che l’access mode si applica uniformemente su tutti gli oggetti di una MIB view • per ogni community definita sull'agent viene definita una coppia {community name, community profile} : l'insieme di queste coppie definisce l'access control policy dell'agent • ogni messaggio scambiato tra manager e agent e' associato ad una community e, dopo l’autenticazione, viene assoggettato alla politica di autorizzazione definita dal relativo community profile 11 Community-based SNMPv2 (SNMPv2C) access mode: diritti di accesso • operazioni possibili su di un object-instance della MIB view • in base al MAX-ACCESS del suo object-type • in base alla definizione del community profile (access mode) notaccessible accessible -for-notify read-only read-write read-create READ-ONLY - trap trap, get trap, get trap, get READ-WRITE - trap trap, get trap, get, set trap, get, set, set-create 12 Community-based SNMPv2 (SNMPv2C) Access Control Policy Community name SNMP Agent Identity SNMP Managers’ Identity Community Profile MIB view Access Mode 13 Messaggio SNMPv2C COMMUNITY-BASED-SNMPv2 DEFINITIONS ::= BEGIN IMPORTS PDUs FROM SNMPv2-PDU; -- top-level SNMPv2C message Message ::= SEQUENCE { version INTEGER { version2 (1) }, -- modified from RFC 1157 (SNMPv1) -- indica SNMPv2, 0 indicherebbe SNMPv1 community OCTET STRING, -- community name data PDUs -- as defined in RFC 1905 } END -- N.B. diversi framework amministrativi possono richiedere diversi formati -- di Message 14 Messaggio Community Based reale l'infrastruttura amministrativa community-based e' comune sia a SNMPv1 che a SNMPv2 l'infrastruttura amministrativa community-based puo' supportare contemporaneamente SNMPv1 e V2 -- top-level community-based message per SNMPv1 e SNMPv2 Message ::= SEQUENCE { version INTEGER { version1 (0), version2 (1) }, -- indica SNMPv2 o SNMPv1 community OCTET STRING, -- community name data ANY -- PDU SNMPv1 o SNMPv2 } 15 Architettura di un agent bilingue SNMPv1 e SNMPv2 RUN-TIME SYSTEM SMIv1 RUN-TIME SYSTEM SMIv2 SNMPv1 SNMPv2 INFRASTRUTTURA AMMINISTRATIVA COMMUNITY-BASED UDP IP 16 Community-based SNMPv2 (SNMPv2C) parametri di security • non esiste nessun meccanismo di • encrittazione • autenticazione • il community name e' trasportato in chiaro • nel messaggio SNMPv2C non e' presente nessun time-stamp il community name trasportato nel messaggio serve solo come identificatore (handle) della community la definizione dell'access control policy sull'agent (e sul manager) • non e' gestibile attraverso SNMP • ma avviene solo per altra via (configurazione locale dell'agent) 17 SNMPv2C e SECURITY • mascheramento non esiste nessun metodo per proteggersi dal mascheramento: chiunque puo' leggere e riutilizzare il community name di un messaggio autentico che ha intercettato • integrita' chiunque puo' alterare un messaggio autentico che ha intercettato in modo non rilevabile • replay chiunque puo' ritrasmettere/ritardare un messaggio autentico che ha intercettato • privacy chiunque puo' leggere correttamente un messaggio autentico che sia riuscito ad intercettare 18 SNMPv2C e SECURITY: CONSEGUENZE • molte implementazioni di agent SNMPv2 (e SNMPv1) non supportano operazioni di set • o almeno non supportano l'operazione di set per oggetti una cui configurazione errata/maliziosa potrebbe portare a conseguenze disastrose • da cio' una tendenza a definire MIB (in particolare negli statement di module-compliance) nelle quali l'operazione set e' poco utilizzata (il suo supporto non e' comunque considerato un requisito) • e quindi una tendenza a utilizzare SNMP come strumento di monitoraggio piuttosto che di controllo attivo della rete • da cio' anche la necessita' di definire una evoluzione sicura di SNMPv2: SNMPv3! SNMPv3 ::= SNMPv2 + security 19 SNMPv2C: trasmissione di un messaggio // protocol entity SNMPv2 snmpV2encodePDUs(snmpV2PDUs, &snmpV2PDUsBer); // infrastruttura amministrativa community-based snmpV2CauthenticationTX( dstCommunity, dst, dstlen, localAddr, localAddrLen, snmpV2PDUsBer, &snmpV2CMsg.data); snmpV2CMsg.version = version2; // ==1, SNMPv2 snmpV2CMsg.community = dstCommunity; snmpV2CencodeMsg(snmpV2CMsg, &snmpMsgInBER); sendTo(snmpUdpSocket, &snmpMsgInBER, size(snmpMsgInBER), 0, dst, dstlen); 20 SNMPv2C: trasmissione di un messaggio notare che nel caso di SNMPv2C la procedura di autenticazione snmpV2CauthenticationTX( dstCommunity, dst, dstlen, localAddr, localAddrLen, snmpV2PDUsBer, &snmpV2CMsg.data) • al piu’ si limita a verificare che il community name sia registrato (sul manager), per l’agent indicato da dst, dstlen • non fa uso degli indirizzi mittente e destinazione, • non inserisce un time-stamp nel messaggio • non effettua nessuna elaborazione su snmpV2PDUsBer per encrittarne il contenuto o aggiungervi informazione (e.g. un timestamp) prima di copiarlo nel campo snmpV2CMsg.data 21 SNMPv2C: ricezione di un messaggio 1 actualLength = recvfrom(snmpUdpSocket, &snmpMsgInBER, MAX_UDP_DATAGRAM_SIZE, 0, from, fromlen); snmpInPkts += 1; // object-instance snmpInPkts.0 if (snmpV2CdecodeMsg(snmpMsgInBER, &snmpV2CMsg) != NOERR) { snmpInASNParseErrs +=1; // object-instance // snmpInASNParseErrs.0 // then discard } else if (snmpV2CMsg.version != version2) { snmpInBadVersions += 1; // object-instance // snmpInBadVersions.0 // then discard 22 SNMPv2C: ricezione di un messaggio 2 } else if (snmpV2CauthenticationRX( snmpV2CMsg.community, from, fromlen, localAddr, localAddrLen, snmpV2CMsg.data, &snmpV2PDUsBer) == fail) { snmpInBadCommunityNames += 1; // object-instance // snmpInBadCommunityNames.0 // then discard if (snmpEnableAuthenTraps == enabled) { // check local knowledge, and in case generate // authenticationFailure trap . . . } // il codice di risposta di errore authorizationError // non e' usato nell'infrastruttura amministrativa SNMPv2C } else if (snmpV2decodePDUs(snmpV2PDUsBer, &snmpV2PDUs) != NOERR) { snmpInASNParseErrs += 1; // then discard 23 SNMPv2C: ricezione di un messaggio 3 } else if (communityProfile(snmpV2CMsg.community, snmpV2PDUs) != allowed) { snmpInBadCommunityUses += 1; // object-instance // snmpInBadCommunityUses.0 // then discard if (snmpEnableAuthenTraps == enabled) { // check local knowledge, and in case generate // authenticationFailure trap . . . } // il codice di risposta di errore authorizationError // non e' usato nell'infrastruttura amministrativa // SNMPv2C } else { // process SNMP PDUs . . . } 24 SNMPv2C: ricezione di un messaggio notare che nel caso di SNMPv2C la procedura di autenticazione snmpV2CauthenticationRX( snmpV2CMsg.community, from, fromlen, localAddr, localAddrLen, snmpV2CMsg.data, &snmpV2PDUsBer) • si limita a verificare il community name, che e’ gia’ in chiaro • non fa uso degli indirizzi mittente e destinazione, • non ha a disposizione un time-stamp del messaggio • non deve effettuare nessuna elaborazione su snmpV2CMsg.data per decrittare il contenuto del campo, dato che questo e’ gia’ in chiaro: si limita a copiare il contenuto del campo data in snmpV2PDUsBer 25 RFC 1907: object-type citati object group: snmpCommunityGroup snmpInBadCommunityNames OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The total number of SNMP messages delivered to the SNMP entity which used a SNMP community name not known to said entity." ::= { snmp 4 } 26 RFC 1907: object-type citati object group: snmpCommunityGroup snmpInBadCommunityUses OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The total number of SNMP messages delivered to the SNMP entity which represented an SNMP operation which was not allowed by the SNMP community named in the message." ::= { snmp 5 } 27 RFC 1907: object-type citati object group: snmpGroup snmpInPkts OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The total number of messages delivered to the SNMP entity from the transport service." ::= { snmp 1 } snmpInBadVersions OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The total number of SNMP messages which were delivered to the SNMP entity and were for an unsupported SNMP version." ::= { snmp 3 } 28 RFC 1907: object-type citati object group: snmpGroup snmpInASNParseErrs OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The total number of ASN.1 or BER errors encountered by the SNMP entity when decoding received SNMP messages." ::= { snmp 6 } 29