Informe
Transcripción
Informe
Configuración, ejecución y pruebas de un agente de gestión SNMPv3 Grupo SNMPv3_B: Diego Aguilar Vidal, Luciano Rodríguez Lorenzana, Ana Román González RESUMEN Dado que el concepto de gestión es muy amplio y abarca muy diversos ámbitos, el presente documento centra sus esfuerzos en el estudio de SNMP (Simple Network Management Protocol), y su implementación de código abierto net-snmp. No será objetivo de este estudio, un desglose pormenorizado de lo que al protocolo SNMP se refiere, sin embargo, trataremos de esbozar los objetivos que se pretenden abarcar en el diseño de dicho protocolo, la estructuración de la información disponible, las características más relevantes incluidas en las diferentes revisiones del protocolo; haciendo especial hincapié en las políticas de privacidad y seguridad adoptadas , USM (User Security Model) y VACM (View-based Access Control Module). INTRODUCCIÓN El objetivo fundamental que trataremos de cubrir a lo largo del documento, será solventar los principales escollos y trabas que surgen a la hora de gestionar sistemas tan heterogéneos y en constante evolución, como son los sistemas de comunicaciones o redes de comunicaciones. En el presente documento, profundizaremos en el conocimiento del protocolo SNMP, diseñado como paliativo del complejo problema de la gestión de sistemas de comunicaciones anteriormente mencionado. Con el fin de alcanzar el objetivo prefijado, se desarrollaran las pertinentes configuraciones y validaciones, de un agente SNMP incluido en la suite NET-SNMP. Se revisarán las carencias, ventajas y desventajas de cada una de las revisiones del protocolo SNMP implementadas por NET-SNMP, realizando las validaciones funcionales y de seguridad pertinentes. Se hará especial énfasis en la demostración de las capacidades del marco de seguridad USM y el funcionamiento del control de acceso basado en el modelo VACM de SNMPv3. Una vez aclarados los objetivos y la metodología a emplear, se describe a continuación la estructura del presente documento: • Sección primera, en la que se detallan los conceptos fundamentales de SNMP, con el fin de facilitar la comprensión al lector. En esta sección, se incluirán comentarios respecto a los modelos de seguridad empleados en las distintas revisiones del protocolo SNMP, o la estructura de almacenamiento de datos que SNMP toma como referencia, entre otros aspectos. • Sección segunda, en la que se profundiza sobre la implementación del protocolo SNMP empleada, y algunas de las alternativas disponibles más destacadas. • Sección tercera, en la que se recogen todos aquellos parámetros de configuración reseñables, las diferentes pruebas realizadas y los resultados obtenidos, en base al agente de gestión SNMP empleado. • Sección cuarta, en la que se realiza un análisis de las principales conclusiones obtenidas tras las sesiones de laboratorio desempeñadas. Tienen cabida en ésta sección tanto consideraciones personales, como técnicas. CONCEPTOS BÁSICOS DE SNMP El protocolo SNMP[1] o protocolo simple de administración de red, es un protocolo de la capa de aplicación que facilita el intercambio de información de administración entre dispositivos de red. SNMP forma parte de la familia de protocolos TCP/IP y permite a los administradores supervisar el funcionamiento de la red, localizar y resolver sus anomalías, y planificar su crecimiento. Los componentes básicos de una red gestionada mediante SNMP, son: • Dispositivos administrados. • Agentes. • Sistemas administradores de red (NMS’s - Network Management Systems) o gestores. Un dispositivo administrado es un nodo de red que contiene un agente SNMP y reside en una red administrada. Estos recogen y almacenan información de administración, la cual es puesta a disposición de los NMS’s usando SNMP. Los dispositivos administrados, a veces llamados elementos de red, pueden ser routers, servidores de acceso, switches, hosts, hubs, etcétera. Un agente es un módulo de software de administración de red que reside en un dispositivo administrado. Un agente posee un conocimiento local de información de administración (memoria libre, número de paquetes IP recibidos, rutas, etcétera), la cual es traducida a un formato compatible con SNMP y organizada en jerarquías, habitualmente en una base de datos denominada MIB (Management Information Base). Un NMS ejecuta aplicaciones que supervisan y controlan a los dispositivos administrados. Los NMS’s proporcionan el volumen de recursos de procesamiento y memoria requeridos para la administración de la red. Uno o más NMS’s deben existir en cualquier red administrada. El principio de funcionamiento de SNMP reside, por lo tanto, en el intercambio de información entre gestores y agentes. Habitualmente, los agentes mantienen en cada dispositivo gestionado información acerca de su estado y su configuración. El gestor solicita al agente, a través del protocolo SNMP, la realización determinadas operaciones (get, set) con datos de gestión, gracias a las cuales se puede conocer el estado del recurso e influir en su comportamiento. Cuando se produce alguna situación anómala en un recurso gestionado, los agentes, sin necesidad de ser invocados por el gestor, emiten los denominados eventos o notificaciones, que son enviados a un gestor para que el sistema de gestión pueda actuar en consecuencia. Durante las diferentes revisiones del protocolo SNMP, se han ido mejorando sustancialmente las carencias de las versiones anteriores. SNMP en su última versión (SNMPv3) posee cambios significativos con relación a sus predecesores, sobre todo en aspectos de seguridad, sin embargo no ha sido mayoritariamente aceptado en la industria. A continuación describiremos con más detalle, algunos de los mecanismos de seguridad empleados, que son el objetivo central de estudio del presente documento. El modelo de seguridad basado en usuario o USM[2] (User-Based Security Model) proporciona los servicios de autentificación y privacidad en SNMPv3. El mecanismo de autentificación en USM, asegura que un mensaje recibido fue trasmitido por la entidad indicada en el campo correspondiente a la fuente en la cabecera del mensaje; y además, que el mensaje no fue alterado durante su tránsito, manipulado, artificialmente retardado o replicado. Con el fin de lograr la autentificación, el gestor y el agente que desean comunicarse deben compartir la misma clave secreta de autentificación, configurada previamente de forma externa a SNMPv3 (no es almacenada en la MIB y no es accesible mediante SNMP). El protocolo de autentificación utilizado puede ser el HMAC-MD5-96 o el HMAC-SHA-96. Para asegurarse de que los mensajes llegan dentro de una ventana temporal razonable, que descarte el posible retardo de mensajes y el ataque mediante mensajes replicados, se utilizan mecanismos de sincronización entre emisor y receptor, y el chequeo de la ventana temporal constituida por el intervalo temporal de emisión y recepción del mensaje. Por otro lado, USM posibilita a los gestores y a los agentes el cifrado de mensajes con el fin de prevenir que éstos sean analizados por intrusos. De nuevo, el gestor y el agente deben compartir una clave secreta configurada previamente. El algoritmo de encriptación utilizado es el CBC (Cipher Block Chaining) de DES (Data Encryption Standard), conocido también por DES-56. El modelo de control de acceso basado en vistas o VACM (Views-Based Access Control Model) permite proporcionar diferentes niveles de acceso a las MIB de los agentes, para los distintos gestores en SNMPv3. Un agente puede, de este modo, restringir el acceso de ciertos gestores a parte de su MIB, o bien limitar las operaciones susceptibles de realizar por ciertos gestores sobre una parte de su MIB. La política de control de acceso a ser utilizada por el agente para cada gestor debe estar configurada previamente; consistiendo básicamente en una tabla que detalla los privilegios de acceso para los distintos gestores autorizados. Mientras que la autentificación es realizada por usuario, el control de acceso es realizado por grupos, donde un grupo podría ser un conjunto de usuarios. NET-SNMP Y ALTERNATIVAS DISPONIBLES NET-SNMP[3]es un conjunto de aplicaciones utilizadas para implementar SNMP v1, SNMP v2c y SNMP v3 utilizando IPv4 y/o IPv6. Esta suite nos proporciona todas las herramientas necesarias para interactuar con SNMP, obtener información, manipularla, visualizarla de forma gráfica, etc. A su vez implementa un agente SNMP (snmpd), y un servicio para recibir notificaciones SNMP (snmptrapd). A modo de extensión, proporciona las librerías necesarias para el desarrollo propio de nuevas aplicaciones que interactúen con SNMP. Como alternativa a NET-SNMP, cabe destacar las diferentes utilidades proporcionadas por MG-SOFT Corporation[4] , que proporciona un agente SNMP, herramientas gráficas de visualización de MIB´s, herramientas y plantillas de desarrollo para agentes SNMP, una utilidad cliente/servidor denominada Net Inspector, cuyo objetivo principal es monitorizar eficientemente dispositivos de red. Cabe destacar, la versatilidad de las herramientas que se nos ofrecen, disponibles muchas de ellas en varias plataformas, con gran documentación, ejemplos, guías de instalación y desarrollo, etcétera. PROCEDIMIENTOS, PRUEBAS Y RESULTADOS Como punto de partida detallaremos la sintaxis de la orden snmpget, que nos permitirá interrogar y de éste modo validar, el agente SNMP durante la fase de pruebas. Su sintaxis es la siguiente[5]: snmpget –v <versión> -c(comunidad) <ip del agente> <grupo OID> ctm2x11@L9013:~> snmpget -v1 -c ltmlab 157.88.130.250 system.sysDescr.0 SNMPv2-MIB::sysDescr.0 = STRING: Cisco Internetwork Operating System Software IOS (tm) C3550 Software (C3550-I5Q3L2-M), Version 12.1(22)EA10b, RELEASE SOFTWARE (fc1) Copyright (c) 1986-2007 by cisco Systems, Inc. Compiled Thu 25-Oct-07 20:56 by antonino El valor almacenado para el OID[1] (un identificador de objeto , object ID u OID, únicamente identifica un objeto administrado en la jerarquía MIB) sysDescr.0 es una descripción del agente, que incluye por ejemplo, la fecha y hora en que fue compilado el sistema operativo del dispositivo monitorizado, por última vez. En la página del manual de snmpcmd[5] se pueden consultar los parámetros comunes para todos los comando de NET-SNMP. En concreto, los dos parámetros empleados en la ejecución de la orden snmpget anteriormente mostrada tienen el siguiente significado: -v: Especifica la versión del protocolo a usar. Por defecto, se utiliza la versión 3. -c: Especifica la comunidad. Posteriormente se indica la dirección IP de la entidad SNMP a la que se dirige la petición, y por último, el OID que se desea consultar. Una vez aclarado el funcionamiento y objetivo de la orden anterior, procedemos a generar un agente SNMPv1/2c con el fin de detallar el significado de las comunidades SNMP. Se utilizará la herramienta snmpconf, aplicación que genera un fichero de salida, snmpd.conf, empleado por el demonio snmpd para aplicar las políticas de acceso. A continuación, se muestran los pasos seguidos para la configuración del agente SNMP v1/v2c básico (Nota: con la opción –p lo crea en el directorio $HOME/.snmp del usuario): ctm2x11@balbas:~> snmpconf -p I can create the following types of configuration files for you. Select the file type you wish to create: (you can create more than one as you run this program) 1: snmpd.conf 2: snmp.conf 3: snmptrapd.conf Other options: quit Select File: 1 The configuration information which can be put into snmpd.conf is divided into sections. Select a configuration section for snmpd.conf that you wish to create: 1: Trap Destinations 2: System Information Setup 3: Access Control Setup 4: Extending the Agent 5: Monitor Various Aspects of the Running Host 6: Agent Operating Mode Other options: finished Select section: 3 Section: Access Control Setup Description: This section defines who is allowed to talk to your running snmp agent. Select from: 1: a SNMPv3 read-write user 2: a SNMPv3 read-only user 3: a SNMPv1/SNMPv2c read-only access community name 4: a SNMPv1/SNMPv2c read-write access community name Other options: finished, list Select section: 3 Configuring: rocommunity Description: a SNMPv1/SNMPv2c read-only access community name arguments: community [default|hostname|network/bits] [oid] The community name to add read-only access for: public The hostname or network address to accept this community name from [RETURN for all]: localhost The OID that this community should be restricted to [RETURN for norestriction]: Finished Output: rocommunity public localhost Obtenemos así el fichero de configuración snmp en el directorio $HOME/.snmp, en el que se ha detallado la creación de una comunidad de nombre public para SNMPv1/2c, accesible únicamente desde localhost, y sobre la cual obtendremos acceso de sólo lectura sin restricción alguna sobre ciertos OID´s de la MIB. A continuación lanzamos el agente SNMP desde un terminal: ctm2x11@balbas:~/.snmp> snmpd -f -C -c snmpd.conf localhost:10001 NET-SNMP version 5.4.1 Connection from UDP: [127.0.0.1]:35412 La última línea de la salida anterior surge tras realizar la petición al agente SNMP que se detalla a continuación. Se nos indica la correcta comunicación entre el gestor y el agente SNMP, describiéndose, el protocolo, IP y puerto a través del cual el gestor ha realizado la petición que se detalla a continuación: ctm2x11@balbas:~> snmpget -v1 -c public localhost:10001 system.sysUpTime.0 DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (447) 0:00:04.47 Tras realizar la petición, se observa en la consola correspondiente a la ejecución del agente el host y puerto del que se ha recibido dicha petición, que se corresponde con la IP de localhost, única permitida en la configuración del agente. Cabe destacar que al intentar modificar un OID de esta comunidad, como cabe de esperar al ser de solo lectura, obtenemos una negativa, como se muestra a continuación: ctm2x11@balbas:~> snmpset -v1 -c public localhost:10010 system.sysLocation.0 s "Laboratorio de CTM II" Error in packet. Reason: (noSuchName) There is no such variable name in this MIB. ctm2x11@balbas:~> snmpset -v2c -c public localhost:10010 system.sysLocation.0 s "Laboratorio de CTM II" Error in packet. Reason: noAccess Una vez comprobadas, las virtudes y debilidades de la política de comunidades, daremos un paso más y avanzaremos hacia los objetivos prefijados. Cabe destacar que la política de comunidades, permite filtrar las peticiones por acceso de host, red o subred; sin embargo, esto no deja de ser una carencia de seguridad, puesto que la información sensible que albergan las MIB utilizadas por SNMP, no dejarían de ser accesibles por personas ajenas a nuestro control que puedan cumplir en un momento determinado con las escasas restricciones impuestas. Se realizará a continuación un análisis pormenorizado de USM y VACM, demostrando su viabilidad, y describiendo como se han tratado de paliar las carencias de las políticas anteriores descritas. El fichero snmpd.conf (editado manualmente) sobre el que se han generado las pruebas contiene lo siguiente: # SECTION: Access Control Setup # This section defines who is allowed to talk to your running snmp agent. # SNMP v3 createUser ctm2x11 MD5 claveMD5 DES claveDES rouser ctm2x11 priv -V system #SNMP v1 y v2c com2sec secrosystem 127.0.0.1/32 rosystem com2sec secrwall 127.0.0.1/32 rwall com2sec secrwsystem 127.0.0.1/32 rwsystem group grouprosystem v1 secrosystem group grouprosystem v2c secrosystem group grouprosystem usm secrosystem group grouprwall v1 secrwall group grouprwall v2c secrwall group grouprwall usm secrwall group grouprwsystem v1 secrwsystem group grouprwsystem v2c secrwsystem group grouprwsystem usm secrwsystem view all included .1 view system included system access grouprwall "" any noauth exact all access grouprosystem "" any noauth exact system access grouprwsystem "" any noauth exact all sysContact ctm2x11 sysName Asignatura de CTMII all none system none none none Como se puede observar en el contenido del fichero, se define para SNMPv3 un usuario con sus contraseñas de acceso, al que se le permite interrogar al agente SNMP instanciado. Por otra parte para SNMPv1/2c, se mapean una serie de comunidades de acceso, a las que se les define los accesos garantizados, lectura, escritura o ambos simultáneamente. Consultamos con la comunidad rwall las variables system.sysName y snmp.snmpInPkts.0. El resultado esperado es que ambas puedan ser leídas y escritas. ctm2x11@balbas:~> snmpget -v2c -c rwall localhost:10008 system.sysName.0 SNMPv2-MIB::sysName.0 = STRING: Asignatura de CTMII ctm2x11@balbas:~> snmpget -v2c -c rwall localhost:10008 snmp.snmpInPkts.0 SNMPv2-MIB::snmpInPkts.0 = Counter32: 3 ctm2x11@balbas:~> snmpset -v2c -c rwall localhost:10008 system.sysLocation.0 s "Laboratorio de CTM II" SNMPv2-MIB::sysLocation.0 = STRING: Laboratorio de CTM II Consultamos con la comunidad rosystem las variables system.sysName y snmp.snmpInPkts.0. El resultado esperado es que system.sysName pueda ser leída, y que snmp.snmpInPkts.0 no. Además, ninguna de las dos debe poderse escribir. ctm2x11@balbas:~> snmpget -v2c -c rosystem localhost:10008 system.sysName.0 SNMPv2-MIB::sysName.0 = STRING: Asignatura de CTMII ctm2x11@balbas:~> snmpget -v2c -c rosystem localhost:10008 snmp.snmpInPkts.0 SNMPv2-MIB::snmpInPkts.0 = No Such Object available on this agent at this OID ctm2x11@balbas:~> snmpset -v2c -c rosystem localhost:10008 system.sysLocation.0 s "Laboratorio de CTM II" Error in packet. Reason: noAccess Consultamos con la comunidad rwsystem las variables system.sysName y snmp.snmpInPkts.0. El resultado esperado es que ambas variables puedan ser leídas y que las del grupo system puedan ser escritas. ctm2x11@balbas:~> snmpget -v2c -c rwsystem localhost:10008 system.sysName.0 SNMPv2-MIB::sysName.0 = STRING: Asignatura de CTMII ctm2x11@balbas:~> snmpget -v2c -c rwsystem localhost:10008 snmp.snmpInPkts.0 SNMPv2-MIB::snmpInPkts.0 = No Such Object available on this agent at this OID ctm2x11@balbas:~> snmpset -v2c -c rwsystem localhost:10008 system.sysLocation.0 s "Laboratorio de CTM II" SNMPv2-MIB::sysLocation.0 = STRING: Laboratorio de CTM II Consultamos con el usuario ctm2x11 de la versión 3. Este usuario tiene permisos de sólo lectura sobre la vista system. ctm2x11@balbas:~> snmpget -v3 -u ctm2x11 -l authPriv -a MD5 -A claveMD5 -x DES -X claveDES localhost:10008 system.sysName.0 SNMPv2-MIB::sysName.0 = STRING: Asignatura de CTMII ctm2x11@balbas:~> snmpget -v3 -u ctm2x11 -l authPriv -a MD5 -A claveMD5 -x DES -X claveDES localhost:10008 snmp.snmpInPkts.0 SNMPv2-MIB::snmpInPkts.0 = No Such Object available on this agent at this OID ctm2x11@balbas:~> snmpset -v3 -u ctm2x11 -l authPriv -a MD5 -A claveMD5 -x DES -X claveDES localhost:10008 system.sysLocation.0 s "Laboratorio de CTM II" Error in packet. Reason: noAccess Por último destacar dos órdenes que permiten interactuar con el agente y reescribir configuraciones de USM y VACM, sin necesidad de detener el agente: • SNMPUSM: Permite realizar un mantenimiento simple de los usuarios de un agente SNMP, mediante la manipulación de la tabla USM del agente. El usuario que lo ejecuta, necesita poseer permisos de escritura en la tabla usmUserTable de la MIB del agente. Este comando permite realizar una modificación en la tabla USM del agente, sin necesidad de detener el mismo para añadir, modificar o eliminar usuarios. A continuación se muestras dos ejemplos de creación y clonación de un usuario. ctm2x11@balbas:~> snmpusm -v3 -u ctm2x11 -l authPriv -a MD5 -A claveMD5 -x DES -X claveDES localhost:10008 create nuevo User successfully created. ctm2x11@balbas:~> snmpusm -v3 -u ctm2x11 -l authPriv -a MD5 -A claveMD5 -x DES -X claveDES localhost:10008 cloneFrom nuevo ctm2x11 User successfully cloned. • SNMPVACM: Permite realizar un mantenimiento simple de las tablas VACM de un agente SNMP. Su utilidad reside en que no es necesario detener el agente SNMP para realizar operaciones. A continuación se muestra el uso de este comando para la creación de una nueva entrada de la lista de acceso: ctm2x11@balbas:~> snmpvacm -v3 -u ctm2x11 -l authPriv -a MD5 -A claveMD5 -x DES -X claveDES localhost:10008 createSec2Group 3 nuevo nombregrupo Sec2group successfully created. ctm2x11@balbas:~> snmpvacm -v3 -u ctm2x11 -l authPriv -a MD5 -A claveMD5 -x DES -X claveDES localhost:10008 createView vista all "" View successfully created. ctm2x11@balbas:~> snmpvacm -v3 -u ctm2x11 -l authPriv -a MD5 -A claveMD5 -x DES -X claveDES localhost:10008 createAccess nombregrupo 3 3 1 vista none none Access successfully created. CONCLUSIONES SNMP es un protocolo sencillo pero potente, permite monitorizar los recursos de red sin sobrecargar de sobremanera los dispositivos que intervienen en su ámbito de aplicación. No obstante, las sucesivas revisiones que se han llevado a cabo y las venideras, incrementarán la complejidad y las posibilidades de esta filosofía de gestión, aunque ello supondrá obviamente un aumento del consumo de recursos. Por otra parte, son necesarias mejoras, como se ha ido demostrando, puesto que la definición de SNMP más primitiva carecía de mecanismos de seguridad, y muchos de los avances en las revisiones siguientes, no fueron capaces de paliar completamente el problema existente. SNMPv3 ha supuesto un gran avance en cuanto a privacidad y seguridad se refiere, añadiendo posibilidades de cifrado, autentificación unitaria de usuarios, modelos de vistas definidas exhaustivamente y de forma individual, normalizando y paliando las carencias anteriores. A nivel personal, aunque nuestro aprendizaje de SNMP resulte un tanto básico, se torna interesante comprender la problemática de la gestión integrada y lo complicado de encontrar soluciones simples, pero eficientes y robustas. Como grupo con características un tanto particulares, destacar el esfuerzo que hemos tenido que realizar para trabajar en horas fuera del horario lectivo, con el fin de equiparar nuestros avances y ritmo de trabajo con el de nuestros compañeros. Aunque la práctica una vez realizada pueda parecer liviana y capaz de ser resumida en unos cuantos comandos, la documentación, el esfuerzo de aprendizaje y comprensión de lo desconocido, hasta alcanzar una visión global del problema, su dimensión y las soluciones que se han tomado por parte de aquellos que trabajan en el diseño de soluciones como SNMP, compensa con creces lo liviano y escueto del informe y la presentación. BIBLIOGRAFÍA [1] [2] [3] [4] [5] http://es.wikipedia.org/wiki/SNMP http://www.ramonmillan.com/tutoriales/snmpv3.php http://www.net-snmp.org/ http://www.mg-soft.com/index.html Páginas de manual incluidas en la distribución del sistema operativo, orden man.