Macsec - linux
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
- https://developers.redhat.com/blog/2016/10/14/macsec-a-different-solution-to-encrypt-network-traffic
- https://www.man7.org/linux/man-pages/man8/ip-macsec.8.html
- https://www.cisco.com/c/en/us/td/docs/switches/lan/catalyst9200/software/release/16-10/configuration_guide/sec/b_1610_sec_9200_cg/macsec_encryption.html