Ethanalyzer

mars 31, 2014  |   Blog   |     |   0 commentaire

Capture de paquet sur Cisco NX-OS

NX-OS est le système d’exploitation utilisé sur la gamme des switches Nexus et sur les switches SAN MDS  chez Cisco. Cet OS ressemble très largement à IOS (l’OS sur les switches Catalyst et les routeurs Cisco) à cause de sa CLI très similaire.
NX-OS est pourtant un OS complètement différent qui est basé sur un kernel Linux. Grâce à cela, quelques outils GNU/Linux sont disponibles, comme le laisse présager le prompt de connexion :

Cisco Nexus Operating System (NX-OS) Software
 TAC support: http://www.cisco.com/tac
 Copyright (c) 2002-2013, Cisco Systems, Inc. All rights reserved.
 The copyrights to certain works contained in this software are
 owned by other third parties and used and distributed under
 license. Certain components of this software are licensed under
 the GNU General Public License (GPL) version 2.0 or the GNU
 Lesser General Public License (LGPL) Version 2.1. A copy of each
 such license is available at
 http://www.opensource.org/licenses/gpl-2.0.php and
 http://www.opensource.org/licenses/lgpl-2.1.php

Parmi l’héritage GNU, on trouve Ethanalyzer, qui est un outil de capture de paquet en CLI  basé sur le code du célèbre Wireshark (c’est donc une sorte de tshark pour NX-OS)

Mise en pratique

Pour effectuer une capture :

 ethanalyzer local interface nom_interface

L’interface sur laquelle on capture peut être :

  • L’interface de management Out-of-Band nommée mgmt
  • L’interface qui relie les ports des cartes de ligne à la CPU, nommée inband sur les Nexus 7000.
Sur les nexus 5000 et 3000, le trafic “inband” est réparti entre deux interfaces en fonction de leur priorité. inbound-hi gère le trafic de plus haute priorité (STP, LACP, CDP, DCBX, FC, et FCoE) et inbound-low le trafic moins prioritaire (IGMP, TCP, UDP, ARP)

Ethanalyzer est donc capable de capturer les paquets à destination du switch, ce qui est très intéressant pour étudier un comportement sur le plan de contrôle (par exemple la bonne reception de BPDU STP ou LACP)
Par contre, le plan de donnée étant traité par les ASICs, il n’est pas remonté en CPU et ne peut donc pas être capturé de cette façon.
Il existe toutefois une astuce pour arriver à capturer des paquets du plan de contrôle :
L’instruction “log” placée sur une ACL, envoie une copie du paquet en CPU, ce qui permet de faire apparaître nôtre flux dans notre outil de capture.

Voici comment procéder :

1)  Création d’une ACL pour matcher notre trafic (ici le trafic SSH vers 10.218.0.3). Il ne faut pas oublier d’autoriser le reste du trafic car par defaut tout ce qui ne match pas l’ACL sera droppé.

 ip access-list acl-capture
 permit tcp any 10.218.0.3/32 eq 22 log
 permit ip any any

2) On place ensuite cette ACL sur l’interface qu’on veut écouter

 int Eth6/1
 ip access-group acl-cap in

3) On lance la capture

 Nexus7k# ethanalyzer local interface inband capture-filter "host 10.218.0.3"
 Capturing on inband
 2014-03-20 18:41:00.130943   10.5.0.249 -> 10.218.0.3  TCP 66 53300 > ssh [SYN] Seq=0 Win=5840 Len=0 MSS=1460 SACK_PERM=1 WS=1
 2014-03-20 18:41:00.131945   10.5.0.249 -> 10.218.0.3  TCP 60 53300 > ssh [ACK] Seq=1 Ack=1 Win=5840 Len=0
 2014-03-20 18:41:00.296090   10.5.0.249 -> 10.218.0.3  TCP 60 53300 > ssh [ACK] Seq=1 Ack=27 Win=5840 Len=0
 2014-03-20 18:41:00.296288   10.5.0.249 -> 10.218.0.3  SSH 78 Client Protocol: SSH-2.0-OpenSSH_3.6.1p2
 2014-03-20 18:41:00.296611   10.5.0.249 -> 10.218.0.3  TCP 590 [TCP segment of a reassembled PDU]
 2014-03-20 18:41:00.298906   10.5.0.249 -> 10.218.0.3  SSHv2 62 Client: Key Exchange Init
 2014-03-20 18:41:00.413669   10.5.0.249 -> 10.218.0.3  SSHv2 78 Client: Diffie-Hellman GEX Request
 2014-03-20 18:41:00.428362   10.5.0.249 -> 10.218.0.3  SSHv2 326 Client: Diffie-Hellman GEX Init
 2014-03-20 18:41:00.487232   10.5.0.249 -> 10.218.0.3  TCP 60 53300 > ssh [ACK] Seq=865 Ack=1651 Win=8576 Len=0
 2014-03-20 18:41:00.502604   10.5.0.249 -> 10.218.0.3  SSHv2 70 Client: New Keys
Sur les Nexus 7000 qui possèdent plusieurs VDC (contexte de switch virtuel), la capture doit être lancée depuis le VDC admin, même si l’interface physique appartient à un autre VDC

Quelques options utiles :

capture-filter : permet de spécifier les trames à capturer avec des filtres façon tcpdump ( BPF-filter )
write : permet d’écrire la sortie dans un fichier plutôt que de l’afficher à l’écran
display-filter : permet de filtrer l’affichage avec la syntaxe wireshark, utile quand on relie un fichier de capture avec la commande ethanalyzer local read file

Conclusion

Ethanalyzer est un moyen simple et efficace de réaliser une capture de paquet sur Nexus, sans avoir à mettre en oeuvre des techniques plus lourdes de port mirroring (fonctionnalités appelée SPAN ou ERSPAN sur Nexus) pour envoyer le traffic à inspecter sur une sonde dédiée.