Sécurisation de SNMP
Sommaire • Introduction - Composants utilisés • Stratégies de sécurité SNMP - Choisir un bon nom de Communauté SNMP - Paramétrer la vue SNMP - Paramétrer le nom de Communauté avec des listes d'accès - Paramétrer SNMP version 3 - Configurer des listes d'accès sur des interfaces - Les rACLs - Les ACLS d'infrastructure - Fonctionnalité sécurité sur les commutateurs LAN Catalyst • Comment vérifier les erreurs SNMP
Introduction Il est devenu de plus en plus important de sécuriser le réseau aujourd'hui et plus particulièrement quand les vulnérabilités de SNMP (Simple Network Management Protocol) peuvent être régulièrement exploitées pour produire un déni de service. Voici quelques méthodes utilisées pour sécuriser SNMP. Composants utilisés Les informations contenues dans ce document sont basées sur les versions matériel- les et logicielles suivantes: ● SNMP View IOS Cisco Release 10.3 ou suivantes ● SNMP version 3 introduite dans la release IOS Cisco 12.0(3)T. Stratégies pour sécuriser SNMP Choisir un bon nom de communauté Ce n'est pas une bonne pratique que le choix de public avec lecture seule et private avec lecture et écriture comme noms de communautés. Paramétrer la vue (View) SNMP La commande Setup SNMP view peut limiter l'accès de l'utilisateur à une partie de la MIB (Management Information Base). Par défaut il n'y a pas SNMP view entry exists. Cette commande est configurée en mode de configuration global et a été introduite dans l'IOS Cisco version 10.3. Elle fonctionne de manière similaire à la commande access-list par le fait que si vous avez une commande SNMP view sur certains arbres de la MIB, tous les autres arbres sont explicitement non accessibles. Toutefois, l'ordre n'est pas important car la liste entière est lue pour trouver une cor- respondance avant de se terminer. Pour créer ou mettre à jour une entrée de vue, utilisez la commande snmp-server view en mode de configuration global. Pour retirer l'entrée vue du serveur SNMP spécifié, utilisez la forme no de cette commande. Syntaxe: snmp−server view view−name oid−tree {included | excluded} no snmp−server view view−name Description de la syntaxe: ● view-name - Etiquette pour l'enregistrement vue que vous créez ou mettez à jour. ce nom est utilisé pour référencer l'enregistrement.
● oid-tree - Identifieur d'objet de ASN ● oid-tree - Identifieur d'objet de ASN.1 ( Abstract Syntax Notation One) du sous-ar- bre devant être exclus ou inclus dans la vue. Pour identifier le sous-arbre, spéci- fiez une chaîne de caractères constituée de chiffres telle que 1.3.6.2.4 ou un mot tel que system. Remplacez un sous-identifieur unique par une astérisque (*) pour spécifier une famille de sous-arbres; par exemple 1.3.*.4. ● included|excluded - Type de vue. Vous devez spécifier soit included soit excluded. Deux vues standards prédéfinies peuvent être utilisées quand une vue est requise au lieu d'en définir. L'une est everything ce qui indique que l'utilisateur peut voir tous les objets. L'autre est restricted ce qui indique que l'utilisateur peut voir trois groupes: system, snmpStats et snmpParties. Les vues prédéfinies sont décrites dans le RFC 1447. Note: La première commande snmp-server que vous entrez valide les deux versions de SNMP. L'exemple suivant crée une vue qui inclut tous les objets du groupe system sauf pour sysServices (System 7) et tous les objets de l'interface 1 dans le groupe interfaces de la MIB-II. snmp−server view agon system included snmp−server view agon system.7 excluded snmp−server view agon ifEntry.*.1 included Voici un exemple complet pour l'application de nom de communauté MIB et la sortie de snmpwalk avec view. Cette configuration définit une vue qui refuse l'accès SNMP pour la table ARP (Address Resolution Protocol) (atEntry) et la MIB privée Cisco. snmp−server view myview mib−2 included snmp−server view myview atEntry excluded snmp−server view myview cisco included snmp−server community public view myview RO 11 snmp−server community private view myview RW 11 snmp−server contact pvanderv@cisco.com
Voici la commande et la sortie pour le groupe System MIB-II: NMSPrompt 82 % snmpwalk cough system system.sysDescr.0 : DISPLAY STRING− (ascii):Cisco Internetwork Operating System Software IOS (tm) 2500 Software (C2500−JS−L), Version 12.0(1)T,RELEASE SOFTWARE (fc2) Copyright (c) 1986−1998 by cisco Systems, Inc. Compiled Wed 04−Nov−98 20:37 by dschwart system.sysObjectID.0 : OBJECT IDENTIFIER:.iso.org.dod.internet.private. enterprises.cisco.ciscoProducts.system.sysUpTime.0 : Timeticks: (306588588) 35 days, 11:38:05.88 system.sysContact.0 : DISPLAY STRING− (ASCII):pvanderv@cisco.com system.sysName.0 : DISPLAY STRING− (ASCII):cough system.sysLocation.0 : DISPLAY STRING− (ASCII): system.sysServices.0 : INTEGER: 78 system.sysORLastChange.0 : Timeticks: (0) 0:00:00.00 NMSPrompt 83 % Voici la commande et la sortie pour le groupe System Local Cisco NMSPrompt 83 % snmpwalk cough lsystem cisco.local.lsystem.romId.0 : DISPLAY STRING− (ASCII): System Bootstrap, Version 11.0(10c), SOFTWARE Copyright (c) 1986−1996 by cisco Systems cisco.local.lsystem.whyReload.0 : DISPLAY STRING− (ASCII):power−on cisco.local.lsystem.hostName.0 : DISPLAY STRING− (ASCII):cough Voici la commande et la sortie pour la table ARP MIB-II NMSPrompt 84 % snmpwalk cough atTable no MIB objects contained under subtree. NMSPrompt 85 %
Paramétrer le nom de communauté SNMP avec une liste d'accès Les meilleures pratiques recommandent l'application de listes d'accès (ACLs) aux noms de communauté et de s'assurer que des noms de communautés pour les requêtes ne soient pas les mêmes que les noms de communautés pour les notifications. Les listes d'accès fournissent une autre protection quand elles sont utilisées avec d'autres me- sures de protection. Cet exemple paramètre une ACL avec un nom de communauté: access−list 1 permit 1.1.1.1 snmp−server community string1 ro 1 L'utilisation de noms de communautés différents pour les requêtes et les Traps réduit la probabilité d'attaques supplémentaires ou de corruption si le nom de communauté est découvert par un attaquant soit en corrompant un équipement distant soit en es- pionnant sans autorisation un message Trap sur le réseau. Une fois que vous avez validé les Traps avec un nom de communauté, la communauté doit être validée pour l'accès SNMP dans certains IOS Cisco. Vous devez explicitement dévalider cette communauté. Par exemple: access−list 10 deny any snmp−server host 1.1.1.1 mystring1 snmp−server community mystring1 RO 10
Paramétrer SNMP Version 3 SNMP Version 3 a été introduit dans l'IOS Cisco version 12.0 mais non communément utilisé dans la gestion de réseau. Pour configurer SNMP version 3, suivre ces étapes: 1. Affecter un "Engine ID" pour l'entité SNMP (optionnel) 2. Définir un utilisateur , userone, appartenant au groupe groupone et appliquez noAuthentication (no password) et noPrivacy (pas de cryptage) à cet utilisateur. 3. Définir un utilisateur , usertwo, appartenant au groupe grouptwo et appliquez noAuthentication (no password) et noPrivacy (pas de cryptage) à cet utilisateur. 4. Définir un utilisateur , userthree, appartenant au groupe groupthree et appliquez Authentication (le mot de passe est user3passwd) et noPrivacy (pas de cryptage) à cet utilisateur. 5. Définir un utilisateur , userfour, appartenant au groupe groupfour et appliquez Authentication (le mot de passe est user4passwd) et Privacy (cryptage des-56) à cet utilisateur. 6. Définir un groupe, groupone, utilisant User Security Model (USM) V3 et avec l'accès en lecture sur la vue v1default (par défaut). 7. Définir un groupe, grouptwo, utilisant User Security Model (USM) V3 et avec l'accès en lecture sur la vue myview. 8. Définir un groupe, groupthree, utilisant User Security Model (USM) V3 et avec l'accès en lecture sur la vue v1default (par défaut) et en utilisant l'authentification. 9. Définir un groupe, groupfour, utilisant User Security Model (USM) V3 et avec l'accès en lecture sur la vue v1default (par défaut) en utilisant l'authentification et le cryptage. 10.Définir une vue , myview, qui donne l'accès en lecture sur la MIB-II et refuse l'accès en lecture sue la MIB privée Cisco. La sortie de la commande show-running donne des lignes supplémentaires pour le groupe public du au fait qu'une communauté public en lecture seule a été définie. La sortie de la commande show running ne montre pas userthree. Exemple: snmp−server engineID local 111100000000000000000000 snmp−server user userone groupone v3 snmp−server user usertwo grouptwo v3 snmp−server user userthree groupthree v3 auth md5 user3passwd snmp−server user userfour groupfour v3 auth md5 user4passwd priv des56 user4priv snmp−server group groupone v3 noauth snmp−server group grouptwo v3 noauth read myview snmp−server group groupthree v3 auth snmp−server group groupfour v3 priv snmp−server view myview mib−2 included snmp−server view myview cisco excluded snmp−server community public RO
Voici la commande et sa sortie pour le groupe MIB-II System et pour l'utilisateur userone. NMSPrompt 94 % snmpwalk −v3 −n "" −u userone −l noAuthNoPriv clumsy system Module SNMPV2−TC not found system.sysDescr.0 = Cisco Internetwork Operating System Software IOS (TM) 4500 Software (C4500−IS−M), Version 12.0(3)T,RELEASE SOFTWARE (fc1) Copyright (c) 1986−1999 by cisco Systems, Inc. Compiled Tue 23−Feb−99 03:59 by ccai system.sysObjectID.0 = OID: enterprises.9.1.14 system.sysUpTime.0 = Timeticks: (28208096) 3 days, 6:21:20.96 system.sysContact.0 = system.sysName.0 = clumsy.cisco.com system.sysLocation.0 = system.sysServices.0 = 78 system.sysORLastChange.0 = Timeticks: (0) 0:00:00.00 NMSPrompt 95 % Voici la commande et sa sortie pour le groupe MIB-II System et pour l'utilisateur usertwo. NMSPrompt 95 % snmpwalk −v3 −n "" −u usertwo −l noAuthNoPriv clumsy system system.sysUpTime.0 = Timeticks: (28214761) 3 days, 6:22:27.61 Voici la commande et sa sortie pour le groupe Cisco Local System et pour l'utilisateur userone. NMSPrompt 98 % snmpwalk −v3 −n "" −u userone −l noAuthNoPriv clumsy .1.3.6.1.4.1.9.2.1 enterprises.9.2.1.1.0 = "..System Bootstrap, Version 5.2(7b) [mkamson 7b], RELEASE SOFTWARE Inc..." enterprises.9.2.1.2.0 = "reload" enterprises.9.2.1.3.0 = "clumsy" enterprises.9.2.1.4.0 = "cisco.com" Voici la commande et sa sortie montrant que vous ne pouvez pas accéder au groupe Cisco Local System pour l'utilisateur usertwo. NMSPrompt 99 % snmpwalk −v3 −n "" −u usertwo −l noAuthNoPriv clumsy .1.3.6.1.4.1.9.2.1 enterprises.9.2.1 = No more variables left in this MIB View NMSPrompt 100 %
La commande suivant et le résultat de sa sortie sont pour tcpdump personnalisés ( patch pour le support de de SNMP version 3 et additif pour printf). NMSPrompt 102 % snmpget −v3 −n "" −u userone −l noAuthNoPriv clumsy system.sysName.0 Module SNMPV2−TC not found system.sysName.0 = clumsy.cisco.com Paramétrer des listes d'accès sur des interfaces La fonctionnalité des ACLs fournit des mesures de sécurité pour la prévention des at- taques telles que "IP Spofing". L'ACL peut être appliquée en entrée ou en sortie sur les interfaces des routeurs. Sur les plateformes qui n'ont pas l'option pour utiliser les "receive ACL" (rACLs), il est possible d'autoriser UDP (User Datagram Protocol) vers le routeur à partir d'adresses IP de confiance avec des ACLs sur les interfaces. La liste d'accès étendue suivante peut être adaptée à votre réseau. Cet exemple présu- me que le routeur à les adresse IP 192.168.10.1 et 172.16.1.1 configurées sur ses in- terfaces et que tout accès SNMP est restreint à une station de gestion avec l'adresse IP 10.1.1.1 et que celle-ci a besoin de communiquer uniquement avec l'adresse IP 192.168.10.1. access−list 101 permit udp host 10.1.1.1 host 192.168.10.1 La liste d'accès doit être appliquée à toutes les interfaces en utilisant les commandes de configuration suivantes: interface ethernet 0/0 ip access−group 101 in Tous les équipements qui communiquent directement avec le routeur sur des ports UDP auront besoin d'êtres mentionnés dans la liste d'accès. Le logiciel IOS Cisco uti- lise les ports dans l'intervalle 49152 à 65535 comme port source pour les sessions sortantes comme les requêtes DNS (Domain Name System) par exemple. Pour les équipements qui ont plusieurs adresses configurées ou plusieurs hosts qui ont besoin de communiquer avec le routeur ceci n'est pas une solution évolutive. rACLs Pour les plateformes distribuées, les rACLs peuvent être une option commençant dans l'IOS Cisco release 12.0(21)S2 pour les routeurs Cisco 12000 Gigabit Switch Router (GSR) et Cisco 7500 Release 12.0(24)S. Les "receive access-list" protègent l'équipement du trafic néfaste avant que celui-ci ait un impact sur le processeur de route. La voie des "receive access-lists" est également considéré comme une bonne pratique de sécu- rité réseau et doit être considérée comme un additif à long terme pour une bonne sé- curité réseau tout comme une défense contre cette vulnérabilité spécifique. La charge CPU est distribuée sur les processeurs de cartes de ligne et aide à limiter la charge du processeur principal. Le document intitulé GSR: Receive Access Control Lists vous aidera à identifier et à autoriser le trafic légitime vers votre équipement et à refuser tous les paquets non désirés.
snmp−server community public RO 10 Les ACLs d'infrastructure Bien qu'il soit souvent difficile de bloquer le trafic transitant dans votre réseau, il est possible d'identifier le trafic qui ne doit jamais joindre vos équipements d'infrastruc- ture et bloquer ce trafic à l'entrée de votre réseau. Les ACLs d'infrastructure (iACLs) sont considérées comme une très bonne pratique de sécurité réseau tout comme une défense contre cette vulnérabilité particulière. Le document intitulé Protecting your Core: Infrastructure Protection Access Control Lists présente les conseils et les tech- niques de déploiement pour les iACLs. Fonctionnalité Cisco Catalyst LAN Switch Security La fonctionnalité IP Permit list restreint au Telnet entrant et l'accès SNMP au commut- ateur à partir d'une adresse IP source non autorisée. Les messages Syslog et les Traps SNMP sont supportés pour notifier à un système de gestion les violations d'accès ou les accès non autorisés quand ceux-ci se produisent. Une combinaison des fonctionnalités de sécurité de l'IOS Cisco peut être utilisée pour gérer les routeurs et les commutateurs Cisco. Une politique de sécurité a besoin d'être établie afin de limiter le nombre de stations de gestion capables d'accéder aux commu- tateurs et aux routeurs. Comment vérifier les erreurs SNMP Configurez les ACLs de communauté SNMP avec le mot-clé log. Vérifiez syslog pour les accès qui ont échoués comme suit: access−list 10 deny any log snmp−server community public RO 10 Quand quelqu'un essaiera d'accéder au routeur avec la communauté public, vous verrez un message syslog similaire au suivant: %SEC−6−IPACCESSLOGS: list 10 denied 172.16.1.15packet Cette sortie signifie que la liste d'accès 10 a refusé cinq paquets SNMP issus du host 172.16.1.1. Vérifiez périodiquement les erreurs SNMP en exécutant la commande show snmp comme suit: router#show snmp Chassis: 21350479 17005 SNMP packets input 37 Bad SNMP version errors** 15420 Unknown community name** 0 Illegal operation for community name supplied 1548 Encoding errors** 0 Number of requested variables 0 Number of altered variables 0 Get−request PDUs 0 Get−next PDUs 0 Set−request PDUs 0 SNMP packets output 0 Too big errors (Maximum packet size 1500) 0 No such name errors 0 Bad values errors 0 General errors 0 Response PDUs 0 Trap PDUs Regardez les compteurs marqués ** pour les accroissements anormaux des erreurs qui peuvent indiquer des tentatives d'exploitation de ces vulnérabilités.