Macsec - linux

De Wiki doc


MACsec ou IEEE 802.1AE est la norme de sécurisation de la couche MAC de l'IEEE. Il permet le chiffrement des trames Ethernet (entre deux pairs sur un LAN) au sein d'un même réseau local et, par extension, dans n'importe quel protocole d'encapsulation en surcouche de niveau 2.

Publié en 2006 (802.1AE-2006), la norme prévoyait un chiffrement des trames via le protocole GCM-AES-128 (128 bits) et un amendement de 2011 (802.1AEbn-2011) a apporté le support des clés de 256 bits. Il a par la suite été complété en 2013 (802.1AEbw-2013) par l'ajout des suites cryptographiques GCM-AES-XPN-128 et GCM-AES-XPN-256. Intégré depuis le noyau Linux 4.6 (2016), IEEE 802.1AE est utilisable via le paquet iproute2.

MACSec vient se substituer à la trame Ethernet standard en reprenant ses champs d'origines et en y ajoutant deux supplémentaires :

  • Security Tag : extension du champ EtherType
  • Message Authentication Code (Integrity Check Value ou ICV) : somme de contrôle de la trame déchiffrée

Une trame 802.1Q passe donc de la structure :

adresse MAC dst. adresse MAC src. 802.1Q EtherType/Size Data FCS

à la suivante :

Authentifié
Chiffré
adresse MAC dst. adresse MAC src. MACSec Security Tag 802.1Q EtherType/Size Data ICV FCS

Mise en œuvre

Deux machines seront utilisées dans l'exemple qui suit. Elles comportent chacune les adresses MAC suivantes :

  • Machine 1 : 44:9a:5b:fe:64:cc
  • Machine 2 : 44:9a:5b:ea:2b:08

Machine 1

Création de l'interface virtuel de chiffrement du trafic

ip link add link eth0 macsec0 type macsec encrypt on

Dans la mesure où les trames sont bornées au domaine de diffusion local d'une interface existante, celle nouvellement créée y est attachée et sera à utiliser lorsque les trames devront êtres chiffrées avant envoi (la communication sortant directement d'eth0 est toujours en clair).

La commande suivante détail les informations des interfaces MACSec. Plusieurs appairages chiffrés peuvent êtres configurés afin de réaliser une topologie en étoile confidentielle

ip macsec show

Retour de la commande

3: macsec0: protect on validate strict sc off sa off encrypt on send_sci on end_station off scb off replay off 
    cipher suite: GCM-AES-128, using ICV length 16
    TXSC: 449a5bfe64cc0001 on SA 0
    offload: off

Ajout d'un pair

ip macsec add macsec0 rx port 1 address 44:9a:5b:ea:2b:08
ip macsec show

Une ligne RXSC a été ajouté

3: macsec0: protect on validate strict sc off sa off encrypt on send_sci on end_station off scb off replay off 
    cipher suite: GCM-AES-128, using ICV length 16
    TXSC: 449a5bfe64cc0001 on SA 0
    RXSC: 449a5bea2b080001, state on
    offload: off

Création d'une clé destinée au chiffrement symétrique

dd if=/dev/urandom count=16 bs=1 2>/dev/null | hexdump | cut -c 9- | tr -d ' \n'

Attribution de cette clé dans la configuration d'appairage avec la machine 2 pour l'interface macsec0

ip macsec add macsec0 tx sa 0 pn 1 on key 00 a150a57510be82fc8c732aa899a28c17

Injection de la clé du pair dans cette même configuration

ip macsec add macsec0 rx port 1 address 44:9a:5b:ea:2b:08 sa 0 pn 1 on key 01 ff4c9f44769823abe910326dd8cc8d77

Allumage de l'interface

ip link set macsec0 up

Comme précisé plus haut, le trafic ne sera chiffré entre les deux pairs que si l'interface source de l'échange est macsec0, aussi, il convient de lui attribuer une adresse IP

ip address add macsec0 10.0.0.1/24 dev macsec0

Machine 2

Les étapes sont les mêmes en adaptant les spécificités liées au pair différent

ip link add link eth0 macsec0 type macsec encrypt on
ip macsec add macsec0 rx port 1 address 44:9a:5b:fe:64:cc
dd if=/dev/urandom count=16 bs=1 2>/dev/null | hexdump | cut -c 9- | tr -d ' \n'
ip macsec add macsec0 tx sa 0 pn 1 on key 01 ff4c9f44769823abe910326dd8cc8d77
ip macsec add macsec0 rx port 1 address 44:9a:5b:fe:64:cc sa 0 pn 1 on key 00 a150a57510be82fc8c732aa899a28c17
ip link set macsec0 up
ip address add macsec0 10.0.0.2/24 dev macsec0

Sources