Re: an issue with macsec key agreement (machine falling out of sync?)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

Yes, I’ve seen that too. Recently it seemed to have gotten better, but the issue is still there.
Although I’ve been searching for it, I’ve only come across a single observation which lead to an idea for a change.

--------------------------- src/pae/ieee802_1x_kay.c ---------------------------
index b0a418ef0..442d487f7 100644
@@ -1101,9 +1101,11 @@ ieee802_1x_mka_i_in_peerlist(struct ieee802_1x_mka_participant *participant,
 				 * values (i.e., peer having copied my MI,MN
 				 * from either of the last two MKPDUs that I
 				 * have sent). */
-				if (mn == participant->mn ||
-				    (participant->mn > 1 &&
-				     mn == participant->mn - 1))
+				/* BUG: This is shown to be too tight.
+				 * With packets being send/received out of
+				 * sequence this assumption is not valid.
+				 * Adjusted to three. */
+				if (participant->mn + 3 >= mn)
 					return true;
 			}
 		}


I’ve created a test setup which allows you to experiment with this on a single linux host.
https://gitlab.com/JaapKeuter/MACsec-sim
Now it works fairly well with three nodes, but increasing to eight, for instance, shows the failure.

Hope it helps.


> On 21 Feb 2024, at 17:34, Moritz Wilhelmy <mw-hostap@xxxxxxxxxxx> wrote:
> 
> Hello,
> 
> Before I will probably have to bury this macsec project at work I want
> to report what appears to be a bug to me in wpa_supplicant's macsec key
> agreement (MKA) implementation:
> 
> I have 3 machines: ed0, ed1 and ed2, they all share the same
> wpa_supplicant.conf with the same values for MKA pre-shared keys and
> systemd unit that starts wpa_supplicant.
> 
> Sometimes when I reboot all machines it works fine on start up, when I
> ping the IPv6 link local multicast address ff02::1%macsec0 I get
> response packets from all three machines:
> 
> ed0# ping ff02::1%macsec0
> PING ff02::1%macsec0(ff02::1%macsec0) 56 data bytes
> 64 bytes from fe80::4801:e9ff:fe34:a268%macsec0: icmp_seq=1 ttl=64 time=0.117 ms
> 64 bytes from fe80::747f:28ff:fedc:abaa%macsec0: icmp_seq=1 ttl=64 time=2.85 ms (DUP!)
> 64 bytes from fe80::60a2:b8ff:fe98:ad8f%macsec0: icmp_seq=1 ttl=64 time=4.67 ms (DUP!)
> ^C
> 
> Other times one of the machines seems to have issues with key agreement
> despite having the same shared key as the other machines (i.e. only one
> DUP! response on pinging the multicast address):
> 
> $ ssh ed1
> Warning: Permanently added 'fe80::4801:e9ff:fe34:a268%eno1' (ED25519) to the list of known hosts.
> ed1# ping ff02::1%macsec0
> PING ff02::1%macsec0(ff02::1%macsec0) 56 data bytes
> 64 bytes from fe80::4801:e9ff:fe34:a268%macsec0: icmp_seq=1 ttl=64 time=0.112 ms
> 64 bytes from fe80::60a2:b8ff:fe98:ad8f%macsec0: icmp_seq=1 ttl=64 time=4.89 ms (DUP!) <--- second DUP! from the 3rd machine is missing
> 64 bytes from fe80::4801:e9ff:fe34:a268%macsec0: icmp_seq=2 ttl=64 time=0.098 ms
> 64 bytes from fe80::60a2:b8ff:fe98:ad8f%macsec0: icmp_seq=2 ttl=64 time=2.69 ms (DUP!)
> ^C
> --- ff02::1%macsec0 ping statistics ---
> 2 packets transmitted, 2 received, +2 duplicates, 0% packet loss, time 1001ms
> rtt min/avg/max/mdev = 0.098/1.947/4.890/1.999 ms
> ed1# systemctl status wpa_supplicant
> ● wpa_supplicant.service - WPA supplicant
>     Loaded: loaded (/lib/systemd/system/wpa_supplicant.service; enabled; vendor preset: disabled)
>     Active: active (running) since Sat 2024-02-10 16:07:19 UTC; 20s ago
>   Main PID: 496 (wpa_supplicant)
>      Tasks: 1 (limit: 404)
>     Memory: 4.9M
>     CGroup: /system.slice/wpa_supplicant.service
>             └─496 /usr/sbin/wpa_supplicant -u -i br0 -Dmacsec_linux -c /etc/wpa_supplicant.conf
> 
> Feb 10 16:07:19 hostname systemd[1]: Starting WPA supplicant...
> Feb 10 16:07:19 hostname wpa_supplicant[496]: Successfully initialized wpa_supplicant
> Feb 10 16:07:19 hostname systemd[1]: Started WPA supplicant.
> Feb 10 16:07:20 hostname wpa_supplicant[496]: br0: Associated with 01:80:c2:00:00:03
> Feb 10 16:07:20 hostname wpa_supplicant[496]: br0: CTRL-EVENT-CONNECTED - Connection to 01:80:c2:00:00:03 completed [id=0 id_str=]
> Feb 10 16:07:20 hostname wpa_supplicant[496]: br0: CTRL-EVENT-SUBNET-STATUS-UPDATE status=0
> Feb 10 16:07:26 hostname wpa_supplicant[496]: KaY: duplicated SCI detected - maybe active attacker or peer selected new MI - ignore MKPDU
> Feb 10 16:07:28 hostname wpa_supplicant[496]: KaY: duplicated SCI detected - maybe active attacker or peer selected new MI - ignore MKPDU
> Feb 10 16:07:30 hostname wpa_supplicant[496]: KaY: duplicated SCI detected - maybe active attacker or peer selected new MI - ignore MKPDU
> Feb 10 16:07:33 hostname wpa_supplicant[496]: KaY: Life time has not elapsed since prior SAK distributed
> ed1# logout
> Connection to fe80::4801:e9ff:fe34:a268%eno1 closed.
> 
> $ ssh ed2
> Warning: Permanently added 'fe80::60a2:b8ff:fe98:ad8f%eno1' (ED25519) to the list of known hosts.
> ed2# systemctl status wpa_supplicant
> ● wpa_supplicant.service - WPA supplicant
>     Loaded: loaded (/lib/systemd/system/wpa_supplicant.service; enabled; vendor preset: disabled)
>     Active: active (running) since Sat 2024-02-10 16:01:48 UTC; 47s ago
>   Main PID: 496 (wpa_supplicant)
>      Tasks: 1 (limit: 404)
>     Memory: 4.8M
>     CGroup: /system.slice/wpa_supplicant.service
>             └─496 /usr/sbin/wpa_supplicant -u -i br0 -Dmacsec_linux -c /etc/wpa_supplicant.conf
> 
> Feb 10 16:01:47 hostname systemd[1]: Starting WPA supplicant...
> Feb 10 16:01:48 hostname wpa_supplicant[496]: Successfully initialized wpa_supplicant
> Feb 10 16:01:48 hostname systemd[1]: Started WPA supplicant.
> Feb 10 16:01:48 hostname wpa_supplicant[496]: br0: Associated with 01:80:c2:00:00:03
> Feb 10 16:01:48 hostname wpa_supplicant[496]: br0: CTRL-EVENT-CONNECTED - Connection to 01:80:c2:00:00:03 completed [id=0 id_str=]
> Feb 10 16:01:48 hostname wpa_supplicant[496]: br0: CTRL-EVENT-SUBNET-STATUS-UPDATE status=0
> Feb 10 16:01:54 hostname wpa_supplicant[496]: KaY: duplicated SCI detected - maybe active attacker or peer selected new MI - ignore MKPDU
> Feb 10 16:01:56 hostname wpa_supplicant[496]: KaY: duplicated SCI detected - maybe active attacker or peer selected new MI - ignore MKPDU
> ed2# logout
> Connection to fe80::60a2:b8ff:fe98:ad8f%eno1 closed.
> 
> $ ssh ed0
> Warning: Permanently added 'fe80::747f:28ff:fedc:abaa%eno1' (ED25519) to the list of known hosts.
> ed0# systemctl status wpa_supplicant
> ● wpa_supplicant.service - WPA supplicant
>     Loaded: loaded (/lib/systemd/system/wpa_supplicant.service; enabled; vendor preset: disabled)
>     Active: active (running) since Sat 2024-02-10 16:07:00 UTC; 54s ago
>   Main PID: 495 (wpa_supplicant)
>      Tasks: 1 (limit: 404)
>     Memory: 4.8M
>     CGroup: /system.slice/wpa_supplicant.service
>             └─495 /usr/sbin/wpa_supplicant -u -i br0 -Dmacsec_linux -c /etc/wpa_supplicant.conf
> 
> Feb 10 16:07:06 hostname wpa_supplicant[495]: KaY: The peer (73cec9c3a974289e25a335a4) is not my live peer - ignore MACsec SAK Use param>
> Feb 10 16:07:06 hostname wpa_supplicant[495]: KaY: Discarding Rx MKPDU: decode of parameter set type (3) failed
> Feb 10 16:07:06 hostname wpa_supplicant[495]: KaY: The peer (73cec9c3a974289e25a335a4) is not my live peer - ignore MACsec SAK Use param>
> Feb 10 16:07:06 hostname wpa_supplicant[495]: KaY: Discarding Rx MKPDU: decode of parameter set type (3) failed
> Feb 10 16:07:07 hostname wpa_supplicant[495]: KaY: The peer (73cec9c3a974289e25a335a4) is not my live peer - ignore MACsec SAK Use param>
> Feb 10 16:07:07 hostname wpa_supplicant[495]: KaY: Discarding Rx MKPDU: decode of parameter set type (3) failed
> Feb 10 16:07:09 hostname wpa_supplicant[495]: KaY: The peer (73cec9c3a974289e25a335a4) is not my live peer - ignore MACsec SAK Use param>
> Feb 10 16:07:09 hostname wpa_supplicant[495]: KaY: Discarding Rx MKPDU: decode of parameter set type (3) failed
> Feb 10 16:07:11 hostname wpa_supplicant[495]: KaY: The peer (73cec9c3a974289e25a335a4) is not my live peer - ignore MACsec SAK Use param>
> Feb 10 16:07:11 hostname wpa_supplicant[495]: KaY: Discarding Rx MKPDU: decode of parameter set type (3) failed
> 
> ^^^^ seems to me that the culprit in this case is ed0 that somehow fell
> out of sync with the others if I'm reading this right, but I didn't
> write this software so perhaps you tell me :)
> 
> Are you aware of/have you encountered this issue before? Is there any
> known solution/software version where it's fixed?
> 
> Here's some more context and diagnostical info:
> 
> ed0# wpa_supplicant -v
> wpa_supplicant v2.10
> Copyright (c) 2003-2022, Jouni Malinen <j@xxxxx> and contributors
> 
> ed0# uname -a
> Linux hostname 5.4.24 #1 SMP PREEMPT Thu Oct 7 08:39:19 UTC 2021 aarch64 aarch64 aarch64 GNU/Linux
> 
> ed0# cat /sys/class/net/br0/bridge/group_fwd_mask 
> 0x8
> 
> ed0# cat /etc/wpa_supplicant.conf 
> ctrl_interface=/var/run/wpa_supplicant
> eapol_version=3
> ap_scan=0
> fast_reauth=1
> 
> network={
>        key_mgmt=NONE
>        eapol_flags=0
>        macsec_policy=1
> 
>        mka_cak=35659df249c7c90fcaeb675ef59eb783
>        mka_ckn=83f447da8078c18a7bae35851a0349384e9da84ab45a705f304731f3dc7fee
> }
> 
> 
> 
> The file is left as copied from the [RedHat introduction][1] with some
> keys filled in where they belong and then copied identically to all
> three machines.
> 
> Sorry I had to edit the logs to remove the hostname, I've signed an NDA.
> 
> Best regards,
> 
> Moritz
> 
> [1]: https://developers.redhat.com/blog/2017/06/28/whats-new-in-macsec-setting-up-macsec-using-wpa_supplicant-and-optionally-networkmanager#
> 
> _______________________________________________
> Hostap mailing list
> Hostap@xxxxxxxxxxxxxxxxxxx
> http://lists.infradead.org/mailman/listinfo/hostap


_______________________________________________
Hostap mailing list
Hostap@xxxxxxxxxxxxxxxxxxx
http://lists.infradead.org/mailman/listinfo/hostap




[Index of Archives]     [Linux Wireless]     [Linux Kernel]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]

  Powered by Linux