#!/usr/bin/perl # # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 Yokogawa Electric Corporation. # All rights reserved. # # Redistribution and use of this software in source and binary # forms, with or without modification, are permitted provided that # the following conditions and disclaimer are agreed and accepted # by the user: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in # the documentation and/or other materials provided with # the distribution. # # 3. Neither the names of the copyrighters, the name of the project # which is related to this software (hereinafter referred to as # "project") nor the names of the contributors may be used to # endorse or promote products derived from this software without # specific prior written permission. # # 4. No merchantable use may be permitted without prior written # notification to the copyrighters. # # 5. The copyrighters, the project and the contributors may prohibit # the use of this software at any time. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHTERS, THE PROJECT AND # CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING # BUT NOT LIMITED THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS # FOR A PARTICULAR PURPOSE, ARE DISCLAIMED. IN NO EVENT SHALL THE # COPYRIGHTERS, THE PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, # INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING # IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # # $TAHI: ct/ike/ENODE/I_RFC2409_4_5.seq,v 1.46.2.2 2005/11/22 10:05:45 ozoe Exp $ # $Id: I_RFC2409_4_5.seq,v 1.46.2.2 2005/11/22 10:05:45 ozoe Exp $ # ###################################################################### BEGIN { } END{ } use V6evalTool; use IKE; use IKE_check; my $IF0 = Link0; #====== get sequence arguments ====== foreach (@ARGV) { /^test_type=(\S+)/ && do {$TEST_TYPE=$1; next; }; /^support=(\S+)/ && do {$SUPPORT=$1; next; }; /^app_type=(\S+)/ && do {$IKE::APP_TYPE=$1; next; }; /^test_phase=(\S+)/ && do {$IKE::TEST_PHASE=$1; next; }; ikeExitError("Unknown sequence option '$_'"); } #====== check NUT type ====== ikeCheckNUT(host, $TEST_TYPE, $SUPPORT); #====== Test Configuration ====== %ikeConfig = ( 'app_type' => 'ICMP', 'isakmp_src' => "$IKE::IKEAddr{IKE_NUT_NET0_HOST1_ADDR}", 'isakmp_dst' => "$IKE::IKEAddr{IKE_TN_NET1_HOST2_ADDR}", 'isakmp_dport' => '500', 'isakmp_ex_mode' => 'main', 'isakmp_doi' => 'ipsec_doi', 'isakmp_situation' => 'identity_only', 'isakmp_key_id' => "$IKE::IKEAddr{IKE_TN_NET1_HOST2_ADDR}", 'isakmp_key_value' => 'IKE-TEST', 'isakmp_enc_alg' => '3des', 'isakmp_hash_alg' => 'sha1', 'isakmp_auth_method' => 'pre_shared_key', 'isakmp_dh_group' => '2', 'isakmp_lt' => '28800', 'isakmp_lt_unit' => 'seconds', 'isakmp_src_id_type' => 'address', 'isakmp_src_id' => "$IKE::IKEAddr{IKE_NUT_NET0_HOST1_ADDR}", 'isakmp_dst_id_type' => 'address', 'isakmp_dst_id' => "$IKE::IKEAddr{IKE_TN_NET1_HOST2_ADDR}", 'isakmp_num_pro' => '1', 'isakmp_num_trans' => '1', 'ipsec_id_type' => 'address', 'ipsec_src' => "$IKE::IKEAddr{IKE_NUT_NET0_HOST1_ADDR}", 'ipsec_dst' => "$IKE::IKEAddr{IKE_TN_NET1_HOST2_ADDR}", 'ipsec_src_id' => "$IKE::IKEAddr{IKE_NUT_NET0_HOST1_ADDR}", 'ipsec_dst_id' => "$IKE::IKEAddr{IKE_TN_NET1_HOST2_ADDR}", 'ipsec_supper' => 'any', 'ipsec_dupper' => 'any', 'ipsec_direction' => 'out', 'ipsec_pfs_group' => 'off', 'ipsec_p_num' => '1', 'ipsec_p1_proto' => 'PROTO_IPSEC_ESP', 'ipsec_p1_t_num' => '1', 'ipsec_p1_t1_enc_alg' => 'ESP_3DES', 'ipsec_p1_t1_auth_mtd' => 'HMAC_SHA', 'ipsec_p1_t1_mode' => 'Transport', 'ipsec_p1_t1_lt' => '8', 'ipsec_p1_t1_lt_unit' => 'hour', ); #====== set TN's cookie and nonce ======== my $cookie = GetMD5("$IKE::IKEAddr{IKE_TN_NET1_HOST2_ADDR}"."$ikeConfig{'isakmp_dport'}".time()); $cookie = substr($cookie, 0, 16); my $nonce = '00000000000000000000000000000000'; $ikeConfig{'isakmp_cookie_r'} = $cookie; $ikeConfig{'isakmp_nonce_r'} = $nonce; vLogHTML("CKY-R: $ikeConfig{'isakmp_cookie_r'}
") if $IKE::remote_debug; vLogHTML("Nr-b: $ikeConfig{'isakmp_nonce_r'}
") if $IKE::remote_debug; vLogHTML("pre_shared key: $ikeConfig{'isakmp_key_value'}
") if $IKE::remote_debug; #====== set ISAKMP SA, IPSEC SPD #====== vLogHTML("*** Target IKE initialization phase ***
"); ikeInit(%ikeConfig); #====== set Address of NUT ====== vLogHTML("*** Target initialization phase ***
"); vCapture($IF0); ikeSetAddr($IF0); #====== set ISAKMP SA packet frame, parameter #====== my $cpp = undef; my @ike = (); my %ret2 = ikePh2PreSeqI($IF0,$cpp, \@ike, \%ikeConfig); #====================================================================== vLogHTML("*** Target testing phase start ***
"); #====================================================================== #------------------------------------------------------------------- vLogHTML("*** Phase-2 1st message recv ***
"); #------------------------------------------------------------------- my @CHECK_FLAG = undef; $CHECK_FLAG[0] = 0; #none my $OPTION_FLAG = $IKE_check::optionHash{'none'}; %ret = ikePh2Recv($IF0, 5, 0, 0, $cpp, \@ike, \%ret2, \%ikeConfig,\@CHECK_FLAG,$OPTION_FLAG); if($ret{'status'} == $IKE::FAIL) { ikeRemoteAsyncWait(); ikeReset(); exit($V6evalTool::exitFail); } #------------------------------------------------------------------- vLogHTML("ISAKMP Header Format is correct
"); #------------------------------------------------------------------- #====================================================================== vLogHTML("*** Target test finish ***
"); #====================================================================== vStop($IF0); ikeRemoteAsyncWait(); ikeReset(); ikeExitPass(); #NOTREACHED ###################################################################### __END__ =head1 NAME I_RFC2409_4_5 - [Initiator Test] ISAKMP Header Format check(Phase II) =head1 TARGET End-Node =head1 SYNOPSIS =begin html
  I_RFC2409_4_5.seq [-tooloption ...] -pkt I_RFC2409_4_5.def -tooloption : v6eval tool option
See also ike_common.def and ike_ipsec.def and ike_addr.def and ike_pkt_ph1_recv.def and ike_pkt_ph2_recv.def
=end html =head1 INITIALIZATION =begin html
  • Network Topology
  •         HOST-2(TN):responder
              |3ffe:501:ffff:101::11
              |                        
    Net-y   --+--------+------------------------ 3ffe:501:ffff:101::/64
                       |
                       |
                     ROUTER-1(TN)
                       |3ffe:501:ffff:100::11
                       |
    Net-z   --+--------+------------------------ 3ffe:501:ffff:100::/64
              |
              |3ffe:501:ffff:100:XXXX
            NUT:initiator
      
    XXXX: EUI64 address

  • Verification Points

      ISAKMP Header Format
    • Cookie field
    • The cookies MUST NOT swap places when the direction of the ISAKMP SA changes. (The cookie must be set to Initiator cookie field.)
    • Next Payload field
    • Place the value of the Next Payload in the Next Payload field. (In this test, this field is set as 8(Hash Payload).)
    • Version field
    • Major Version 1 Minor Version 0
    • Exchange Type
    • indicates the type of exchange being used. (In this test, this field is set as 32(Quick mode).)
    • Flags field
    • Bits of the Flags field(except E,C,A bit) MUST be set to 0 prior to transmission. |0|0|0|0|0|A|C|E|
    • Message ID field
    • Unique Message Identifier used to identify protocol state during Phase 2 negotiations.
    • Payload Length field
    • Place the length (in octets) of the payload in the Payload Length field.
  • Configuration
    •        
    • Initiator and Responder IKE parameter
    • At least, following parameter must be included in proposal.
      Machine Src Dest Phase I Phase II
      Ex mode Key Value Enc Alg Hash Alg Auth Method DH Group PH1 Lt IDx

      Proto ID Trans ID Mode Auth Alg PH2 Lt Upper
      NUT NUT addr HOST-2 addr Main IKE-TEST 3DES SHA pre-shared key 2 8 Hour NUT addr PROTO_IPSEC_ESP ESP_3DES Transport HMAC-SHA 8 Hour any
      HOST-2 HOST-2 addr NUT addr Main IKE-TEST 3DES SHA pre-shared key 2 8 Hour HOST-2 addr PROTO_IPSEC_ESP ESP_3DES Transport HMAC-SHA 8 Hour any
      *Ex Mode = Exchange mode(Aggresive mode can also be chosen as Ex Mode) *IDx = identity payload(FQDN or user FQDN can also be chosen as IDx) *Enc Alg = IKE Encryption Algorithm *Hash Alg = IKE Authentication Algorithm *Key Value = pre-shared key value *PH1 Lt = Phase-1 Lifetime *PH2 Lt = Phase-2 Lifetime *Proto ID = Protocol Identifier *Trans ID = Transform Identifier *Mode = Encapsulation Mode *Auth Alg = Authentication Algorithm *Auth Method = Authentication Method *DH Group = Diffie-Hellman Group *Upper = Upper Layer Protocol *NUT addr = NUT address *HOST-2 addr = HOST-2 address

  • Pre-Sequence
  •        In order to start the negotiation of IKE, 
           NUT transmits Echo Request to TN(HOST-2).
    	
=end html =head1 TEST PROCEDURE =begin html
  This test check is following.

* PHASE I
Either IDENTITY PROTECTION EXCHANGE or AGGRESSIVE EXCHANGE is performed as a pre sequence.

IDENTITY PROTECTION EXCHANGE
# Initiator(NUT) Direction Responder(TN) (1) HDR; SA ========>
(2) <======== HDR; SA
(3) HDR; KE; NONCE ========>
(4) <======== HDR; KE; NONCE
(5) HDR*; IDii; HASH_I ========>
(6) <======== HDR*; IDir; HASH_R
1. Receive the first message from NUT In the first message (1), the initiator generates a proposal it considers adequate to protect traffic for the given situation. The Security Association, Proposal, and Transform payloads are included in the Security Association payload (for notation purposes).
2. Send the second message from TN In the second message (2), the responder indicates the protection suite it has accepted with the Security Association, Proposal, and Transform payloads.
3. Receive the third message from NUT In the third (3) message, the initiator send keying material used to arrive at a common shared secret and random information which is used to guarantee liveness and protect against replay attacks.
4. Send the fourth message from TN In the fourth (4) message, the responder send keying material used to arrive at a common shared secret and random information which is used to guarantee liveness and protect against replay attacks.
5. Receive the fifth message from NUT In the fifth (5) message, the initiator send identification information and the results of the agreed upon authentication function(hash function).
6. Send the sixth message from TN In the sixth (6) message, the responder send identification information and the results of the agreed upon authentication function(hash function).

AGGRESSIVE EXCHANGE
# Initiator(NUT) Direction Responder(TN) NOTE (1) HDR; SA; KE; => Begin ISAKMP-SA or Proxy negotiation NONCE; IDii and Key Exchange
(2) <= HDR; SA; KE; NONCE; IDir; AUTH Initiator Identity Verified by Responder Key Generated Basic SA agreed upon
(3) HDR*; AUTH => Responder Identity Verified by Initiator SA established
1. Recieve the first message from NUT In the first message (1), the initiator generates a proposal it considers adequate to protect traffic for the given situation. The Security Association, Proposal, and Transform payloads are included in the Security Association payload (for notation purposes). There can be only one Proposal and one Transform offered (i.e. no choices) in order for the aggressive exchange to work. Keying material used to arrive at a common shared secret and random information which is used to guarantee liveness and protect against replay attacks are also transmitted. Random information provided by both parties SHOULD be used by the authentication mechanism to provide shared proof of participation in the exchange. Additionally, the initiator transmits identification information.
2. Send the second message from TN In the second message (2), the responder indicates the protection suite it has accepted with the Security Association, Proposal, and Transform payloads. Keying material used to arrive at a common shared secret and random information which is used to guarantee liveness and protect against replay attacks is also transmitted. Random information provided by both parties SHOULD be used by the authentication mechanism to provide shared proof of participation in the exchange. Additionally, the responder transmits identification information. All of this information is transmitted under the protection of the agreed upon authentication function. Local security policy dictates the action of the responder if no proposed protection suite is accepted. One possible action is the transmission of a Notify payload as part of an Informational Exchange.
3. Recieve the third message from NUT In the third (3) message, the initiator transmits the results of the agreed upon authentication function. This information is transmitted under the protection of the common shared secret. Local security policy dictates the action if an error occurs during these messages. One possible action is the transmission of a Notify payload as part of an Informational Exchange.

The test sequence is following.
* PHASE II
QUICK MODE
# Initiator(NUT) Direction Responder(TN) (1) HDR*, HASH(1), SA, Ni ========> Judgement (Check *1)
1. Receive the first message from NUT In the first message (1), the initiator generates a proposal it considers adequate to protect traffic for the given situation. The Security Association, Proposal, and Transform payloads are included in the Security Association payload (for notation purposes). And initiator send HASH(1) and Nonce. HASH(1) is the prf over the message id (M-ID) from the ISAKMP header concatenated with the entire message that follows the hash including all payload headers, but excluding any padding added for encryption. Nonce is random information which is used to guarantee liveness.
=end html =head1 JUDGEMENT In Phase I , messages must be exchanged correctly. In Phase II , the first message's ISAKMP Header Format must be base on description of RFC(see above Verification Points). =head1 TERMINATION Clean up SAD and SPD =head1 REFERENCE =begin html
  RFC2408
  3.1 ISAKMP Header Format 

(omit)
1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ! Initiator ! ! Cookie ! +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ! Responder ! ! Cookie ! +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ! Next Payload ! MjVer ! MnVer ! Exchange Type ! Flags ! +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ! Message ID ! +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ! Length ! +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
(omit)
o Next Payload (1 octet) - Indicates the type of the first payload in the message. The format for each payload is defined in sections 3.4 through 3.16. The processing for the payloads is defined in section 5.

Next Payload Type Value NONE 0 Security Association (SA) 1 Proposal (P) 2 Transform (T) 3 Key Exchange (KE) 4 Identification (ID) 5 Certificate (CERT) 6 Certificate Request (CR) 7 Hash (HASH) 8 Signature (SIG) 9 Nonce (NONCE) 10 Notification (N) 11 Delete (D) 12 Vendor ID (VID) 13 RESERVED 14 - 127 Private USE 128 - 255
o Major Version (4 bits) - indicates the major version of the ISAKMP protocol in use. Implementations based on this version of the ISAKMP Internet-Draft MUST set the Major Version to 1. Implementations based on previous versions of ISAKMP Internet- Drafts MUST set the Major Version to 0. Implementations SHOULD never accept packets with a major version number larger than its own.
o Minor Version (4 bits) - indicates the minor version of the ISAKMP protocol in use. Implementations based on this version of the ISAKMP Internet-Draft MUST set the Minor Version to 0. Implementations based on previous versions of ISAKMP Internet- Drafts MUST set the Minor Version to 1. Implementations SHOULD never accept packets with a minor version number larger than its own, given the major version numbers are identical.
o Exchange Type (1 octet) - indicates the type of exchange being used. This dictates the message and payload orderings in the ISAKMP exchanges.

Exchange Type Value NONE 0 Base 1 Identity Protection 2 Authentication Only 3 Aggressive 4 Informational 5 ISAKMP Future Use 6 - 31 DOI Specific Use 32 - 239 Private Use 240 - 255
o Flags (1 octet) - indicates specific options that are set for the ISAKMP exchange. The flags listed below are specified in the Flags field beginning with the least significant bit, i.e the Encryption bit is bit 0 of the Flags field, the Commit bit is bit 1 of the Flags field, and the Authentication Only bit is bit 2 of the Flags field. The remaining bits of the Flags field MUST be set to 0 prior to transmission.
(omit)
o Message ID (4 octets) - Unique Message Identifier used to identify protocol state during Phase 2 negotiations. This value is randomly generated by the initiator of the Phase 2 negotiation. In the event of simultaneous SA establishments (i.e. collisions), the value of this field will likely be different because they are independently generated and, thus, two security associations will progress toward establishment. However, it is unlikely there will be absolute simultaneous establishments. During Phase 1 negotiations, the value MUST be set to 0.
o Length (4 octets) - Length of total message (header + payloads) in octets. Encryption can expand the size of an ISAKMP message.
(omit)
5.2 ISAKMP Header Processing
When creating an ISAKMP message, the transmitting entity (initiator or responder) MUST do the following:
1. Create the respective cookie. See section 2.5.3 for details.
2. Determine the relevant security characteristics of the session (i.e. DOI and situation).
3. Construct an ISAKMP Header with fields as described in section 3.1.
4. Construct other ISAKMP payloads, depending on the exchange type.
5. Transmit the message to the destination host as described in section5.1.
(omit)
RFC2409 4. Introduction
(omit)
The ISAKMP SA is bi-directional. That is, once established, either party may initiate Quick Mode, Informational, and New Group Mode Exchanges. Per the base ISAKMP document, the ISAKMP SA is identified by the Initiator's cookie followed by the Responder's cookie-- the role of each party in the phase 1 exchange dictates which cookie is the Initiator's. The cookie order established by the phase 1 exchange continues to identify the ISAKMP SA regardless of the direction the Quick Mode, Informational, or New Group exchange. In other words, the cookies MUST NOT swap places when the direction of the ISAKMP SA changes.
(omit)
=end html =head1 SEE ALSO perldoc V6evalTool =begin html
  IKE.html IKE Test Common Utility
=end html =cut