{"id":3569,"date":"2010-12-23T23:05:12","date_gmt":"2010-12-23T22:05:12","guid":{"rendered":"http:\/\/security-planet.de\/?p=3569"},"modified":"2010-12-23T23:05:12","modified_gmt":"2010-12-23T22:05:12","slug":"cisco-ios-eigrp-authentifizierung-mit-key-rollover","status":"publish","type":"post","link":"https:\/\/cyber-fi.net\/index.php\/2010\/12\/23\/cisco-ios-eigrp-authentifizierung-mit-key-rollover\/","title":{"rendered":"Cisco IOS: EIGRP-Authentifizierung mit Key-Rollover"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.iwen.de\/wp-content\/uploads\/2008\/12\/router.png\" alt=\"\" title=\"router\" width=\"70\" height=\"49\" class=\"alignright size-full wp-image-643\" \/>\u00dcber die Qualit\u00e4t der Cisco Schulungsunterlagen <a href=\"http:\/\/security-planet.de\/2007\/06\/07\/qualitat-der-cisco-trainingsmaterialien\/\">habe ich<\/a> mich <a href=\"http:\/\/security-planet.de\/2010\/02\/19\/tautologie\/\">schon ab und<\/a> an mal <a href=\"http:\/\/security-planet.de\/2006\/11\/19\/cisco-ios-uniform-fragmentation-bei-ipsec\/\">ausgelassen<\/a>.<br \/>\nUnd w\u00e4hrend ich mich gerade auf eine neue Kursversion eines Security-Kurses vorbereite, f\u00e4llt mir schon wieder eine Sache auf, die man besser nicht so macht, wie es im Kurs beschrieben ist. Beim Thema Routing-Protokoll-Authentifizierung findet sich dort eine Key-Chain mit den folgenden send- und accept-lifetimes:<\/p>\n<pre>key chain MYKEYS\n key 1\n   key-string ThisIsKey1\n   accept-lifetime 04:00:00 Jan 1 2010 04:00:00 Feb 1 2012\n   send-lifetime 04:00:00 Jan 1 2010 04:00:00 Jan 1 2012\n key 2\n   key-string ThisIsKey2\n   accept-lifetime 04:00:00 Jan 1 2012 04:00:00 Feb 1 2014\n   send-lifetime 04:00:00 Jan 1 2012 04:00:00 Jan 1 2014\n<\/pre>\n<p>Die accept-lifetime des zweiten Keys schlie\u00dft sich hier genau an die sent-lifetime des ersten Keys an.<br \/>\nWas passieren kann, wenn man es genau so konfiguriert, habe ich in GNS3 nachgestellt <a href=\"http:\/\/security-planet.de\/wp-content\/uploads\/2010\/12\/Archiv.zip\">(GNS3-Datei und Konfiguration)<\/a>:<\/p>\n<div class=\"mceTemp mceIEcenter\">\n<dl id=\"attachment_3572\" class=\"wp-caption aligncenter\" style=\"width:525px;\">\n<dt class=\"wp-caption-dt\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-3572\" title=\"EIGRP-Authentication zwischen Router1 und Router2\" src=\"https:\/\/blog.iwen.de\/wp-content\/uploads\/2010\/12\/gns3.png\" alt=\"\" width=\"515\" height=\"86\" srcset=\"https:\/\/cyber-fi.net\/wp-content\/uploads\/2010\/12\/gns3.png 515w, https:\/\/cyber-fi.net\/wp-content\/uploads\/2010\/12\/gns3-300x50.png 300w\" sizes=\"auto, (max-width: 515px) 100vw, 515px\" \/><\/dt>\n<dd class=\"wp-caption-dd\">EIGRP-Authentication zwischen Router1 und<br \/>\nRouter2<\/dd>\n<\/dl>\n<\/div>\n<pre><code>R0#ping ipv6 R2-Loopback0 repeat 500\nType escape sequence to abort. Sending 500, 100-byte ICMP Echos to 2001:DB8:2222::12, timeout is 2 seconds:\n!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n!!!!!!!!!!!!!!!!!!...............!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n!!!!!!!!!!<\/code><\/pre>\n<pre><code>R1:\nJan 1 03:59:56.435: IPv6-EIGRP: received packet with MD5 authentication, key id = 1\nJan 1 04:00:01.135: IPv6-EIGRP: received packet with MD5 authentication, key id = 1 \nJan 1 04:00:03.971: IPv6-EIGRP: received packet with MD5 authentication, key id = 1 \nJan 1 04:00:03.983: %DUAL-5-NBRCHANGE: IPv6-EIGRP(0) 100: Neighbor FE80::C202:30FF:FE3F:0 (FastEthernet0\/0) is down: Interface Goodbye received \nJan 1 04:00:08.495: IPv6-EIGRP: received packet with MD5 authentication, key id = 1 \nJan 1 04:00:13.423: IPv6-EIGRP: received packet with MD5 authentication, key id = 1 \nJan 1 04:00:17.767: IPv6-EIGRP: received packet with MD5 authentication, key id = 1 \nJan 1 04:00:22.339: IPv6-EIGRP: received packet with MD5 authentication, key id = 1 \nJan 1 04:00:26.723: IPv6-EIGRP: received packet with MD5 authentication, key id = 1 \nJan 1 04:00:31.683: IPv6-EIGRP: received packet with MD5 authentication, key id = 2 \nJan 1 04:00:32.551: IPv6-EIGRP: received packet with MD5 authentication, key id =2\n<\/code><\/pre>\n<pre><code>R2:\nJan 1 03:59:28.843: IPv6-EIGRP: received packet with MD5 authentication, key id = 1 \nJan 1 03:59:33.271: IPv6-EIGRP: pkt authentication key id = 2, key not defined or not live \nJan 1 03:59:33.271: EIGRP: FastEthernet0\/0: ignored packet from FE80::C201:30FF:FE3F:0, opcode = 5 invalid authentication)\nJan 1 03:59:33.271: EIGRP: Dropping peer, invalid authentication \nJan 1 03:59:33.275: %DUAL-5-NBRCHANGE: IPv6-EIGRP(0) 100: Neighbor FE80::C201:30FF:FE3F:0 (FastEthernet0\/0) is down: Auth failure \nJan 1 03:59:37.823: IPv6-EIGRP: pkt authentication key id = 2, key not defined or not live \nJan 1 03:59:37.823: EIGRP: FastEthernet0\/0: ignored packet from FE80::C201:30FF:FE3F:0, opcode = 5 (invalid authentication) ... \nJan 1 03:59:57.347: IPv6-EIGRP: pkt authentication key id = 2, key not defined or not live \nJan 1 03:59:57.347: EIGRP: FastEthernet0\/0: ignored packet from FE80::C201:30FF:FE3F:0, opcode = 1 (invalid authentication) \nJan 1 04:00:01.851: IPv6-EIGRP: received packet with MD5 authentication, key id = 2 \nJan 1 04:00:01.851: EIGRP: Received HELLO on FastEthernet0\/0 nbr FE80::C201:30FF:FE3F:0 \nJan 1 04:00:01.851: AS 100, Flags 0x0, Seq 0\/0 idbQ 0\/0 \nJan 1 04:00:01.851: %DUAL-5-NBRCHANGE: IPv6-EIGRP(0) 100: Neighbor FE80::C201:30FF:FE3F:0 (FastEthernet0\/0) is up: new adjacency<\/code><\/pre>\n<p>Was ist da passiert? F\u00fcr dieses Beispiel habe ich die Uhren beider Router mit einer Differenz von 30 Sekunden konfiguriert. Solche und gr\u00f6\u00dfere Zeitabweichnungen habe ich auch schon in Netzen mit NTP gesehen. Im Normalbetrieb sollte das zwar nicht auftreten, aber durch Konfigurations-Probleme kann ein NTP-Server halt auch mal nicht erreichbar sein. Und ein Grundsatz guten Netzwerk-Designs hei\u00dft halt mit Recht &#8220;Always Plan for Problems&#8221;.<br \/>\nF\u00fcr 30 Sekunden (das ist die Zeitspanne am 1.1.2012 von 04:00:00 bis 04:00:30 auf Router1 bzw. von 03:59:30 bis 04:00:00 auf Router2) wird der Router1 den ersten Key nicht mehr verwenden, dieser w\u00fcrde aber von Router2 noch akzeptiert werden. Daf\u00fcr verwendet Router1 den zweiten Key, dieser wird aber von Router2 noch nicht akzeptiert:<\/p>\n<div class=\"mceTemp mceIEcenter\">\n<dl id=\"attachment_3589\" class=\"wp-caption aligncenter\" style=\"width:511px;\">\n<dt class=\"wp-caption-dt\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-3589\" title=\"key-chains\" src=\"https:\/\/blog.iwen.de\/wp-content\/uploads\/2010\/12\/key-chains.png\" alt=\"\" width=\"501\" height=\"317\" srcset=\"https:\/\/cyber-fi.net\/wp-content\/uploads\/2010\/12\/key-chains.png 501w, https:\/\/cyber-fi.net\/wp-content\/uploads\/2010\/12\/key-chains-300x190.png 300w\" sizes=\"auto, (max-width: 501px) 100vw, 501px\" \/><\/dt>\n<dd class=\"wp-caption-dd\">Die sent- und accept-lifetimes (nicht proportional gezeichnet)<\/dd>\n<\/dl>\n<\/div>\n<p>Der Verbindungsabbruch von ca. 30 Sekunden ergibt sich daher, das der Router2 bei einer fehlerhaften<br \/>\nAuthentifizierung sofort die Nachbarschaftsbeziehung abbricht und erst wieder aufbaut, wenn beide Router den Key 2 benutzen k\u00f6nnen. Router1 hat in dieser Zeit keine fehlerhaften Authentifizierungen.<br \/>\nDas Problem l\u00e4sst sich recht einfach vermeiden, indem man die accept-lifetime nicht nur l\u00e4nger laufen l\u00e4sst als die sent-lifetime, sondern auch vor der sent-lifetime des n\u00e4chsten Keys beginnen l\u00e4sst:<\/p>\n<div class=\"mceTemp mceIEcenter\">\n<dl id=\"attachment_3593\" class=\"wp-caption aligncenter\" style=\"width:520px;\">\n<dt class=\"wp-caption-dt\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-3593\" title=\"key-chains2\" src=\"https:\/\/blog.iwen.de\/wp-content\/uploads\/2010\/12\/key-chains2.png\" alt=\"\" width=\"510\" height=\"317\" srcset=\"https:\/\/cyber-fi.net\/wp-content\/uploads\/2010\/12\/key-chains2.png 510w, https:\/\/cyber-fi.net\/wp-content\/uploads\/2010\/12\/key-chains2-300x186.png 300w\" sizes=\"auto, (max-width: 510px) 100vw, 510px\" \/><\/dt>\n<dd class=\"wp-caption-dd\">Die accept-lifetime beginnt jetzt vor der send-lifetime<\/dd>\n<\/dl>\n<\/div>\n<p>Was passiert jetzt in diesen 30 Sekunden:<\/p>\n<ul>\n<li>Router1 sendet seine Pakete schon mit Key 2, der auch von Router 2 akzeptiert wird.<\/li>\n<li>Router2 sendet seine Pakete noch mit Key 1, der von Router 1 noch akzeptiert wird.<\/li>\n<\/ul>\n<p>Die (relevante) Konfiguration von Router2 sieht dabei folgenderma\u00dfen aus. Wie lang man dabei die accept-lifetime \u00fcberlappen l\u00e4sst h\u00e4ngt nat\u00fcrlich von den pers\u00f6nlichen Vorlieben ab. Ich habe f\u00fcr dieses Beispiel einfach f\u00fcnf Minuten genommen:<\/p>\n<pre><code>hostname R1\n!\nkey chain MYKEYS\n key 1\n   key-string ThisIsKey1\n   accept-lifetime 04:00:00 Jan 1 2010 04:00:00 Feb 1 2012\n   send-lifetime 04:00:00 Jan 1 2010 04:00:00 Jan 1 2012\n key 2\n   key-string ThisIsKey2\n   accept-lifetime 03:55:00 Jan 1 2012 04:00:00 Feb 1 2014\n   send-lifetime 04:00:00 Jan 1 2012 04:00:00 Jan 1 2014\n!\ninterface FastEthernet0\/0\n ipv6 address 2001:DB8:2::11\/64\n ipv6 eigrp 100\n ipv6 authentication mode eigrp 100 md5\n ipv6 authentication key-chain eigrp 100 MYKEYS\n!\nipv6 router eigrp 100\n router-id 1.1.1.1\n no shutdown<\/code><\/pre>\n<p>Wer sich dar\u00fcber wundert, das ich dieses Beispiel mit IPv6 aufgebaut habe, dem sei der Beitrag <a href=\"http:\/\/packetlife.net\/blog\/2010\/dec\/13\/blog-examples-going-ipv6-next-year\/\">Blog Examples Going IPv6 Next Year<\/a> von <a href=\"http:\/\/packetlife.net\/\">PacketLife.net<\/a> zu empfehlen. Diese Idee werde ich aufgreifen und ab sofort meine Beispiele auch mit IPv6 implementieren, wo es m\u00f6glich ist.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u00dcber die Qualit\u00e4t der Cisco Schulungsunterlagen habe ich mich schon ab und an mal ausgelassen. Und w\u00e4hrend ich mich gerade auf eine neue Kursversion eines Security-Kurses vorbereite, f\u00e4llt mir schon wieder eine Sache auf, die man besser nicht so macht, wie es im Kurs beschrieben ist. Beim Thema Routing-Protokoll-Authentifizierung findet sich dort eine Key-Chain mit <\/p>\n<div class=\"read-more-text\"><a href=\"https:\/\/cyber-fi.net\/index.php\/2010\/12\/23\/cisco-ios-eigrp-authentifizierung-mit-key-rollover\/\" class=\"read-more\">continue reading<\/a><\/div>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"twitterCardType":"","cardImageID":0,"cardImage":"","cardTitle":"","cardDesc":"","cardImageAlt":"","cardPlayer":"","cardPlayerWidth":0,"cardPlayerHeight":0,"cardPlayerStream":"","cardPlayerCodec":"","footnotes":""},"categories":[5,8],"tags":[218,307,318,358],"class_list":["post-3569","post","type-post","status-publish","format-standard","hentry","category-cisco","category-cisco-training","tag-eigrp","tag-ios","tag-ipv6","tag-konfiguration"],"_links":{"self":[{"href":"https:\/\/cyber-fi.net\/index.php\/wp-json\/wp\/v2\/posts\/3569","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cyber-fi.net\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cyber-fi.net\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cyber-fi.net\/index.php\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/cyber-fi.net\/index.php\/wp-json\/wp\/v2\/comments?post=3569"}],"version-history":[{"count":0,"href":"https:\/\/cyber-fi.net\/index.php\/wp-json\/wp\/v2\/posts\/3569\/revisions"}],"wp:attachment":[{"href":"https:\/\/cyber-fi.net\/index.php\/wp-json\/wp\/v2\/media?parent=3569"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cyber-fi.net\/index.php\/wp-json\/wp\/v2\/categories?post=3569"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cyber-fi.net\/index.php\/wp-json\/wp\/v2\/tags?post=3569"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}